From 26001af95744e8c6e95e03e224a242e41c27de4b Mon Sep 17 00:00:00 2001
From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org>
Date: Thu, 29 May 1997 21:36:48 +0200
Subject: [PATCH] nicing up some, reading on the-fly instead of buffering the
 complete source...

Rev: src/modules/Image/mkdoc.pike:1.7
---
 src/modules/Image/mkdoc.pike | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/src/modules/Image/mkdoc.pike b/src/modules/Image/mkdoc.pike
index 5d48963472..9cd9fa0b38 100644
--- a/src/modules/Image/mkdoc.pike
+++ b/src/modules/Image/mkdoc.pike
@@ -53,16 +53,21 @@ mapping lower_nowM()
    else return nowM=methodM;
 }
 
+void report(string s)
+{
+   stderr->write(s+"\n");
+}
+
 #define complain(X) (X)
 
 mapping keywords=
 (["module":lambda(string arg,int line) 
 	  { descM=nowM=moduleM=focM(parse,stripws(arg),line); classM=methodM=0; 
-	    if (!nowM->classes) nowM->classes=([]); },
+	    if (!nowM->classes) nowM->classes=([]); report("module "+arg); },
   "class":lambda(string arg,int line) 
 	  { if (!moduleM) return complain("class w/o module");
 	    descM=nowM=classM=focM(moduleM->classes,stripws(arg),line); 
-	    methodM=0; },
+	    methodM=0; report("class "+arg); },
   "method":lambda(string arg,int line)
 	  { if (!classM) return complain("method w/o class");
 	    if (!nowM || methodM!=nowM || methodM->desc || methodM->args || descM==methodM) 
@@ -398,23 +403,33 @@ void make_doc_files(string dir)
 
 int main()
 {
-   stdout->write("reading data...\n");
-
-   string doc=stdin->read(10000000);
-   string s;
+   string s,t;
    int line;
+   string *ss=({""});
 
    nowM=parse;
 
-   stdout->write("parsing data...\n");
+   stdout->write("reading and parsing data...\n");
 
-   foreach (doc/"\n",s)
+   for (;;)
    {
       int i;
+
+      if (sizeof(ss)<2)
+      {
+	 if (t=="") break;
+	 t=stdin->read(8192);
+	 s=ss[0];
+	 ss=t/"\n";
+	 ss[0]=s+ss[0];
+      }
+      s=ss[0]; ss=ss[1..];
+
       line++;
       if ((i=search(s,"**!"))!=-1)
       {
 	 string kw,arg;
+
 	 sscanf(s[i+3..],"%*[ \t]%s%*[ \t]%s",kw,arg);
 	 if (keywords[kw])
 	 {
@@ -427,6 +442,7 @@ int main()
 	 }
 	 else 
 	 {
+	    if (search(s,"$Id")!=-1) report("Id: "+s);
 	    if (!descM) descM=methodM;
 	    if (!descM)
 	    {
-- 
GitLab