Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [cplus] Add an entry point for cp-names
@ 2003-12-24 22:36 Daniel Jacobowitz
  2004-01-04  6:16 ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel Jacobowitz @ 2003-12-24 22:36 UTC (permalink / raw)
  To: gdb-patches

The first entry point is cp_canonicalize_string, which converts a type or
symbol name to "canonical" form.  This code is now usable.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2003-12-24  Daniel Jacobowitz  <drow@mvista.com>

	* Makefile.in (cp_names_h): New variable.
	(cp-names.tab.o, cp-names-main.tab.o): Depend on cp-names.h.
	* cp-names.h: New file.
	* cp-names.y: Include "cp-names.h".
	(lexptr, prev_lexptr): Make const.
	(symbol_end): Make argument and return type const.  Move outside
	of TEST_CPNAMES.
	(parse_number): Make argument const.  Use an ISO C declaration.
	(parse_escape): Make argument const.
	(yylex): Make some pointers const.
	(cp_comp_to_string, cp_canonicalize_string): New functions.
	(trim_chars): Cast symbol_end's return value to non-const in
	this case.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.268.2.7
diff -u -p -r1.268.2.7 Makefile.in
--- Makefile.in	24 Dec 2003 21:59:05 -0000	1.268.2.7
+++ Makefile.in	24 Dec 2003 22:31:05 -0000
@@ -654,6 +654,7 @@ command_h = command.h
 complaints_h = complaints.h
 completer_h = completer.h
 cp_abi_h = cp-abi.h
+cp_names_h = cp-names.h
 cp_support_h = cp-support.h $(symtab_h)
 dcache_h = dcache.h
 defs_h = defs.h $(config_h) $(ansidecl_h) $(gdb_locale_h) $(gdb_signals_h) \
@@ -1437,17 +1438,18 @@ c-exp.tab.c: c-exp.y
 	  < c-exp.tmp > c-exp.new
 	-rm c-exp.tmp
 	mv c-exp.new ./c-exp.tab.c
-.PRECIOUS: cp-names.tab.c
-cp-names.tab.o: cp-names.tab.c $(safe_ctype_h) \
+
+cp-names.tab.o: cp-names.tab.c $(safe_ctype_h) $(cp_names_h) \
 	$(srcdir)/../libiberty/cp-demangle.c
 
-cp-names-main.tab.o: cp-names.tab.c $(safe_ctype_h) \
+cp-names-main.tab.o: cp-names.tab.c $(safe_ctype_h) $(cp_names_h) \
 	$(srcdir)/../libiberty/cp-demangle.c
 	$(CC) -c $(INTERNAL_CFLAGS) -DTEST_CPNAMES \
 		-o cp-names-main.tab.o cp-names.tab.c
 test-cpnames: cp-names-main.tab.o
 	$(CC) -o test-cpnames cp-names-main.tab.o -liberty
 
+.PRECIOUS: cp-names.tab.c
 cp-names.tab.c: cp-names.y
 	$(SHELL) $(YLWRAP) "$(YACC)" \
 	    $(srcdir)/cp-names.y  y.tab.c cp-names.tmp -- $(YFLAGS) 
@@ -1461,6 +1463,7 @@ cp-names.tab.c: cp-names.y
 	  < cp-names.tmp > cp-names.new
 	-rm cp-names.tmp
 	mv cp-names.new ./cp-names.tab.c
+
 .PRECIOUS: f-exp.tab.c
 f-exp.tab.o: f-exp.tab.c $(defs_h) $(gdb_string_h) $(expression_h) \
 	$(value_h) $(parser_defs_h) $(language_h) $(f_lang_h) $(bfd_h) \
