SM Commands: A Very Abbreviated Guide by Topic 
                ==============================================

SM: version SM2_3_1 (28th Jun 1993)                          [10/26/95]
------------------------------------------------------------------------
Leaving SM

QUIT    quits the programme entirely. plot will go to hardcopy device.
ABORT   closes the current device without producing any hardcopy. 
SAVE    saves current macros, variables, and vectors to `filename'
RESTORE restores all macros, variables, and vectors from `filename'

------------------------------------------------------------------------
Help functions

HELP    prints longer version of this type of message for commands.
APROPOS lists macros whose name or introductory comments match `pattern'. 

------------------------------------------------------------------------
Reading data into SM

DATA    uses "file" as the source of data read with the READ command.
LINES   sets use of lines INTEGER1 to INTEGER2 from the current data file
READ    reads column INTEGER of data file to vector WORD

------------------------------------------------------------------------
Reading user macros into current SM

MACRO READ name         read macro `name' into SM.
MACRO EDIT name         to edit a macro.

------------------------------------------------------------------------
Defining variables

SET name = expr         sets the vector "name" to be equal to "expr"
DEFINE name value       defines variables. accessed by $name
VARIABLE                see DEFINE for how to define and use variables.
LIST DEFINE [ begin end ] lists all the current variables (or macros)

------------------------------------------------------------------------
Looking at data

PRINT [+] [ filename ] [ 'format' ] { vector_list }
        prints the values of the vectors in vector_list to the terminal, 
        or to the filename specified

------------------------------------------------------------------------
Plotting commands

DEVICE WORD     chooses plot device (x11, sunview, bgi, mswindows, vaxuis)
ERASE           erases the graphics screen
PAGE            starts a new page for a hardcopy plot
HARDCOPY        produces a hard copy
DEVICE META     device META takes plot commands and stores and executes them.

------------------------------------------------------------------------
Plot area set up

LOCATION GX1 GX2 GY1 GY2        sets physical plot location (0-32767)
LIMITS  sets plot coordinates to vector1,vector2 or xmin,xmax,ymin,ymax
BOX     puts axes around the plot region
ASPECT  sets aspect ratio (Y/X) to A for characters and points.
GRID I1 I2      draws grid at major (I1=0) or minor (I1=1) tickmarks within box.RANGE n_x n_y   sets the range on the x, y axis to be n_x, n_y
WINDOW nx ny x y        divide plot area into nx*ny regions, use the (x,y)th.
AXIS A1 A2 AX AY ALEN   draws axis, label from A1 to A2 at AX, AY, length ALEN.
TICKSIZE SMX BIGX SMY BIGY      determines tick intervals for BOX
NOTATION XLO XHI YLO YHI        sets axis label format (exp. or float)
FORMAT x-format y-format        specifies axis tick label formats. 

------------------------------------------------------------------------
Image file plotting

IMAGE   reads image from "file", can specify range of coordinates.
MINMAX  sets `min' and `max' to the the max and min values of an image
LEVELS  sets CONTOUR levels to be the elements of `expr'
CONTOUR makes a contour plot of image.
SURFACE type z1 z2      draws a wire-frame surface of the current IMAGE.
        TYPE determines surfaces to draw:
        0  no hidden line removal   1  draw top surface
        2  draw bottom surface      3  draw both top and bottom surfaces
VIEWPOINT theta phi L   draws surfaces from direction (THETA,PHI), and project
        onto surface passing through origin, from point L away from the
        nearest corner of the cube containing image.
CURSOR  display crosshair cursor to enable you to get positions

------------------------------------------------------------------------
Line/point set-up

EXPAND expr     expands all characters and points, its default is 1.0. 
LWEIGHT         sets line thickness to `number' (larger is thicker)
PTYPE n s       causes points to be drawn as n sided polygons of a style s,
                where: 0 = open  1 = skeletal  2 = starred  3 = solid
