From 1a3843311df6da4adb332057d6dc724ee1b8a585 Mon Sep 17 00:00:00 2001
From: Martin Nilsson <mani@lysator.liu.se>
Date: Fri, 29 Nov 2002 01:52:48 +0100
Subject: [PATCH] Improved _sprintf

Rev: lib/modules/ADT.pmod/History.pike:1.7
Rev: lib/modules/ADT.pmod/Relation.pmod/Binary.pike:1.5
Rev: lib/modules/ADT.pmod/Stack.pike:1.9
Rev: lib/modules/Audio.pmod/Codec.pmod:1.8
Rev: lib/modules/Audio.pmod/Format.pmod/module.pmod:1.5
Rev: lib/modules/Filesystem.pmod/System.pike:1.12
Rev: lib/modules/Filesystem.pmod/Tar.pmod:1.18
Rev: lib/modules/Filesystem.pmod/module.pmod:1.11
Rev: lib/modules/Geography.pmod/Countries.pmod:1.18
Rev: lib/modules/Geography.pmod/Position.pike:1.11
Rev: lib/modules/Locale.pmod/module.pmod:1.14
Rev: lib/modules/Parser.pmod/C.pmod:1.32
Rev: lib/modules/Parser.pmod/RCS.pike:1.27
Rev: lib/modules/Parser.pmod/XML.pmod/DOM.pmod:1.9
Rev: lib/modules/Parser.pmod/XML.pmod/NSTree.pmod:1.6
Rev: lib/modules/Parser.pmod/XML.pmod/Validating.pike:1.3
---
 lib/modules/ADT.pmod/History.pike             |  6 ++----
 .../ADT.pmod/Relation.pmod/Binary.pike        |  7 ++-----
 lib/modules/ADT.pmod/Stack.pike               |  6 ++----
 lib/modules/Audio.pmod/Codec.pmod             |  7 ++-----
 .../Audio.pmod/Format.pmod/module.pmod        |  5 +++--
 lib/modules/Filesystem.pmod/System.pike       |  4 ++--
 lib/modules/Filesystem.pmod/Tar.pmod          | 21 ++++++++++---------
 lib/modules/Filesystem.pmod/module.pmod       |  4 ++--
 lib/modules/Geography.pmod/Countries.pmod     |  4 +---
 lib/modules/Geography.pmod/Position.pike      |  7 +------
 lib/modules/Locale.pmod/module.pmod           | 17 +++++++--------
 lib/modules/Parser.pmod/C.pmod                |  4 ++--
 lib/modules/Parser.pmod/RCS.pike              |  8 +++----
 lib/modules/Parser.pmod/XML.pmod/DOM.pmod     |  7 ++++---
 lib/modules/Parser.pmod/XML.pmod/NSTree.pmod  |  8 +++----
 .../Parser.pmod/XML.pmod/Validating.pike      |  2 +-
 16 files changed, 50 insertions(+), 67 deletions(-)

diff --git a/lib/modules/ADT.pmod/History.pike b/lib/modules/ADT.pmod/History.pike
index a89be2bf6f..88be71ea14 100644
--- a/lib/modules/ADT.pmod/History.pike
+++ b/lib/modules/ADT.pmod/History.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: History.pike,v 1.6 2002/10/19 14:21:12 nilsson Exp $
+// $Id: History.pike,v 1.7 2002/11/29 00:28:44 nilsson Exp $
 
 //! A history is a stack where you can only push entries. When the stack has
 //! reached a certain size the oldest entries are removed on every push.
@@ -171,7 +171,5 @@ array _values() {
 }
 
 string _sprintf(int t) {
-  if(t=='O') return "ADT.History("+size+"/"+maxsize+")";
-  if(t=='t') return "ADT.History";
-  error("Can't print History object as '%c'.\n", t);
+  return t=='O' && sprintf("%O(%d/%d)", this_program, size, maxsize);
 }
diff --git a/lib/modules/ADT.pmod/Relation.pmod/Binary.pike b/lib/modules/ADT.pmod/Relation.pmod/Binary.pike
index 05e86ce07a..e10355af1a 100644
--- a/lib/modules/ADT.pmod/Relation.pmod/Binary.pike
+++ b/lib/modules/ADT.pmod/Relation.pmod/Binary.pike
@@ -1,4 +1,4 @@
-// $Id: Binary.pike,v 1.4 2002/09/12 14:24:49 stensson Exp $
+// $Id: Binary.pike,v 1.5 2002/11/29 00:28:24 nilsson Exp $
 // An abstract data type for binary relations.
 
 private mapping val   = ([]);
