File of old news items formerly part of topic 'news' in MacAnova help file.
(C) 1994, 1995, 1996, 1997 by Gary W. Oehlert and Christopher Bingham
Created 961029 CB
Updated 990824 CB
Updated 000917 CB
Items from 920901 through 981231
!!!! Starting marker for message of the day
    This help file contains old 'news' items no longer in file MacAnova.hlp
!!!! Ending marker for message of the day

???? Starting marker for list of up to 32 comma/newline separated keys
General
???? Ending marker for keys

Note: There are no topics with names longer than 15 characters so as to
allow 5 column output from 'help()' with width >= 80.

Each topic starts with '====topicName' in column 1, followed by an
unlimited number of lines of information.  It is helpful, but not required,
that topics be in alphabetical order.  Topic names should, if possible, be
no longer than 12 characters, since otherwise they must be quoted in a
help() command.  The convention is used that when referring to functions,
but not macros, by name, '()' is appended.

Key separated by commas can follow the topic name if separated from it by
'#'.

The file should be terminated by a line starting '_E_O_F_'

====info#general
%%%%
help(news) or help(news:yymmdd1) or help(news:vector(yymmdd1,yymmdd2)),
  where yymmdd1 and yymmdd2 are integers like 960803 (Aug 3, 1996).
Dates in this file are between 920901 and 971222
%%%%
This help file contains old 'news' items no longer in file MacAnova.hlp.
Type 'help(news:yymmdd)', where yymmdd is a 6 digit number to see all
help items dated on or after day dd of month mm of year 19yy.
Dates in this file are between 920901 and 971226

It also contains a summary of improvements of MacAnova3.3x and later over
MacAnova 2.4x.  See macanova3.

====macanova3#general,syntax
%%%%
Type help(macanova3) for a summary of improvements of MacAnova3.3x over
MacAnova2.4x.
%%%%
MacAnova 3.3x is a major revision by Christopher Bingham of MacAnova
2.4x developed by Gary Oehlert.  There are many new commands and
operators and modifications of existing ones.  Generally, what used to
work with MacAnova 2.4x works now, only better.

From the user's point of view, the principal actual incompatibilities
are (a) the use of macros is different -- arguments are not quoted
unless they are actually quoted strings, (b) command read() has been
replaced by vecread(), and (c) changed usage of macro readcols.  View
help on these topics to see current usage.

Type 'help(macintosh)' for a summary of features specific to the
Macintosh version, for which the user interface has been greatly
enhanced, including the availability of user editable menu commands and
multiple command windows.

Type 'help(unix)' for a summary of features specific to the Unix
version.

Type 'help(dos_windows)' for a summary of features specific to the
versions which run under MSDOS.  One version runs uses extended memory
and has no restrictions on the size of variables that can be used other
than the amount of memory and disk space available.

Type 'help(news)' for information on recent changes.

You can carry out several types of GLM (generalized linear or linear
model) analyses such as multiple linear regression, univariate and
multivariate analysis of variance, logistic regression, and log linear
model fitting.  Type 'help(glm)' for a list of all model fitting
commands and a general discussion of their usage.

              Differences from MacAnova2.4x
New operations and features:
 Syntax elements: break, breakall, else, elseif, for, while.
 Input/output related operations: error(), fprint(), fwrite(),
   macroread(), macrowrite(), matprint(), matread(), matwrite(),
   putascii(), vecread(), write()
 Plotting operations: lineplot(), showplot(), addpoints(), addlines(),
   addchars()
 PostScript plotting output using keyword 'file' on plotting commands
 Matrix algebra commands: cholesky(), qr(), releigen(), releigenvals(),
   solve(), svd(), swp()
 Matrix manipulation and information commands: diag(), dim(), dmat(),
   hconcat(), length(), match(), ndims(), padto(), reverse(),
   trilower(), triunpack(), triupper(), unique(), vconcat()
 Probability cumulatives and inverses: cumbeta(), invbeta()
 Non-central F and beta cumulative distributions
 Transformations: atanh(), cosh(), hypot(), round(), sinh(), tan(),
   tanh()
 Statistical and computational commands: cluster(), grade(), max(),
   min(), prod(), rotation(), sum()
 GLM related commands: modelinfo(), modelvars(), varnames(),
   xvariables()
 Complex arithmetic related operations: cconj(), htoc(), cmplx(),
   cpolar(), crect(), cprdc(), cprdcj(), ctoh(), hpolar(), hrect(),
   hprdh(), hprdhj(), unwind()
 Function polyroot() to find roots of polynomials
 Time series related operations: autoreg(), movavg(), convolve(), cft(),
   hft(), pacf(), rft(), yulewalker()
 Miscellaneous commands: changestr(), getoptions(), listbrief(),
   paste(), setoptions(), shell(), strconcat()

 New arithmetic operation '%%'.  See arithmetic.

 New arithmetic assignment operations '<-+', '<--', '<-*', '<-/',
   '<-%%'.  See arithmetic.

 New operations '%&', '%|', '%^, and '%!' for manipulation of bits of
 integers n, 0 <= n < 2^32.  See bit_ops.

 New pre-defined macros: edit, makecols, resvsrankits, resvsyhat,
   resvsindex, tek, vt, tekx, vtx, and others

 Summary of new syntax elements:
   for(Var,Vector){statement1;statement2;...} Allows looping.
   for(Var,I1,I2[,I3]){statement1;statement2;...} alternate form
   while(Logical){statement1;statement2;...} Allows looping.
   if(Logical){...}else{...}
   if(Logical){...}elseif(Logical){...}else{...}
   break, break n, breakall Escape from 'while' and 'for' loops.
   keyword:value provides the value of a named keyword to a function.
     See keywords
   <<objectName>> or <<literal>>  reference by name.  See syntax.
   A line can be continued by typing '\' as the last character.
   Names can contain '_' (e.g., arm_length).  See syntax.
   Names starting with '@' are temporary and disappear at the next
     prompt.
   structName[vec] extracts 1 or more structure components by position.
     See structure.
   Many functions and operators work directly with structures, provided
     components are compatible.

Other Differences
 Arguments to macros should not be quoted unless they are strings.
 There are several new functions and other capabilities to allow
 more flexible macros.  '$0' now expands as the entire argument list
 rather than as the name of the macro.  There are several additional
 constructs (e.g., $N, the number of arguments) that are expanded in
 macros.  Macros may be recursive.  You can generate unique temporary
 names using postfix $$.  See macros.

 x' may be used instead of t(x) to compute the transpose of a matrix.

 '**' may be used in place of '^' for exponentiation.

 There are new matrix multiplication operators %c% and %C%.  x %c% y and
 x %C% y are equivalent to x' %*% y and x %*% y', respectively.  See
 matrices.

 ==, ||, and && are recognized as equivalent to =, &, and | in LOGICAL
 expressions.  Logical relations <= and >= are not recognized if there
 are spaces between < or > and =.

 Binary arithmetic operations (+, -, *, /, ^, **, or %%) now work with
 LOGICAL variables and expressions with True and False translated to 1
 and 0, respectively.

 Binary operations (+, -, *, /, ^, **, %%, &&, ||, %&, %|, %^, %!)
 make sense in certain cases when neither operand is scalar and the
 dimensions do not match exactly.  See arithmetic.

 Binary operations (+, -, *, /, ^, **, %%, &&, ||, %&, %|, %^, %!) may
 be used when one or both operands is a structure.  If both are
 structures, corresponding components must be compatible.  If only one
 is a structure, all its components must be compatible with the
 non-structure.  See arithmetic.

 Negative subscripts may be used to exclude rows and/or columns.  See
 subscripts.

 Arrays may be used as the subscript of a vector, matrix, or array.

 All the plotting commands recognize keywords title, xlab, ylab, xmin,
 xmax, ymin, ymax, xaxis, yaxis, and lines.  The y variable can have
 several columns.  In addition, they create as a side effect variable
 LASTPLOT of new type GRAPH, which encapsulates the information plotted.
 This can be replotted with changed labels and extremes, or with added
 data.

 All pvalue and inverse cumulative operations accept arrays as arguments
 and/or parameters, returning a vector, matrix, or array if any are not
 scalar.  This is useful for computing tables, or generating
 pseudo-random numbers using the inverse cumulative method.  You can use
 an optional non-centrality parameter on cumbeta() and cumF().  You can
 use non-integral degrees of freedom on cumstu() and invstu().

 On tval() and t2val(), adding the argument df:T yields a structure with
 components t and df, and on t2val() and t2int(), a final argument
 pooled:F uses the unpooled (Welch's) t which does not assume equal
 variances.

 If you do not specify a model in a GLM (generalized linear or linear
 model) command such as regress(), anova(), or poisson(), the model in
 CHARACTER variable STRMODEL (usually the last model used by any such
 command) is used.  All such commands also create as a side effect a
 variable DEPVNAME containing the name of the dependent variable in the
 model in addition to TERMNAMES.  You can retrieve the names of all the
 variables in STRMODEL using function varnames() and can retrieve basis
 vectors, and other quantities using function modelinfo().

 You can specify an 'offset' on commands poisson() and logistic()
 similarly to GLIM.  This allows for testing hypotheses concerning
 specific non-zero values of parameters.  On all GLM commands except
 screen() you can use keyword phrase 'print:F' to suppress most output
 and 'silent:T' to suppress all output, relying on side effect variables
 and functions such as secoefs() to obtain the results of the analyses.
 You can use keyword phrase 'coefs:F' to suppress computation of
 coefficients on most GLM commands.

 Models can contain up to 95 variables, including up to 31 factors.

 Operations power() and power2() accept vectors as arguments, allowing
 easy computation of power functions as functions of sample size,
 non-centrality parameter or alpha.  You can specify 'design:rbd' on
 power() and samplesize() to compute power or number of replications for
 randomized block designs.

 Operations matread(), matwrite(), macroread(), and macrowrite() allow
 reading and writing named REAL or LOGICAL arrays and macros from and to
 a file.

 You can use operation print() to print one or more arbitrary variables.
 Operation write() does the same but uses more significant digits.
 Keywords 'nsig' and 'format' on print() and write() provide more
 control over the output.  These can be useful in macros.  print() and
 write() have been supplemented by fprint() and fwrite() which write to
 a file.

 Commands setoptions() and getoptions() allow you to set various
 options, including the formats or number of significant digits to be
 used in printing.  You can set the default units used by trigonometric
 transformations cos(), sin(), etc. from among the choices radians,
 degrees, and cycles.

 Command listbrief() gives a short listing of all named objects in the
 workspace, omitting the information on type and dimension that list()
does.

 MacAnova keeps count of errors.  More than one error in batch mode
 terminates the run.  The limit can be reset by setoptions().

 For most operations, a n by 1 matrix is equivalent to a vector as
 produced by vector().  These includes the plotting commands, making it
 easy to plot one column of a matrix against another.

 Commands such as split() that formerly required a factor as argument
 now require only that the argument be a vector with positive integer
 entries.  split() has be enhanced to allow you to create a structure
 each of whose components is a row or column of an input matrix.

 Operation run() may be used with one argument with run(n) equivalent to
 run(1,n).

 Operation t() has been generalized to operate on arrays with more than
 2 dimensions.  Also x' is synonymous with t(x).

 Options for screen() may be set by keywords mbest, forced, method,
 s2, and penalty.  Output format for screen has been enhanced, always
 giving values for Cp, R^2 and adjusted R^2 for all three methods.

 You can now specify which variables should be saved by save() and
 asciisave() by including a list of variable names in the argument list.
 These commands now save the options you can set by setoptions(),
 including the current values of the random number generator seeds.

 Keyword phrase 'delete:F' on restore(), allows you to keep existing
 variables that are not in the file to be restored.

 When it is launched, MacAnova looks for a startup file (MacAnova.ini
 on a Macintosh, .macanova.ini on Unix, MACANOVA.INI on DOS) to be
 executed as a batch file.  This allows you to predefine standard macros
 and set preferred options by including commands in the file.

 Command releigen() now computes relative eigenvectors as well as
 relative eigenvalues.  A new operation, releigenvals(), allows
 computation of relative eigenvalues alone.  All eigen operations now
 return the results in descending order of the eigenvalues rather than
 ascending.

 Command batch() now operates somewhat differently, providing a record
 of the commands read from the file.  This can be suppressed by keyword
 phrase echo:F.

 Commands rft(), hft(), and cft() compute fast Fourier transforms which
 may be manipulated and combined with hprdh(), hprdhj(), cprdc(),
 cprdcj(), ctoh(), htoc(), hreal(), creal(), himag(), cimag(), hpolar(),
 hrect(), cpolar(), crect(), and convolve().  Together with the expanded
 macro facility these allow quite powerful frequency analysis of time
 series.

 Commands movavg() and autoreg() may be used to generate artifical ARIMA
 model time series.

 Commands partacf() and yulewalker() allow you to compute partial
 autocorrelations and solve the Yule-Walker equations.

====news#general
%%%%
help(news) or help(news:yymmdd1) or help(news:vector(yymmdd1,yymmdd2)),
  where yymmdd1 and yymmdd2 are integers like 970803 or 19970803
  (Aug 3, 1997).
Dates in this file are between 920901 and 981231
%%%%
981231 autoreg() and movavg() accept NULL as first argument 1
(coefficients), in which case argument 2 is returned.

981228 New keyword phrase 'keepswept:T' on swp(), returns swept matrix
and columns swept in a structure.

981228 New keyword phrase 'singok:T' on solve() directs solve() to
return NULL when argument 1 is singular.

New keyword phrase 'quiet:T' on det() and swp() suppresses printing a
warning message when the argument 1 is singular.

981219 A new integer value option 'plotdelay' and new command line flag
'-plotdelay n' on Unix Motif version.  See topics 'options' and
'launching'.

981214 All trignometric functions (sin(), cos(), tan(), asin(), acos(),
and atan()) recognize keyword phrase 'radians:T', 'degrees:T' or
'cycles:T' as an extra argument, overriding the value of option
'angles'.

981207 Minor change to boxplot() when fewer than 4 horizontal or 5
vertical boxplots are drawn.  They now have the same "thickness" as
boxplots with 4 or 5 boxes.

981120 New keyword phrase nofileok:T on vecread(), matread(),
macroread(), read(), and inforead() keeps failure to open a file from
being an error.

981118 By default, when MacAnova see what looks like a macro call to an
unknown macro, an attempt is made to read in the macro from one of the
files in pre-defined vector MACROFILES, and a warning message is
printed.

A new option 'findmacros' controls the automatic searching files for a
macro.  This allows you to suppress the search or do the search with no
warning message.  See topic 'options'.

981112 The restriction in svd(x [ keywords]]) that nrows(x) > ncols(x)
has been removed.

