From 0f4ca57b972a682d30328b953052ba9116c6c406 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Thu, 1 May 2014 12:57:17 -0400 Subject: [PATCH] Tweaked behavior of file I/O words and fixed a bug in th estring parser --- source/slvm/main.c | 27 +++++++++++++++++---------- source/slvm/parser.c | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/source/slvm/main.c b/source/slvm/main.c index 107ba58..f04a3e8 100644 --- a/source/slvm/main.c +++ b/source/slvm/main.c @@ -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){ diff --git a/source/slvm/parser.c b/source/slvm/parser.c index 507dc40..5d4a5b1 100644 --- a/source/slvm/parser.c +++ b/source/slvm/parser.c @@ -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; -- 2.52.0