4.3BSD/usr/contrib/icon/book/f/enrepl.icn

procedure enrepl(s)
   local c, s1
   s1 := ""
   s ? while c := move(1) do {
      i := 1 + (*tab(many(c)) | 0)
      if i > 4 then s1 ||:= c || "(" || i || ")"
      else s1 ||:= repl(c,i)
      }
   return s1
end

procedure derepl(s)
   local c, s1
   s1 := ""
   s ? {
      while s1 ||:= tab(upto('(') - 1) do {
         c := move(1)
         move(1)
         s1 ||:= repl(c,tab(upto(')')))
         move(1)
         }
      s1 ||:= tab(0)
      }
  return s1
end