: (parsed) ( a -- n f )
    C@+ OVER C@ 0 ( a len firstchar startat )
    SWAP '-' = IF 1+ THEN ( a len startat )
    0 ROT ROT ( len ) ( startat ) DO ( a r )
        OVER I + C@ ( a r c ) _pdacc ( a r f )
        IF DROP 1- 0 UNLOOP EXIT THEN LOOP ( a r )
    ( negate if needed )
    SWAP C@ '-' = IF 0 -^ THEN 1 ( r 1 ) ;