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; } - - -