v07i027: CRISP release 1.9 part 06/32
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Sun Jun 11 07:22:27 AEST 1989
Posting-number: Volume 7, Issue 27
Submitted-by: fox at marlow.UUCP (Paul Fox)
Archive-name: crisp1.9/part07
#!/bin/sh
# this is part 6 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file help/crisp/prim/R.cmd continued
#
CurArch=6
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file help/crisp/prim/R.cmd"
sed 's/^X//' << 'SHAR_EOF' >> help/crisp/prim/R.cmd
X
X (See also (index)).
X
XEXAMPLES:
X
X The following example splits a string into a directory and
X filename part.
X
X (string dir file)
X (string filename)
X (int i)
X
X (= i (rindex filename "/"))
X (if i
X (
X (= dir (substr filename (- i 1)))
X (= file (substr filename (+ i 1)))
X )
X ;else
X (
X (= dir ".")
X (= file filename)
X ))
SHAR_EOF
echo "File help/crisp/prim/R.cmd is complete"
chmod 0644 help/crisp/prim/R.cmd || echo "restore of help/crisp/prim/R.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/S.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/S.cmd &&
X.HU save_position
XSYNOPSIS: (save_position)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to save the current buffer and cursor
X position. It makes use of an internal position stack;
X (restore_position) can be used later to restore the cursor
X position.
X
X Note that the position stack is an independent stack of
X any buffer. This means that (restore_position) may be
X called to pop off the top entry of the stack even when the
X current buffer is not the same as buffer referenced by the
X top of the saved position stack.
X.HU screen_dump
XSYNOPSIS: (screen_dump [file])
X
XRETURN VALUE:
X
X -1 if cannot write file; 0 if successful.
X
XDESCRIPTION:
X
X This macro is used to get a snapshot of the current screen
X image. It will write the current screen to the named file
X or to the file /tmp/crisp.screen if file isn't specified.
X
X It does not make use of the screen's character attributes
X and makes an approximation for the screen drawing
X characters.
X.HU search_back
XSYNOPSIS: (search_back [pattern] [re] [case] [block] [length])
X
XRETURN VALUE:
X
X Returns 0 if pattern not found. -1 if an error is
X detected. Otherwise it returns the length of the matched
X text + 1.
X
XDESCRIPTION:
X
X This function searches from the current cursor position
X backwards towards the top of the buffer looking for pattern.
X
X If pattern is omitted, it is prompted for.
X
X If re is specified and it is zero, then pattern is treated
X as a pure string; if it is omitted or is non-zero, then
X pattern is treated as a regular expression. (See section
X on Regular Expressions for details of the syntax of
X regular expressions).
X
X If case is specified and is zero, then the pattern is
X treated non-case sensitively, i.e. A matches a. Otherwise
X the search is performed with case being sensitive.
X
X If block is specified and is non zero, then the search is
X confined to the currently marked region.
X
X If length is specified and is non-zero, then it indicates
X that on a successful return the length of the matched
X string should be returned + 1. If it is not specified,
X then the return length will take into account any \c
X parameters in the regular expression.
X.HU search_case
XSYNOPSIS: (search_case [case])
X
XRETURN VALUE:
X
X Returns the previous value of the case flag.
X
XDESCRIPTION:
X
X This macro is used to set the value of the search case
X flag. By default all searches are case sensitive, i.e. "A"
X does not match "a". By setting case to non-zero, case
X sensitivity will be ignored when performing matches.
X
X If case is omitted, the current value is toggled.
X.HU search_fwd
XSYNOPSIS: (search_fwd [pattern] [re] [case] [block] [length])
X
XRETURN VALUE:
X
X Returns 0 if pattern not found. -1 if an error is
X detected. Otherwise it returns the length of the matched
X text + 1.
X
XDESCRIPTION:
X
X This function searches from the current cursor position
X towards the end of the buffer looking for pattern.
X
X If pattern is omitted, it is prompted for.
X
X If re is specified and it is zero, then pattern is treated
X as a pure string; if it is omitted or is non-zero, then
X pattern is treated as a regular expression. (See section
X on Regular Expressions for details of the syntax of
X regular expressions).
X
X If case is specified and is zero, then the pattern is
X treated non-case sensitively, ie A matches a. Otherwise
X the search is performed with case being sensitive.
X
X If block is specified and is non zero, then the search is
X confined to the currently marked region.
X
X If length is specified and is non-zero, then it indicates
X that on a successful return the length of the matched
X string should be returned + 1. If it is not specified,
X then the return length will take into account any \c
X parameters in the regular expression.
X.HU search_list
XSYNOPSIS: (search_list [start] pattern list_expr [regexp] [case])
X
XRETURN VALUE:
X
X The index of the atom in list_expr where the pattern was
X found; -1 otherwise.
X
XDESCRIPTION:
X
X This macro is used to search a linked list for a string
X pattern.
X
X If start is not specified, the search is started from the
X beginning of the list; otherwise the search starts from
X the atom numbered start.
X
X pattern is the string to search for, and may or may not be
X a regular expression, depending on the value of regexp.
X list_expr is the list to search.
X
X If regexp is not specified or is zero, then pattern is not
X treated as a regular expression. If it is specified and
X non-zero then pattern is considered to be a regular
X expression.
X
X If case is specified and is non-zero, then the case
X sensitivity is taken into account.
X.HU search_string
XSYNOPSIS: (search_string pattern string [length] [re] [case])
X
XRETURN VALUE:
X
X Returns the starting character in string where the match
X was found, or zero if the match failed.
X
XDESCRIPTION:
X
X This macro is used to search string for the pattern,
X pattern. If re is specified and is zero, then pattern is
X treated as a literal string - not a regular expression (in
X which case this function is similar to (index)). If case
X is specified and is zero, then the search is done with
X case insensitive.
X
X If length is specified (name of an integer variable), then
X it will receive the length of the matched pattern, if the
X search is successful.
X.HU self_insert
XSYNOPSIS: (self_insert [n])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is the means for the user to type data into the
X current buffer. It causes the last character to be typed
X to be inserted into the buffer (or overtyped if overtype
X mode is on).
X
X If n is specified, then the character whose ASCII value is
X n is inserted into the file instead of the last character
X typed.
X.HU set_backups
XSYNOPSIS: (set_backups [mode])
X
XRETURN VALUE:
X
X Returns the previous value of the backup flag.
X
XDESCRIPTION:
X
X This macro can be used to inquire or turn on/off the
X setting of the backups flag. The backups flag is tested
X every time a buffer is written away (via write_buffer). If
X the flag is on, then a backup file is made.
X
X If mode is not specified, then the backup flag is toggled.
X A non-zero value for mode turns backup creation on. Zero
X turns it off.
X
X If called from the keyboard, then one of the following
X messages are printed:
X
X Backups will be created.
X Backups will not be created.
X
X.HU set_buffer
XSYNOPSIS: (set_buffer bufnum)
X
XRETURN VALUE:
X
X Returns the ID of the previous buffer or less than zero if
X bufnum is an invalid buffer.
X
XDESCRIPTION:
X
X This macro is used for changing the current buffer; bufnum
X is a buffer identifier, as returned via a (create_buffer)
X or (inq_buffer) call.
X
X (set_buffer) does not cause any registered macros to be
X called (unlike edit_file).
X.HU set_buffer_flags
XSYNOPSIS: (set_buffer_flags [and_mask] [or_mask])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This primitive is used to modify the internal flags
X associated with a buffer. If and_mask is set, then the
X internal mask is AND'ed with the mask; if or_mask is set
X then the internal mask is OR'ed with the mask. The
X and_mask is performed before the or_mask. If the and_mask
X turns off the buffer changed flag, then the internal
X 'number of modifications' flag associated with the buffer
X is also cleared.
X
X This allows a calling macro to make a set of changes to a
X buffer, but not have the buffer marked as being modified
X for the buffer_list macro or the exit code.
X
X The flags are listed below:
X
X 0x01 If set, buffer has been modified.
X
X 0x02 If set, buffer will be backed up when written away.
X
X 0x04 Buffer is marked as read-only.
X
X 0x08 Reserved.
X
X 0x10 Underlying file has execute permission.
X
X 0x20 Process attached.
X
X 0x40 Buffer is in binary mode.
X
X 0x80 ANSI mode -- color escape sequences will be processed.
X
X.HU set_calling_name
XSYNOPSIS: (set_calling_name name)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to set the calling name of the current
X macro. The calling name can be retrieved via the
X (inq_called) macro.
X
X This primitive is not currently implemented.
X.HU set_display_chars
XSYNOPSIS: (set_display_chars str0 str1 ..)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to modify the internal control
X characters table. This table is used when a control
X character is to be displayed on the screen. By default,
X all control characters (except tab and newlines) are
X displayed as ^x, on those terminals which dont support
X alternate graphics sets. str0, str1, etc specify a string
X which is to be used to display ASCII value 0x00, 0x01, and
X so on upto 0x1f.
X
X Upto 32 arguments may be given, representing all the
X control characters. Extras may be omitted. See the macro
X source file edt.m for an example of how to use this macro.
X
X It is not possible to query the current settings.
X.HU set_msg_level
XSYNOPSIS: (set_msg_level msg_level)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to set the message level. The message
X level is used to control what sort of messages are to be
X displayed on the status line. It is needed by some macros
X which dont want CRISP internal messages to be displayed.
X
X msg_level is a number in the range 0-3 with the following
X effects:
X
X 0 This is the default - all message on.
X 1 normal messages (those printed via (message) are
X not displayed). Error messages still display.
X 2 error messages are disabled.
X 3 normal messages and error messages are disabled.
X
X Message level 3 can be used to ensure a macro is 'quiet'.
X.HU set_process_position
XSYNOPSIS: (set_process_position [line] [col])
X
XRETURN VALUE:
X
X Returns -1 if current buffer is not attached to a process;
X returns 0 otherwise.
X
XDESCRIPTION:
X
X This macro sets the line and/or column associated with the
X input from a sub-process. line & col are optional, and if
X specified are integer values specifying the line and
X column where input should carry on from.
X
X Processes maintain their own independent input in the
X buffer so that it is easier to write macros which
X manipulate sub-processes.
X.HU set_scrap_info
XSYNOPSIS: (set_scrap_info [insert_newline] [mark_type])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to set the newline at the end of the
X scrap buffer flag and possibly change the type of the
X scrap buffer.
X
X It is not currently implemented.
X.HU set_term_characters
XSYNOPSIS: (set_term_characters [top_left] [top_right] [bot_left]
X [bot_right] [vertical] [horizontal]
X [top_join] [bot_join] [cross]
X [left_join] [right_join])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to set the escape sequences needed to
X support the CRISP window drawing characters. These escape
X sequences are non-standard in the sense that termcap does
X not support them (although some of these are supported by
X terminfo, but CRISP does not currently support terminfo).
X
X This macro should be called before the display is enabled
X (see (enable_display)).
X
X Each parameter is either NULL indicating that no value is
X being provided, or an integer or string expression. If an
X integer expression is specified, then CRISP treats this as
X meaning that the escape sequence as such consists of a
X single ASCII character, whose value is given by the
X integer expression. If a string expression is given, then
X this string is printed when the specific character is
X needed on the display.
X
X The following parameters have the following meanings:
X
X top_left Printed at top left of window.
X top_right Printed at top right of window.
X bot_left Printed at bottom right of window.
X bot_left Printed at bottom left of window.
X vertical Printed at vertical line at side of
X window.
X horizontal Printed on horizontal line at top
X and bottom of window.
X top_join Character used at the top right and
X top left of windows where they abut
X each other. (Not currently implemented).
X bot_join Character used at the bottom right and
X bottom left of windows where they abut
X cross Character used to print where four
X windows intersect at a common corner.
X left_join Character used at intersection of
X three windows on the left side of main
X window.
X right_join Character used at intersection of
X three windows on the right hand side
X of main window.
X
XEXAMPLES:
X
X For examples of how this macro is used, refer to the
X tty/*.m macros, which have examples for a number of common
X environments.
X.HU set_term_features
XSYNOPSIS: (set_term_features [space] [char] [icursor]
X [ocursor] [vicursor] [vocursor]
X [escape] [repeat] [zerom]
X [color])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to specify certain attributes about the
X current display - features which are not adequately
X handled by termcap of terminfo.
X
X Each parameter is either NULL indicating that the feature
X is not available, or an integer or string expression.
X zerom and color are boolean expressions and only integer
X expressions (zero or non-zero) should be specified for
X these two. The others are escape sequences, along the
X lines of (set_term_characters).
X
X If these escape sequences are not specified, CRISP will
X still function but will not perform very well.
X
X If any of the escape sequences can be described as single
X ASCII characters then that particular parameter can be
X specified as an integer expression whose value is that
X ASCII character.
X
X The parameters describe the following features of the
X display:
X
X space This is an escape sequence used to
X blank out the next N character
X positions. This is usually defined as
X "\x1B[%dX" for those displays that
X understand the ANSI ESC [ X escape
X sequence. The escape sequence must
X have an embedded '%d' to specify where
X the numeric qualifier goes.
X
X If this escape sequence is not
X defined, then CRISP makes do with
X printing the correct amount of spaces
X and then moving the cursor back to the
X start of the cleared region. This is
X not as efficient as the ESC[X escape
X sequence when N is larger than about 8
X or 9 characters.
X
X char This is an escape sequence used to
X allow access to characters with the
X top bit set. Some displays, especially
X those based on the IBM/PC require a
X special escape sequence to access the
X characters with the top bit set.
X
X It is valid for a '%c' or '%d' to be
X embedded in the character definition.
X
X If this escape sequence is not
X defined, CRISP will avoid printing
X characters with the top bit set and
X will use the (display_mode) option
X instead.
X
X icursor, vicursor, ocursor, and vocursor
X These escape sequences are used to
X change what the cursor looks like.
X These sequences represent the insert
X cursor, virtual-insert cursor,
X overtype cursor, and virtual-overtype
X cursor respectively.
X
X If these escape sequences are not
X defined CRISP will display a two
X character mnemonic on the status line
X indicating what mode the cursor is in.
X
X repeat This defines an escape sequence for
X repeating the previous character
X printed. It is not currently used.
X
X escape This defines an escape sequence used
X for printing out the ESC character
X itself. This is available because some
X systems have a feature whereby there
X is a short cut to printing the ESC
X character.
X
X zerom If this is non-zero, then whenever an
X ESC[0m is printed, it is assumed that
X the background and foreground colours
X get reset. This is true of Interactive
X V.3 (although not Microport).
X
X color If non-zero, then terminal supports
X color. The escape sequences for color
X are built into CRISP. CRISP assumes
X that if this is set, that the ANSI X
X 3.64 escape sequences are valid.
X
XEXAMPLES:
X
X Refer to the tty/*.m files for examples of this macro.
X.HU set_term_keyboard
XSYNOPSIS: (set_term_keyboard range1 key-list1 range2 key-list2 ..)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to define the keyboard bindings. The
X keyboard bindings is an internal table to CRISP describing
X which physical keys on the keyboard generate which
X internal key code. All the keys CRISP knows about have an
X internal key code (usually in the range 128-255); PC-type
X keyboards can usually generate these key codes directly.
X On non-PC keyboards, eg SUN-3 keyboard, the function keys
X and LEFT/RIGHT keys can be used as a 'META' key prefix
X (much the way ALT is used on a PC keyboard).
X
X By default, each internal key is mapped to its own value;
X this requires a keyboard which can generate characters
X with the top bit set. By using this macro, it is possible
X to define the various function keys which exist on the
X keyboard to map to these internal key codes.
X
X The arguments to (set_term_keyboard) consists of a
X sequence of ranges and key-lists. The ranges exist to make
X it easy to allocate the keys and read the macro
X afterwards. This avoids having to call this macro with
X upwards of 100 key definitions, and the resultant
X inability to decipher mistakes made on the 51st argument,
X for example.
X
X The include file tty.h defines the ranges. A range is
X simply a number. The first function keys (<F1>..<F12>
X start at 128). By specifying a range of 128, this means
X that consecutive key definitions will start at this range,
X and be allocated consecutive slots from thereon. (See the
X tty-*.m files for an example of how this works).
X
X The key-list is simply a list of strings describing each
X consecutive key. If the keys are to be hard-wired, then
X the (quote_list) function will be very useful. Otherwise
X the list can be constructed with the other list primitives.
X
X Ambiguous key prefixes are allowed. This allows keys to be
X defined with the usual ESC-type prefixes. If the start of
X an ambiguous key sequence is typed, then CRISP will wait
X upto .5 second for more keystrokes to resolve the
X ambiguity. After this time, CRISP treats the original
X ambiguous characters as standalone. On some keyboards,
X viz. Suns, RTPCs, Microport and Interactive, this means
X that hitting the ESCape character will delay progress for
X 0.5 second, until CRISP realises that no more keys are
X coming.
X
X Because of this ambiguity problem, problems can arise when
X using CRISP across a network, for example. When using
X applications like telnet, keeping your finger on the <Up>
X or <Down> keys, etc, can cause CRISP to misread the
X keyboard, with the effect that instead of treating
X something like ESC[A as <Up>, it treats it as the single
X characters, ESC, [, A causing them to be inserted into the
X buffer. I do not know of any cure for this, except to
X increase the default .5 second timer. Increasing the .5
X second timer inside CRISP causes the side effect that
X hitting the ESC key at the buffer_list prompt, for
X example, causes an annoying delay.
X
XEXAMPLES:
X
X The following example is the first section of the
X (set_term_keyboard) macro from the tty/at386.m macro file.
X
X (set_term_keyboard
X F1-F12
X (quote_list "\x1BOP" "\x1BOQ" "\x1BOR" "\x1BOS" "\x1BOT"
X "\x1BOU" "\x1BOV" "\x1BOW" "\x1BOX" "\x1BOY"
X "\x1BOZ" "\x1BO[" )
X
X.HU set_top_left
XSYNOPSIS: (set_top_left [line] [col])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro sets the position of the current buffer
X attached to the current window for display purposes. It
X allows the calling macro to reframe the buffer.
X
X line and col are optional integer expressions which
X specify the line in the buffer which is to appear as the
X top line in the screen, and col specifies the column
X number which should appear in the top left hand position
X in the screen.
X
XEXAMPLES:
X
X The following example puts the current line in the center
X of the window (this is the macro normally mapped to
X <Ctrl-C>).
X
X (macro set_center_of_window
X (
X (int cur_line)
X
X (inq_position cur_line)
X (set_top_left (- cur_line
X (/ (inq_window_size) 2)))
X )
X )
X.HU set_window
XSYNOPSIS: (set_window win_id)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X Changes the current window to the window specified by
X win_id. win_id is a window identifier, as previously
X returned via (inq_window).
X.HU shell
XSYNOPSIS: (shell [command] [use_shell] [completion])
X
XRETURN VALUE:
X
X Returns the shell exit status (under Unix, 0 means command
X exited successfully, non-zero means command failed for
X some reason).
X
XDESCRIPTION:
X
X This command is used to execute a command in a shell.
X command is a string expression which evaluates to a
X command (with or without its arguments) which is exec()ed
X by CRISP.
X
X The use_shell parameter is an integer expression which
X controls whether the display should be left intact or not.
X If it is omitted or zero, then CRISP puts the terminal back
X into normal (cooked) mode and executes the command string.
X When the sub-process exits, CRISP repaints the screen. If
X use_shell is non-zero, then CRISP does not repaint the
X screen. Setting use_shell to non-zero is useful for things
X like the make and directory manipulation macros which know
X the sub-process cannot destroy the screen.
X
X The command string is passed to the shell so it can
X execute and interpret the command string (e.g. wildcard
X expansion, semicolons etc). The shell used is gotten from
X the SHELL environment variable. If this is not set, then
X CRISP tries the 'shell' environment variable. If this
X fails, it defaults to /bin/csh.
X
X The return from this macro is the shell exit status.
X
X If completion is specified, then it should be the name of
X a macro (in quotes - with optional arguments) which will
X be called when the sub-process terminates. When using this
X facility, you should set the use_shell parameter to 1 to
X avoid CRISP from waiting for the sub-shell to complete.
X
X The completion routine is called with the first parameter
X set to the return status from the underlying process. Any
X other positional parameters are shifted up one.
X
XEXAMPLES:
X
X The following macro can be used to get a subshell to type
X commands into. The user terminates the sub-shell by typing
X the usual ^D or exit. (This is the same as what <Alt-Z> is
X usually mapped to).
X
X (shell)
X
X The following example performs a 'who' command and saves
X the output in a temporary file so the calling macro can
X maybe display it prettily afterwards:
X
X (shell "who >& /tmp/who.tmp" 1)
X
X The '1' tells CRISP not to bother repainting the screen.
X
X The following example causes a macro to be called when the
X sub-process terminates. The sub-process then prints a
X message saying that the process has terminated.
X
X (shell "make" 1 "completion")
X .
X .
X (macro completion
X (
X (int status)
X (get_parm 0 status)
X (message "Job done status %d" status)
X )
X )
X.HU sleep
XSYNOPSIS: (sleep [sec])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro causes the calling macro to sleep for sec
X seconds (or 1 if omitted).
X.HU sort_buffer
XSYNOPSIS: (sort_buffer [bufnum])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro can be used to sort the lines in the current
X buffer or the buffer specified by bufnum. If the buffer
X specified has a region marked, then only those lines
X within the region are sorted.
X
X The lines are sorted alphabetically - there is no
X mechanism to perform sorting based on keys within each
X line, or based on other criteria, eg sorting numerically,
X etc.
X
X Be wary of this macro -- if it is used on a non-system
X buffer, it is not possible to 'undo' the sort.
X
X This macro is an experimental macro, and its functionality
X may change in the future or be deleted.
X
XEXAMPLES:
X
X The following example sorts all the lines in the current
X buffer into order:
X
X (sort_buffer)
X.HU sprintf
XSYNOPSIS: (sprintf buf fmt [arg1] [arg2] ..)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro acts like the C sprintf() function. It copies
X the string 'fmt' to the string variable 'buf' and applies
X the printf style formatting commands as specified in fmt,
X and using the argument list.
X
X Refer to the (message) macro for details on the formatting
X options available.
X.HU string
XSYNOPSIS: (string var1 var2 ..)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to define local variables which are to
X contain only string values. The variables defined are
X local variables, and are destroyed when the macro
X executing this declaration terminates.
X
X String variables can contain variable length strings (upto
X 2^32 bytes long on machines with 32-bit int's, and 2^16
X bytes on machines with 16-bit int's).
X.HU string_count
XSYNOPSIS: (string_count string char-list)
X
XRETURN VALUE:
X
X Returns the number of times the characters in char-list
X occur in the string parameter.
X
XDESCRIPTION:
X
X This macro is used to count the occurences of characters
X in the string argument. char-list can be a string with one
X or more characters in it. The string argument is parsed
X looking at each character to see if any of the characters
X from char-list match it.
X
XEXAMPLES:
X
X The following example counts how many spaces occur in the
X input string:
X
X (string s)
X (int num)
X (= num (string_count s " "))
X
X The following example counts how many upper case letters
X appear in the input string:
X
X (= num (string_count s "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
X.HU strip_cr
XSYNOPSIS: (strip_cr [strip])
X
XRETURN VALUE:
X
X Returns previous value of strip flag.
X
XDESCRIPTION:
X
X This macro controls the strip <CR> flag. By default, when
X CRISP reads a file into a buffer, it strips any
X carriage-returns at the end of the line. This makes it
X easy to edit DOS files for example which insist on
X <CR>/<LF> pairs at the end of each line; Unix only uses
X the <LF> as a line terminator.
X
X If the user wants the <CR>'s to remain intact, then this
X macro can be used to toggle or set the flag. If strip is
X omitted, then the strip flag is toggled; otherwise the
X strip flag is set to the value of strip. Non-zero causes
X <CR>'s to be stripped; zero causes <CR>'s to be left as is.
X
X If called from the keyboard, then one of the following
X messages are displayed on the status line.
X
X <CR> stripped from input files.
X <CR> not stripped from input files.
X.HU strlen
XSYNOPSIS: (strlen expr)
X
XRETURN VALUE:
X
X Returns the number of characters in the string expression,
X expr.
X.HU substr
XSYNOPSIS: (substr string start [length])
X
XRETURN VALUE:
X
X Returns the sub-string of string which starts at start,
X and goes on for length characters, or the end of the
X string if length is omitted.
X.HU swap_anchor
XSYNOPSIS: (swap_anchor)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro swaps the current cursor position with the
X start of the currently marked region, ie if the cursor is
X at the end of the marked region, the cursor is moved to
X the start of the marked block, keeping the marked block
X intact.
X.HU switch
XSYNOPSIS: (switch expr case-1 list-1 case-2 list-2 ..)
X
XRETURN VALUE:
X
X Returns the value of the last statement executed in list-n.
X
XDESCRIPTION:
X
X This macro implements the CRISP switch statement. expr is
X an integer or string expression which is evaluated and
X then compared with each of case-1, case-2, etc. case-1,
X etc should be expressions of the same type as expr. If a
X match is found, then the statements in list-n are executed.
X
X If CRISP encounters a case-n value of NULL, then this is
X taken to be the default and the list is unconditionally
X executed.
X
XEXAMPLES:
X
X The following example illustrates an example of integer
X switches. If the value of i, is 1, 2, or 3 then word is
X assigned the strings "one", "two" or "three" respectively.
X If i is not one of these three values, then word is
X assigned the ascii representation of i.
X
X (string word buf)
X (int i)
X
X (= word (switch i
X 1 "one"
X 2 "two"
X 3 "three"
X NULL (
X (sprintf buf "%d" i)
X buf
X )))
X
X The following shows the reverse:
X
X (string word)
X (int i)
X
X (= i (switch word
X "one" 1
X "two" 2
X "three" 3
X NULL (atoi word)))
X
SHAR_EOF
chmod 0644 help/crisp/prim/S.cmd || echo "restore of help/crisp/prim/S.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/T.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/T.cmd &&
X.HU tabs
XSYNOPSIS: (tabs [tab1] [tab2] .. [tabn] )
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to set the tab stops for the current
X buffer. tab1, tab2, set the first tab stops. Tab stops are
X set every (tabn - tabn-1) stops after the last tab stop.
X The first column in the line is column 1.
X
X Upto 5 unique tab stops can be specified, thereafter all
X tab stops default to the difference of the last two tab
X stops.
X
X In soft tab mode (see (use_tab_char)), whenever a tab is
X inserted into the text, enough spaces are inserted
X automatically to take the cursor to the next tab stop.
X When in hard tab mode, physical tab characters are inserted.
X
X When in hard tab mode, the tab stops only affect the way
X the text buffer is displayed; if tab stops other than the
X default 8 are used, then the user may have problems
X printing files or using other utilities to examine the
X file due to column misalignment.
X
XEXAMPLES:
X
X The following sets tab stops to every 4 columns:
X
X (tabs 1 5)
X
X The following sets tab stops to every 8 columns:
X
X (tabs 1 9)
X.HU time
XSYNOPSIS: (time [hours] [mins] [sec])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X hours, mins and secs are optional integer
X variables which receive the current time.
X
X hours is a number in the range 0-23; mins is a
X number 0-59; secs is a number 0-59.
X
XEXAMPLES:
X
X The current time can be printed as such:
X
X (int hours mins secs)
X (time hours mins secs)
X (message "Time now: %02:%02:%02" hours mins secs)
X
X.HU top_of_buffer
XSYNOPSIS: (top_of_buffer)
X
XRETURN VALUE:
X
X Returns non-zero if the cursor changed position; zero
X otherwise.
X
XDESCRIPTION:
X
X Moves the cursor to the start of line 1 in the current
X buffer.
X.HU top_of_window
XSYNOPSIS: (top_of_window)
X
XRETURN VALUE:
X
X Returns non-zero if the cursor changed position; zero
X otherwise.
X
XDESCRIPTION:
X
X Moves the cursor to the start of the line displayed at the
X top of the window.
X.HU transfer
XSYNOPSIS: (transfer buf_id start_line start_col end_line end_col)
X
XRETURN VALUE:
X
X Returns zero or less if unsuccessful; zero if successful.
X
XDESCRIPTION:
X
X This function is used to copy a block of text from one
X buffer to another. buf_id is the buffer identifier of the
X source buffer. start_line, start_col, end_line, and
X end_col specify the bounds of the text to be copied.
X
X The copied text is copied to the current buffer at the
X current cursor position.
X
X It is provided for compatability with BRIEF. It is usually
X far easier to use the region macros.
X.HU translate
XSYNOPSIS: (translate [pattern] [replacement] [global]
X [re] [case] [block])
X
XRETURN VALUE:
X
X Returns the number of translations.
X
XDESCRIPTION:
X
X This macro is used to perform string translations within
X the current buffer. pattern is the string to translate. If
X re is not specified or is non-zero, then pattern is
X treated as a regular expression, otherwise it is treated
X as a normal string. If case is not specified or is
X non-zero, then the search is performed case insensitively.
X If block is specified and is non-zero, then the search is
X limited to the currently hilited region.
X
X replacement is a string containing the string to replace
X pattern with.
X
X If global is specified and is non-zero, then every
X occurence in the current buffer from the cursor to the end
X of the buffer is translated. If global is zero, then only
X the first occurence is translated. If global is not
X specified, then the user is prompted for each change.
X
X If pattern or replacement is not specified, then the user
X is prompted for the change.
X.HU trim
XSYNOPSIS: (trim string)
X
XRETURN VALUE:
X
X Returns a copy of string with all trailing white space
X characters removed. (spaces, tabs and newlines).
X.HU typeof
XSYNOPSIS: (typeof expr)
X
XRETURN VALUE:
X
X Returns one of the string constants, "NULL", "integer",
X "string", or "list" depending on the type of expr.
X
XDESCRIPTION:
X
X This macro is an alternative way to determine the current
X type of a polymorphic variable.
X
SHAR_EOF
chmod 0644 help/crisp/prim/T.cmd || echo "restore of help/crisp/prim/T.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/U.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/U.cmd &&
X.HU undo
XSYNOPSIS: (undo [move] [write_mark] [redo])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This is the macro used to undo buffer modifications. When
X called with no arguments it undoes the last operation
X performed on the buffer, eg move the cursor, insert
X deleted text, unmark area, etc. If the previous operation
X on the buffer was a macro, or a complex operation, eg
X global translate, then all the buffer modifications
X performed are undone in one step.
X
X If move is specified and is non-zero, then the undo
X command undoes all buffer operations back upto the last
X buffer modification. If the last command was a buffer
X modification, then setting move to non-zero is equivalent
X to not specifying it. If the last few operations were
X simply cursor movements, then move goes back to the last
X point in the buffer where the buffer was actually modified.
X
X There is a separate undo stack for each buffer. Normally
X when a buffer is written away the undo stack is discarded
X so that it is not possible to undo any operations
X performed on the buffer before the last (write_buffer)
X operation. If write_mark is specified and is non-zero,
X then this allows the undo to go back past the last
X (write_buffer) mark.
X
X Unlike BRIEF, it is possible to call (undo) from within a
X macro, but its use their is highly dubious. It is normally
X called by the user directly from one of the key assignments.
X
X The redo parameter indicates whether a redo operation
X should be performed. If it is specified then a redo is
X performed, otherwise an undo is performed. A redo
X operation allows an undo to be undone.
X.HU unregister_macro
XSYNOPSIS: (unregister_macro n macro [local])
X
XRETURN VALUE:
X
X Zero if macro was not registered; 1 if macro was
X registered and has now been unregistered.
X
XDESCRIPTION:
X
X This macro is used to remove a macro which has been
X registered for a particular trigger. (See (register_macro)
X for a description of the triggers).
X
X If a particular macro has been registered more than once
X then (unregister_macro) should be called for each register
X of the macro. (The return from (unregister_macro) can be
X used in a loop).
X
X If local is set to 1, then the macro will be unregistered
X only if it was registered as a local macro. If it is
X omitted or not equal to 1 then both the local and global
X registered macro will be unregistered.
X
XEXAMPLES:
X
X The following unregisters all occurences of a macro:
X
X (while (> (unregister_macro trigger "macro_name") 0)
X (nothing))
X.HU up
XSYNOPSIS: (up [n])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro moves the cursor to the previous line in the
X buffer, maintaining the same column position. If n is
X specified then the cursor is moved to the n'th previous or
X n'th following (if n < 0) line.
X.HU upper
XSYNOPSIS: (upper string)
X
XRETURN VALUE:
X
X Returns a copy of string with all lower case letters
X mapped to their upper case equivalents.
X.HU use_local_keyboard
XSYNOPSIS: (use_local_keyboard kbd_id)
X
XRETURN VALUE:
X
X Returns 0 if operation successful; -1 if kbd_id is not a
X valid keyboard id.
X
XDESCRIPTION:
X
X This macro is used to associate a keyboard map with the
X current buffer. The local keyboard map takes precedence
X over the global keyboard map. Whenever this buffer is
X selected, the local keyboard map is searched for key
X bindings first; if there is no key binding for the key
X typed by the user, then the global keyboard map is
X searched as usual.
X
X kbd_id is the identifier of the keyboard as returned via
X (inq_keyboard).
X
X Local keyboards are usually used to effect things like
X language sensitive editing modes, eg in C mode, the braces
X '{' and '}' may be associated with a macro to perform C
X style indenting; obviously it is not a good thing to
X perform C style indenting on an nroff text buffer. Using
X local keyboards avoids macros being complicated by having
X to check the buffer type each time, and also make CRISP
X run faster.
X.HU use_tab_char
XSYNOPSIS: (use_tab_char yes)
X
XRETURN VALUE:
X
X Returns the previous value of the use tab char toggle.
X
XDESCRIPTION:
X
X This macro allows the user to specify whether hard or soft
X tabs should be used. yes is a string expression which
X should be set to "y" if tabs are to be physically inserted
X into the buffer; otherwise spaces are used instead to fill
X up to the next tab stop.
X
SHAR_EOF
chmod 0644 help/crisp/prim/U.cmd || echo "restore of help/crisp/prim/U.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/W.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/W.cmd &&
X.HU wait
XSYNOPSIS: (wait [status])
X
XRETURN VALUE:
X
X Returns -1 if there is no process attached to the current
X buffer.
X
XDESCRIPTION:
X
X This macro waits for the process attached to the current
X buffer to die. When the process dies, if status has been
X specified (the name of an integer variable), then the exit
X status of the process is placed in it.
X
X In order to avoid a situation where CRISP might hang
X waiting for the process to die, wait's can be interrupted
X by pressing any key on the keyboard. This can be
X classified as a bug, as pressing the interrupt character
X (default ^Y) would be a better solution.
X.HU wait_for
XSYNOPSIS: (wait_for [timeout] expr)
X
XRETURN VALUE:
X
X Returns -1 if there is no process currently attached to
X the current buffer, or user interrupted wait. Returns 1 if
X expr is a string expression and the expression matched;
X returns n if expr is a list and atom n matched.
X
XDESCRIPTION:
X
X This macro is used to wait for a sequence of characters to
X be output by the sub-process attached to the current
X buffer. timeout specifies how long to wait (in seconds)
X and if omitted or zero, the wait occurs indefinitely.
X
X expr is either a string expression, representing a regular
X expression of what is to be waited for, or a list of
X regular expressions. If it is a list, then a parallel
X match is performed as each character is read from the
X buffer. If any of the atoms in the list (all string
X constants) match the characters from the stream then
X (wait_for) terminates.
X
X This macro is used by the various process control macros
X to wait for magic strings, eg shell prompts.
X
XEXAMPLES:
X
X See dial.m and shell.m for examples of how to use (wait_for).
X.HU watch
XSYNOPSIS: (watch ...)
X
XRETURN VALUE:
X
XDESCRIPTION:
X
X This macro currently is a no-op. It is intended to allow
X macros to be written which allow other macros to be
X debugged. The idea is that a macro can monitor any
X variable to see if it gets changed. The code does not
X exist, and the ideas have not been thoroughly thought out
X yet.
X
X This may be supported in a later version of CRISP if there
X is sufficient demand.
X.HU while
XSYNOPSIS: (while expr [list])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to implement a while-loop. The
X expression expr is evaluated and if non-zero, the
X statements in list are evaluated. Afterwards, expr is
X tested again. This continues until either a (break)
X statement is encountered in list, or the expression
X evaluates to false.
X.HU window_color
XSYNOPSIS: (window_color [color])
X
XRETURN VALUE:
X
X Returns previous background color of window.
X
XDESCRIPTION:
X
X This macro is used to set the color of the background
X associated with a window, and is used only when borders
X are turned off.
X
X This macro is currently not implemented.
X.HU write_block
XSYNOPSIS: (write_block [filename] [append])
X
XRETURN VALUE:
X
X Zero or less if the macro was unsuccessful. Greater than
X zero if the write was successful.
X
XDESCRIPTION:
X
X This macro is used to write out the currently marked
X region to a file. If filename is not specified, then it is
X prompted for.
X
X Writing out a marked region does not affect the backup
X flag or the undo information flag. (See (undo),
X (set_backup)).
X
X The currently marked region is raised.
X
X If append is specified and is non-zero, then the marked area
X is appended to the file.
X.HU write_buffer
XSYNOPSIS: (write_buffer [filename] [append])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to write out the contents of the
X current buffer to a file. If filename is omitted then the
X file is written to the filename associated with the
X current buffer (ie, as specified via create_buffer).
X Otherwise filename is used.
X
X If this is the first time that write_buffer has been
X called for this buffer, then a backup copy of the file
X will be made. (See the section on making backups for a
X discussion of the algorithm used). Subsequent calls to
X write_buffer do not create backups.
X
X If append is specified and is non-zero, then the output file
X is appended to.
X
SHAR_EOF
chmod 0644 help/crisp/prim/W.cmd || echo "restore of help/crisp/prim/W.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/F.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/F.cmd &&
X.HU file_pattern
XSYNOPSIS: (file_pattern filespec)
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used in conjunction with the (find_file)
X macro to implement a directory lookup mechanism.
X
X filespec is a string expression which should evaluate to a
X file name or a wild-card filename. (find_file) can then be
X used to read the filenames of files which match the
X file-spec.
X
XEXAMPLES:
X
X See example in (find_file) for an example of how to
X iterate through all files in the current directory.
X.HU find_file
XSYNOPSIS: (find_file [name] [size] [mtime] [ctime] [mode])
X
XRETURN VALUE:
X
X Returns zero if there are no more files; returns 1 if next
X directory entry successfully received.
X
XDESCRIPTION:
X
X (find_file) is used in conjunction to evaluate filenames
X in a particular directory. The base directory and
X wild-card filename pattern are set via (file_pattern).
X Thereafter (find_file) can be called repeatedly, until it
X fails, receiving the next file name which matches the
X pattern set in (file_pattern).
X
X name is an optional name of a string variable, which
X receives the filename which matched the pattern if the
X (find_file) was successful. size is the size of the file
X (in bytes), and is an integer variable. mtime and ctime
X are the names of integer variables and receive the last
X modification and creation times, as returned by the Unix
X stat() system call. mode is the file mode as returned by
X stat(), and should be the name of an integer variable.
X
X There are two hash-defines in crisp.h which define two of
X the bit definitions for the mode field. These definitions
X are taken from the /usr/include/sys/stat.h file. If you
X use these #define's be careful to ensure they are
X compatible with your Unix system.
X
X For a more thorough example of the use of these
X primitives, see the abbrev.m macro file.
X
XEXAMPLES:
X
X The following example evaluates the names of all files in
X the current directory and inserts the names and mode
X information into the current buffer.
X
X (string name)
X (int mode size)
X
X (file_pattern "*")
X (while (> (find_file name size NULL NULL mode) 0) (
X (sprintf buf "file=%s, size=%d, mode=%x\n"
X name size mode)
X (insert (+ buf "\n"))
X ))
X.HU first_time
XSYNOPSIS: (first_time)
X
XRETURN VALUE:
X
X 1 if this is the first time a macro has been called; 0
X otherwise.
X
XDESCRIPTION:
X
X CRISP maintains an internal 'first_time' flag for every
X macro; after the first call to the macro, the flag is set
X to FALSE. This makes it easier for macros to perform a
X once-only initialisation.
X
SHAR_EOF
chmod 0644 help/crisp/prim/F.cmd || echo "restore of help/crisp/prim/F.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/O.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/O.cmd &&
X.HU output_file
XSYNOPSIS: (output_file [filename])
X
XRETURN VALUE:
X
X Nothing.
X
XDESCRIPTION:
X
X This macro is used to change the filename associated with
X the current buffer. By default the filename associated
X with the current buffer is the filename specified on an
X (edit_file) or (create_buffer) call. (output_file) allows
X this to be changed to the value of the string expression,
X filename.
X
X If filename is omitted, then the user is prompted for the
X new file name.
X
SHAR_EOF
chmod 0644 help/crisp/prim/O.cmd || echo "restore of help/crisp/prim/O.cmd fails"
mkdir help help/crisp help/crisp/prim >/dev/null 2>&1
echo "x - extracting help/crisp/prim/K.cmd (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/prim/K.cmd &&
X.HU key_to_int
XSYNOPSIS: (key_to_int key)
X
XRETURN VALUE:
X
X Returns an integer representing the internal key code
X assigned to the ascii key code, key.
X
XDESCRIPTION:
X
X This function is the inverse of int_to_key. It takes a
X keycode description in canonical form (ie compatible with
X (assign_to_key)) and returns the internal keycode.
SHAR_EOF
echo "End of part 6"
echo "File help/crisp/prim/K.cmd is continued in part 7"
echo "7" > s2_seq_.tmp
exit 0
--
===================== Reuters Ltd PLC,
Tel: +44 628 891313 x. 212 Westthorpe House,
UUCP: fox%marlow.uucp at idec.stc.co.uk Little Marlow,
Bucks, England SL7 3RQ
More information about the Comp.sources.misc
mailing list