SM supports a number of string operations on vectors and scalars. In the following descriptions expr is a expression and vector the name of a vector. Unary: ATOF(expr) Convert a string to a floating point value CTYPE(STRING) Return all current names of colours; see also CTYPE() HELP(name) Return the HELP string for vector name 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 Binary: 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. Ternary: SUBSTR(expr_1,expr_2,expr_3) Return the expr_3-long substring of expr_1 starting at expr_2. If expr_2 is negative, it's taken relative to the end of the string; if expr_3 is 0 return the rest of the string. expr1 ? expr2 : expr3 expr2 if expr1 is true, else expr3 Note that all indices into strings have 0 for the first character. The expression `VECTOR[expr]' results in a vector of the same dimension as the `expr', with elements taken from `VECTOR' (i.e. `VECTOR[INT(expr_i)]'). You can also use `WORD([ expr [ , ... ]])' as part of an expression, where `WORD' is a macro taking zero or more arguments. The arguments are restricted to be either the names of vectors or numbers; sorry. The precedences are what you'd expect, with `+' being higher than `CONCAT'. The logical operators have even lower precedence than `CONCAT'.