Index: cp-names.h
===================================================================
RCS file: cp-names.h
diff -N cp-names.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cp-names.h	24 Dec 2003 22:31:05 -0000
@@ -0,0 +1,24 @@
+/* YACC parser for C++ names, for GDB.
+
+   Copyright 2003
+   Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+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.  */
+
+/* Return the canonicalized form of STRING, or NULL if STRING can not be
+   parsed.  */
+char *cp_canonicalize_string (const char *string);
Index: cp-names.y
===================================================================
RCS file: /cvs/src/src/gdb/Attic/cp-names.y,v
retrieving revision 1.1.2.13
diff -u -p -r1.1.2.13 cp-names.y
--- cp-names.y	24 Dec 2003 21:59:05 -0000	1.1.2.13
+++ cp-names.y	24 Dec 2003 22:31:05 -0000
@@ -1,8 +1,10 @@
-/* YACC parser for C expressions, for GDB.
-   Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-   1998, 1999, 2000, 2003
+/* YACC parser for C++ names, for GDB.
+
+   Copyright 2003
    Free Software Foundation, Inc.
 
+   Parts of the lexer are based on c-exp.y from GDB.
+
 This file is part of GDB.
 
 This program is free software; you can redistribute it and/or modify
@@ -19,16 +21,7 @@ You should have received a copy of the G
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-/* Parse a C expression from text in a string,
-   and return the result as a  struct expression  pointer.
-   That structure contains arithmetic operations in reverse polish,
-   with constants represented by operations that are followed by special data.
-   See expression.h for the details of the format.
-   What is important here is that it can be built up sequentially
-   during the process of parsing; the lower levels of the tree always
-   come first in the result.
-
-   Note that malloc's and realloc's in this file are transformed to
+/* Note that malloc's and realloc's in this file are transformed to
    xmalloc and xrealloc respectively by the same sed command in the
    makefile that remaps any other malloc/realloc inserted by the parser
    generator.  Doing this with #defines and trying to control the interaction
@@ -48,7 +41,9 @@ Foundation, Inc., 59 Temple Place - Suit
 /* #define CP_DEMANGLE_DEBUG */
 #include "../libiberty/cp-demangle.c"
 
-static char *lexptr, *prev_lexptr;
+#include "cp-names.h"
+
+static const char *lexptr, *prev_lexptr;
 
 static struct d_comp *d_qualify (struct d_comp *, int, int);
 
