From 04d90bae5abb6bb18abe4a416be4efdcbf48596f Mon Sep 17 00:00:00 2001
From: tat <tat>
Date: Wed, 1 Oct 2008 18:36:09 +0000
Subject: [PATCH] Added: %s support for scanf

---
 Nasal/string.nas | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/Nasal/string.nas b/Nasal/string.nas
index 5d016610e..9c70b1872 100644
--- a/Nasal/string.nas
+++ b/Nasal/string.nas
@@ -283,7 +283,7 @@ var scanf = func(test, format, result) {
 				var fnum = -2; # because we add one if !prefix
 			}
 
-			var numstr = "";
+			var scanstr = "";
 			var prefix = 0;
 			var sign = 1;
 			if (f == `d` or f == `f` or f == `u`) {
@@ -303,23 +303,31 @@ var scanf = func(test, format, result) {
 				while ((var c = str.getc()) != nil and (fnum -= 1)) {
 					if (f != `f` and c == `.`)
 						break;
-					elsif (num(numstr ~ chr(c) ~ '0') != nil) # append 0 to digest e/E
-						numstr ~= chr(c);
+					elsif (num(scanstr ~ chr(c) ~ '0') != nil) # append 0 to digest e/E
+						scanstr ~= chr(c);
 					else
 						break;
 				}
 				if (c != nil)
 					str.ungetc();
-				if (num(numstr) == nil)
+				if (num(scanstr) == nil)
 					return 0;
+				if (!size(scanstr) and prefix)
+					return 0;
+				append(result, sign * num(scanstr));
+			} elsif (f == `s`) {
+				while ((var c = str.getc()) != nil and (c != ` `)) {
+					scanstr ~= chr(c);
+				}
+				if (c != nil)
+					str.ungetc();
+				if (!size(scanstr))
+					return 0;
+				append(result, scanstr);
 			} else {
 				die("scanf: bad format element %" ~ chr(f));
 			}
 
-			if (!size(numstr) and prefix)
-				return 0;
-
-			append(result, sign * num(numstr));
 
 		} elsif (isspace(f)) {
 			while ((var c = str.getc()) != nil and isspace(c))
@@ -336,6 +344,3 @@ var scanf = func(test, format, result) {
 	}
 	return str.getc() == nil and format.getc() == nil ? success : 0;
 }
-
-
-