anchor.diff:  : - s` [<->-]<` ;
   : * s` <[>[>+>+<<-]>>[<<+>>-]<<<-]>[-]>[<<+>>-]<<` ;
   
  -: dup  s` [>+>+<<-]>>[<<+>>-]<` ;
  -: drop s` [-]<` ;
  -: nip  s` <[-]>[<+>-]<` ;
  -: over s` <[>>+>+<<<-]>>>[<<<+>>>-]<` ;
  -: tuck s` [>+>+<<-]<[>+<-]>>>[<<<+>>>-]<` ;
  -: swap s` [>+<-]<[>+<-]>>[<<+>>-]<` ;
  -: rot  s` <<[>>>+<<<-]>[<+>-]>[<+>-]>[<+>-]<` ;
  -: -rot s` [>+<-]<[>+<-]<[>+<-]>>>[<<<+>>>-]<` ;
  +: drop ( w -- )                 s` [-]<` ;
  +: nip  ( w1 w2 -- w2 )          s` <[-]>[<+>-]<` ;
  +: dup  ( w -- w w )             s` [>+>+<<-]>>[<<+>>-]<` ;
  +: over ( w1 w2 -- w1 w2 w1 )    s` <[>>+>+<<<-]>>>[<<<+>>>-]<` ;
  +: tuck ( w1 w2 -- w2 w1 w2 )    s` [>+>+<<-]<[>+<-]>>>[<<<+>>>-]<` ;
  +: swap ( w1 w2 -- w2 w1 )       s` [>+<-]<[>+<-]>>[<<+>>-]<` ;
  +: rot  ( w1 w2 w3 -- w2 w3 w1 ) s` <<[>>>+<<<-]>[<+>-]>[<+>-]>[<+>-]<` ;
  +: -rot ( w1 w2 w3 -- w3 w1 w2 ) s` [>+<-]<[>+<-]<[>+<-]>>>[<<<+>>>-]<` ;
  +: dup? ( w -- 0 | w w ) dup if dup then ;
  +
  +: 2drop ( w1 w2 -- ) drop drop ;
  +: 2nip  ( w1 w2 w3 w4 -- w3 w4 ) rot drop rot drop ;
  +: 2dup  ( w1 w2 -- w1 w2 w1 w2 ) over over ;
  +: 2over ( w1 w2 w3 w4 -- w1 w2 w3 w4 w1 w2 ) 3 pick 3 pick ;
  +: 2tuck ( w1 w2 w3 w4 -- w3 w4 w1 w2 w3 w4 ) 3 roll 3 roll 3 pick 3 pick ;
  +: 2swap ( w1 w2 w3 w4 -- w3 w4 w1 w2 ) 3 roll 3 roll ;
  +: 2rot  ( w1 w2 w3 w4 w5 w6 -- w3 w4 w5 w6 w1 w2 ) 5 roll 5 roll ;
  +
  +: negate 0 swap - ;
  +: under+ rot + swap ;
   
   : emit   s` .` drop ;
   : key  0 s` ,` ;
  
positive.code:     48 + emit
      space
  ;
  
  : > ( a b -- bool )
      begin dup while
          over
          if
  
negative.code: : < swap > ;
  : <= > 0= ;
  : >= swap <= ;
  
  : 0<  0 <  ;
  : 0<= 0 <= ;
  : 0>  0 >  ;
  : 0>= 0 >= ;
  
  : true -1 ;
  : false 0 ;
  
  \ not in forth
  : +of ( n1 n2 -- n3 f ) \ + with overflow flag (0 or -1)
      0 -rot \ 0 n1 n2
      begin dup while
          \ swap 1+ dup \ f n2 n1' n1'
          \ if else rot 1- -rot then \ f n2 n1
          \ swap 1- \ f n1 n2'
          s` <+[>>+>+<<<-]>>>` \ f 0 n2 n1' n1'
          s` [<<<<+>>>>[-]]<<<<->>>` \ f' 0 n2 n1
          s` [<<+>>-]<-` \ f n1 n2'
      repeat \ f n1 0
      drop swap \ n1 f
  ;
  \ not in forth
  : -uf ( n1 n2 -- n3 f ) \ - with underflow flag (0 or -1)
      0 -rot
      begin dup while
          swap dup if else rot 1- -rot then 1-
          swap 1-
      repeat
      drop swap
  ;
  
  : and' ( f1 f2 -- f3 ) \ not in forth
      if 0<> else drop 0 then
  ;
  : or' ( f1 f2 -- f3 ) \ not in forth
      if drop -1 else 0<> then
  ;
  : not' ( f1 -- f2 ) \ not in forth
      0=
  ;
  
  : within ( u1 u2 u3 - f )
      2 pick > -rot >= and'
  ;
  
  : d+ ( d1 d2 -- d3 )
      swap \ a1 a2 b2 b1
      3 roll +of negate \ a2 b2 c1 f'
      2 roll + \ a2 c1 b2'
      2 roll + \ c1 c2
  ;
  
  : d- ( d1 d2 -- d3 )
      swap
      3 roll swap -uf
      2 roll swap -
      2 roll swap -
  ;
  
  : dnegate ( d1 -- d2 )
      0 0 2swap d-
  ;
  
  : d0= ( d1 d2 -- f )
      0= swap 0= and'
  ;
  : d0<> ( d1 d2 -- f )
      0<> swap 0<> or'
  ;
  
  : m* ( n1 n2 -- n1 f )
      0 -rot 0 -rot \ 0 0 n1 n2
      begin dup while \ f a b i
          rot 2 pick +of \ f b i a' f
          \ if 3 roll 1+ 3 roll 3 roll 3 roll then \ f' b i a
          s` [<<<<+>>>>+]<`
          -rot 1- \ f a b i
      repeat drop \ f a b
      drop swap \ a f
  ;
  