]> git.mdlowis.com Git - proto/sclpl.git/commitdiff
Tweaked behavior of file I/O words and fixed a bug in th estring parser
authorMichael D. Lowis <mike@mdlowis.com>
Thu, 1 May 2014 16:57:17 +0000 (12:57 -0400)
committerMichael D. Lowis <mike@mdlowis.com>
Thu, 1 May 2014 16:57:17 +0000 (12:57 -0400)
source/slvm/main.c
source/slvm/parser.c

index 107ba581148bff8ecdf2a24063b219b083aec3a5..f04a3e8970ee6f75f80c85915a13c3f1fcc0d55b 100644 (file)
@@ -128,22 +128,27 @@ defcode("fclose", _fclose, 0, &_fopen){
 
 defcode("fflush", _fflush, 0, &_fclose){
     fflush((FILE*)*(ArgStackPtr));
+    ArgStackPtr--;
 }
 
 defcode("fgetc",  _fgetc,  0, &_fflush){
-    ArgStackPtr++;
-    *(ArgStackPtr) = fgetc((FILE*)*(ArgStackPtr-1));
+    *(ArgStackPtr) = fgetc((FILE*)*(ArgStackPtr));
 }
 
 defcode("fputc",  _fputc,  0, &_fgetc){
-    fputc((char)*(ArgStackPtr), (FILE*)*(ArgStackPtr-1));
-    ArgStackPtr--;
+    fputc((char)*(ArgStackPtr-1), (FILE*)*(ArgStackPtr));
+    ArgStackPtr -= 2;
 }
 
-defcode("fpeekc", _fpeekc, 0, &_fputc){
-    ArgStackPtr++;
-    *(ArgStackPtr) = fgetc((FILE*)*(ArgStackPtr-1));
-    ungetc((char)*(ArgStackPtr), (FILE*)*(ArgStackPtr-1));
+defcode("fputs",  _fputs,  0, &_fputc){
+    fputs((char*)*(ArgStackPtr-1), (FILE*)*(ArgStackPtr));
+    ArgStackPtr -= 2;
+}
+
+defcode("fpeekc", _fpeekc, 0, &_fputs){
+    FILE* p_file = (FILE*)*(ArgStackPtr);
+    *(ArgStackPtr) = fgetc(p_file);
+    ungetc((char)*(ArgStackPtr), p_file);
 }
 
 /* Interpreter Words
@@ -286,8 +291,10 @@ defcode(";", semicolon, 1, &colon){
 }
 
 defcode("'", tick, 1, &semicolon){
-    //EXEC(get_word);
-    //EXEC(find_word);
+    EXEC(_fetch);
+    EXEC(_parse);
+    ArgStackPtr--;
+    EXEC(find);
 }
 
 defcode("interp", interp, 0, &_parse){
index 507dc400c92daf0ddee004fcdc48c393b67de647..5d4a5b131dac7422e54735b0727f9cb5d1fbf9a6 100644 (file)
@@ -198,7 +198,7 @@ static bool is_string(char* p_str, val_t* p_val)
     if((p_str[0] == '"') && (p_str[strlen(p_str)-1] == '"'))
     {
         /* Cut off the last double quote */
-        p_str[strlen(p_str)] = '\0';
+        p_str[strlen(p_str)-1] = '\0';
         /* And return the string after the first double quote */
         *(p_val) = (val_t)(p_str+1);
         res = true;