** 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;
s1 = gCurrentTask->td_SourcePtr + gCurrentTask->td_IN;
n1 = gCurrentTask->td_SourceNum - gCurrentTask->td_IN;
n2 = ffSkip( s1, n1, c, &s2 );
-DBUGX(("ffWord: s2=%c, %d\n", *s2, n2 ));
+DBUGX(("Word: s2=%c, %d\n", *s2, n2 ));
n3 = ffScan( s2, n2, c, &s3 );
-DBUGX(("ffWord: 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++ )
{
- gScratch[i+1] = s2[i];
+ gScratch[i+1] = Upcase ? pfCharToUpper( s2[i] ) : s2[i] ;
}
}
else
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 );
+}
{
pfDebugMessage("ffInterpret: calling ffWord(()\n");
- theWord = ffWord( BLANK );
+ theWord = ffLWord( BLANK );
DBUG(("ffInterpret: theWord = 0x%x, Len = %d\n", theWord, *theWord ));
if( *theWord > 0 )
cell_t *NameToCode( ForthString *NFA );
PForthDictionary pfBuildDictionary( cell_t HeaderSize, cell_t CodeSize );
char *ffWord( char c );
+char *ffLWord( char c );
const ForthString *NameToPrevious( const ForthString *NFA );
cell_t FindSpecialCFAs( void );
cell_t FindSpecialXTs( void );
base @ -rot ( base c-addr u )
- \ Regonize prefixes and change base if needed
+ \ Recognize prefixes and change base if needed
over c@ >r ( base c-addr u ) ( r: char )
r@ [char] # = if rot drop 10 -rot 1 /string then
r@ [char] $ = if rot drop 16 -rot 1 /string then