4.3BSD/usr/contrib/icon/src/cmd/edscript.icn

#	EDSCRIPT(1)
#
#	Produce script for ed(1)
#
#	Ralph E. Griswold
#
#	Last modified 4/27/83
#

procedure main()
   local line, image, object, char
   while line := read() do {
      line ? {
         char := move(1) | {error(line); next}
         image := tab(find(char)) | {error(line); next}
         move(1)
         object := tab(find(char)) | {error(line); next}
         }
      write("g/",xform(image),"/s//",xform(object),"/g")
   }
   write("w\nq")
end

#  process characters that have meaning to ed(1).
#
procedure insert()
   static special
   initial special := '\\/^&*[.$'
   suspend {
      tab(upto(special)) ||
      "\\" ||
      move(1) ||
      (insert() | tab(0))
      }
end

procedure error(line)
   write(&errout,"*** erroneous input: ",line)
end

#  transform line
#
procedure xform(line)
   line ?:= insert()
   return line
end