981111 In the Windows version, the Delete key should work correctly in
Windows 95/98 and the popup right button edit menu has been disabled to
avoid a problem.

In the Windows version, clicking Cancel when reading from the Console
dialog box no longer causes a crash.

981107 cprdc() and cprdcj() now should work correctly with arguments
with an odd number of columns.

qr(x) and qr(x,ronly:T) should work correctly when nrows(x) < ncols(x).

980903 New function getascii() is roughly the inverse of putascii(),
translating CHARACTER vectors to vectors of integers which are the ASCII
codes of the characters in the arguments.

980826 New syntax element 'next' is similar to 'break' except it skips
to end of loop instead of terminating it.

980825 In Macintosh version, the Help menu item is now on the Help Menu
(question mark icon near right end of menu bar) instead of Apple Menu.

980819 det(x,mantexp:T) returns determinant in base 10 mantissa and
exponent form.  For instance, if det(x) = 4.9832e+71, det(x,mantexp:T)
returns vector(4.9832, 71).

980817 Minor changes in propagation of labels. If a has labels, the
row and column labels of solve(a) are the column and row labels of a.
Also changes in labelling of output from coefs(), secoefs(), solve(a,b),
rsolve(a,b).

The matrices of left and right singular vectors computed by svd() have
labels whenever the svd() matrix argument does.

980812 When reading from a file, the stopping character for vecread()
can be any "non-ascii" character (code > 127 = octal 177) such as
"\377".

980811 REAL is now a permissible, but never necessary, keyword on a data
set header in a file to be read by matread().

980806 Change in getlabels().  If the labels for any dimension are all
"", all "@" or all the same and of the form "@something", then only the
scalar "", "@" or "@something" is returned.  To get the previous
behavior (a vector of the form rep("",m), rep("@",m) or
rep("@something",m)), use getlabels(x, trim:F).

Minor change in the behavior of transformations with CHARACTER
arguments.  They do not transform elements that are "" or start with any
of '@', '(', '[', '{', '<', '/' or '\'.

980803 Functions that allow "wild card" matching (help(), list(),
listbrief(), match() and keyvalue()) now also recognize '?' as a
character that matches any single character.  For example, help("a????")
lists all topics with 5 letters starting with 'a'.

New function argvalue() for checking non-keyword macro argument in a
similar manner as keyvalue() checks keyword arguments.

980731 keyvalue() argument specifying the keyword name can contain the
"wild card" character '*' so that, for example, keywords 'pow', 'power',
and 'powers' all match "pow*".

980727 New functions setlabels(), attachnotes() and appendnotes() allow
attaching labels and notes to existing variables.  New pre-defined macro
hasnotes tests whether a variable has notes.

980724 All variables except NULL variables can now have attached
descriptive notes.  They may be set by keywords 'notes' on vector(),
matrix(), array(), macro() and all the plotting commands.  They may be
retrieved by new function getnotes().

matprint() and matwrite() now write labels and notes, and macrowrite()
writes notes, if any.  matread(), macroread() and read() read them
automatically.

Restoring a previous partial save in the new format does not delete
current variables unless you use delete:T on restore().

980721 Bumped version number to 4.07.

New format for save() and asciisave() files.  This allows saving of
information about user supplied ticks on GRAPH symbols (see graph_ticks)
and will make it easier to add new features without changing the
workspace file format.

New phrase keyword 'v406:T' on save() and asciisave().

980710 New keyword 'problimit' on logistic(), probit() and glmfit()
allows more control of iteration.  The default value of 1e-8 differs
from the value that had previously been "hard-wired."

980625 New help topics 'NULL', 'number', 'options' and 'glm_keys'.

980624 New keyword phrase 'history:F' on save() and asciisave()
suppresses saving a history of recent command lines in a form to be
restored by restore().  See topic 'options'.

New option 'savehistry' on getoptions() and saveoptions() sets default
value for 'history' on save() and asciisave().

980620 "nonnull" now a permissible property for keyvalue().

980618 Fixed bug in rpoi() for small lambda.

lineplot() with lines:F is now treated as plot().

980602 keyvalue() has been enhanced to make it easier to check that
keyword phrase arguments to a macro satisfy restrictions on shape, type
and value.

980529 Pattern matching involving the "wild card" character '*' in
help(), list(), listbrief() and match() has been enhanced.  Patterns
such as "ab*cd" and "*ab*cd*ef*" are now legal.

980521 New keyword phrase 'exact:F' as final argument to match() allows
matching of CHARACTER variables using "wild card" character '*'.

980518 Tweaking of code for Macintosh has considerably speeded up
non-interactive mode.

980512 list(size:T) also prints the total size of variables listed and
the total memory used by MacAnova for variables and other information.

New help topic 'memory'.

980510 Keyword 'bywords' on vecread() is a synonym for 'character.'

980507 Keyword phrase 'go:c' on vecread() directs that reading should
stop with the first line that does not start with character c.

Keyword phrase 'bychars:T' on vecread() is like 'bylines:T' except that
each element of the result is a single character.

980506 Keyword phrase 'silent:T' as last argument to delete() suppresses
warning messages.

980501 Function error() now adds "ERROR: " at start of message if it is
not already there.

980428 New command line flags -e and -eq.  See topic 'launching'.

980420 Minor modification of the prompts set by setoptions(default:T).

New keyword phrase index on unique() so that x[unique(x,index:T)] is the
same as unique(x).

980405 Motif and Windows versions now both based on WxWindows Version
1.68.  New make files and installation script for Unix and Motif
versions are available.

980401 New command line options -p prompt and -bp batchPrompt to set
prompts.

980330 New keyword 'prompt' on batch() allows you to override use of
batch file name for prompt.

980321 Changed the way fastanova() computes degrees of freedom in the
case of missing cells.  It is almost the same way as was done in
MacAnova 2.4x.  It still can be in error but the errors are different
from what they were.

980317 New function isarray().

980311 A subscripted factor is now still a factor.  Thus if a is a
factor, anova("{y[-1]} = {a[-1]}") will do an analysis of variance
omitting the first rows of both y and a.

980309 New function rbin() generates binomial pseudo-random variables.

980303 New optional statistics specified by keywords stddev, m2, m3, m4,
g1 and g2 computed by describe().

980223 Fixed bug in subscript assignment.  a[] <- b is not legal as long
as b is a scalar or length(b) = length(a).

980220 for(i,NULL){...} is now legal resulting in {...} being skipped.
A possible use is in for(xi, x[x>10]){print(paste(xi,"> 10"))}.

NULL can be an argument to sum(), prod(), max() and min() and is
ignored except that if all the arguments are NULL, the result is NULL.

980219 Minor modification in allowable subscript use: When extracting
from a vector, matrix or array or a structure, if any subscript is NULL
or a negative subscript that de-selects all levels, the result is NULL.
When assigning to a subscripted vector, matrix or array, it is not
changed if any subscript is NULL or selects no elements provided what is
assigned is NULL or a scalar.

980129 If keyword phrase 'nomodelok:T' is an argument to modelinfo(),
when there is no active GLM model, modelinfo() returns NULL instead of
printing an error message.

980126 Changes in the way the limited memory DOS version is linked have
made more memory available for the workspace so you can work with bigger
data sets.  It's still much less than the extended memory DOS version.
Unfortunately there been some penalty in speed.

971223 New general help topics 'design', 'time_series' and 'macanova'.

971222 It is now illegal to use batch() in a loop or to have any
executable statements following batch() on a line or in a compound
command.  Formerly a warning was printed, loops were terminated and
everything after batch() was ignored.

In specifying dates for help topic 'news', dates of the form yyyymmdd
(19970831, for example) are now recognized.  The code has also been
modified to work in the 21st century.