@@ -231,10 +231,7 @@ array find_shortest_path(mixed from, mixed to, void|multiset avoiding)
 
 string _sprintf(int mode)
 {
-  if (mode == 'O')
-    return sprintf("ADT.Relation.Binary(%O)", id);
-  else
-    return "ADT.Relation.Binary";
+  return mode=='O' && sprintf("%O(%O)", this_program, id);
 }
 
 //! Return the ID value which was given as first argument to create().
diff --git a/lib/modules/ADT.pmod/Stack.pike b/lib/modules/ADT.pmod/Stack.pike
index 367e95f32b..56c0b589c0 100644
--- a/lib/modules/ADT.pmod/Stack.pike
+++ b/lib/modules/ADT.pmod/Stack.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: Stack.pike,v 1.8 2002/06/14 00:56:33 nilsson Exp $
+// $Id: Stack.pike,v 1.9 2002/11/29 00:30:03 nilsson Exp $
 
 //! This class implements a simple stack. Instead of adding and removing
 //! elements to an array, and thus making it vary in size for every push
@@ -131,7 +131,5 @@ this_program `+(this_program s) {
 }
 
 string _sprintf(int t) {
-  if(t=='t') return "ADT.Stack";
-  if(t=='O') return sprintf("ADT.Stack%O", _values());
-  error("Can't display ADT.Stack as %c.", t);
+  return t=='O' && sprintf("%O%O", this_program, _values());
 }
diff --git a/lib/modules/Audio.pmod/Codec.pmod b/lib/modules/Audio.pmod/Codec.pmod
index 93ac9fe113..a8243eab83 100644
--- a/lib/modules/Audio.pmod/Codec.pmod
+++ b/lib/modules/Audio.pmod/Codec.pmod
@@ -4,7 +4,7 @@
 
   creator: Honza Petrous, hop@unibase.cz
 
-  $Id: Codec.pmod,v 1.7 2002/11/26 12:30:59 grubba Exp $
+  $Id: Codec.pmod,v 1.8 2002/11/29 00:30:59 nilsson Exp $
 
  */
 
@@ -117,10 +117,7 @@ class decoder {
   }
 
   static mixed _sprintf(int|void type) {
-    if(type == 't')
-      return "Audio.Codec";
-
-    return sprintf("Audio.Codec /* %O */", codec);
+    return type=='O' && sprintf("Audio.Codec(/* %O */)", codec);
   }
 
 }
diff --git a/lib/modules/Audio.pmod/Format.pmod/module.pmod b/lib/modules/Audio.pmod/Format.pmod/module.pmod
index 77e48b0b4b..6a17ce9a4e 100644
--- a/lib/modules/Audio.pmod/Format.pmod/module.pmod
+++ b/lib/modules/Audio.pmod/Format.pmod/module.pmod
@@ -4,7 +4,7 @@
 //
 // Author: Honza Petrous, hop@unibase.cz
 //
-// $Id: module.pmod,v 1.4 2002/09/17 12:40:18 hop Exp $
+// $Id: module.pmod,v 1.5 2002/11/29 00:30:37 nilsson Exp $
 
 //#define AUDIO_FORMAT_DEBUG
 #ifdef AUDIO_FORMAT_DEBUG
@@ -90,7 +90,8 @@ class ANY {
   }
 
   string _sprintf(int|void ctype) {
-      sprintf("Audio.Format.Any(\"%O\",%O)", buffer->fd, nochk);
+      return ctype=='O' &&
+	sprintf("%O(\"%O\",%O)", this_program, buffer->fd, nochk);
   }
 
   //!
diff --git a/lib/modules/Filesystem.pmod/System.pike b/lib/modules/Filesystem.pmod/System.pike
index 7862cf0314..39da20b057 100644
--- a/lib/modules/Filesystem.pmod/System.pike
+++ b/lib/modules/Filesystem.pmod/System.pike
@@ -88,9 +88,9 @@ static void create(void|string directory,  // default: cwd
   wd = directory;
 }
 
-static string _sprintf()
+static string _sprintf(int t)
 {
-  return sprintf("Filesystem.System(/* root=%O, wd=%O */)", root, wd);
+  return t=='O' && sprintf("%O(/* root=%O, wd=%O */)", this_program, root, wd);
 }
 
 Filesystem.Base cd(string directory)
diff --git a/lib/modules/Filesystem.pmod/Tar.pmod b/lib/modules/Filesystem.pmod/Tar.pmod
index 295f0cd944..b6623f0a65 100644
--- a/lib/modules/Filesystem.pmod/Tar.pmod
+++ b/lib/modules/Filesystem.pmod/Tar.pmod
@@ -1,5 +1,5 @@
 /*
- * $Id: Tar.pmod,v 1.17 2002/11/24 15:18:52 marcus Exp $
+ * $Id: Tar.pmod,v 1.18 2002/11/29 00:35:51 nilsson Exp $
  */
 
 #pike __REAL_VERSION__
@@ -25,9 +25,9 @@ class _Tar  // filesystem
 
     static private int start, pos, len;
 
-    static string _sprintf()
+    static string _sprintf(int t)
     {
-      return sprintf("Filesystems.Tar.ReadFile(%d, %d /* pos = %d */)",
+      return t=='O' && sprintf("Filesystem.Tar.ReadFile(%d, %d /* pos = %d */)",
 		     start, len, pos);
     }
 
@@ -249,9 +249,9 @@ class _Tar  // filesystem
     filenames = indices(filename_to_entry);
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return sprintf("_Tar(/* filename=%O */)", filename);
+    return t=='O' && sprintf("_Tar(/* filename=%O */)", filename);
   }
 };
 
@@ -280,9 +280,9 @@ class _TarFS
     parent = _parent;
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return  sprintf("_TarFS(/* root=%O, wd=%O */)", root, wd);
+    return  t=='O' && sprintf("_TarFS(/* root=%O, wd=%O */)", root, wd);
   }
 
   Filesystem.Stat stat(string file, void|int lstat)
@@ -355,10 +355,11 @@ class `()
     _TarFS::create(tar, "/", "", parent);
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return sprintf("Filesystem.Tar(/* tar->filename=%O, root=%O, wd=%O */)",
-		   tar && tar->filename, root, wd);
+    return t=='O' &&
+      sprintf("Filesystem.Tar(/* tar->filename=%O, root=%O, wd=%O */)",
+	      tar && tar->filename, root, wd);
   }
 }
 
