Go to the first, previous, next, last section, table of contents.


Changes from Version 2.1 to Version 2.2

Changes to do with making SM:

*
Typing `make install' now installs the macro and help libraries. The destinations of some files is now different -- see the main Makefile for details.
*
There is now a search path for `.sm' files; you may want to prepare a system-wide one (see SMPATH in the manual).

Changes to do invoking SM

*
SM now searches a path looking for .sm files; you can override this by setting the SMPATH environment (VMS: logical) variable.
*
The command line option -u name makes SM treat `~' as name's home directory when looking for `.sm' files.
*
There is a new command line option -h to print a help message.
*
SM now supports a search path for help files.

Changes to do with .sm files:

*
Entries in .sm files with `@' in the first column mean that the entry isn't present, and that SM shouldn't search the rest of the path.
*
Entries in .sm files with `+' in the first column direct SM to keep looking for more entries, whose values are concatenated with this one.

Changes to do with history and the editor:

*
There is now a macro input_new analogous to the Mongo "input" command, but reading a file of SM commands. Not recommended.
*
There are two new commands ^R and ^S (or ESC-s) to do searches in macros or history. The use of ^-TAB is no longer supported.
*
There is a new command ESC-^D to delete the current line; this includes deleting it from the history list.
*
If you set the variable remember_history_line the history editor will remember where you are in the history list, so a ^P will get the command before the last one that you retrieved.
*
Negative history numbers are now taken relative to the current command, so -1 is the previous command.
*
APROPOS will (on most systems) search the help files as well as the macro headers.
*
When reading from a file (or a pipe) SM will behave as if you gave the -S option.
*
Key bindings may now contain ASCII NUL's.
*
Shell escapes (with !) now look for a variable $SHELL to decide which shell to use; the Bourne shell is still the default. They also now reset terminal modes before the shell command, and set them after.
*
There is a new variable exit_status which is the return code from a shell escape.
*
You can now use ^V and ESC-v to move around the history list as well as within macros.

Changes to do with files:

*
If you define the variable noclobber (maybe in your `.sm' file) MACRO WRITE and PRINT won't overwrite existing files.

Changes to do with macros:

*
If a macro is declared to have 100 or more arguments the last argument will extend to the end of the line.
*
Tabs in macro definitions are now expanded to spaces when read; you can set the tab width with the `.sm' variable tabsize.
*
Macros used as functions can now be used in expressions.
*
In a file of macros, lines starting ## are only printed if VERBOSE is two or more.

Changes to do with variables:

*
If a "DEFINE var :" fails, if var is capitalised SM will now look for it from the environment.
*
The way that `internal' variables (those defined as DEFINE name |) work is changed. If you don't define them they will always have the correct value -- see the section on DEFINE for further explanation.
*
You can get at the size of an image with DEFINE NX IMAGE and DEFINE NY IMAGE (note that NX and NY are capitalised).
*
There are two new `internal' variables $nx and $ny which give the current size of the screen in hardware-specific units such as pixels or dots, and $cheight and $cwidth which give the current (average) size of a character in plot units.
*
There is a new special form of variable expansion $(expr) which expands to the result of expr (taken to be a scalar).

Changes to do with vectors:

*
You can now specify names for user ctypes, e.g. CTYPE={ puce khaki vermillion }.
*
You can make the PRINT command append to the output file, rather than simply overwriting it.
*
In response to overwhelming public pressure, an element of a vector may once more be specified wherever a number is allowed (e.g. in a RELOCATE command).
*
You can now write a number as 1.234d56 if you must.
*
There is a new operator ATAN2 that takes two arguments and returns an answer in the correct quadrant.
*
STRING will now (by default) produce nicely formatted strings, similar to those used to label axes.
*
You can now declare an image (with IMAGE (nx, ny)), and fill it with SET IMAGE(x,y) = z.
*
There are some more string operators, similar to those in the new Unix awk, INDEX, SPRINTF, STRLEN, and SUBSTR.
*
You can determine how long a string is (in device coordinates) with LENGTH.
*
You can specify your own format statement for SM to read lines of data with: READ 'format' { vectors }.

Changes to how plotting is done are as follows:

*
The hcopy and hmacro macros will now work even if the printer name is omitted (using the value of PRINTER from `.sm' or the environment instead).
*
`Dotted' lines (ltype 1) are now really dotted, not short lines.
*
You can now start a new page for hardcopy devices with the new command PAGE.
*
The new command ABORT closes the current device without making a hardcopy.

Changes to labels:

*
SM's "TeX" macros can now take arguments
*
There is a new pseudo-macro \move to move a group around, but leave the current position unchanged.
*
There are new pseudo-macros depth, height, and \width to find the dimensions of a group.
*
The height and depth information is used to place axis labels more intelligently. This will only work if you draw the axes before the axis labels, which seems not unreasonable.
*
LABEL will now draw a string with its baseline at the starting point. If you want the old behaviour use PUTLABEL 6.

Changes to stdgraph:

*
:RA: has been retired in favour of the much more general :DV=device:.
*
The new :TC: entry is like :tc: but doesn't start scanning graphcap again. This can be used to modify standard entries.
*
Comments are now permitted within graphcap entries.
*
SY entries can now use $"..." to prompt the user for a string; the $"..." will be replaced by the reply.
*
SY entries now support graphcap variables, so that you can say things like
BIN = /usr/local/bin
device|some device:\
           ...
        :SY=${BIN}/rasterise -r $0 $F $1:

Changes to drivers:

*
The imagen driver now supports portrait, landscape, and square plots.
*
There is a new driver (sgi) for Silicon Graphics's Irises, which should also work on IBM's RS/6000.

Changes to Callable SM:

*
The device call now returns 0 for success, -1 for failure.
*
You can now compile SM to prefix external names with "sm_" (or any other string of your choice).
*
There is a new call redraw that should be used on window systems that need some help redrawing their windows (e.g. SGI's GL, or X11 on machines like RS/6000 that don't support backing stores).

Changes to 2-D SM:

*
If you specify nx or ny to be negative they will be taken to be the negation of the actual size of the image, rather than an offset in the file.
*
If you specify nx or ny as string values (e.g. :nx=10:ny=100: they are taken to be the actual size of the image (just like the previous item).
*
You can get at the size of an image with DEFINE NX IMAGE and DEFINE NY IMAGE (note that NX and NY are capitalised).
*
You can now declare an image (with IMAGE (nx, ny)), and fill it with SET IMAGE(x,y) = z.
*
You can define any (2-letter) name in filecap and retrieve the value at the specified offset with DEFINE nn IMAGE.
*
In FITS files, CRPIX, CRVAL, and CDELT are now interpreted correctly.

Bug fixes: (only the ones most visible to users are noted)

*
The problems with calling SM routines have been fixed.


Go to the first, previous, next, last section, table of contents.