971211 tabs(NULL,a,b,...) or tabs(,a,b,...) is allowed and just does
cross tabulation.

971211 New functions gethistory() and sethistory() allow retrieving and
setting internal list of previous commands.

971125 Fixed a bug affecting GLM commands when model variables were
computed "on the fly" using the {...} construct.  It is now illegal for
there to be another GLM command inside the {...} construct.  See topic
'models'.

971119 Fixed bug in evaluate() that led to problems when it was used
recursively.

971118 changestr(str,name:value) is now legal.  There have also been
some changes in the assignment of names to the changed or new component
of the result.

971114 Model parser now gives error message on model with no terms such
as "y=x-1-x".

971113 modelvars() recognizes additional keyword phrases 'nfactors:T',
'nvariates:T', nx:T' and 'hasconst:T'.  With hasconst:T the result is
True or False depending on whether a constant term is in the model.
The others result in the return of the number of factors, variates, or
total number of variables on the right hand side of the model.

971112 Bumped version number to 4.06.

971111 New pre-defined macro regcoefs returns matrix with row and column
labels of regression coefficients, their standard errors, t-statistics
and optionally P-values.

971109 New function rpoi(n,lambda) generates a pseudo-random sample from
a Poisson distribution with mean lambda, where lambda is a scalar >= 0
or a non-negative vector of length n.

971104 Fixed a bug in screen() that occurred in some Unix versions
compiled with gcc.  Occasionally models were printed incorrectly or were
not optimal.  It did not effect the Macintosh, DOS or Windows versions.

971101 macrowrite() now writes "new style" headers, that is, with no
count of lines and with a final line of the formmacroname%.  To get
the previous behavior, use keyword phrase oldstyle:T.

971030 On read(), macroread(), matread() and inforead(), header lines in
the file that start with '))' are not echoed to output unless you use
keyword phrase quiet:F.

On cumstudrng(), invstudrng() and noncentral invchi(), convergence may
be controlled by keyword phrase epsilon:smallno.  Previously epsilon was
an optional argument treated as a distribution parameter.

971017 In Motif version, Ctrl+/ and Ctrl+\ are equivalent to Copy to End
and Execute, respectively, on Edit menu.

971013 Minor bug fixed in model parser.

971012 New functions cumdunnett() and invdunnett() compute cumulative
distribution function and its inverse for Dunnett's t = max{t21, t31, ...,
tk1}, where tij is the two sample t-statistic using a pooled standard error
for comparing the mean of group i with that of group k.  This is relevant
to multiple comparison problems involving the comparison of several
treatments with a control.

970919 New keyboard short cuts added to Macintosh version for improved
compatibility with Windows and Motif versions:  Command+F1, ...,
Command+F8 to switch to Graph Windows 1 through 8; Shift Return and
Command+Return select Execute and Copy and Execute on the Edit menu.

970915 New keyboard short cuts added to Windows and Motif versions.
These include Ctrl+F1, ..., Ctrl+F8 to switch to Graph Windows 1 through
8; Ctrl+Key Pad Up and Down arrows to select Up History and Down History
on the Edit menu; and Ctrl+Enter to select Execute on the Edit Menu.
In Motif Ctrl+1, ..., Ctrl+8 also switch to a graph window.

