projects
/
pforth
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use C version of LWORD in INTERPRET
[pforth]
/
csrc
/
pf_words.c
diff --git
a/csrc/pf_words.c
b/csrc/pf_words.c
index
68f7862
..
8fe2fd3
100644
(file)
--- a/
csrc/pf_words.c
+++ b/
csrc/pf_words.c
@@
-203,8
+203,11
@@
cell_t ffNumberQ( const char *FWord, cell_t *Num )
** Compiler Support
***************************************************************/
** Compiler Support
***************************************************************/
-/* ( char -- c-addr , parse word ) */
-char * ffWord( char c )
+/* Skip whitespace, then parse input delimited by C. If UPCASE is true
+ * convert the word to upper case. The result is stored in
+ * gScratch.
+ */
+static char * Word ( char c, int Upcase )
{
char *s1,*s2,*s3;
cell_t n1, n2, n3;
{
char *s1,*s2,*s3;
cell_t n1, n2, n3;
@@
-213,16
+216,16
@@
char * ffWord( char c )
s1 = gCurrentTask->td_SourcePtr + gCurrentTask->td_IN;
n1 = gCurrentTask->td_SourceNum - gCurrentTask->td_IN;
n2 = ffSkip( s1, n1, c, &s2 );
s1 = gCurrentTask->td_SourcePtr + gCurrentTask->td_IN;
n1 = gCurrentTask->td_SourceNum - gCurrentTask->td_IN;
n2 = ffSkip( s1, n1, c, &s2 );
-DBUGX(("
ff
Word: s2=%c, %d\n", *s2, n2 ));
+DBUGX(("Word: s2=%c, %d\n", *s2, n2 ));
n3 = ffScan( s2, n2, c, &s3 );
n3 = ffScan( s2, n2, c, &s3 );
-DBUGX(("
ff
Word: s3=%c, %d\n", *s3, n3 ));
+DBUGX(("Word: s3=%c, %d\n", *s3, n3 ));
nc = n2-n3;
if (nc > 0)
{
gScratch[0] = (char) nc;
for( i=0; i<nc; i++ )
{
nc = n2-n3;
if (nc > 0)
{
gScratch[0] = (char) nc;
for( i=0; i<nc; i++ )
{
- gScratch[i+1] =
s2[i]
;
+ gScratch[i+1] =
Upcase ? pfCharToUpper( s2[i] ) : s2[i]
;
}
}
else
}
}
else
@@
-233,3
+236,15
@@
DBUGX(("ffWord: s3=%c, %d\n", *s3, n3 ));
gCurrentTask->td_IN += (n1-n3) + 1;
return &gScratch[0];
}
gCurrentTask->td_IN += (n1-n3) + 1;
return &gScratch[0];
}
+
+/* ( char -- c-addr , parse word ) */
+char * ffWord( char c )
+{
+ return Word( c, TRUE );
+}
+
+/* ( char -- c-addr , parse word, preserving case ) */
+char * ffLWord( char c )
+{
+ return Word( c, FALSE );
+}