diff --git a/lib/modules/Filesystem.pmod/module.pmod b/lib/modules/Filesystem.pmod/module.pmod
index 9aa5f07d02..486fa88773 100644
--- a/lib/modules/Filesystem.pmod/module.pmod
+++ b/lib/modules/Filesystem.pmod/module.pmod
@@ -153,9 +153,9 @@ class Stat
 		   path?fullpath:name);
   }
 
-  string _sprintf()
+  string _sprintf(int t)
   {
-    return sprintf("Stat(/* %s */)", lsprint(1));
+    return t=='O' && sprintf("Stat(/* %s */)", lsprint(1));
   }
 }
 
diff --git a/lib/modules/Geography.pmod/Countries.pmod b/lib/modules/Geography.pmod/Countries.pmod
index 4fd7c710c6..2ddcbf7ed4 100644
--- a/lib/modules/Geography.pmod/Countries.pmod
+++ b/lib/modules/Geography.pmod/Countries.pmod
@@ -384,9 +384,7 @@ class Country
 
    string _sprintf(int t)
    {
-      if (t=='O')
-	 return "Country("+name+")";
-      return 0;
+     return t=='O' && sprintf("%O(%s)", this_program, name);
    }
 
 }
diff --git a/lib/modules/Geography.pmod/Position.pike b/lib/modules/Geography.pmod/Position.pike
index 4bda8a8426..6aaa7595a4 100644
--- a/lib/modules/Geography.pmod/Position.pike
+++ b/lib/modules/Geography.pmod/Position.pike
@@ -529,10 +529,5 @@ int `>(object pos)
 //!
 string _sprintf(int|void t)
 {
-  switch(t)
-  {
-    case 't': return "Geography.Position";
-    case 'O': return "Position("+latitude()+", "+longitude()+")";
-  }
-  return 0;
+  return t=='O' && sprintf("%O(%s, %s)", latitude(), longitude());
 }
diff --git a/lib/modules/Locale.pmod/module.pmod b/lib/modules/Locale.pmod/module.pmod
index 09bd8381b7..721e2b1143 100644
--- a/lib/modules/Locale.pmod/module.pmod
+++ b/lib/modules/Locale.pmod/module.pmod
@@ -86,10 +86,10 @@ static class LanguageListObject( array(string) languages )
 {
   int timestamp  = time(1);
 
-  static string _sprintf()
+  static string _sprintf(int t)
   {
-    return sprintf("LanguageListObject(timestamp: %d, %O)",
-		   timestamp, languages);
+    return t=='O' && sprintf("%O(timestamp: %d, %O)", this_program,
+			     timestamp, languages);
   }
 }
 
@@ -196,10 +196,11 @@ class LocaleObject
     return size;
   }
 
-  static string _sprintf()
+  static string _sprintf(int t)
   {
-    return sprintf("LocaleObject(timestamp: %d, bindings: %d, functions: %d)",
-		   timestamp, sizeof(bindings), sizeof(functions) );
+    return t=='O' && sprintf("%O(timestamp: %d, bindings: %d, functions: %d)",
+			     this_program, timestamp, sizeof(bindings),
+			     sizeof(functions) );
   }
 }
 
@@ -487,9 +488,7 @@ class DeferredLocale( static string project,
       case 's':
 	return lookup();
       case 'O':
-	return sprintf("DeferredLocale(%O)", lookup());
-      default:
-	error(sprintf("Illegal formatting char '%c'\n", c));
+	return sprintf("%O(%O)", this_program, lookup());
     }
   }
 
diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod
index 3d4d1ccd8a..53fcc57c47 100644
--- a/lib/modules/Parser.pmod/C.pmod
+++ b/lib/modules/Parser.pmod/C.pmod
@@ -4,7 +4,7 @@
 //
 // #pike __REAL_VERSION__
 //
-// $Id: C.pmod,v 1.31 2002/09/22 18:13:52 nilsson Exp $
+// $Id: C.pmod,v 1.32 2002/11/29 00:38:32 nilsson Exp $
 
 mapping(string:string) global_groupings=(["{":"}","(":")","[":"]"]);
 
@@ -238,7 +238,7 @@ class Token
 	case 's':
 	  return text;
 	case 'O':
-	  return sprintf("Token(%O,%O,%d)",text,file,line);
+	  return sprintf("%O(%O,%O,%d)",this_program,text,file,line);
       }
     }
 
diff --git a/lib/modules/Parser.pmod/RCS.pike b/lib/modules/Parser.pmod/RCS.pike
index 25aaf39d2e..03996e1ae1 100644
--- a/lib/modules/Parser.pmod/RCS.pike
+++ b/lib/modules/Parser.pmod/RCS.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: RCS.pike,v 1.26 2002/11/26 21:04:41 grubba Exp $
+// $Id: RCS.pike,v 1.27 2002/11/29 00:52:48 nilsson Exp $
 
 //! A RCS file parser that eats a RCS *,v file and presents nice pike
 //! data structures of its contents.
@@ -75,10 +75,8 @@ mapping(string:string) branches;
 
 string _sprintf(int type)
 {
-  if(type=='t')
-    return "RCS";
-  return sprintf("RCS(/* %d revisions */)",
-		 revisions && sizeof(revisions));
+  return type=='O' && sprintf("%O(/* %d revisions */)", this_program,
+			      revisions && sizeof(revisions));
 }
 
 //! Data for all revisions of the file. The indices of the mapping are
diff --git a/lib/modules/Parser.pmod/XML.pmod/DOM.pmod b/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
index 862bd9821a..8ca2a4b678 100644
--- a/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
@@ -58,7 +58,8 @@ class DOMException(int code) {
 
   static string _sprintf(int mode, mapping options)
   {
-    return mode == 'O' && "DOMException(" + (symbolic[code]||code) + ")";
+    return mode == 'O' && sprintf("%O(%s)", this_program,
+				  (string)(symbolic[code]||code) );
   }
 
 };
@@ -1003,8 +1004,8 @@ class ParseException
   static string _sprintf(int mode, mapping options)
   {
     return mode == 'O' &&
-      sprintf("DOM.ParseException(%O /* %O char %d */)",
-	      message, sysid, loc);
+      sprintf("%O(%O /* %O char %d */)",
+	      this_program, message, sysid, loc);
   }
 
   static void create(string _message, string|void _sysid, string|void _pubid,
diff --git a/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod b/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
index 791629b4f6..3389577309 100644
--- a/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
@@ -244,7 +244,6 @@ class NSNode {
   }
 
   string _sprintf(int t) {
-    if(t=='t') return "NSNode";
     if(t=='O') {
       mapping nt = ([ XML_ROOT:"ROOT",
 		      XML_ELEMENT:"ELEMENT",
@@ -256,10 +255,11 @@ class NSNode {
 		      XML_ATTR:"ATTR" ]);
       string n = get_any_name();
       if(!n || !sizeof(n))
-	return sprintf("NSNode(%s)", nt[get_node_type()] || "UNKNOWN");
-      return sprintf("NSNode(%s,%O)", nt[get_node_type()] || "UNKNOWN", n);
+	return sprintf("%O(%s)", this_program,
+		       nt[get_node_type()] || "UNKNOWN");
+      return sprintf("%O(%s,%O)", this_program,
+		     nt[get_node_type()] || "UNKNOWN", n);
     }
-    error("Can't show object as %c.\n", t);
   }
 }
 
diff --git a/lib/modules/Parser.pmod/XML.pmod/Validating.pike b/lib/modules/Parser.pmod/XML.pmod/Validating.pike
index 30e294af79..790209e89d 100644
--- a/lib/modules/Parser.pmod/XML.pmod/Validating.pike
+++ b/lib/modules/Parser.pmod/XML.pmod/Validating.pike
@@ -71,7 +71,7 @@ static private class Element {
   
   string _sprintf(int mode, mapping options)
   {
-    return mode=='O' && "Element(\""+name+"\")";
+    return mode=='O' && sprintf("%O(%O)", this_program, name);
   }
 
   int accept_element(string name)
-- 
GitLab