############################################################################
#
#	File:     evallist.icn
#
#	Subject:  Procedure to produce a list generated by expression
#
#	Author:   Ralph E. Griswold
#
#	Date:     July 15, 1995
#
############################################################################
#
#   This file is in the public domain.
#
############################################################################
#
#  This procedure takes an expression, produces a program encapsulating it,
#  and puts the results written by the program in a list.
#
#  It is called as evallist(expr, n, ucode, ...) where expr is an expression
#  (normally a generator), n is the maximum size of the list, and the
#  trailing arguments are ucode files to link with the expression.  
#
############################################################################
#
#  Requires:  system(), /tmp, pipes
#
############################################################################
#
#  Links:  exprfile
#
############################################################################

link exprfile

procedure evallist(expr, n, ucode[])	#: list of values generated by Icon expression
   local input, result

   push(ucode, expr)			# put expression first

   input := exprfile ! ucode | fail

   result := []
   every put(result, !input) \ n

   exprfile()				# clean up

   return result

end