@@ -59,7 +54,7 @@ static struct d_comp *d_op_from_string (
 static struct d_comp *d_unary (const char *opname, struct d_comp *);
 static struct d_comp *d_binary (const char *opname, struct d_comp *, struct d_comp *);
 
-static char *symbol_end (char *lexptr);
+static const char *symbol_end (const char *lexptr);
 
 /* Global state, ew.  */
 struct d_info *di;
@@ -194,7 +189,7 @@ void yyerror (char *);
 
 %{
 /* YYSTYPE gets defined by %union */
-static int parse_number (char *, int, int, YYSTYPE *);
+static int parse_number (const char *, int, int, YYSTYPE *);
 %}
 
 %type <comp> exp exp1 type start start_opt operator colon_name
@@ -1264,11 +1259,7 @@ host_charset (void)
 /*** Needs some error checking for the float case ***/
 
 static int
-parse_number (p, len, parsed_float, putithere)
-     char *p;
-     int len;
-     int parsed_float;
-     YYSTYPE *putithere;
+parse_number (const char *p, int len, int parsed_float, YYSTYPE *putithere)
 {
   int unsigned_p = 0;
 
@@ -1439,7 +1430,7 @@ c_parse_backslash (int host_char, int *t
    after the zeros.  A value of 0 does not mean end of string.  */
 
 static int
-parse_escape (char **string_ptr)
+parse_escape (const char **string_ptr)
 {
   int target_char;
   int c = *(*string_ptr)++;
@@ -1457,7 +1448,7 @@ parse_escape (char **string_ptr)
 	{
 	  /* Remember where this escape sequence started, for reporting
 	     errors.  */
-	  char *sequence_start_pos = *string_ptr - 1;
+	  const char *sequence_start_pos = *string_ptr - 1;
 
 	  c = *(*string_ptr)++;
 
@@ -1566,8 +1557,7 @@ yylex (void)
 {
   int c;
   int namelen;
-  char *tokstart;
-  char *tokptr;
+  const char *tokstart, *tokptr;
   int tempbufindex;
   static char *tempbuf;
   static int tempbufsize;
@@ -1677,7 +1667,7 @@ yylex (void)
       {
 	/* It's a number.  */
 	int got_dot = 0, got_e = 0, toktype;
-	char *p = tokstart;
+	const char *p = tokstart;
 	int hex = 0;
 
 	if (c == '-')
@@ -1812,7 +1802,7 @@ yylex (void)
       tempbufindex = 0;
 
       do {
-        char *char_start_pos = tokptr;
+        const char *char_start_pos = tokptr;
 
 	/* Grow the static temp buffer if necessary, including allocating
 	   the first one on demand. */
@@ -1929,7 +1919,7 @@ yylex (void)
     case 6:
       if (strncmp (tokstart, "global constructors keyed to ", 29) == 0)
 	{
-	  char *p;
+	  const char *p;
 	  lexptr = tokstart + 29;
 	  yylval.typed_val_int.val = GLOBAL_CONSTRUCTORS;
 	  /* Find the end of the symbol.  */
@@ -1940,7 +1930,7 @@ yylex (void)
 	}
       if (strncmp (tokstart, "global destructors keyed to ", 28) == 0)
 	{
-	  char *p;
+	  const char *p;
 	  lexptr = tokstart + 28;
 	  yylval.typed_val_int.val = GLOBAL_DESTRUCTORS;
 	  /* Find the end of the symbol.  */
@@ -2017,6 +2007,77 @@ yyerror (msg)
   error ("A %s in expression, near `%s'.\n", (msg ? msg : "error"), lexptr);
 }
 
+static const char *
+symbol_end (const char *lexptr)
+{
+  const char *p = lexptr;
+
+  while (*p && (ISALNUM (*p) || *p == '_' || *p == '$' || *p == '.'))
+    p++;
+
+  return p;
+}
+
+static char *
+cp_comp_to_string (struct d_comp *result, int estimated_len)
+{
+  char *str, *prefix = NULL, *buf;
+  int err = 0;
+
+  if (result->type == GLOBAL_DESTRUCTORS)
+    {
+      result = d_left (result);
+      prefix = "global destructors keyed to ";
+    }
+  else if (result->type == GLOBAL_CONSTRUCTORS)
+    {
+      result = d_left (result);
+      prefix = "global constructors keyed to ";
+    }
+
+  str = d_print (DMGL_PARAMS | DMGL_ANSI, result, estimated_len, &err);
+  if (str == NULL)
+    return NULL;
+
+  if (prefix == NULL)
+    return str;
+
+  buf = malloc (strlen (str) + strlen (prefix) + 1);
+  strcpy (buf, prefix);
+  strcat (buf, str);
+  free (str);
+  return (buf);
+}
+
+/* Return the canonicalized form of STRING, or NULL if STRING can not be
+   parsed.  */
+
+char *
+cp_canonicalize_string (const char *string)
+{
+  struct d_info myinfo;
+  int len = strlen (string);
+  char *ret;
+
+  len = len + len / 8;
+
+  lexptr = string;
+  d_init_info (NULL, DMGL_PARAMS | DMGL_ANSI, len, &myinfo);
+  myinfo.comps = malloc (myinfo.num_comps * sizeof (struct d_comp));
+  myinfo.subs = NULL;
+  di = &myinfo;
+  if (yyparse () || result == NULL)
+    return NULL;
+
+  ret = cp_comp_to_string (result, len);
+
+  free (myinfo.comps);
+  if (myinfo.subs)
+    free (myinfo.subs);
+
+  return ret;
+}
+
 #ifdef TEST_CPNAMES
 
 static void
@@ -2045,21 +2106,10 @@ cp_print (struct d_comp *result, int len
   free (str);
 }
 
-static char *
-symbol_end (char *lexptr)
-{
-  char *p = lexptr;
-
-  while (*p && (ISALNUM (*p) || *p == '_' || *p == '$' || *p == '.'))
-    p++;
-
-  return p;
-}
-
 static char
 trim_chars (char *lexptr, char **extra_chars)
 {
-  char *p = symbol_end (lexptr);
+  char *p = (char *) symbol_end (lexptr);
   char c = 0;
 
   if (*p)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [cplus] Add an entry point for cp-names
  2003-12-24 22:36 [cplus] Add an entry point for cp-names Daniel Jacobowitz
@ 2004-01-04  6:16 ` Eli Zaretskii
  2004-02-09 20:34   ` Daniel Jacobowitz
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2004-01-04  6:16 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches

> Date: Wed, 24 Dec 2003 17:36:16 -0500
> From: Daniel Jacobowitz <drow@mvista.com>
> 
> 2003-12-24  Daniel Jacobowitz  <drow@mvista.com>
> 
> 	* Makefile.in (cp_names_h): New variable.
> 	(cp-names.tab.o, cp-names-main.tab.o): Depend on cp-names.h.

Just a reminder: the *.tab.c files need entries in fnchange.lst to
rename them to *_tab.c.  So these two files will need two additional
lines.

Actually, there's more to this: cp-names_tab.c and cp-names-main_tab.c
map to the same 8+3 DOS name, so they will break the script in
gdb/config/djgpp/djconfig.sh which accounts for renaming of *.tab.c
files (see config.sed for the gory details).  Thus, please consider
some other name for cp-names-main.tab.c, one that doesn't conflict
with cp-names.tab.c.

> +cp-names-main.tab.o: cp-names.tab.c $(safe_ctype_h) $(cp_names_h) \
>  	$(srcdir)/../libiberty/cp-demangle.c
>  	$(CC) -c $(INTERNAL_CFLAGS) -DTEST_CPNAMES \
>  		-o cp-names-main.tab.o cp-names.tab.c

Nitpicking: I find this formatting of continuation lines confusing:
the continuation of the list of prerequisites is indented exactly as
the rule's command, so it looks like the first command in a rule.
(Yes, I know: there are other rules indented like that; if no one
objects, I will reindent them so that commands stand out more
clearly.)


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [cplus] Add an entry point for cp-names
  2004-01-04  6:16 ` Eli Zaretskii
@ 2004-02-09 20:34   ` Daniel Jacobowitz
  2004-02-10  6:36     ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel Jacobowitz @ 2004-02-09 20:34 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

On Sun, Jan 04, 2004 at 08:18:24AM +0200, Eli Zaretskii wrote:
> > Date: Wed, 24 Dec 2003 17:36:16 -0500
> > From: Daniel Jacobowitz <drow@mvista.com>
> > 
> > 2003-12-24  Daniel Jacobowitz  <drow@mvista.com>
> > 
> > 	* Makefile.in (cp_names_h): New variable.
> > 	(cp-names.tab.o, cp-names-main.tab.o): Depend on cp-names.h.
> 
> Just a reminder: the *.tab.c files need entries in fnchange.lst to
> rename them to *_tab.c.  So these two files will need two additional
> lines.

Just one.  There's only one .tab.c file - it builds two object files. 
The second is strictly for testing and strictly optional, so I won't
weep if it doesn't build on DJGPP.  I'm probably the only one who will
need it.

I've taken care of fnchange.lst on the branch, thanks.

> Actually, there's more to this: cp-names_tab.c and cp-names-main_tab.c
> map to the same 8+3 DOS name, so they will break the script in
> gdb/config/djgpp/djconfig.sh which accounts for renaming of *.tab.c
> files (see config.sed for the gory details).  Thus, please consider
> some other name for cp-names-main.tab.c, one that doesn't conflict
> with cp-names.tab.c.

I don't think any of that code is live in this case.  It looks for
[yp*].tab.c and cp-names.tab.c won't match that.  I really don't want
to dig my hands into a 43-line sed script editing another sed
expression when I can't test it, so I'm afraid I will have to leave
this to someone with DJGPP installed.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [cplus] Add an entry point for cp-names
  2004-02-09 20:34   ` Daniel Jacobowitz
@ 2004-02-10  6:36     ` Eli Zaretskii
  2004-02-29 17:25       ` Daniel Jacobowitz
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2004-02-10  6:36 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches

> Date: Mon, 9 Feb 2004 15:34:34 -0500
> From: Daniel Jacobowitz <drow@mvista.com>
> 
> > Actually, there's more to this: cp-names_tab.c and cp-names-main_tab.c
> > map to the same 8+3 DOS name, so they will break the script in
> > gdb/config/djgpp/djconfig.sh which accounts for renaming of *.tab.c
> > files (see config.sed for the gory details).  Thus, please consider
> > some other name for cp-names-main.tab.c, one that doesn't conflict
> > with cp-names.tab.c.
> 
> I don't think any of that code is live in this case.  It looks for
> [yp*].tab.c and cp-names.tab.c won't match that.

That just means that the problem is slightly more complicated than I
remembered.

> I really don't want to dig my hands into a 43-line sed script
> editing another sed expression when I can't test it, so I'm afraid I
> will have to leave this to someone with DJGPP installed.

Oh, come on!  Just changing [yp*] to [yps*] is all we need.  That, and
renaming one of the two object files produced from cp-names.tab.c, to
avoid file-name clashes.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [cplus] Add an entry point for cp-names
  2004-02-10  6:36     ` Eli Zaretskii
@ 2004-02-29 17:25       ` Daniel Jacobowitz
  2004-02-29 18:05         ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel Jacobowitz @ 2004-02-29 17:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

On Tue, Feb 10, 2004 at 08:36:43AM +0200, Eli Zaretskii wrote:
> > Date: Mon, 9 Feb 2004 15:34:34 -0500
> > From: Daniel Jacobowitz <drow@mvista.com>
> > 
> > > Actually, there's more to this: cp-names_tab.c and cp-names-main_tab.c
> > > map to the same 8+3 DOS name, so they will break the script in
> > > gdb/config/djgpp/djconfig.sh which accounts for renaming of *.tab.c
> > > files (see config.sed for the gory details).  Thus, please consider
> > > some other name for cp-names-main.tab.c, one that doesn't conflict
> > > with cp-names.tab.c.
> > 
> > I don't think any of that code is live in this case.  It looks for
> > [yp*].tab.c and cp-names.tab.c won't match that.
> 
> That just means that the problem is slightly more complicated than I
> remembered.
> 
> > I really don't want to dig my hands into a 43-line sed script
> > editing another sed expression when I can't test it, so I'm afraid I
> > will have to leave this to someone with DJGPP installed.
> 
> Oh, come on!  Just changing [yp*] to [yps*] is all we need.  That, and
> renaming one of the two object files produced from cp-names.tab.c, to
> avoid file-name clashes.

My point was that I couldn't make heads or tails out of what the sed
script was doing, but I'm willing to follow instructions :) I've
checked in this to drow-cplus-branch.  Do you think I need to tweak
anything further?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2004-02-29  Daniel Jacobowitz  <drow@mvista.com>

	* Makefile.in (cp-names-main.tab.o): Rename to test-cp-names.tab.o.
	* config/djgpp/config.sed: Handle new *cp-names.tab.* references.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.268.2.13
diff -u -p -r1.268.2.13 Makefile.in
--- Makefile.in	9 Feb 2004 19:43:29 -0000	1.268.2.13
+++ Makefile.in	29 Feb 2004 17:22:39 -0000
@@ -1462,11 +1462,11 @@ c-exp.tab.c: c-exp.y
 
 cp-names.tab.o: cp-names.tab.c $(safe_ctype_h) $(libiberty_h) $(demangle_h)
 
-cp-names-main.tab.o: cp-names.tab.c $(safe_ctype_h) $(libiberty_h) $(demangle_h)
+test-cp-names.tab.o: cp-names.tab.c $(safe_ctype_h) $(libiberty_h) $(demangle_h)
 	$(CC) -c $(INTERNAL_CFLAGS) -DTEST_CPNAMES \
-		-o cp-names-main.tab.o cp-names.tab.c
-test-cpnames: cp-names-main.tab.o $(LIBIBERTY)
-	$(CC) -o test-cpnames cp-names-main.tab.o $(LIBIBERTY)
+		-o test-cp-names.tab.o cp-names.tab.c
+test-cpnames: test-cp-names.tab.o $(LIBIBERTY)
+	$(CC) -o test-cpnames test-cp-names.tab.o $(LIBIBERTY)
 
 .PRECIOUS: cp-names.tab.c
 cp-names.tab.c: cp-names.y
Index: config/djgpp/config.sed
===================================================================
RCS file: /cvs/src/src/gdb/config/djgpp/config.sed,v
retrieving revision 1.4.18.1
diff -u -p -r1.4.18.1 config.sed
--- config/djgpp/config.sed	13 Jan 2004 16:12:04 -0000	1.4.18.1
+++ config/djgpp/config.sed	29 Feb 2004 17:22:39 -0000
@@ -5,7 +5,7 @@ s|\.gdbinit|gdb.ini|g
 
 /^ac_given_INSTALL=/,/^CEOF/ {
   /^s%@prefix@%/a\
-  s,\\([yp*]\\)\\.tab,\\1_tab,g\
+  s,\\([yps*]\\)\\.tab,\\1_tab,g\
   /^	@rm -f/s,\\$@-\\[0-9\\]\\[0-9\\],& *.i[1-9] *.i[1-9][0-9],\
   s,standards\\.info\\*,standard*.inf*,\
   s,configure\\.info\\*,configur*.inf*,\


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [cplus] Add an entry point for cp-names
  2004-02-29 17:25       ` Daniel Jacobowitz
@ 2004-02-29 18:05         ` Eli Zaretskii
  0 siblings, 0 replies; 6+ messages in thread
From: Eli Zaretskii @ 2004-02-29 18:05 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches

> Date: Sun, 29 Feb 2004 12:25:45 -0500
> From: Daniel Jacobowitz <drow@mvista.com>
> 
> My point was that I couldn't make heads or tails out of what the sed
> script was doing, but I'm willing to follow instructions :) I've
> checked in this to drow-cplus-branch.  Do you think I need to tweak
> anything further?

No, I think this is fine.  I will get to it in due time and fix
anything that needs fixing.

Thanks.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-02-29 18:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-12-24 22:36 [cplus] Add an entry point for cp-names Daniel Jacobowitz
2004-01-04  6:16 ` Eli Zaretskii
2004-02-09 20:34   ` Daniel Jacobowitz
2004-02-10  6:36     ` Eli Zaretskii
2004-02-29 17:25       ` Daniel Jacobowitz
2004-02-29 18:05         ` Eli Zaretskii

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox