X-Git-Url: http://git.subgeniuskitty.com/pforth/.git/blobdiff_plain/1f02140179ae9dd0b5d7f477b514c5af8210bf80..40c6f87ff261cacf78377241c8746da1aaa504c5:/csrc/pf_words.c diff --git a/csrc/pf_words.c b/csrc/pf_words.c index 7a753ec..68f7862 100644 --- a/csrc/pf_words.c +++ b/csrc/pf_words.c @@ -158,13 +158,25 @@ static cell_t HexDigitToNumber( char c ) /* Convert a string to the corresponding number using BASE. */ cell_t ffNumberQ( const char *FWord, cell_t *Num ) { - cell_t Len, i, Accum=0, n, Sign=1; + cell_t Len, i, Accum=0, n, Sign=1, Base=gVarBase; const char *s; /* get count */ Len = *FWord++; s = FWord; + switch (*s) { + case '#': Base = 10; s++; Len--; break; + case '$': Base = 16; s++; Len--; break; + case '%': Base = 2; s++; Len--; break; + case '\'': + if( Len == 3 && s[2] == '\'' ) + { + *Num = s[1]; + return NUM_TYPE_SINGLE; + } + } + /* process initial minus sign */ if( *s == '-' ) { @@ -176,12 +188,12 @@ cell_t ffNumberQ( const char *FWord, cell_t *Num ) for( i=0; i= gVarBase) ) + if( (n < 0) || (n >= Base) ) { return NUM_TYPE_BAD; } - Accum = (Accum * gVarBase) + n; + Accum = (Accum * Base) + n; } *Num = Accum * Sign; return NUM_TYPE_SINGLE; @@ -210,7 +222,7 @@ DBUGX(("ffWord: s3=%c, %d\n", *s3, n3 )); gScratch[0] = (char) nc; for( i=0; i