LTYPE I1        sets the type of line to be drawn by I1:
                0 = solid       1 = dot   2 = short dash      3 = long dash
                4 = dot - short dash      5 = dot-long dash   
                6 = short dash-long dash  10 = erase lines
CTYPE WORD 
                sets line colour to WORD. ("default", "white", "black", "red", 
                "green", "blue", "cyan", "magenta", or "yellow".)

------------------------------------------------------------------------
Plotting vectors with lines and points

CONNECT draws lines connecting points in vectors pexpr1, pexpr2.
POINTS  makes points at the points in vectors WORD1 and WORD2.
ERRORBAR WORD1 WORD2 expr INTEGER
        draws one-sided error bars on all points defined by vectors WORD1 and
        WORD2, of lengths set by expr. INTEGER is 1 to put the bar along the +x
        direction, 2 for +y, 3 for -x, and 4 for -y.
HISTOGRAM connects points in vectors pexpr1 and pexpr2 as a histogram.  
SHADE INTEGER pexpr1 pexpr2     shades `inside' curve defined by pexpr1 pexpr2
RELOCATE X Y    sets the current location to (x,y) without drawing a line.
DOT             draws point at the current location.
DRAW #1 #2      draws line from current position to #1,#2 (user coordinates)

------------------------------------------------------------------------
Annotating plots with labels

LABEL           writes the string str at the current location.
XLABEL str      writes label "str" centered under the x axis made by BOX.
YLABEL str      writes label "str" centered to left of the yaxis made by BOX.
PUTLABEL INTEGER str    writes label "str" at current location.
ANGLE expr      text from LABEL comes out D degrees anticlockwise from 
                horizontal. (D is first element of `expr') 
DATE    is a special variable that expands to the current date and time.

------------------------------------------------------------------------
Programming in SM

DO variable = start, end [ , incr ] { commands }
        executes the commands while the value of $variable runs from 
        `start' to `finish', increment defaulting to 1.
FOREACH variable ( list ) { commands }
        The value of variable is set to each element of list is in turn,
        and then the commands are executed. 
RETURN  returns from the current macro, which includes breaking out 
        of DO and FOREACH loops.
IF (expr) { list1 } <CR>   {or  IF (expr) { list1 } ELSE { list2 }}
        If `expr' is true, execute list1, otherwise list2 (if present).

------------------------------------------------------------------------
OPERATORS
------------------------------------------------------------------------
ARITHMETIC operators in SM:
PI              Pi

-expr           Change sign             ABS(expr)       Absolute value
ACOS(expr)      Arccosine               ASIN(expr)      Arcsine
ATAN(expr)      Arctangent              COS(expr)       Cosine
DIMEN(vector)   Dimension of a vector   EXP(expr)       Exponential
INT(expr)       Integral part           LG(expr)        Log_10
LN(expr)        Log_e                   RANDOM(s_expr)  Random numbers
SIN(expr)       Sine                    SQRT(expr)      Square root
STRING(expr)    Convert to a string     SUM(expr)       Sum_i expr_i
TAN(expr)       Tangent                 VECTOR[expr]    Elements of an array
( expr )        Raise precedence

expr + expr          Add                expr - expr     Subtract
expr CONCAT expr     Concatenate        expr * expr     Multiply
expr / expr          Divide             expr ** expr    Exponentiate
ATAN2(expr_y,expr_x) Atan2

HISTOGRAM(expr:expr)            Construct histogram
IMAGE(expr,expr)                Extract cross section
expr1 ? expr2 : expr3           expr2 if expr1 is true, else expr3

------------------------------------------------------------------------
LOGICAL operators in SM: (non-zero = true)
   !expr          Logical complement
   expr == expr   Equal to                 expr != expr   Not equal
   expr < expr    Less than                expr <= expr   Less than or equal
   expr > expr    Greater than             expr >= expr   Greater than or equal
   expr && expr   Logical and              expr || expr   Logical or
Only == and != are allowed for string valued vectors. 
All arithmetic vectors test unequal to all string-valued vectors.

------------------------------------------------------------------------
STRINGS operations on vectors and scalars.

LENGTH(expr)    The length (SCREEN units) that a string would have if plotted
STRLEN(expr)    The number of characters in a string
STRING(expr)    Convert a number to a string. You might prefer to use
                sprintf('%t',expr) instead, as it gives you more control.
( expr )        Raise precedence

expr + expr     Add; concatenate element by element
expr CONCAT expr Concatenate the two vectors
INDEX(expr_1,expr_2)
                Return the starting index of expr_2 in expr_1, or -1.
SPRINTF(expr_1,expr_2)
                Format expr_2 using the standard C format string expr_1. The
                additional format %t or %T is identical to %e, but formats the
                string as a power of 10 in TeX format.  Note that only one expr
                may be formatted, but that you can say `sprintf(expr,expr) +
                sprint(expr,expr) ...' to work around this restriction.
