+: strcut-end ( s i -- s s )
+ over strlen swap -
+ dup 0 <= if
+ ( requested more than string has )
+ pop "" swap
+ else
+ strcut
+ then
+;
+
+( deal with number as string )
+( assumes base10 )
+: mpi-english-number ( s -- s )
+ ( atoi english-number exit )
+ 0 var! ISNEG
+ "" var! OUT
+ 0 var! BIGNESS
+ begin ( s )
+ dup strlen while ( s )
+ 3 strcut-end ( s s )
+ atoi ( s i )
+ dup sign 0 < if
+ 1 ISNEG !
+ abs
+ then ( s i )
+ english_sub_thousand_ ( s s )
+ BIGNESS @ dup 1 >= if ( s s i )
+ big_numbers_ ( s s s )
+ " " swap strcat ( s s s )
+ strcat ( s s )
+ else
+ pop ( s s )
+ then
+ OUT @ ( s s s )
+ dup strlen if ( s s s )
+ " " swap strcat
+ then ( s s s )
+ strcat ( s s )
+ OUT ! ( s )
+
+ BIGNESS ++ ( s )
+ repeat ( s )
+ pop
+ OUT @
+ dup strlen not if
+ pop zero_
+ then
+ ISNEG @ if
+ "negative " swap strcat
+ then