970823 New shortcuts in models for specifying polynomial and periodic
regression.  Examples are
 "y=P3(x)" (same as "y=({x}+{(x)^2}+{(x)^3})")
 "y=C2(x)" (same as "y=({cos(x)}+{sin(x)}+{cos(2*(x))}+{sin(2*(x))}))

970820 You can now include expressions in specifying GLMs.  For example,
regress("{sqrt(y)} = hours + {cos(hours/24)} + {sin(hours/24)}") is
legal.

970813 Added new standard call back function mvSeterror for user
functions making call backs.  See topic 'callback_fun'.

970808 New help file Userfun.hlp giving information on user functions.
Type help(file:"Userfun.hlp","*") for list of topics.

970805 Windows version can work with long file names under Windows 95 and
Windows NT.

970730 Fixed bugs in rep(x,m) when x is a CHARACTER variable.

Changed default truncation point for samplesize() from 128 to 256 and
added keyword maxn to allow you set a different truncation point.

970729 Arguments to floor() and ceiling() are now checked for size.  On
most computers, the minimum and maximum permissible arguments are
-4503599627370495 (-2^52+1) and 4503599627370495 (2^52-1).

970725 Bumped version number to 4.05

970724 New functions loadUser() and User() allow dynamic linking to and
execution of user functions, that is separately compiled external
functions.  See also topics 'user_fun', 'callback_fun' and 'arginfo_fun'
in help file Userfun.hlp (type help(file:"Userfun.hlp",user_fun), say).

New variable type LONG introduced whose values are integers between
-2147483647 and +2147483647 = 2^31 - 1.  LONG variables may be created
only by new function asLong().  When assigned or printed, the are
transformed to ordinary REAL variables.  At present, their only use is
as arguments to User().

970621 The scope of <<String>> has been enlarged to encompass
expressions and even a sequence of commands.  For example, the value of
<<"sqrt(2*PI)">> is sqrt(2*PI).  Essentially, unless String is a
variable name, <<String>> is the same as evaluate(String).

970620 New function evaluate().  If cmd is a quoted string or CHARACTER
scalar consisting of one or more MacAnova commands, evaluate(cmd)
executes the commands and returns as value the value of the last command
executed.  Unlike a macro, there is no expansion of special symbols.

970619 Macros can now optionally be expanded out-of-line instead of
in-line.  It primarily makes a difference in a loop.  An in-line macro
is expanded the first time it is encountered;  an out-of line macro
is expanded every time it is encountered.  See macro(), macroread(),
macros, setoptions(), options.

New option 'inline' determines the default mode of expansion of a macro
that has not been marked as being an out-of-line macro.

970602 Fixed problem with vecread() that made reading very large files
unacceptably slow.

970527 New macros have been added to macro file design.mac:
Macro  ems computes the expected mean squares for the terms in an ANOVA.
Macro quadmax finds the x that maximizes x'Ax + b'x subject to linear
equality and inequality constraints.

Type usage(file:"design.hlp",ems,quadmax) for a brief summary of how ems
and quadmax are used.  Type usage(file:"design.hlp",ems,quadmax) for
more complete information.

The value of sin(x), cos(x) or tan(x) with |x| >= 5,000,000*PI radians
(= 2,500,000 cycles = 900,000,000 degrees) is set to MISSING and a
warning message is printed.

970520 If the first argument to plot(), chplot() or lineplot() is a
GRAPH variable, keyword phrase add:T is assumed.

970519 'exit' a new synonym for 'stop', 'end' and 'bye'.

970513 A structure first argument to plot(), chplot(), lineplot(),
addpoints(), addlines(), and addchars() can have more than two
components.  All but the first two (interpreted as x and y) are ignored.

970508 'q2' can be used as a synonym for 'median' on describe().  The
component name of the output will still be 'median'.

970505 Delete key in Windows and Motif versions deletes character to
right of insertion point.

970425 Some minor bugs in handling of Delete and Backspace corrected in
Windows and Macintosh versions.

On Macintosh, Del key (in cluster above arrow keys) now deletes forward
rather than backward, in conformance to its behavior in many other
Macintosh applications.

970415 macro() now replaces non-standard ascii characters in quotes by
their escaped octal representation.  Thus macro("c <- \"\001\";;") is
equivalent to macro("c <- \"\\001\";;").

970408 New extended memory DOS version can make high resolution plots
under Windows and Windows 95.

All versions can now read data files, macro files and batch files in
MSDOS format (end of line is CR+LF), Macintosh (end of line is CR) and
Unix (end of line is LF), where CR and LF are the Ascii Return and
Linefeed codes.  restore() should correctly restore from a file created
by asciisave() in any of these formats.

970324 Minor change in syntax: '()' is now a legal expression with value
NULL except after function or macro names when it represents an empty
argument list.  This is primarily so that the error message that will
probably be generated is more intelligible.

New function read() combines matread() and macroread().  That is,
read(fileName,setOrMacroName) reads either a data set or a macro without
warning message.  It recognizes all the same keywords as matread().

970315 Version bumped to 4.04.

970313 Two new options: labelstyle:"[", for example, will the style for
index labeling of variables without labels to use '[' and ']' instead of
'(' and ')' when printed.  labelabove:T makes the default to print the
indices for the last coordinate in a line above a non-CHARACTER variable
instead of at the left.

970312 Some changes in default labelling.  A scalar label of the form
"@anything" is expanded to rep("@anything", n), which is interpreted
specially when the label is printed.  Also "" expands to rep("",n) which
is ignored when labels are printed.  See topic 'labels'.

970307 Keyword phrase vertical:T on boxplot() draws boxes and whiskers
vertically rather than horizontally.  New pre-defined macro vboxplot,
used just like boxplot(), makes use of this to draw vertically oriented
boxplots.

970303 matprint() and matwrite() now can write structures and NULL
variables.  They accept GRAPH variables but write them as NULL
variables.

matread() now can read structures and NULL variables.  See topic
'data_files' for information on the format of files.

A slightly different alternate format for macros on files to be read by
macroread() does not require the number of lines in the macro to be
specified in the header.  See topic 'macro_files'.

An isolated '*' in a file is read as MISSING by vecread().

Some of the information in help topic 'files' is now in new
topics 'data_files' and 'macro_files'.

970224 On non-windowed versions with command line editing, you can now
edit lines read from CONSOLE.

970221 On windowed versions (Macintosh, Windows, Motif), after
help(topic, scrollback:T) the command window automatically scrolls back
to the start of the help output.

New option 'scrollback' on windowed versions. After
setoptions(scrollback:T), when so much output is generated by a command
line that the start of the output scrolls out of sight, the output
window is automatically scrolled back so that the start is visible.

970220 Fixed bug that allowed round(x,-n) to have values that were not
exactly integers.

New keyword phrase leftendin:T on bin(), counts values on lower boundary
of class as being in the class instead of the class below.

970210 Keyword phrase 'file:fileName' now recognized on vecread(),
matread() and inforead() as an alternative way to specify the file to be
read.

970207 Pre-defined macro readcols enhanced to recognize all keyword
recognized by vecread(), including 'string', 'stop', 'skip', 'quiet' and
'echo', and 'file'.

970206 New keyword phrase silent:T on structure() and strconcat()
suppresses warning messages; other minor change to structure() and
strconcat().

970205 New option 'maxwhile' allows change of maximum number of
repetions of while loop.  Also bugs in error checking by setoptions()
fixed.

970203 Command lines starting '!' are now treated specially on all
versions.  If shell() is implemented, the remainder of the line is
passed to the operating system to execute.  On other versions
(Macintosh) an error message is printed.

970201 shell() is implemented in Motif version.

shell(command,keep:T) returns a CHARACTER vector with 1 element for
every line of output produced by command, if any.  shell(command,
interact:T) runs command in interactive mode; required if user is to
interact with any programs invoked by command.  When permitted a line of
the form '!command for shell ...' is equivalent to shell("command for
shell ...", interact:T).

970127 The clipboard is now "connected" with special variable CLIPBOARD
in the Motif version.  In addition a new special variable SELECTION is
available in the Motif version.  This is "connected" to the X-Windows
selection buffer which serves a similar purpose as the clipboard, but is
somewhat trickier to use.  See topic 'CLIPBOARD'.

970120 In the Windows version, the clipboard is now "connected" with
variable CLIPBOARD.  x <- CLIPBOARD creates a CHARACTER variable
containing any text on the clipbord and CLIPBOARD <- x puts on the
Clipboard a character representation of x, which must be REAL, LOGICAL
or CHARACTER.  See topic 'CLIPBOARD'.

970117 In windowed versions (Macintosh, Windows and Motif) it is now
possible to retrieve previously typed commands which are automatically
saved in an internal "history" list.  Menu items History Up and History
Down on the Edit menu allow you to move up or down the list, inserting a
previous command at the prompt.  These items are selected by keys F7 and
F8, respectively.  On the Macintosh you can also use Option+up-arrow and
Option+down-arrow.  Option 'history' controls the number of commands
saved.

970109 Option 'height' has replaced 'lines' in setoptions() and
getoptions().  For backward compatibility, 'lines' is still recognized
as a synonym for 'height'.

New plotting keywords height and width allows control of the size
of 'dumb' plots.

New keyword width on print(), write(), matprint(), matwrite(), and
error() and height on print(), write() and error() temporarily override
values of options 'height' and 'width'

961226 In Macintosh version, double clicking a parenthesis or bracket
('(', ')', '[', ']', '{', or '}') selects all text between the selected
parenthesis or bracket and its matching twin.

Bumped version to 4.03.

961220 New function kmeans() does k-means clustering.

961120 New keywords nrows, ncols and ndims on list() and listbrief()
allow you to restrict objects listed to those with specified dimensions
and/or number of dimensions.

961114 Keyword 'n' is synonym for 'count' on tabs().  Component of the
result is still named 'count'.

961104 Associativity of exponentiation operator (^) changed from left to
right.  Now a^b^c will be interpreted as a^(b^c) instead of as (a^b)^c.

961101 Minor change in assignment to subscripts.  If an element on the
left side has more than 1 value assigned to it (a[vector(1,1)] <-
b[run(2)]), the value assigned is the last from the r.h.s.  (a[1] <-
b[2]).  This was the case for REAL and LOGICAL variables and now is true
for CHARACTER variables.

961023 Minor change and bug fix in paste(x,multiline:T,...).  LOGICAL
values are printed as T and F and the line separating character, if any,
is not appended to the last line.

961015 cumchi(x,df,lam) computes cdf for non-central chi-squared.
cumstu(x,df,delta) computes cdf for non-central t distribution.

961014 Fixed bug in factor() with scratch LOGICAL argument.  Example:
factor(x < 5).

961009 In Unix and DOS/Windows versions, MacAnova processes
environmental variable MACANOVA before scanning command line.  See topic
customize.

961007 Fixed bug in Windows version that prevented normal use of help()
under Windows 95.

961004 Added -dpath dataPath and -mpath macroPath to command line
options to allow you to override default value for pre-defined variable
DATAPATHS.  See launching.

961003 Fixed deficiency in parser that disallowed expressions like
a'[1,3].  Previously (a')[1,3] was required.

960930 Column labels of the response are used to label manova() output
with fstats:T or byvar:T.

960927 Reorganization of help entries about plotting.  Some information
from topic graphs is now in new topics graph_files, graph_keys,
and graph_ticks.

960918 Fixed bug in cluster() that prevented use of keyword 'similar'.

960917 New function keyvalue() to make it easier to use keywords in
macros.

960913 Minor change in macro makefactor.  The factor levels in
makefactor(vec) are in the same order as the elements of vec, even for
CHARACTER vec.  makefactor(vec,F) assigns levels in the order unique
values in vec are encountered.

Keyword 'sscp' on manova() is now a synonym for 'sssp'.

960906 New keyword 'comments' on matprint(), matwrite(), and
macrowrite()

960904 Fixed bug that prevented usage cmplx(rx) as equivalent to
cmplx(rx,0*rx).

960903 Minor changes in regpred() and glmpred().  After iterative GLM
commands, estimate:F is allowed and sepred:F is assumed.

960829 Fixed bug in contrast after iterative GLM command that used
keyword phrase scale:sigma.

960827 On print(), write(), matprint() and matwrite() all keywords
except 'file' and 'new' can be used several times in the same way nsig
and format have been used.  Thus a single print() command can put
headers on one matrix, suppress them on another, etc.  In addition,
illegal values for nsig and format are now considered errors and
terminate the command.

960816 When specifying labels, CHARACTER scalars "(", "[", "{", "<",
"/", amd "\\" expand to a vector of labels whose first element is "(1)",
"[1]", "{1}", "<1>", "/1/" or "\\1\\", respectively.

<<"\"string without quotes\"">> is equivalent to "string without quotes"

960815 Fixed bug occasionally causing division by zero in robust().
Fixed bug in help() sometimes causing crash when using file:fileName.

960814 When starting up the Macintosh version, if you hold down the
Option or Q key, the About MacAnova message is bypassed. If you hold
down the Command key or B key, MacAnova starts up in non-interactive
("batch") mode.  These can be combined (Command+Option gives
non-interactive mode with no message).

On versions launched from the command line, you can use -batch, -data,
-help, -macro and -restore in place of -b, -d, -h, -m and -r,
respectively.

960726 Windows and Motif versions now allow up to 8 command/output
windows and 8 graph windows.

quit(F) is now allowed.  On versions with windows (Macintosh, Windows
and Motif), quit(F) means to quit unconditionally, without asking
whether windows should be saved.  For completeness, quit(T) is also
allowed and means the same as quit.  You can use 'end', 'bye' or 'stop'
in place of quit.

960723 Typing 'help()' now just gives a short message instead of a list
of all help topics.  Such a list is now obtained only by 'help("*")'.

Fixed bug in stemleaf().

960719 New File menu items Open Batch File and Spool Output on Macintosh
File menu.

New Edit menu item Execute or Copy and Execute on Macintosh, Windows and
Motif versions.

New Windows menu items Go To Prompt on Macintosh, Windows and Motif
versions.

960718 New Edit menu item Execute on Edit menu in Macintosh, Windows and
Motif versions.  F5 and F6 are equivalent to items Copy to End and
Execute.

960717 Windows and Motif versions are now available.  See topics Unix,
dos_windows, and wx.

960709 Fixed bug in model parsing which occasionally allowed duplicate
terms in the model.

New shortcut in expressing GLM models.  If M is a submodel, M^p, where p
is a positive integer is equivalent to M.(1+M). ... .(1+M), where there
are p factors.

960708 Fixed bug in modelinfo(weights:T) when used after iterative GLM
commands.

960705 New keyword phrases 'stats:T' and 'depth:F' on stemleaf().

960701 Fixed bug in matread() when reading vector with COLUMNS in
header.

Most references to cat() in help information have been changed to
vector().

960620 Symbols with names starting '_' or '@_' are "invisible" -- they
can be printed only by print() or write() but not by simply typing them.
Using an invisible symbol as the last expression in a macro keeps the
value from being printed when it is not assigned.

getseeds() (with no argument) returns an "invisible" value that can be
assigned but can be printed only by print() or write().
getseeds(quiet:T) returns an ordinary (visible) value.

960619 New keywords xticks, yticks, xticklen, and yticklen on plotting
commands provide some control over tick points on graphs.

960613 Improved memory management in plotting commands.  In particular,
showplot() will usually use less memory, sometimes much less, than
before.

960612 Bumped version to 4.02.

Variable and macro names (but not keyword names) may start with '_'.
However, such items are not normally listed by list() and listbrief().

Keyword phrase 'invis:T' on list() or listbrief() will list names
starting with '_' and '@'.

960605 New usage for bcprd(): bcprd(x1,x2,...,xk) yields the same result
as bcprd(hconcat(x1,x2,...,xk)).

960603 Changes in plotting.
  New drawn character "\10" produces smaller cross than does "\4" in
  chplot() and addchars().
  With dumb:T, characters "\1", "\2", "\3", "\4", "\5", "\6", "\7",
  "\10" plot as 'o', '+', '#', 'X', '%', '*', '.', 'x'.
  High resolution boxplot draws outlier characters instead of using 'o'
  and '*'.
  PostScript "prolog" is always written even without new:T.

960528 Plotting commands changes.
  Argument 'epsf:T' writes an encapsulated PostScript file (currently
  only on Macintosh).
  Argument 'screendump:fileName' writes PICT file on Macintosh after
  drawing graph in window.
  Keyword phrases file:fileName,ps:F on Macintosh cause a PICT file to
  be written to the file rather than a "dumb" plot.  Nothing is
  displayed in a window.
  On Macintosh File menu item Save Graph As allows you to write the
  graphics window currently being displayed as a PICT file.

960520 Macintosh changes:
  MacAnova will now continue running "in the background" when you switch
  to another application (only under System 7 or Multifinder on earlier
  systems).
  There are now 8 graphics windows plus two panel windows displaying
  graphs 1 - 4 and 5 - 8.
  Two new entries on the Options menu, GLM Options and Other Options,
  allow more options to be changed using this menu.

960509 Macintosh changes.
  About MacAnova and some other dialog boxes are centered on screen.
  Graph windows are staggered and the zoom box now works like on most
  Macintosh windows.
  Output windows start out only wide enough for 80 character lines
  rather than the full screen width, and their positions are slightly
  staggered left to right.

960507 Bumped version number to 4.01

960506 On all commands which read files, if MacAnova cannot open the
file as specified in the command, it searches for it in each of the
folders or directories in CHARACTER vector or scalar DATAPATHS
(initialized at startup to be the same as DATAPATH).

New pre-defined macro adddatapath adds one or more path names to
CHARACTER vector DATAPATHS.  This makes it easier to search several
directories or folders for files.

960502 In the Macintosh version, at startup, pre-defined variables HOME
and DATAPATH are initialized to the complete name of the folder where
MacAnova is located.  It is also used in initializing MACROFILES.  This
is the same behavior as has been standard in the DOS versions.

960428 Pre-defined macro getmacros has been changed.  It now searches
all the files listed in pre-defined CHARACTER vector MACROFILES.

New pre-defined macro addmacrofile adds one or more file names to
CHARACTER vector MACROFILES.  This makes it easier for you to retrieve
macros from your own files of macros using getmacros.

960426 Minor change in help().  help(file:fileName,key:keyword),
help(alt:T,key:keyword), and help(orig:T,key:keyword) now legal wher
keyword is a quoted string or CHARACTER scalar.

New keyword 'notfoundok' for matread(), macroread() and inforead().
'notfoundok:T' specifies that failure to find the sought for data set or
macro is not an error and NULL is returned.

960425 Fixed bug causing infinite loop in vecread() when last line not
terminated by newline.

960423 Fixed bug causing crash on str1 OP str2 where str1 and str2 are
structures with different numbers of components.

960419 Two new options:
  'restoredel' provides a default value for keyword 'delete' on
  restore().  setoptions(restoredel:F) means existing variables will not
  be deleted by restore() unless they are overwritten.
  'dumbplot' provides a default value for keyword 'dumb' on all plotting
  commands.  setoptions(dumbplot:T) means all plots will be crude
  character based plots unless 'dumb:F' is an argument to a plotting
  command.

Fixed bug in vecread() causing "infinite" loop when attempting to skip
non-numerical item starting with '-' or '+'.

960412 sort(), rank(), and grade() now work with CHARACTER variables and
structures of CHARACTER data.

960405 Bug fixes:
  save(filename, v335:T) and asciisave(filename, v335:T) should now work
   correctly, producing a file readable by version 3.35
  secoefs() again gives MISSING for standard errors with 0 error d.f.

960328 bcprd(x), swp(x,cols) and solve(x) all make use of labels of x,
if any.

960322 New pre-defined macro haslabels() allows you to test whether a
variable has labels.

960320 Transformations such as log() and sqrt() can have CHARACTER
arguments.  For example log("weight") returns "log(weight)".

960318 Keyword labels on matread() can set labels on data that is read
from a file.

array(x, labels:labs) can be used to create a scalar, vector or array
identical to x with specified coordinate labels.  See labels.

960313 CLIPBOARD <- a, where a is a macro, is now equivalent to
CLIPBOARD <- paste(a)

vecread() now interprets isolated periods "." as MISSING values.

New keyword phrase bylines:T on vecread() allows reading of each line of
a file as an element of a CHARACTER vector.

960310 Coordinate labels are now available.  See topic labels.
New function getlabels() allows you to retrieve labels from a variable.

960310 Version bumped to 4.00

960307 New function gettime() allows timing of operations.

960305 Enhancements to vecread().  These include slightly different
handling of commas (single commas are ignored and do not trigger a
warning message) and new keyword phrases (badvalue:value, silent:T).
See vecread() for details.

960226 New function rsolve(a, b) computes b %*% solve(a).

New matrix operations %\% and %/% have been added.  a %\% b is
equivalent to solve(a,b)) and b %/% a equivalent to rsolve(a, b).

