a348ee9106
The few extra bytes they save in the core aren't worth the extra complexity. This was initially done in a context where I had troubles keeping the RC2014 binary with SDC inside the 8K limit. At this point, even with the few extra bytes we add here, we're at 7200 bytes, so I'd say we're fine.
17 lines
532 B
Plaintext
17 lines
532 B
Plaintext
( returns negative value on error )
|
|
: _ ( c -- n )
|
|
DUP '0' '9' =><= IF '0' - EXIT THEN
|
|
DUP 'a' 'f' =><= IF 0x57 ( 'a' - 10 ) - EXIT THEN
|
|
DROP -1 ( bad )
|
|
;
|
|
: _ph ( a -- n f, parse hex )
|
|
( '0': ASCII 0x30 'x': 0x78 0x7830 )
|
|
DUP 1+ @ 0x7830 = NOT IF 0 EXIT THEN ( a 0 )
|
|
( We have "0x" prefix )
|
|
DUP C@ ( a len )
|
|
0 SWAP 1+ ( len+1 ) 3 DO ( a r )
|
|
OVER I + C@ ( a r c ) _ ( a r n )
|
|
DUP 0< IF 2DROP 0 UNLOOP EXIT THEN
|
|
SWAP 4 LSHIFT + ( a r*16+n ) LOOP
|
|
NIP 1 ;
|