opcodes[]: global scope global { global scope implicit__pidigits { } type utf8str: type ucs1str: type ucs2str: type ucs4str: global scope vt100 { } uint32 extract_digit () { gvar-8 "numer" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) gvar-16 "accum" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) operator > ( mp_int¢, mp_int¢ -- bool ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1053 4294967295 ( -- uint32 ) jp ( -- ) -> L1052 L1053: gvar-8 "numer" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) 1 ( -- int32 ) operator << ( mp_int¢, int32 -- mp_int ) dup2r ( mp_int -- mp_int¢ ) gvar-8 "numer" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) operator + ( mp_int¢, mp_int¢ -- mp_int ) dup2r ( mp_int -- mp_int¢ ) gvar-16 "accum" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) operator + ( mp_int¢, mp_int¢ -- mp_int ) fromr ( -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) fromr ( -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) gvar-32 "r" ( -- mp_int& ) swapwithvar ( mp_int, mp_int& -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) gvar-32 "r" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) gvar-24 "denom" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) operator /% ( mp_int¢, mp_int¢ -- mp_int ) gvar-40 "q" ( -- mp_int& ) swapwithvar ( mp_int, mp_int& -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) gvar-32 "r" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) gvar-8 "numer" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) operator + ( mp_int¢, mp_int¢ -- mp_int ) dup2r ( mp_int -- mp_int¢ ) gvar-24 "denom" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) operator >= ( mp_int¢, mp_int¢ -- bool ) fromr ( -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1055 4294967295 ( -- uint32 ) jp ( -- ) -> L1052 L1055: gvar-40 "q" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) new ( mp_int¢ -- uint32 ) L1052: } void next_term ( uint32 k ) { var uint32 k gvar-8 "numer" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) 1 ( -- int32 ) operator << ( mp_int¢, int32 -- mp_int ) dup2r ( mp_int -- mp_int¢ ) gvar-16 "accum" ( -- mp_int& ) operator += ( mp_int¢, mp_int& ) fromr ( -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) lvar+0+0 "k" ( -- uint32& ) peek ( uint32& -- uint32 ) 2 ( -- uint32 ) * ( uint32, uint32 -- uint32 ) 1 ( -- uint32 ) + ( uint32, uint32 -- uint32 ) cast ( uint32 -- uint64 ) gvar-16 "accum" ( -- mp_int& ) operator *= ( uint64, mp_int& ) lvar+0+0 "k" ( -- uint32& ) peek ( uint32& -- uint32 ) cast ( uint32 -- uint64 ) gvar-8 "numer" ( -- mp_int& ) operator *= ( uint64, mp_int& ) lvar+0+0 "k" ( -- uint32& ) peek ( uint32& -- uint32 ) 2 ( -- uint32 ) * ( uint32, uint32 -- uint32 ) 1 ( -- uint32 ) + ( uint32, uint32 -- uint32 ) cast ( uint32 -- uint64 ) gvar-24 "denom" ( -- mp_int& ) operator *= ( uint64, mp_int& ) drop ( uint32 -- ) } void eliminate_digit ( uint32 d ) { var uint32 d gvar-24 "denom" ( -- mp_int& ) peek ( mp_int& -- mp_int¢ ) lvar+0+8 "d" ( -- uint32& ) peek ( uint32& -- uint32 ) cast ( uint32 -- uint64 ) operator * ( mp_int¢, uint64 -- mp_int ) dup2r ( mp_int -- mp_int¢ ) gvar-16 "accum" ( -- mp_int& ) operator -= ( mp_int¢, mp_int& ) fromr ( -- mp_int ) kill ( mp_int -- mp_int ) dispose ( mp_int -- ) 10 ( -- uint64 ) gvar-16 "accum" ( -- mp_int& ) operator *= ( uint64, mp_int& ) 10 ( -- uint64 ) gvar-8 "numer" ( -- mp_int& ) operator *= ( uint64, mp_int& ) drop ( uint32 -- ) } } 1 ( -- uint32 ) new ( uint32 -- mp_int ) new ( -- mp_int ) 1 ( -- uint32 ) new ( uint32 -- mp_int ) new ( -- mp_int ) new ( -- mp_int ) args ( -- utf8str[]& ) peek ( utf8str[]& -- utf8str[]¢ ) count ( utf8str[]¢ -- uint32 ) 2 ( -- uint32 ) >= ( uint32, uint32 -- bool ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1061 args ( -- utf8str[]& ) peek ( utf8str[]& -- utf8str[]¢ ) 1 ( -- int32 ) atindex ( utf8str[]¢, int32 -- utf8str& ) peek ( utf8str& -- utf8str¢ ) numval ( utf8str¢ -- uint32 ) jp ( -- ) -> L1062 L1061: 27 ( -- uint32 ) L1062: 0 ( -- uint32 ) 0 ( -- uint32 ) 0 ( -- uint32 ) L1065: gvar-52 "k" ( -- uint32& ) pppeek ( uint32& -- uint32 ) call next_term ( uint32 ) call extract_digit ( -- uint32 ) gvar-56 "d" ( -- uint32& ) poke ( uint32, uint32& -- ) gvar-56 "d" ( -- uint32& ) peek ( uint32& -- uint32 ) 4294967295 ( -- uint32 ) == ( uint32, uint32 -- bool ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1066 jp ( -- ) -> L1065 L1066: gvar-56 "d" ( -- uint32& ) peek ( uint32& -- uint32 ) print ( uint32 ) gvar-48 "i" ( -- uint32& ) pppeek ( uint32& -- uint32 ) 10 ( -- uint32 ) % ( uint32, uint32 -- uint32 ) 0 ( -- uint32 ) == ( uint32, uint32 -- bool ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1067 "\t:" ( -- utf8str¢ ) retain ( utf8str¢ -- utf8str ) gvar-48 "i" ( -- uint32& ) peek ( uint32& -- uint32 ) numstr ( uint32 -- utf8str ) catstr ( utf8str, utf8str -- utf8str ) "\n" ( -- utf8str¢ ) retain ( utf8str¢ -- utf8str ) catstr ( utf8str, utf8str -- utf8str ) print ( utf8str ) jp ( -- ) -> L1067 L1067: gvar-48 "i" ( -- uint32& ) peek ( uint32& -- uint32 ) gvar-44 "n" ( -- uint32& ) peek ( uint32& -- uint32 ) < ( uint32, uint32 -- bool ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1064 gvar-56 "d" ( -- uint32& ) peek ( uint32& -- uint32 ) call eliminate_digit ( uint32 ) jp ( -- ) -> L1065 L1064: gvar-48 "i" ( -- uint32& ) peek ( uint32& -- uint32 ) 10 ( -- uint32 ) % ( uint32, uint32 -- uint32 ) !! ( uint32 -- bool ) jp_z ( bool -- ) -> L1069 " \t:" ( -- utf8str¢ ) gvar-48 "i" ( -- uint32& ) peek ( uint32& -- uint32 ) 10 ( -- uint32 ) % ( uint32, uint32 -- uint32 ) 2147483647 ( -- int32 ) substr ( utf8str¢, int32, int32 -- utf8char[to] ) gvar-48 "i" ( -- uint32& ) peek ( uint32& -- uint32 ) numstr ( uint32 -- utf8str ) catstr ( utf8char[to], utf8str -- utf8str ) "\n" ( -- utf8str¢ ) retain ( utf8str¢ -- utf8str ) catstr ( utf8str, utf8str -- utf8str ) print ( utf8str ) jp ( -- ) -> L1069 L1069: "done.\n" ( -- utf8str¢ ) print ( utf8str¢ )