960221 MacAnova is now available for the Power Macintosh.

Typing help(news) now limits the news items printed to the most recent
three months.  To see all items, type help(news:0).

960207 vecread(fileName,character:T) now reads CHARACTER data into a
CHARACTER vector.

960203 matread() can now read CHARACTER data sets and matprint() and
matwrite() can write them.  New keywords on matprint() and matwrite().

960124 New keyword justify on paste().

960117 New functions cumstudrng() and invstudrng() compute the
cumulative distribution of the studentized range and its inverse.

960111 New keyword phrase parameters:T on modelinfo() retrieves sample
size vector after logistic() and probit().

960105 Fixed obscure bug that allowed non-trivial multiple subscripts on
a vector.

951228 Minor change in contrast() when there is aliasing.  If a column
in the X-matrix has been pivoted out, it is assumed to have coefficient
0.

951227 Macros yhat, resid, resvsindex, resvsrankits and resvsyat now
work correctly after weighted analyses.  Except for yhat, they should
also give meaninful results after non-linear GLM commands such as
poisson() and logistic().

Function outer() now accepts more than 2 arguments.

951220 New function xrows() computes rows of a design matrix for
specified variate and factor levels.

951218 New function glmpred() generalizes regpred() to models with
factors.  New function glmtable() generalizes predtable().

951213 On contrast(), if the term for which contrast are computed is a
single factor it can be specified by the factor itself instead of its
name.  Similarly a by variable may be specified by the factor instead of
the name.

On coefs() and secoefs(), you can specify a term consisting of a single
factor or variate by the factor or variate itself instead of its name or
term number.

951212 New function usage() works like help() but just gives usage, not
full description.

951211 New function macrousage() lists comments in macro.

951130 Fixed parser bug that prevented subscripting a macro value in a
loop.

951128 predtable() can now compute fitted marginal tables.

951124 When using subscripts to extract elements of a vector, matrix, or
array, or components of a structure, a LOGICAL subscript all of whose
elements is False is now legal.  The result is a NULL variable.  See
syntax.  It is still an error to attempt to assign anything to a vector,
matrix or array using an all False LOGICAL subscript.

951122 New keyword phrases x:realVec or wtdmeans:T, seest:T, sepred:T,
and n:N on predtable().

New function structure() is a synonym for makestr() which is now
deprecated.

951114 It is now an error to attempt to compute a contrast with all zero
coefficients.

951107 Positional (non-keyword) specification of mbest, forced, method,
s2, and penalty on screen() is no longer possible.  Use keywords.  See
screen().

951101 New keyword phrase marginal:T on anova(), wtanova(), manova(),
wtmanova(), and robust(), causes computation of SAS Type III sums of
squares in many cases.

951030 New keyword phrase aliased:T on modelinfo() returns a logical
vector with True corresponding to every aliased X-variable.

951027 Bug fix.  The order of coefficients returned by
modelinfo(coefs:T) did not match the order of columns returned by
modelnfo(xvars:T) in models with more than one factor.

951023 New function glmfit() for fitting generalized linear models with
specified link and distribution.  At present, it just provides
alternative ways of doing logistic or probit analysis of binomial
responses or log linear analysis of Poisson responses, but eventually
other distributions and links will be implemented.

951020 New function probit() for fitting probit regression.  It is used
almost identically to logistic().

951017 New keyword 'trunc' for robust allows you to set the truncation
point for the Huber method of robust estimation used.  In addition, an
approximate ANOVA table is printed instead of a table of pseudo
deviances.  Approximate inference using F-tests can be based on this
analogously to an ordinary ANOVA table.  Also, minor improvements were
made to the robust estimation algorithm and therefore the fit,
coefficients, and their standard errors diff slightly from what they
would have been previously.

951010 Minor change in the behavior of sum(), prod(), max(), and min()
when operating on an array with more than 2 dimensions.  Now, for
example, ndims(sum(x)) = ndims(x), with dim(sum(x))[1] = 1.

Function vector() has been installed as a synonym for cat(), since its
name is more descriptive of what it actually does (by analogy with
matrix()).  You can continue to use cat() for the immediate future, but
at some point cat() may be disabled.

951005 In a macro, if you use a place holder of the form $01, $02, ...
instead of $1, $2, ..., the value NULL will be used when the argument
is missing and is referred to outside of quotes.

Two new predefined macros anytrue(log1,log2,...,logm) and alltrue(log1,
log2,...,logm) are equivalent to (log1 || log2 || ... || logm) and (log1
&& log2 && ... && logm), respectively, except that no expressions are
evaluated unnecessarily.

951004 New keyword phrase 'dollars:T' on macro() ensures that '$$' is
added to every temporary name that does not already end in '$$'.

950929 Reference by name using <<charVar>> now works appropriately if
charVar is "?" (<<"?">> has value MISSING) or charVar represents a
number (<<"-123.456">> has value -123.456).

950928 New keyword phrase alt:T on help() switches the help file to the
file most recently specified by help(file:fileName).  Together with
keyword phrase orig:T, this allows easy toggling between two help files.

950920 Editing of commands and history of previous commands has been
installed in the protected mode MacAnova version for DOS (DJGPP).  See
topics dos_windows and unix.

950906 NULL can be used as a component name in a structure.  Also
<<"T">>, <<"F">> and <<"NULL">> are equivalent to T, F, and NULL.

950904 The maximum legal level for a factor is 32767.  Also,
factor(vec1, vec2,...,veck) is equivalent to factor(cat(vec1,
vec2,...,veck)).

950828 New command line option -home for Unix and DOS versions.  Also,
MacAnova immediately terminates if any improperly formed file or path
names are specificied as command line options.  See launching.

950828 Added pre-defined macro anovapred for computing predicted values
and standard errors after anova().

950825 Fixed bug that sometimes labeled as factors the results of
arithmetic or logical operations.

950824 Fixed bug in weighted regression and anova that caused erroneous
results when a case with MISSING data also had a MISSING weight.

950823 Fixed bug in factor() causing a crash with a LOGICAL expression
or function result as argument.

950822 Looping statements for(...){...} and while(...){...} no longer
have values.  Hence such not very sensible usages as a <-
for(i,run(10)){i} or abc + while(n > 0){...} are no longer legal.

950821 New keywords 'real', 'logic', and 'char' on isscalar(),
isvector(), and ismatrix() allow you to check argument type at the same
time as shape.

950817 New keywords 'stop', 'skip', and 'quiet' on vecread() allow
intelligent reading from data files with descriptive headers.

950807 Fixed several bugs.  isscalar() and isvector() no longer return
True for structures and variables of type GRAPH.  Arithmetic involving a
scalar and a structure with a single component will no longer cause a
crash.  In a macro, a quoted string containing backslash-escaped quotes
should now be parsed correctly.

950804 Modifications in parser to decrease memory needs and to more
completely ignore comments starting with '#'.

950718 New option 'history'.  See setoptions(), getoptions(), launching.

950712 New keyword 'return' on delete().

950710 Fixed bug in interpreting statements like {b<-1} + {b<-2} and
(b<-1) + (b<-2).

950706 Fixed minor bug in parsing non-keyword macro arguments containing
a colon.

New pre-defined macro 'more' on some versions.  See more.

New keyword phase name:"name on header" for print(), write(),
matprint(), and matwrite().

950704 Editing of command line and history is available on some
versions.  See unix.

950629 Fixed bug in macro argument parsing when there are escaped quotes
inside quoted strings.  Fixed bug in the way certain output commands
such as print() handled keywords.

950628 Value for 'news' on help() can now be vector of starting and
ending dates, for example, help(news:cat(950601,950630)) gives all news
items added in June, 1995.

When assigning to CLIPBOARD, REAL and LOGICAL missing values are now
coded as '?'.  Pre-defined macro toclip allows you to use a different
coding and pre-defined macro fromclip makes it easy to retreive REAL
data from CLIPBOARD.  See topics clipboard, fromclip, toclip.

950623 Internal representation of MISSING changed.  Results of
arithmetic and transformations producing overflow are set to MISSING
Entering too large a number is now an error.  Too large a number on file
being read is set to MISSING.

On GLM's with missing values, the maximum level of a factor is reduced
to the highest level on any complete case.

950620 New options fstats and pvals control printing of F-statistics
and/or P-values.  See setoptions().

950615 All news items dated earlier than 950101 (1 Jan 1995) have been
removed and are now in file macanova.nws.

950609 New GLM keywords: 'pvals' on most commands; 'fstats' on anova(),
wtanova(), manova(), wtmanova(), and regress(); 'sssp' and 'byvar' on
manova().

Formatting of ANOVA and Deviance tables has been modified.

When the response is univariate (has 1 column) manova() is now
equivalent to anova().

950607 'T' and 'F' can now be used as keyword names and as the names of
structure components.  Thus a<-makestr(T:PI); print(a$T) is permissible.

950606 Fixed bug in binary operations involving a structure and a
scratch non-structure

950605 New keyword decimate on convolve() allows you to decimate the
output

950602 Operations movavg() and autoreg() now work with a matrix of
coefficients instead of a single column.

950524 New operation rename() allows you to change the name of a
variable or macro without copying it.

950522 New operation trideigen() for computing eigenvalues and vectors
of tri-diagonal symmetric matrix.

