( BSORTC                                sort an n-string array )

need pick need roll need matchc
: bsortc                          ( addr n1 n2  --- )
  dup rot * 3 pick + 3 roll >r >r ( save these limits)
  begin 1                         ( to start, exchange flag = 1)
    r> 3 pick - r over >r         ( subtract n2 from end limit)
    do over dup i + swap i matchc 0<    ( compare next strings)
      if                          ( if 2nd string < 1st string)
        i pad 4 pick cmove i 3 pick + i 4 pick cmove 
        pad 3 pick dup i + swap cmove   ( exchange the strings)
        drop 0                    ( set excnage flag = 0)
      endif 
    over +loop                    ( loop increment = n2)
  until r> r> drop drop drop      ( sort until flag = 1)
;
