	
	_S_p_r_e_a_d_s_h_e_e_t _I_n_t_e_r_f_a_c_e _f_o_r _E_n_t_e_r_i_n_g _D_a_t_a
	
	     data.entry(..., Modes=NULL, Names=NULL)
	     dataentry(data, modes)
	     de(..., Modes=NULL, Names=NULL)
	
	_D_e_s_c_r_i_p_t_i_o_n:
	
	     This is a fairly big suite of programs designed to make
	     the interface to the spreadsheet painless for users.
	     data.entry has side effects, any changes made in the
	     spreadsheet are reflected in the variables.  The func-
	     tions de, de.ncols, de.setup and de.restore are
	     designed to help achieve these side effects.  If the
	     user passes in a matrix, X say, then the matrix is bro-
	     ken into columns before dataentry is called. Then on
	     return the columns are collected and glued back
	     together and the result assigned to the variable X.  If
	     you don't want this behaviour use dataentry directly.
	
	     The primitive function is dataentry. It takes a list of
	     vectors of possibly different lengths and modes (the
	     second argument) and opens a spreadsheet with these
	     variables being the columns.  The columns of the
	     dataentry window are returned as vectors in a list when
	     the spreadsheet is closed.
	
	     de.ncols counts the number of columns which are sup-
	     plied as arguments to data.entry. It attempts to count
	     columns in lists, matrices and vectors.  de.setup sets
	     things up so that on return the columns can be
	     regrouped and reassigned to the correct name. This is
	     handled by de.restore.
	
	_S_e_e _A_l_s_o:
	
	     vi, ed.
	
	_E_x_a_m_p_l_e_s:
	
	     # call data entry with variables x and y
	     data.entry(x,y)
	