950510 Fixed bug affecting generic DOS version that prevented the use of
GLM models with more than 15 variables.

950502 Minor bug fix to ensure that matread() treats vector (1
dimensional) object the same way as a matrix with one column.

950411 Bugs fixed in match() and in elseif processing (compound statment
following elseif was always executed).

950321 diag(), dmat(), triupper(), trilower(), and triunpack() now
accept a CHARACTER argument.

950313 a[k], where k is a matrix or array, is now legal for CHARACTER
variables a, in addition to REAL and LOGICAL variables.

950310 New function select().  If k is vector of positive integers and x
is a matrix, select(k,x) is cat(x[1,k[1]), x[2,k[2]],... .

You can now specify characters to be plotted by pre-defined macros
resvsrankits, resvsyhat, and resvsindex.

950302 ipf() now will do interative proportional fitting on main effect
only models that are balanced, for example a Latin square.

950217 CLIPBOARD now is listed by list() and listbrief().  On listbrief
output, its type (CHAR) is preceded by "*" to indicate it is special.

950215 Changed precedence level of matrix multiplication to be just
higher than ordinary multiplication and division instead of at the same
level.  See arithmetic and matrices.

950207 Fixed bug in cumbin(x,n,p) when -1 < x < 0.

New special symbol NULL is variable with no value and with new type
NULL.  It can be assigned to a variable to create a variable of type
NULL.  Type NULL variables are legal arguments to cat(), hconcat(),
vconcat(), structure(), strconcat(), list(), and listbrief(), plus all
functions() of the form isxxxxx() except ismissing().  A new function
isnull() can be used to test whether a variable has type NULL.
Functions such as print() and regress() don't return a normal value,
return a variable of type NULL.  Thus, var <- regress("y = x") is legal
and creates a NULL variable var.

950201 hconcat() and vconcat() now accept CHARACTER matrices as
arguments.

950131 Fixed minor bug in screen() that made 'print:T' an error.

When the error degrees of freedom are 0, all standard errors computed by
regpred() are set to MISSING.  Also, regpred() now works after anova()
when there are no factors in the model.

950123 You can replace FileName by string:CharVar as the first argument
on matread(), macroread(), vecread(), and inforead().  Each element of
CharVar is treated as if it were a line read from a file.

New option multiline:T added to paste(), allows creation of a vector or
scalar CHARACTER variable from a REAL, LOGICAL, or CHARACTER vector or
matrix.

You can now assign REAL, CHARACTER or LOGICAL variables to pseudo
variable CLIPBOARD.  On a Macintosh, a character representation is
copied to the clipboard.  On all machines the value of the assignment is
a CHARACTER scalar representating the input.  On systems such as the
Macintosh that allow copying to a "clipboard", this representation is
put on the Clipboard.  See new topic 'clipboard'

950115 Macintosh version has a Font menu and new options 'font' and
'fontsize' settable by setoptions().

950113 Macro hist is now pre-defined and help on hist has been added to
the help file.

950102 restore(FileName,list:T) will list symbols as they are restored.

941208 Minor bug in pre-defined macro readcols fixed.  You can now use
keyword phrase 'echo:T' or 'echo:F' as the final argument to enable or
suppress echoing of lines read from the file.

941205 The letter (f or g) specifying the format type can now come at the
start of a print format.  Thus, for example, "f17.10" is now equivalent to
"17.10f".

941128 Fixed bug in save() and asciisave() that required you always to
provide a file name, even when you had previously used save() or
asciisave().

941118 Fixed bug in sort(), rank(), rankits(), halfnorm(), grade(),
anymissing() that caused crashes when argument was structure with null
component.

If x is a structure with a null component, the corresponding component of
length(x) is now 0 instead of null.

941110 Changed default value for keyword 'reorder' on rotation() from T to
F.

941108 Minor syntactic change allowing an expression such as '! 3 < 5' to
evaluate the same as '!(3 < 5)'.  Previously, this would have been a syntax
error.

941107 svd(x,all:T) gets all components of SVD, svd(x,all:T,vals:F), gets
just left- and right-singular vectors, etc.

941027 matrix(x), without the number of rows specified, is permitted if x
has no more than two dimensions greater than 1.  Its primary use is
matrix(SS[j,,]) which converts a 1 by p by p array to a p by p matrix if SS
is the SSCP array created as a side effect of manova() with a p-dimensional
response.

941025 LASTLINE is not changed by a completely empty line.

941023 Fixed minor bug in changestr().

941022 Comparison operators == and != now give sensible results if one or
both operands are MISSING, that is True and False, respectively if both are
MISSING and the opposite if just one is MISSING.

941018 Many entries in the help file have been rewritten.

941003 New option 'missing' on print(), write() and paste() allows you to
specifies a string to be used to print MISSING values instead of "MISSING".
Also, setoptions(defaults:T) resets all options to their default values.

New help topic 'files' summarizes various issues related to MacAnova file
use.

940929 You can now specify treatment of ties on rankits() and halfnorm()
using keyword phrase 'ties:method', where method is "ignore" (default),
"average" or "minimum".

940917 Version bumped to 3.36

for(index,start,end){} and for(index,start,end,incr){} allowed.
for(index,vec){} should require less memory when vec is an expression or
function value, for example, for(index,run(n)){}.

run(0,x,x/n) should reach x if n is an integer, and run(-x,x,x/n) should
have an exact 0 in the middle.  Also run() now checks for MISSING
arguments.

Several functions, including Fourier transforms, have been modified so as
to use less memory when their principle argument is an expression or
function value, for example, rft(padto(x,S)).

940912 New keyword phrase quiet:T on getseeds() supresses printing the
seeds; they are still returned as a vector of length 2.  Similarly,
printing is suppressed on setseeds(0,0,quiet:T) for which the time and date
are used to generate a seed.  A bug has been fixed in setseeds() so that it
will in fact use the time and date when both seeds are 0.

940910 New option 'update' is available on the Unix and DOS versions (it is
recognized but ignored on the Macintosh).  If update is True, the text
output screen is updated after a high resolution plot; if update is False,
there is no such updating.  The default value for Unix is False and for DOS
is True.  This may be useful for some people using Unix Macanova remotely
via modem if their terminal emulator does not restore text output after
plotting.

940905 New operation rotation() for factor rotation.  So far the only
rotation method available is varimax.

940830 For computers without scrollable output windows (Unix, DOS), the
algorithm for counting lines has been improved so that you are less likely
to have stuff scroll off the screen before you can read it.

940826 The Quicksort algorithm used by sort(), rank(), and grade() has been
replaced so as to increase efficiency when data is already ordered or
almost ordered.  In case of ties in the elements of x, the output from
sort(x), grade(x), and rank(x,ties:"ignore") may differ from what was
computed previously.

940820 If keyword phrase 'size:T' is an argument to list(), output includes
the total number of bytes used by a variable.

940818 Revised version of readcols macro now accepts either
readcols("filename",x1,x2,x3) or readcols("filename",cat("x1","x2","x3")).

Revised version of makecols macro now accepts either
makecols(datamatrix,x1,x2,x3) or makecols(datamatrix,cat("x1","x2","x3")).

940816 New alternative version for DOS allows larger variables (>8125 numbers)
and screen saving.  Disadvantages: requires at least a 386, only two
plotting line types, cannot plot when running under windows.  Also, both
versions for DOS restore the text screen after a high resolution plot.

940909 Output from listbrief() is now alphabetized down columns rather than
across rows.

940805 The capability to update the console screen after a high resolution
plot has been installed on the DOS version.  To do this, MacAnova remembers
the last few lines of ouput and then writes them to the screen after a
plot.  This feature is not activated in the Unix or Macintosh versions.

940804 cor() now detects constant columns in its input and sets the
corresponding rows and columns of the output to MISSING.

940801 anova() now detects balanced main effect designs such as Latin
Squares and does the "short cut" computation based on marginal means.

940729 Fixed bug in computing RESIDUALS for manova() when there are missing
values.  When any missing data is found for case i, all residuals for that
case are set to MISSING, not just the first column.

In rare cases it was possible to get a negative sum of squares.  This
should no longer happen.  Moreover, zero d.f. sums of squares should now be
exactly zero.

Side effect variable HII is now set missing for any cases for which any of
the data is MISSING.

940707 New keywords 'means', 'vars', and 'counts' on tabs() allow greater
control of what is computed.

940705 New command reverse() reverses the order of the rows of a matrix.
reverse(a) is equivalent to a[run(nrows(a),1),].

940701 New syntax element 'elseif'.  Usage is
  if(Logic){...}elseif(Logic){...}...[elseif(Logic){...}][else {...}]
where [...] indicates optional.  See 'if' for details.

940630 Keyword phrase coefs:F recognized on most GLM commands, suppresses
the computation of coefficients and the (X'X)^(-1) matrix.  This is useful
on large ANOVA or MANOVA models when you are interested only in sums of
squares since less time and memory space is needed.

940623 Version number bumped to 3.35

Each help topic now has associated one or more keys such as
"regression", "plotting", or "residuals".  help(key:"foo") prints a list of
all topics for which "foo" is an associated key.  help(key:"?") gets a list
of all keys in the help file.

940620 Fixed bug that allowed infinite loop in "dumb" plots when x or y
almost, but not quite, identically zero.

940607 A new synonym of 'quit', 'end', and 'bye' is 'stop'.

940603 The Macintosh version has better handling of overflow of the output
window.  If output would make it too large, you are given a chance to save
the contents of the window, and then a new window is opened.  Only if there
are already 9 text windows open is stuff trimmed off the top of the current
output window.

Also on the Macintosh, holding down the Option key, while closing a window
or quitting, bypasses the opportunity to save the current workspace and
windows.

940601 Regression output is slightly modified when MSE is 0 or the degrees
of freedom for error is 0.  This makes fitting singular models more
reliable.

On the MacIntosh, plotted lines are now "hairlines".  This improves the
appearance of graphs printed on a LaserWriter using Print Graph on the File
menu.  Also, axis lines are now dashed.

940523 You can now retrieve option values using keywords, for example by
getoptions(nsig:T, format:T) or getoptions(all:T, seeds:F).

The MacIntosh version has a new menu, the Options Menu.  When you
select an item from the Options Menu, MacAnova generates and executes
explicit invocations of setoptions() based on information you provide in a
dialog box.  Another changes is that the commands displayed in the Command
Menu may now be truncated to avoid having the menu take up too much of the
screen when pulled down.

MacAnova on the Macintosh now does parenthesis matching.  That is, when you
type ')', ']', or '}', the matching '(', '[', or '{' briefly flashes.  If
no appropriate match is found, a warning beep is sounded.  This can be very
helpful when entering long cammands with several levels of nested
parentheses or brackets.

940517 There is a new option 'warnings' that can be set using setoptions().
setoptions(warnings:F) suppresses all warning messages.  Since some of the
warning messages are very important, this should be used with caution, but
it can be helpful when doing a lot of computations with vectors and
matrices with MISSING values.

940513 Several bug fixes in bin().

More Macintosh changes include selection of the i-th command on the Command
menu by Command-Option-i, where 1 <= i <= 8, or (on an extended keyboard)
by function key Fj, where j = i+4.  Function keys F1, F2, F3, and F4 select
Undo, Cut, Copy, and Paste on the Edit menu.

940502 Bug fix so that vecread() could read final line when it does not end
with a new line.  Bug fix in cumpoi(x, m) when -1 < x < 0.

940501 There are many changes in the user interface on the Macintosh
version.  The File and Windows menus have been redone.  There are now
separate Save Workspace and Save Workspace As entries on the File menu, and
the Quit and Save entry has been eliminated.  When you quit, you are
automatically given an oportunity to save the workspace and the command
window.  In addition, a purely non-interactive mode of operation is now
possible, if you hold down the Command key at startup and provide MacAnova
an output file and command file.

A new entry New Window on the Windows menu allows you to open up to a total
of 8 additional command windows.  Each command window has an entry in the
Windows Menu and its contents can be saved in a file independently of all
other windows.  This goes a long way to overcoming the 32K limit of an
output window.

940408 Bug fix to plug memory leak in logistic().

940331 Version number bumped to 3.34.  Minor change in output from nameof().

940330 Several new operations and a new function for dealing with the bit
structure of integers have been installed.  The operations are '%&'
(bitwise and), '%|' (bitwise or) '%^' (bitwise exclusive or), and %!
(bitwise complement).  The function is nbits() which counts the number of
bits.  See topics bit_ops and nbits().

In addition, three new options have been added to modelinfo(), invoked by
keyword phrases strmodel:T, bitmodel:T, and termnames:T.

940325 On the Macintosh, Undo on the Edit menu has been enhanced.  You can
Undo and Redo the output from commands (Redo is new), Undo and Redo typing
(both new), and Undo paste and deletions (Undo Paste is new).  In addition,
the labelling of the Undo item on Edit menu is more descriptive, for
example "Can't Undo" or "Redo Output".  In addition, a number of minor
changes have been made to the user interface.  One change is that undoing
the previous change is still possible until you make a change to the window
even if you move the insertion point with the mouse.

940315 On the Macintosh, there is a new CHARACTER pseudo variable with name
CLIPBOARD.  The value of CLIPBOARD is the current text contents of the
Macintosh ClipBoard.  See topic 'clipboard'.

940314 On the Macintosh, if you resize or zoom a graphics window, the new
size is remembered and the next plot to that window uses the new size.

940303 A new keyword 'keep' has been added to screen() enabling you to save
in a vector or structure any or all of the information normally printed by
screen().  In particular, it is possible to obtain the models selected in a
form that can be used with regress().  On the Macintosh, screen() is now
interruptable by Command I or Command Period which has not previously been
possible.

940224 The model parser now checks to ensure that you don't designate the
constant term as an error term, have duplicate error terms, or try to
subtract a term that is already an error term.  If you do any of these
things, it is now an error.

940223 Fixed bug that allowed crossed variates and factors in models for
regress() and wtregress().  This is now flagged as illegal.

940222 A new plotting symbol has been added -- the dot -- corresponding to
chplot() and addchars() escaped octal code of "\7".  In addition, the dot
has been added to the cycle of point types generated by plot() and
addpoints().  These now follow the cycles asterisk, diamond, cross, square,
X, triangle, asterisk, dot, diamond, cross, square, ...  .

940218 Bug fix affecting behavior of coefs() and secoefs() when there
are interactions between variables and factors with long names.

940217 A reference to a missing argument in a quoted string in a macro is
expanded to nothing.  Previously it was expanded to 'missing argument'.
If an argument that is a quoted string is referred to in quotes in the macros,
all '"' and '\' are prefixed by '\' during expansion.  Moreover, when
expanding $A, '"' and '\' in arguments are also prefixed by '\'.  Previously,
parse errors would result if an argument that was itself a quoted string
was referred to in quotes in the macro.

940131 Fixed bug that caused termination of batch() when a read from
CONSOLE occurred.

940127 New keywords 'linetype' and 'thickness' on plot(), chplot(), and
lineplot() allow you to specify the type of line drawn and its thickness.
Also, 'impulse' is now recognized on all these commands.

940125 New macro rsample in macanova.mac to select random samples, with or
without replacement from the rows of a matrix.

940124 Bug fixed in parser preventing if(){} and if(){}else{} being
enclosed in parentheses.  Cumbin() and cumpoi() now use cumulative beta and
gamma distributions instead of summing binomial and Poisson probabilities.
On cumbin(), the maximum legal value for argument n has been increased
to 100000.

931213 Macrofile macanova.mac has been reorganized and expanded.  Type
getmacros(info) for list of macros.

Unless keywords 'dissim' or 'similar' are used or keyword phrase 'standard:F'
is an argument, cluster() now standardizes data before computing distances.

Bug fix in parser corrected an obscure problem with loops.

931206 Comparison operators ==, !=, <= >=, < and > now apply to LOGICAL
data, with True interpreted as 1.0 and False interpreted as 0.0

931124 Version number bumped to 3.33.  On cluster(), a new keyword phrase,
reorder:T, causes the table of cluster membership to be printed with cases
in the same clusters adjacent.

931121 Commands sum(), prod(), max(), and min() now accept multiple vector
arguments, as opposed to multiple scalar arguments.  Thus max(run(3),rnorm(5))
yields the same as max(cat(run(3),rnorm(5)).

931116 Several bug fixes.  paste() did not work correctly with long strings
as arguments; certain memory management errors did not get caught; output
from GLM commands was suppressed if there was not enough memory to save
"side effect" variables.

931111 New function inforead() returns as character variable comments
following the first header lines on data sets and macros on external files.

931109 Functions list() and listbrief() now recognize keyword phrases all:T
and keep:T.  For example, listbrief(all:T,macros:F) will list all objects
except macros.  If keep:T is used, listing is suppressed and a CHARACTER
vector of names is returned.

931106 Functions hprdh, hprdhj, cprdc, and cprdcj with two arguments now
allow one of those arguments to be a single hermitian or complex series,
which is multiplied by all the series in the other argument.

931105 New keywords 'real', 'char', 'logical', 'structure', 'macro', 'graph',
and 'all' on delete() allow deleting of classes of objects or all objects.

931103 swp(a, vec1, vec2, ...) now equivalent to swp(a,cat(vec1,vec2,...)).
For example, swp(a,1,2,3,4) is equivalent to swp(a,run(4)).

931101 Minor modifications of handling of defaults and keywords on
asciisave() and save() when a filename is not specified.
Predefined character variable VERSION contains the number and date of the
current version.  It is always set correctly after restore.

931030 New macro breakif(Logical) or breakif(Logical,n) is equivalent to
if(Logical){break} or if(Logical){break n}.

931027 putascii(Vec1, Vec2, Vec3,...) is equivalent to putascii(cat(Vec1,
Vec2, Vec3,...)), where Vec1, Vec2, ... are vectors of positive integers.
In addition, keyword phrase 'keep:T' suppresses printing and creates a
CHARACTER variable based on the ASCII codes.

931022 Bug fix.  Fast Fourier transform functions yielded some wrong
elements when length of transform was even and had a prime factor > 5.

931021 New keywords 'coefs' and 'se' added to coefs() and secoefs() allow
you to force or suppress computation of coefficients or standard errors on
both functions.  Thus secoefs(coefs:F) computes only standard errors and
coefs(se:T) is the same as secoefs().

931020 Bug fixes. anova() with unbalanced design sometimes gave wrong
answers unless unbalanced:T was used.  Large models (> 32 terms) for GLM
commands were in error if they contained both variates and factors.

931018 New keywords 'intwidth' and 'charwidth' can be used in paste(), and
the effect of 'format' has been modified.  These allow more control of the
formatting of the string produced.

931012 A new predefined CHARACTER variable HOME has been added in the DOS
and Unix versions.  Under DOS, its value is the path name of the directory
in which MACANOVA.EXE is located, and under UNIX its value is the name of
the users home directory, as taken from environmental variable $HOME.  If a
file name starts "~/name" (or "~\\name" under DOS), '~' is replaced by the
value of HOME.  This is new under DOS, and represents a slight change in
the Unix behavior.  The expansion of "~name" under Unix has not changed,
and is not available under DOS.  See topic files.

931008 New option 'batchecho' added with value T or F.  This sets the default
echoing behavior of batch().  If value is F, batch(FileName) is equivalent to
batch(FileName,echo:F) and to get echo you must use batch(FileName,echo:T).

931004 Version bumped to 3.32.  Files produced by asciisave() now have no
non-printable characters, even when saving strings containing such
characters.  Previously saved asciisave() files are recognized and are
restored correctly.

930930 When output, non-printable characters in strings are translated into
their complete 3 digit octal representations.  Thus if a is created as
a<-"\3", it will be printed as "\003" rather than "\3" as it has been until
now.

930827 New keyword phrase 'y:T' on modelinfo() allows retrieval of
dependent variable of current model.  Keyword phrases file:FileName can be
used on print(), write(), matprint(), matwrite(), and macrowrite() to
specify a file name.

930823 Version bumped to 3.31.  New keyword 'pause' on graphics commands
such as plot() and boxplot() controls whether MacAnova pauses after a plot.
The default on Macintosh is pause:F and on Unix and DOS is pause:T.
Various bugs were fixed.

930818 After all commands in a command line are completed, a copy of the
command line is saved as macro LASTLINE.  A new builtin macro redo creates
a macro REDO whose text is the current value of LASTLINE and then executes
REDO.  Subsequently, the line can again be re-executed by REDO().

930816 Bug in rankits() with MISSING data has been fixed.  The computation
of the Durbin-Watson statistic for regress() and wtregress() has been
changed when there are MISSING data.  In the Macintosh version, keyword
phrase 'window=n' on any plotting command allows you to specify which of
the 4 graphics windows to use, or to reuse the most recently drawn window.

930804 New arithmetic assignment operators (<-+, <--, <-*, <-/, <-^, and
<-%%) have been installed.  For example, a <-+ 3 and b <-^ 2 are
equivalent to a <- a + 3 and b <- b^2, respectively.

930711 Functions anymissing() and ismissing() now accept a CHARACTER
variable or a structure with CHARACTER components as argument.  The empty
string ("") is considered to be MISSING.

930708 Keywords can be used on describe() to specify the statistics wanted.
When printing multi-level structures, lower level component names are
indented.

930702 New function bin(x, boundaries) counts the number of values in
"bins" with boundaries specified by vector boundaries.

930701 New function cholesky(a) computes the Cholesky decomposition of a
positive definite symmetric matrix a.

930630 Graphing functions now accept a 2 component structure in place of x
and y; for example, plot(makestr(x,y)) is equivalent to plot(x,y).

930628 Functions solve() and det() have been recoded using Linpack routines
dgeco(), dgedi(), dgefa(), and dgesl().  This should fix the problem that
they did not work correctly with all matrices.

930625 New function polyroot() finds the roots of polynomials with real
coefficients.

930623 Function cmplx() can be invoked with 1 argument.

930617 New time series analysis related functions partacf() and
yulewalker() have been installed.

930616 A new function toeplitz() has been installed to create Toeplitz
matrices.

930604 New keywords 'v24', 'v31', and 'ascii' on save.  New keywords 'labels'
and 'header' on print(), write(), fprint() and fwrite().  A modified format
for save and ASCII save files has been introduced.  Restore() still
recognizes all previous formats.

930602 Update to version 3.3.  The number of variables in a model has been
increased to 96.

930601 A new function modelinfo() returns any or all of the following
quantities associated with the current active model, if any: the
X-variables, their coefficients in the model fit, the inverse of X'X or of
X'WX, where W is the diagonal matrix of weights, the weights associated
with each case, and the number of X-variables associated with each term in
the model.

930528 Version number boosted to 3.22

930519 Two new functions have been installed.  modelvars(0) returns the
dependent variable of the most recent model and modelvars(i) returns the
i-th variate or factor in the most recent model.  xvariables(model) returns
the full design matrix associated with model.  This has redundent columns
deleted, but has a constant column if the model has an intercept.

930516 Keyword phrase echo:T on commands matread(), macroread(), and
vecread() results in echoing to output data or macro lines read from the
file.  Echo is the default when reading a batch file.

930425 The plotting commands plot, chplot, and lineplot, now recognize
keyword phrase add:T.  For example, lineplot(x,y,add:T) has the same
meaning as addlines(x,y).  A new macro, bargraph, has been added to
macanova.mac.  Type getmacros(bargraph).

930412 A minor bug fix has been made to yates().  The bug manifested itself
only when save() or asciisave() was used and a variable created by y <-
yates(x) existed.  In addition, yates() now accepts a matrix as argument
and applies Yates' algorithm to each column.

930405 Function putascii() now recognizes keyword phrases file:FileName and
new:T.

930402 A "message of the day" will be printed immediately following the
startup banner.  Also, blank lines in batch files are now skipped and will
not be included in the output.

930324 A new macro hist for drawing histograms has been added to the
standard macro file.  Usage is hist(y), hist(y,nbins), or hist(y,bins),
where y is a vector, nbins is a positive integer, and bins is an increasing
sequence of bin boundaries with min(bins) <= min(y) and max(bins) > max(y).

930322 Functions sort(), rank(), grade(), ismissing(), and anymissing() now
accept a structure argument, returning a structure result.

930316 New usage for array():  array(x,n1,n2,...) is equivalent to
array(x,cat(n1,n2,...)) where n1, n2, ... are positive integers.

930312 You can now use term numbers instead of names in coefs(), secoefs(),
and contrast().

930310 LOGICAL vectors are accepted in place of vectors of positive
integers as arguments to factor(), split(), and tabs(), with False
and True corresponding to levels 1 and 2, respectively.

930308 The Unix version now expands ~/path and ~user/path in file names in
the same way as does csh.  See also news:931012 and files.

930304 A minor bug in the model parser has been corrected.  Also, in the
model for a GLM command, a '#' and anything following it are now ignored,
thus allowing models to be self documenting, as in anova("y=blk+a*b # two
way factorial randomized block").

A new function, varnames() returns the names of the response variable,
variates and factors in the current model.

930303 Denominator argument N for logistic() can be a scalar (single
number) instead of a vector.

930302 Functions sum(), prod(), max(), and min() now accept LOGICAL
arguments, interpreting True as 1 and False as 0.  The result is REAL or a
structure of REALs.

The line plotting algorithm has been improved so that the visible portion
of a line connecting two points outside the frame is drawn.  Previously, no
line was drawn even if portions would have been visible.

930225 New macro symbol $S expands to the name of the macro (mnemonic: S is
for Self).  Constructs $N, $V, $v, $K, $k, and $S (but not $A) expand even
when they are within quotes.  Also, in a macro '\$' suppresses any special
interpretation of '$'.

930223 New function rational(x,a,b) computes a rational function of x,
where x is REAL or a structure of REALs.

930217 Function split() has been enhanced, allowing splitting along first
subscript (byrows:T), or last (bycols:T), as well as according to factor
levels.  Also you have greater control over the naming of the components.

930215 New function strconcat() is like makestr() except that top level
components of any structure arguments are top level components of the
result.  Thus strconcat(str,var) creates a new structure with all the
components of str plus var.  Also keyword compnames on makestr() and
strconcat() allows setting component names from a CHARACTER vector.

930208 cat(str) is now allowed, where str is a structure, all of whose
components are structures or variables of the same type.  It produces a
vector of all the elements in the structure.

If a is a structure, a' (or t(a)) computes a structure of the same shape,
each of whose components is the transpose of the corresponding component of
a.

Single subscripts are now allowed on structures, with the index referring
to component number.  If the subscript is equivalent to a vector, the
result is a structure consisting of the selected components of the original
structure.  In addition, expressions of the form a[...][...]  are allowed
and interpreted as (a[...])[...].  In particular, if a is a structure,
a[3][2] is element or component 2 of component 3 of a.

930205 Version number is bumped to 3.2.  The new version is characterized
by the enhancment of many functions and operations so that they accept
structures as arguments.

Functions sum(), prod(), max(), and min() now accept a structure as
argument and return a structure whose components are the application of the
function to each component of the argument.

Function describe() now accepts a structure as argument, in which case all
the components (min, q1, ...) of its output are structures.

All transformations now accept structures as arguments, returning a
structure of the same shape, each of whose components is the transformation
of the corresponding component of the argument.

All binary and unary (!, -, +) operations, including matrix multiplication,
accept structures as operands.  If both operands are structures, their
shapes must match and corresponding components must be compatible for the
operations.

Other functions that now accept structures as argument are length(),
ndims(), dim(), nrows(), and ncols().  The only known incompatibility with
Version 3.1, is that length(str) and dim(str) no longer return the number
of components of a structure str.  Use the new function ncomps(str).

930130 The usage, break n, where break is a positive integer, is now
permitted.  It breaks out of n levels of loop.  Thus 'break 1' is
equivalent to 'break'.  This was introduced because it was noticed that
'breakall' has unexpected behavior when used in a macro that is invoked in
a loop, breaking not only out of loops in the macro, but also out of the
loop in which the macro was invoked.  'break n' allows you to limit the
number of loops that will be exited.

930129 Version 3.11.  Several bugfixes, including a bug in hpolar().  On
the Macintosh, substantial changes were made in the way MacAnova manages
memory, this has resulted in over a four fold improvement in speed on
certain bench mark runs.

930121 On all machines, including Macintosh, putascii(rep(7,n)) should
beep or ring the bell n times, as will print("\7\7\7").

930119 A new keyword phrase silent:T on GLM commands makes them run
completely silently, unless errors are found.  This is stronger output
suppression than print:F.  New keywords maxiter and epsilon on poisson(),
logistic(), robust(), ipf(), and fastanova() give you more control over
iterations.

930115 There are been minor changes in the way the Macintosh version
handles items on the Edit menu.  In addition, a bug in the predefined macro
boxcox has been fixed.

930112 New function isgraph() can be used to test whether a variable has
type GRAPH.

921227 Function match now accepts a third argument specifying the value to
return when an element is not matched.  If the third argument is present,
no warning message is printed when there is no match.

921213 help("*part*"), help("part*"), help("*part") list all help topics
whose names contain, start with, or end with "part".  If only one name
matches, help is given on that topic.  If there are several arguments of
this form, help is printed on the first topic whose name matches each
pattern

921208 Functions ccopyh() and hcopyc() have been renamed ctoh() and htoc().

921204 If x is a m by n REAL or LOGICAL matrix, split(x,bycols:T) produces
a structure with n components, each consisting of a column of x.  Function
setseeds() now accepts a 2-vector as argument, and, if seeds are 0,
initializes the random number generators from the time and date.

921201 A new function compnames() returns a CHARACTER vector of the name of
its STRUCTURE argument.  Changed keyword use in cluster() and enhanced
ability to save results of clustering.

921127 A new version of stemleaf() has been installed.

921124 contrast() function computes standard errors as well as SS.  On both
contrast() and secoefs(), a final optional argument of the form
errorterm:termname specifies which term is to be used as MSE in compute
standard errors.  On Unix & DOS, command line options -l nlines and -w
ncols allow you to set the screen lines and with at startup.

921120 unique() and match() now accept CHARACTER arguments.  Three new
built in macros have been installed. resid and yhat compute matrices with
most of the same information as produced by the resid and yhat commands in
Multreg; and makefactor transforms a REAL or CHARACTER vector into a factor
with levels corresponding to the unique elements of the argument.

921118 Changes made in the way sort(), rank(), and grade() treat missing
values and changes in the way rank() treats ties.  New functions cumgamma()
and invgamma() added.

921117 Macros and elements of CHARACTER variables that are printed are now
enclosed in "" and non-printable characters are printed as escaped octal
codes, except for print(a) where a is a CHARACTER scalar.  Also new
functions nrows() and ncols() with a single matrix argument have been
installed.

921112 Commands list() and listbrief() now list variables in alphabetical
order, ignoring case.  In addition, a limited pattern matching capability
(list("*part*"), list("*part"), list("part*")) has been implemented.

921102 MacAnova version 3.1.  New commands addpoints(), addlines(),
addchars(), and addstrings() added.  A new keyword 'file' is recognized on
all plotting commands, obsoleting fplot(), flineplot(), and fchplot().  The
default when writing a plot to a file is PostScript (overridden by 'ps:F').
Type 'help(graphs)' for a summary of what is common to all plotting
commands.

921026 The file produced by asciisave() is now a 100% text file, with items
separated by end of line characters.  Restore() recognizes both the old and
new versions of files.

921023 A new data type, GRAPH, has been introduced.  A variable of type
GRAPH encapsulates all the information used to make a plot, whether
produced by plot(), chplot(), lineplot(), or boxplot().  Each plotting
operation now produces as a side effect a GRAPH variable with name
"LASTPLOT".  If Graph is a GRAPH variable, simply typing 'Graph' or
'print(Graph)' reproduces the plot as if dumb:T had been used.  A new
command, showplot() has been introduced to plot the information in GRAPH
variables.

921014 Internal changes including a much faster method of recognizing
variable names should speed up many operations.

920929 A new keyword, 'dumb' is available on all plotting commands
(boxplot(), chplot(), lineplot(), plot()).  'dumb:T' results in a "printer
plot", that is one made just with printable characters, suitable for
printing on a line printer.

920903 New pre-defined macros resvsindex, resvsrankits, and resvsyhat have
been installed to aid in making residual plots.

920902 A new keyword, 'news' has been added to help().  For example,
help(news:920801) will print all items of news since August 1, 1992.
In the Macintosh version, a new graphics window has been added displaying
duplicates of all the other windows in a panel form.

920901 The name Matter2 has been retired.  It is now MacAnova 3.0.  Also
the name for the default initialization file is MacAnova.ini on a
MacIntosh, .macanova.ini on Unix, and MACANOVA.INI on DOS.  The default
values for DATAFILE and MACROFILE are MacAnova.dat and MacAnova.mac on a
Macintosh, /usr/local/data/macanova.dat and /usr/local/data/macanova.mac
on Unix, and Path\MACANOVA.DAT and Path\MACANOVA.MAC on DOS, where Path
is the complete path of the directory where MACANOVA.EXE lives, e.g.,
C:\MACANOVA\MACANOVA.DAT and C:\MACANOVA\MACANOVA.MAC.

_E_O_F_#This should be the last line, an internal End Of File marker
