\ 4tH library - TRANSLATE - Copyright 2004 J.L. Bezemer \ You can redistribute this file and/or modify it under \ the terms of the GNU General Public License [UNDEFINED] TRANSLATE [IF] \ Translates one group of characters, identified by a2/n2 \ in string a1/n1 into another set, identified by a3/n2. \ Always returns a1/n1. If the translation strings are not \ of equal length or have zero length, no translation is done. : translate ( a1 n1 a2 n2 a3 n2 -- a1 n1) dup 0> >r rot over = r> and ( a1 n1 a2 a3 n2 f) if ( a1 n1 a2 a3 n2) rot swap 2>r >r 2dup r> -rot ( a1 n1 a3 a1 n1) r> -rot r> -rot chars bounds ( a1 n1 a3 a2 n2 a4 a5) ?do ( a1 n1 a3 a2 n2) dup >r -rot r> 0 ( a1 n1 n2 a3 a2 n2 0) do ( a1 n1 n2 a3 a2) dup i chars + c@ j c@ = ( a1 n1 n2 a3 a2 f) if over i chars + c@ j c! leave then loop rot ( a1 n1 a3 a2 n2) loop ( a1 n1 a3 a2 n2) then 2drop drop ( a1 n1) ; [THEN]