|
|
@@ -1,16 +1,10 @@ |
|
|
|
( 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 ) |
|
|
|
( strings being sent to parse routines are always null |
|
|
|
terminated ) |
|
|
|
|
|
|
|
: _pc ( a -- n f, parse character ) |
|
|
|
( apostrophe is ASCII 39 ) |
|
|
|
DUP 1+ C@ 39 = OVER 3 + C@ 39 = AND ( a f ) |
|
|
|
NOT IF 0 EXIT THEN ( a 0 ) |
|
|
|
( surrounded by apos, good, return ) |
|
|
|
2+ C@ 1 ( n 1 ) |
|
|
|
; |
|
|
|
: _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 ; |