vector[expr]    The elements of vector given by expr.

SUBSTR(expr_1,expr_2,expr_3)
                Return the expr_3-long substring of expr_1 starting at expr_2
                if expr_3 is 0 return the rest of the string.
expr1 ? expr2 : expr3
                expr2 if expr1 is true, else expr3

------------------------------------------------------------------------
Vector manipulation

SORT { vector_list }
        sorts the first vector in thel list into increasing numerical order,
        and rearranges the others (no. vectors<=10) in the same way.
SPLINE x1 y1 x2 y2
        performs a natural spline fit on vectors x1 and y1, (same dimension,
        x1 monotonic increasing) and interpolates to points of vector x2,
        creating vector y2.
FFT n pexpr1 pexpr2 WORD1 WORD2
        Fourier transforms 2 vectors (treated as the real and imaginary parts
        of a complex vector), returning  answer in vectors WORD1 and WORD2.

------------------------------------------------------------------------
Controlling SM system stuff

EDIT op_name key_name
        redefines a key key_name to carry out the function op_name.
TERMTYPE WORD [ NLINES ]
        sets the terminal type for the line/history editor to be WORD. 
CHDIR WORD
        changes to a new directory. Use double quotes on WORD for safety. If 
        first character of WORD is `~' it is replaced by your home directory. 
PROMPT new_prompt
        replaces the current prompt by new_prompt. The character '*' is
        replaced by a ^G, to ring the terminal bell.
VERBOSE INTEGER
        makes SM produce output on what it is doing if integer is > 0.
        be turned off again with another negative value.
VERSION
        returns a string identifying the version of SM in use.
USER ABORT [ string ]     {or  USER INTEGER string}
        USER ABORT generates a syntax error, using the string as the 
        offending command if it's provided.
WHATIS(something) has a value depending on what it is:
        A number      0            bit  Not a number: 1            0    
        a macro:      set 02 bit   1    a variable:   set 04 bit   2    
        a vector:     set 010 bit  3    a keyword:    set 020 bit  4
OVERLOAD keyword INTEGER
        allows "keyword" (in lowercase) to be used as a macro name if
        integer is non-zero.
KEY key-sequence commands
        defines the key-sequence to expand to the commands. 

------------------------------------------------------------------------
History mechanism

HISTORY lists up to the the last eighty commands issued, giving each an
        identifying number. HISTORY - lists the commands backwards.
PLAYBACK re-executes the list use the macro `playback' (or `play'). 
WRITE HISTORY WORD         {or  WRITE STANDARD}
        writes the macro WORD onto the top of the history buffer. WRITE
        STANDARD writes a string to the standard output.
DELETE [ INTEGER1 INTEGER2 ] {or many variants}
        deletes commands INTEGER1 to INTEGER2 (inclusive) from the 
        history buffer. 
ALL     The macros edit_hist, hcopy, hmacro, insert, and playback use 
        `all'  use `all' to save the history buffer while manipulating it. 
EDITOR  edits the HISTORY LIST, or macros.


##########################################################################