--- io.c~	2009-04-23 07:52:37.000000000 +0700
+++ io.c	2009-04-28 13:29:14.000000000 +0700
@@ -917,10 +917,26 @@
       }
       if (Chr != c)
          return Chr;
-      while (Env.get(), Chr != '\n')
-         if (Chr < 0)
-            return Chr;
-      Env.get();
+      if (c == '#') {
+         if (Env.get(), Chr == '{') {   /* #{...}# for span-comment */
+            while (1) {
+               if (Chr < 0) return Chr;
+               if (Env.get(), Chr == '}')
+                  if (Env.get(), Chr == '#') break;
+            }
+         } else {
+            while (Chr != '\n') {
+               if (Chr < 0) return Chr;
+               Env.get();
+            }
+         }
+         Env.get();
+      } else {
+         while (Env.get(), Chr != '\n')
+            if (Chr < 0)
+               return Chr;
+         Env.get();
+      }
    }
 }
 
@@ -1030,6 +1046,7 @@
    int i;
    any x, y, *h;
    cell c1;
+   int nextChr, isEmpty;
 
    if (skip('#') < 0) {
       if (top)
@@ -1098,6 +1115,43 @@
          Env.get();
          return consSym(Nil,Nil);
       }
+      if (Chr == '$') {   /* {$...$} for plain (unescaped) string */
+         nextChr = -1, isEmpty = 1;
+         while (1) {
+            if (nextChr >= 0) {
+               Chr = nextChr;
+               nextChr = -1;
+            } else {
+               Env.get();
+            }
+            if (Chr < 0)
+               eofErr();
+            if (Chr == '$') {
+               Env.get();
+               if (Chr == '}') {
+                  if (isEmpty) {
+                     Env.get();
+                     return Nil;
+                  } else
+                     break;
+               }
+               nextChr = Chr;
+               Chr = '$';
+            }
+            if (isEmpty) {
+               i = 0,  Push(c1, y = box(Chr));
+               isEmpty = 0;
+            } else
+               byteSym(Chr, &i, &y);
+         }
+         y = Pop(c1),  Env.get();
+         if (x = findHash(y, h = Transient + hash(y)))
+            return x;
+         x = consStr(y);
+         if (Env.get == getStdin)
+            *h = cons(x,*h);
+         return x;
+      }
       i = 0,  Push(c1, y = box(Chr));
       while (Env.get(), Chr != '}') {
          if (Chr < 0)
