

   SSpprreeaaddsshheeeett IInntteerrffaaccee ffoorr EEnntteerriinngg DDaattaa

        data.entry(..., Modes=NULL, Names=NULL)
        dataentry(data, modes)
        de(..., Modes=NULL, Names=NULL)

   DDeessccrriippttiioon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
        broken 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Seeee AAllssoo::

        `vi', `ed'.

   EExxaammpplleess::

        # call data entry with variables x and y
        data.entry(x,y)

