v07i023: CRISP release 1.9 part 02/32
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Sun Jun 11 07:20:53 AEST 1989
Posting-number: Volume 7, Issue 23
Submitted-by: fox at marlow.UUCP (Paul Fox)
Archive-name: crisp1.9/part03
#!/bin/sh
# this is part 2 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file help/crisp/concept/Macros.hlp continued
#
CurArch=2
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/concept/Macros.hlp"
sed 's/^X//' << 'SHAR_EOF' >> help/crisp/concept/Macros.hlp
Xgo, without having to parse the data in the file.
X
X> Files and Macros
X
XA macro file can contain any number of macro definitions.
XWhen a macro file is read into memory, CRISP maintains a
Xtable of the defined macros.
X
XCRISP supports the concept of 'autoloading'. Rather than
Xpreload the entire set of macros on startup, which would
Xbe expensive in terms of time and memory use, CRISP can be
Xtold where to find a macro, via an autoload list. The
Xautoload list is a filename and a list of macros defined
Xin that file. If CRISP sees a reference to one of these
Xmacros, it will automatically load the file containing the
Xmacro definition. (See (autoload) for more details of this).
X
SHAR_EOF
echo "File help/crisp/concept/Macros.hlp is complete"
chmod 0644 help/crisp/concept/Macros.hlp || echo "restore of help/crisp/concept/Macros.hlp fails"
mkdir help help/crisp help/crisp/concept >/dev/null 2>&1
echo "x - extracting help/crisp/concept/Register.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/concept/Register.hlp &&
XRegistered macros are a means of creating a macro which
Xgets called when certain events internal to CRISP happen.
XThere are a number of pre-defined events:
X
X REG_TYPED
X REG_EDIT
X REG_ALT_H
X REG_UNASSIGNED
X REG_IDLE
X REG_EXIT
X REG_NEW
X REG_CTRLC
X REG_INVALID
X
XThese definitions are #define'd in the crisp.h macro file.
XThey are described below.
X
XAny macro can be registered for one of these events by
Xcalling the (register_macro) primitive. Whenever the event
Xis triggered the macro will be called. A macro can be
Xunregistered by calling the primitive (unregister_macro).
X
XAn arbitrary number of macros may be registered for the
Xsame event. If more than one macro is registered for the
Xsame event, then the macros are called in the order they
Xwere registered.
X
XRegistered macros are convenient short-hand ways of
Xintercepting certain operations within CRISP.
X
X> Type 0 (REG_TYPED) - Character Typed
X
XThis macro is called every time a character is inserted
Xinto a buffer via (self_insert).
X
X> Type 1 (REG_EDIT) - Different File Edited.
X
XThis macro is called whenever (edit_file) is called.
X
X> Type 2 (REG_ALT_H) - Context Help
X
XThis macro is called whenever the user presses <Alt-H>
Xwhilst at the command prompts.
X
X> Type 3 (REG_UNASSIGNED) - Unassigned key
X
XThis macro is called if the user presses a key which does
Xnot have a macro bound to it.
X
X> Type 4 (REG_IDLE) - Idle Timer
X
XThis macro is called whenever the idle timer goes off. The
Xidle timer is set by the CRISP command line switch (-i).
XIt defaults to 60 seconds.
X
X> Type 5 (REG_EXIT) - Exit from CRISP
X
XThis macro is called when CRISP is about to exit. It is
Xdesigned to allow macros to tidy up after themselves (e.g.
Xdelete temporary files).
X
X> Type 6 (REG_NEW) - New file Edited.
X
XThis macro is called whenever a new file is read into a
Xbuffer via (edit_file).
X
X> Type 7 (REG_CTRLC) - Interrupt Key Pressed
X
XThis macro is called whenever the interrupt key is
Xpressed. To avoid confusion, CRISP sets the interrupt key
X'out of the way' to <Ctrl-Y>. (<Ctrl-C> is usually mapped
Xto the center-line-in-window macro).
X
XThis feature allows macros to be interrupted. Following
Xthe usual safe programming style, it is only a good idea
Xto set a flag in the interrupt handler and test its value
Xin the main-line macro.
X
X> Type 8 (REG_INVALID) - Invalid Key Pressed.
X
XThis macro is called if the user types an invalid key at
Xthe command prompt. This macro allows the abbreviations
Xand command history feature to be implemented.
X
SHAR_EOF
chmod 0644 help/crisp/concept/Register.hlp || echo "restore of help/crisp/concept/Register.hlp fails"
mkdir help help/crisp help/crisp/concept >/dev/null 2>&1
echo "x - extracting help/crisp/concept/Proc.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/concept/Proc.hlp &&
XCRISP supports the ability to access sub-processes and
Xmonitor the output sent to and from the sub-process. This
Xallows you to run sub-shells, for example, from within a
Xbuffer in a similar fashion to a bit-mapped windowing
Xsystem, but only using the facilities of a character based
Xterminal.
X
XThere are a number of CRISP primitives which allow the
Xstatus of the sub-process to be monitored and altered, and
Xthe CRISP macros contain examples of the sorts of things
Xthat can be achieved with these primitives.
X
XThe processes are also referred to as pty's. This term (as
Xfar as I know) originates from the ancient TOPS-10
Xoperating system (circa late 60's). A PTY is like a normal
Xterminal, except there is no physical manifestation of the
Xterminal. Instead of input coming from a real user, the
Xinput comes from another program; output from the PTY can
Xbe read by the controlling program.
X
XIn CRISP, each buffer may optionally be associated with
Xone pty. This association is set up via the (connect) macro.
X
XPTYs in CRISP are controlled by CRISP itself. PTYs are
Ximplemented as sub-shells; the communications mechanism is
Xeither the standard Unix pipe, or the BSD pty driver (if
Xavailable). Data is sent to a sub-process by inserting the
Xdata in the buffer associated with the PTY.
X
XPTYs are very powerful mechanisms. A number of versions of
XUnix offer different mechanisms for accessing sub-jobs.
XOutput from the PTYs is done either by polling every
Xsecond, or by using the select() system call (if available)
X
XText can be sent to a PTY via the (insert_process)
Xprimitive. The shell.m macros implement a means for
Xtalking to pty's and echoing input typed by the user can
Xbe sent either a character at a time or a line at a time
Xto the process.
X
XWhen CRISP is waiting for keyboard input, it will check
Xthe sub-processes every second for output. It does not
Xcheck for input whilst other macros are running.
X
SHAR_EOF
chmod 0644 help/crisp/concept/Proc.hlp || echo "restore of help/crisp/concept/Proc.hlp fails"
mkdir help help/crisp help/crisp/env >/dev/null 2>&1
echo "x - extracting help/crisp/env/Env.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/env/Env.hlp &&
XCRISP uses various environment variables to control its
Xactions. These environment variables allow users to tailor
Xwhere they want to place certain parts of the CRISP
Xsupport environment, (eg help files and macros) or setup
Xdefault options.
X
XSome of these are used internally by the code itself (eg
XBFLAGS), others by the support macros, (eg BHELP).
X
XAll environment variables start with a 'B' for
Xcompatability with BRIEF.
X
X> BBACKUP
X
XThis is the name of a directory to contain backup files.
XThe directory should be writable by the user. CRISP
Xattempts to 'mv' the file to the backup directory. If the
X'mv' fails, e.g. backup directory is in a different file
Xsystem, the 'mv' fails, and CRISP renames the backup file
Xwith a '.bak' extension instead. The BBACKUP variable is a
Xsemi-colon delimited path of directories. CRISP tries to
Xmove the old file to each directory named. Thus, typically
Xthe super-user might create a /backup directory in each
Xfile-system, and setup BBACKUP to each such directory name.
X
XAlternatively, the user can create his own backup
Xdirectory (~/backup) and set BBACKUP to this value for a
Xprivate backup directory.
X
X> BFILE
X
XIf no file arguments are given on the command line, then
Xby default CRISP places the user in the buffer labelled
X'newfile'. Setting the BFILE environment variable allows
Xthe user to specify an alternate default file name.
X
X> BFLAGS
X
XThis environment variable can be used to augment the
Xdefault command line switches. CRISP processes the
Xswitches specified in BFLAGS after processing the flags on
Xthe command line.
X
XThe BFLAGS environment variable provides a simple way to
Xset up a private macro file to be invoked on start up. For
Xexample, setting BFLAGS to:
X
X BFLAGS="-i60 -mfox"
X
Xcauses the idle timer to be set to 60 seconds, and the
Xmacro file fox.cm to be executed. (fox.cm will be looked
Xfor in the default BPATH list or in the user's home
Xdirectory).
X
X> BHELP
X
XThis variable contains the path where the CRISP help files
Xare located. If it is not specified, CRISP uses the
Xinternal default:
X
X /usr/local/crisp/help
X
XSetting it to another value allows a site to put the help
Xfiles under a different path.
X
X> BKBD
X
XThis variable is used to define a macro file which is used
Xto define the labels which appear on your keyboard. CRISP
Xuses the PC keyboard names internally. This macro is only
Xrelevant to the 'Command Summary' option of the help menu
Xso that the keyboard keys are given meaningful labels to
Xyou. Currently there are two defined keyboard layouts -
X'pc' for generic PC keyboards and 'sun3' for a Sun type 3
Xkeyboard.
X
X> BLEVEL
X
XThis environment is set by CRISP when it is run, so that
Xnested invocations of CRISP can show to what level of
Xnesting has occurred. This is a hangover from the PC
Xversion of BRIEF which displays the level number in the
Xbottom right corner. This is done so that the user can
Xrealise he has nested invocations of CRISP.
X
X> BPACKAGES
X
XThis macro is reserved for use by the BRIEF/CRISP macro
Xlanguage sensitive editing modes. CRISP currently does not
Xsupport language sensitive editing (unless used with the
XBRIEF macros).
X
X> BPATH
X
XThis is similar to the standard PATH variable, and is used
Xby CRISP when it is trying to autoload a macro. The
Xdirectories should be separated by semi-colons, since some
Xmacros hardwire the parsing of the string. (This is in
Xcontrast to the PATH variable which is usually colon
Xdelimited).
X
X> BTERM
X
XBTERM is similar to the TERM environment variable, and is
Xused to access the special terminal description file which
XCRISP uses to define special escape sequences and function
Xkey bindings. If this environment variable is not set,
Xthen CRISP uses the value of TERM instead.
X
XWhen CRISP starts up, the macro file crisp.m causes the
Xfile tty/$BTERM.cm to be loaded as well. For example, if
XBTERM is set to 'sun', then the file tty/sun.cm gets
Xloaded. The tty/*.m files are responsible for configuring
XCRISP for the appropriate keyboard and screen layout.
X
X> BTMP and TMP
X
XCRISP creates files in a temporary directory. This is
Xusually /tmp. The files it creates here are for holding
Xthe undo buffer. (The file will not usually appear in
Xdirectory listings since the file is deleted as soon as it
Xis opened). If /tmp on your system is not very large and
Xyou wish to use an alternate directory, then you can
Xspecify this in the BTMP or TMP environment variables.
X
XCRISP looks in BTMP first; if this is not defined it tries
XTMP. If this isn't defined, it defaults to /tmp.
X
SHAR_EOF
chmod 0644 help/crisp/env/Env.hlp || echo "restore of help/crisp/env/Env.hlp fails"
mkdir help help/crisp help/crisp/env >/dev/null 2>&1
echo "x - extracting help/crisp/env/Tree.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/env/Tree.hlp &&
XThis section describes the layout of the files and
Xdirectories used by CRISP. This layout is the 'standard'
Xlayout. System administrators may opt for moving the top
Xlevel tree elsewhere in the file system, but the
Xsub-directories underneath should always be present.
X
X> The /usr/local/crisp Tree
X
XThis is the top level of the CRISP file hierarchy. The
Xfollowing sections describe the sub-directories located
Xwithin it.
X
X> The /usr/local/crisp/help Directory
X
XThis directory and all the sub-directories located within
Xit contain the help files used by the help macros. These
Xfiles are also used to form the CRISP reference manual.
X
X> The /usr/local/crisp/src Directory
X
XThis directory contains all the macros in source form (.m
Xand .h files) which come as part of the CRISP distribution.
X
X> The /usr/local/crisp/macros Directory
X
XThis directory is used to stored the compiled forms of the
Xmacros found in the /usr/local/crisp/src directory.
X
X> The /usr/local/crisp/utils Directory
X
XThis directory contains an odd assortment of files, some
Xof which derive from postings on the USENET.
X
Xkbd.c and keyboard.fox are my updated version of the
Xmapstr utility. This runs under 386/ix Unix V.3.2. and
Xcombines the features of the previous separate strings and
Xkeys file. You should compile this up and run it from your
X~/.login file if you are running under Unix V.3.2/386. It
Xhas not been tested with the latest versions of Xenix, but
Xit should work with them.
X
XThe file m286.malloc is a replacement for the malloc() code
Xlocated in /lib/libc.a for Microport 286 2.2 & 2.3
Xsystems, which is totally brain damaged. For users with
Xaccess to CRISP source code, this version of malloc should
Xbe used instead of the standard one. This file is not
Xreally relevant to other non-286 systems.
X
Xkeys.sv386 is a shell script for setting up some extended
Xkey definitions for Microport V.3/386 systems via the
X/etc/setkeys utility. It is used for things like
X<Ctrl-Left> and <Ctrl-Right> (the word-left and word-right
Xmacros).
X
Xstrings is a file which should defines the function key
Xmappings for Xenix 2.2.1 and later systems. This file is
Xused by the mapstr system utility. This file will need to
Xbe modified since the key definitions are defined using
Xthe \x escape convention, which mapstr does not
Xunderstand. keys is the keyboard mapping for Xenix. It
Xredefines things like the ALT-x keys so that they generate
Xkey sequences in agreement with the strings file.
X
XThe termcap file included in this directory is there for
Xpeople who have problems in that their system does not
Xprovide a termcap file (IBM 6150s) or their termcap file
Xappears to be 'wrong' when trying to use CRISP.
X
SHAR_EOF
chmod 0644 help/crisp/env/Tree.hlp || echo "restore of help/crisp/env/Tree.hlp fails"
mkdir help help/crisp help/crisp/env >/dev/null 2>&1
echo "x - extracting help/crisp/env/Switches.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/env/Switches.hlp &&
X> Command Line Switches
X
XCRISP has a number of command line switches for setting
Xvarious options when starting up. The CRISP usage string is:
X
X cr [-4bdfpstwE] [-i n] [-e n] [-K n] [-m macro] [+nn] file ..
X
XThe switches are described below. An arbitrary number of
Xfile names may be specified on the command line. Each file
Xmentioned is read into a separate buffer. The cursor is
Xleft in the buffer associated with the first file.
X
XSpaces are not necessary between switches and their
Xarguments. This is contrary to the standard AT&T practice
X(as specified by getopt(3)). This is done to preserve
Xcompatibility with the BRIEF software. This is also useful
Xfor arguments defined in the BFLAGS environment variable.
X
X> The -b switch
X
XThis switch controls the creation of backup files. If
Xspecified, CRISP will not create backup files.
X
X> The -d and -f switches
X
XThe -d switch is equivalent to executing the (debug) macro
Xbefore any of the standard macros are read in. This is
Xprovided so that it is possible to debug macros which
Xcause CRISP to crash on start up.
X
XThe -f switches is used to control flushing of the debug
Xlog file. Normally CRISP uses the stdio package to write
Xto the crisp.log file. If this switch is specified, then
Xevery call to trace something is immediately written to
Xdisk. This switch is provided because if a macro causes
XCRISP to crash, then the last partial buffer of output may
Xbe lost. The -f switch significantly slows CRISP down on
Xlarge debug traces.
X
X> The -i switch
X
XThis switch allows the user to change the default idle
Xtimer. The idle timer is used to allow registered macros
Xto be called after a certain amount of keyboard inactivity.
X
XThe argument specifies the number of seconds of keyboard
Xactivity. The default is 60 seconds.
X
X> The -m switch
X
XThis switch specifies a macro or macro file to execute on
Xstartup. The macro name may or may not be separated from
Xthe '-m' by a space. (For compatability with BRIEF). If
Xthe macro name is an internal primitive then that is
Xexecuted; otherwise CRISP looks for a macro file with the
Xname specified and executes the macro in that file with
Xthe same name.
X
XThe macro file can be placed in the users home directory.
X
X> The -w switch
X
XThis switch controls the (read_char) macro. Under DOS
Xrunning BRIEF, the (read_char) macro is used to poll the
Xkeyboard and returns -1 if there is no input pending. Some
Xmacros use the (read_char) primitive in a busy poll loop
Xwaiting for character input. This is an antisocial thing
Xto do under Unix, as it steals the CPU from other processes.
X
XBy default CRISP does not allow (read_char) to return -1,
Xbut instead will block until a character is available.
XThis may affect some macros which rely on this feature.
XRunning CRISP with -w makes (read_char) run compatibly
Xwith BRIEF.
X
XThis switch is antiquated and should be removed - it would
Xbe better to control this feature via an argument to
X(read_char).
X
X> The -e switch
X
XThis switch is similar to the (echo_line) macro primitive.
XIt is used to set the flags controlling the appearance of
Xthe echo status line (eg whether the Line:, Col:, etc
Xfields should be there).
X
XThe argument is the same argument as passed to
X(echo_line). Refer to this macro for further details.
X
X> The -K switch
X
XThis switch controls the size of the internal keyboard
Xmacro buffer. The default size is 512 characters.
X
XThis switch should not really exist - CRISP should
Xdynamically allocate space for the buffer.
X
X> The -t switch
X
XThis switch is similar to the (use_tab_char) macro. If
Xspecified, then CRISP will use soft tabs (inserts spaces
Xinstead of tabs); if omitted, then the default of using
Xhard tabs in buffers is in effect.
X
X> The +nn switch
X
XIf an argument of '+nn' is given (where nn is a line
Xnumber) then CRISP places the cursor on line nn in the
Xfirst file specified. This is provided for compatibility
Xwith vi.
X
X> The -4 switch
X
XThis switch is available only to users running on the
Xconsole of Xenix 386 rel 2.2, or Unix V.3.2. It is used to
Xput the screen into 43 line mode (available for EGA or VGA
Xscreens only).
X
XOn those systems which support 43-line EGA mode, CRISP
Xwill honor the current video mode setting. E.g., starting
XCRISP up in 43-line mode will cause it to use all 43 lines
Xwithout switching to 25-line mode.
X
X> The -E switch
X
XBy default, on startup, CRISP does not enable the display
X(ie no output appears). This is done so that the start-up
Xmacros can work out what screen display is in effect.
XTurning this switch on causes CRISP to use the internal
Xdisplay characters.
X
XThis switch is not recommended.
X
X> The -p switch
X
XThis switch can be used to turn on CRISP profiling
Xactivity. It is only useful to people with source code
Xaccess to CRISP for fine tuning of the code. If it is
Xspecified and CRISP has been compiled with the cc -p
Xoption, then CRISP will produce a mon.out output file.
X(See the (profile) macro).
X
X> The -s switch
X
XThis switch is used to print out some internal statistics
Xabout the execution of CRISP upon exit.
X
X
SHAR_EOF
chmod 0644 help/crisp/env/Switches.hlp || echo "restore of help/crisp/env/Switches.hlp fails"
mkdir help help/crisp help/crisp/env >/dev/null 2>&1
echo "x - extracting help/crisp/env/Startup.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/env/Startup.hlp &&
XThis section describes the sequence of events when
Xstarting up CRISP. It is provided for you to understand
Xthe interaction of the different start up macros in the
Xmacros directory.
X
XWhen CRISP starts up, it firstly initialises all its
Xinternal data structures. It then parses the command line
Xand remembers the names of all the macro's specified in
Xthe -m switches.
X
XIt then autoload's the macro (crisp). Since no autoload
Xdefinition is given for this macro, it looks to see if it
Xcan find a crisp.cm or crisp.m in its BPATH directory
Xlist. It normally resolves this into
X/usr/local/crisp/macros/crisp.cm. The CRISP macro is
Xresponsible for setting up the terminal and display
Xconfigurations (via the tty/*.m) files, and setting up the
Xautoload definitions for all the other macros provided
Xwith CRISP. Normally, users or system administrators will
Xnot modify this macro.
X
XThe CRISP macro is responsible for enabling the display
X(see (display_enable)). The display is not enabled until
XCRISP has worked out which terminal the user is using.
X(See the BTERM environment variable).
X
XIt then does the same thing for a macro called (startup).
XThe (startup) macro is provided for compatability with
XBRIEF. The startup macro is designed to allow system
Xadministrators to specify system defaults for certain
Xmacros, eg whether indentation is on, color of windows etc.
X
XCRISP then executes each macro specified by the -m
Xswitches, in the order specified. This allows the user to
Xset up an alias for CRISP, eg:
X
X alias cr cr -mmy_name
X
Xwhich will cause CRISP to execute a users personal macro
Xafter all the system defaults. If CRISP cannot find the
Xnamed macro, then the users home directory will be searched.
X
XAfter all of this, the files specified in the command line
Xare read in.
X
SHAR_EOF
chmod 0644 help/crisp/env/Startup.hlp || echo "restore of help/crisp/env/Startup.hlp fails"
mkdir help help/crisp help/crisp/env >/dev/null 2>&1
echo "x - extracting help/crisp/env/Kbd.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/env/Kbd.hlp &&
X
XThis section describes how a keyboard mapping may be set
Xup so that physical keys on your keyboard will call the
Xmacros you define them to.
X
X> Top-down Design
X
XThis section describes how the keyboard parsing works
Xwithin CRISP from a top down point of view, ie from the
Xpoint you hit a key, until a macro gets called.
X
XWhen a key is hit on the keyboard it will usually be a key
Xwith a label on it, e.g. a normal 'qwerty' key, or maybe a
Xfunction key. Different keyboards have different layouts,
Xand this is especially true of the markings on the
Xso-called function keys.
X
XWhen a key is hit, it will normally send either a single
Xcharacter to the host computer or a sequence of characters
Xif it is a function key. All function keys on a keyboard
Xnormally share a set of prefix characters, so that
Xkeyboard drivers in the operating system and applications
Xsoftware can determine which key is hit.
X
XSingle character keys usually send a value corrsponding to
Xthe ASCII value of the key.
X
XCRISP reads characters from the keyboard one character at
Xa time. If the character read from the keyboard
Xunambiguously defines a key, then CRISP goes onto the next
Xstep. Otherwise, it has to wait for one or more following
Xcharacters to decipher the keystroke. For example, if the
X<F1> key on your keyboard generates the sequence:
X<ESC>[1F, and the <F2> key generates the sequence
X<ESC>[2F, then CRISP cannot tell from the initial <ESC>
Xcharacter whether the <F1> or <F2> key has been hit.
XInstead of processing the <ESC> key directly it saves it
Xin a buffer waiting for subsequent keys to resolve the
Xambiguity. On seeing the '[' character next, it still
Xcannot identify the key. The next character will
Xunambiguously allow CRISP to determine that either <F1> or
X<F2> was pressed. However CRISP will continue reading
Xcharacters from the keyboard until it has not only
Xdetermined a unique key symbol but also has read all the
Xcharacters defining a key-stroke. Thus in this example, it
Xwill read the characters up to the 'F' character.
X
XOne added complication to the above description is what
Xhappens if the user hits the key labelled 'Esc' on the
Xkeyboard. In this case, CRISP cannot determine whether the
X<Esc> value generated is due to the ESC key being hit or
Xas a prefix to one of the function keys. In order to
Xresolve this ambiguity, CRISP will wait 0.5 of a second
Xfor subsequent keystrokes before continuing. For example,
Xif you hit the <Esc> key followed by no other keys, then
XCRISP will delay processing the <Esc> key for 0.5 of a
Xsecond. If you type any other character within 0.5 of a
Xsecond, for example the 'x' key, and CRISP can determine
Xthat '<Esc>x' is not part of a function key definition,
Xthen it will process the <Esc> key separately and then go
Xonto processing the 'x' key.
X
XHaving read in an unambiguous key-stroke, CRISP converts
Xthis to an internal representation. Essentially keystrokes
Xin CRISP are mapped into 8-bit numbers. The internal
Xencodings for characters 0..127 usually, but not
Xnecessarily, correspond to the 7-bit version of ASCII
X(printable characters plus control characters).
X
XNOTE: CRISP has no particular understanding of ASCII. It
Xis possible to input 8-bit characters, and have them
Xinserted directly into the current buffer, etc, but by
Xdefault the characters in the range 128..255 are mapped to
Xvarious macros. It is intended that maybe in a future
Xrelease CRISP will use 16-bit keycodes, but at present it
Xdoes not do so. It is not difficult to amend the code to
Xdo so (I think it should just be a matter of changing a
X#define and a few hardcoded constants in the code).
X
XThe 8-bit key code is used to directly index into a
Xkeyboard map table (refer to the (keyboard_push),
X(keyboard_pop) macros). A keyboard map is essentially an
Xarray of 256 elements, each element pointing to the name
Xof a macro or a list of commands to execute when the key
Xis executed.
X
XThus from here, we have a very simple 'inner' loop of the
XCRISP code - read character/function-key, lookup entry in
Xkeyboard map, execute macro assigned to keystroke.
X
X> Attributes of a Keyboard Description
X
XThere are two main aspects of a keyboard description which
Xcause problems when moving from one type of keyboard to
Xanother. Firstly, CRISP must be told what function keys
Xgenerate which key-sequences, so it can parse them
Xcorrectly and thus map each keystroke into its internal
X8-bit form.
X
XSecondly, the macros which CRISP is provided with assume
Xan IBM/PC style of keyboard.
X
XThe second problem aggrevates the first. Some of the
Xinternal code of CRISP 'just knows' that you have a key
Xcalled <F1> on your keyboard. Unfortunately, you may not
Xactually have such a key, and thus any C code or macro
Xcode which makes reference to the <F1> key will not work
Xon a keyboard which doesn't actually have an <F1> key.
X
XThere are three main pieces of code in CRISP which 'knows'
Xabout your keyboard. In the file config.c there is a set
Xof initial keyboard macro bindings which are used when
XCRISP starts up, and these tend to get overridden by the
Xcrisp.m macro file. These bindings are mainly there so
Xthat CRISP can be run in a very naive mode when debugging
Xnew startup code, or whilst setting up new macro
Xdefinitions.
X
XThe other two areas of code is the code which maps
Xkey-strings to the internal 8-bit character format (refer
Xto (assign_to_key), (key_to_int) and (int_to_key)). E.g.
Xthere is code in CRISP which 'knows' how to convert the
Xstring "<F1>" to the magic number 128.
X
XThe macros themselves refer to key labels with respect to
Xmy PC/AT keyboard. This is partly due to the desire to
Xmaintain compatability with the original BRIEF editor, but
Xalso it served as a starting point in getting CRISP up and
Xrunning.
X
XWhere things get complicated is when you look at something
Xlike the (buffer_list) macro, or the Command line prompt.
XThe (buffer_list) macro remaps the keyboard so that for
Xexample, when you press the <Down> key, the current
Xhilited line will be unhilited and the line below it (if
Xthere is one) will be hilited. When the <Enter> key is
Xpressed, the buffer currently hilited will be selected.
XThe (buffer_list) macro manipulates 'virtual keys' or
X'symbolic keys'. Ie these are not actually hardcoded
Xvalues, but names which are mapped internally by the
Xinternals of CRISP.
X
XWhen you press the <Down> key, the CRISP keyboard driver
Xconverts this into an internal value, and executes the
Xmacro assigned to this key-sequence.
X
XYou - as a porter of CRISP to your system - will have set
Xup a set of keyboard bindings, via the the tty/*.m files
Xusing the (set_term_characters), (set_term_features) and
X(set_term_keyboard) macros.
X
XWhat you have to do is ensure that if your keyboard has a
Xkey labelled, for example <Undo> that CRISP is told what
Xthe character sequence which makes up this keystroke is
Xdefined (via the (set_term_characters) macro).
X
XThe big problem a number of prospective porters face is
Xthat there may not be a one-to-one correspondence between
Xthe keys which are available on a PC/AT keyboard, and the
Xkeys on your keyboard. Eg, a VT-100 keyboard has a very
Xdifferent and less functional layout compared to a PC
Xkeyboard.
X
XThus, the first step is to make a list of function keys on
Xyour keyboard and find out how they map to the keys
Xavailable inside of CRISP. Eg you may decide that the key
Xlabelled <L1> on your Sun keyboard is to have the same
Xfunctionality as the <F1> key on the AT keyboard, or
X<LEFT-A> is to be the same as <ALT-A> on a PC keyboard.
X
XOnce you have set up your terminal description file, we
Xare nearly ready to go.
X
X> Getting Things Wrong
X
XThere is a deficiency in the way CRISP does things at the
Xmoment, and that is the way in which CRISP is very
Xfamiliar with the PC/AT keyboard, and you, the porter,
Xhave to do a fair amount of work to get your keyboard
Xlayout correct.
X
XIf you get your keyboard layout wrong, then you may
Xexperience problems. There are two major problems - not
Xdefining a key, and defining a key with the wrong internal
Xmagic number.
X
XLets say you dont define an <F1> key. Things aren't too
Xbad, but any macro which binds the <F1> key to a macro
Xwill not be accessible. <F1> isn't too harsh, but consider
Xwhat will happen if you dont bind the <Down-Arrow> key. In
Xthis case you will not be able to scroll down pop-up menus
Xor move the cursor down within the text buffer. Thus at a
Xbare minimum you should set up definitions for things like
X<Right-Arrow>, <Left-Arrow>, <Up>, <Down>.
X
XThe other thing to get wrong, is to bind your
X<Right-Arrow> key to the wrong internal magic number. In
Xthis case the messages displayed by the macros will be
Xvery misleading.
X
XFor example, suppose you map <Up> to the internal value
Xrepresented by the <F1> key. In this case, whenever you
Xpress the <Up> key, CRISP will think you pressed the <F1>
Xkey. If you've bound the <F1> key (via (assign_to_key)) to
Xthe macro primitive (up), then you wont experience any
Xproblems. But now lets suppose you call up one of the
Xpop-up menus, eg (buffer_list) again. The (buffer_list)
Xmacro creates a new keyboard mapping, and sets up bindings
Xfor <Up>, <Down>, etc, but NOT <F1>. Thus when you select
Xthe (buffer_list) macro, you will not be able to move the
Xcursor upwards because the buffer list macro does not
Xassign anything to the <F1> key.
X
XThe moral of this story is - please do not get your
Xmappings wrong - and also - I must make things easier. I
Xdo try, but obviously things are not as easy as they
Xcould/should be.
X
X> The BKBD Environment Variable
X
XThe BKBD environment variable is a mechanism for fixing
Xone half of the problems in the keyboard driver. The
Xproblem it fixes is allowing macros to generate messages
Xwhich are keyboard independent. For example, the (grep)
Xmacro prints a message saying that you can use the <ALT-E>
Xkey to edit the output from the GREP command. It is pretty
Xpointless saying 'Use the <ALT-H> key for help' if you
Xhave no <ALT-H> key on your keyboard.
X
XYour bindings may be different to mine. The BKBD
Xenvironment variables provides a means in which on a Sun
Xkeyboard, for example, you will get a message saying
Xsomething like '<LEFT-H> for help' instead of '<ALT-H> for
Xhelp'.
X
XAs has been described before, the BTERM environment
Xvariable is used to form part of the name of a macro (the
Xtty/*.m) macros so that terminal specific features of a
Xscreen maybe defined. The BKBD variable allows the
Xdescription of a terminal to be split into the display
Xpart (BTERM) and the keyboard part (BKBD). The BTERM
Xenivironment variable causes a macro file tty/$BTERM.m to
Xbe loaded. The BKBD variable causes a macro file
Xkbd/$BKBD.m to be loaded.
X
XThe kbd/*.m files simply defining a global list containing
Xthe key-top labels for all the function keys on your
Xsystem. Currently there are keyboard definitions for PC/AT
Xtype keyboards and for a Sun keyboard/type 3.
X
XIt is not as important to get this file correct as it is
Xto get the tty/*.m files correct. Getting a keyboard
Xdescription file wrong will only cause message labels on
Xpop-up windows to refer to the wrong key.
X
X> Future Possibilities
X
XI may move the keyboard mapping features of the
X(set_term_characters) macro out of the tty/*.m files into
Xthe kbd/*.m files.
X
XI may also add a feature which allows you to override the
Xinternal magic numbers in CRISP so that you dont need to
Xmap your keyboard keys to PC/AT type keytops.
X
XIn general, if you make make any changes to CRISP to
Xsupport your keyboard/screen, then I will be happy to
Xaccept them into my standard release. This means that
Xwhen/if I change the organisation of the keyboard binding
Xcode, you wont have to make the same edits that I have to.
X
XI am always open to suggestions and
Xperformance/ease-of-use improvements to make all our lives
Xeasier.
X
X
SHAR_EOF
chmod 0666 help/crisp/env/Kbd.hlp || echo "restore of help/crisp/env/Kbd.hlp fails"
mkdir help help/crisp help/crisp/features >/dev/null 2>&1
echo "x - extracting help/crisp/features/Compile.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/features/Compile.hlp &&
XCRISP contains a number of macros to help simplify the
Xtask of building software.
X
XCurrently, two macros are defined - (make) and (lint).
XThese are both accessible from the <F10> Command: prompt.
X
X> The (make) Macro
X
XThe make macro is designed to get over the problem of
Xissuing a make command to a shell prompt, only to have any
Xerror messages get scrolled off the screen. The usual
Xsolution to this is to redirect the output of make to a
Xfile. However, Murphy usually strikes and the one time you
Xforget to redirect output is the one time when you have a
Xmillion and one errors.
X
XThe make macro not only captures the output of a make
Xcommand but also is designed to understand the error
Xmessages coming from the standard Unix C compiler. (Other
XC compilers can be catered for by modifying the make macro
Xto understand the syntax of the error messages).
X
XThe simplest way to invoke make, is to simply hit <F10>
Xand type 'make<CR>'. The make macro pops up a window which
Xcontains the output from the running make. Note that
Xwhilst this is happening it is not possible to use CRISP.
XIf any keys are struck whilst the make window is on the
Xscreen, then CRISP closes the pop up window, and continues
Xwhere it left off. This is a bug which at the moment has
Xnot been fixed. The reason this bug exists is that I am
Xdebating about providing a user interface for supporting
Xpop-up windows in an Xwindows style of window manager.
XCurrently the user interface is designed around tiling,
Xwhich is insufficient for macros which take a long time,
Xlike (make). If a key is accidentally hit, the compilation
Xcontinues in the process buffer allocated for the make. In
Xthis case the thing to do is to switch to the buffer named
X'Compilation-Buffer' (eg try <Alt-B>). Then the progress
Xof the make can still be viewed.
X
XWhen the make finishes (ie the sub-shell terminates),
XCRISP will search the log buffer to see if there are any
Xerror or warning messages from the compiler. If so, the
Xmake macro will put the cursor on the line of the first
Xerror in the appropriate file. The actual error which
Xappeared in the log file will appear on the status line
X(slightly trimmed to make it fit).
X
XThe make macro cannot cope with syntax errors in files
Xwhich do not appear in the current directory. This is a
Xlimitation due to the syntax of the error messages
Xgenerated by the C compiler.
X
XAfter the make macro has finished execution, it reassigns
Xthe macro for the <Ctrl-P> and <Ctrl-N> keys. Typing
X<Ctrl-N> will take you to the next line which has an
Xerror; <Ctrl-P> will take you to the previous error. When
Xthe last error has been displayed, the message 'No more
Xerrors.' will be displayed on the status line. Pressing
X<Ctrl-P> or <Ctrl-N> again will continue to loop through
Xthe errors.
X
XIf the make completes successfully, then the message 'Make
Xcompleted successfully.' will appear in the status line.
X
XThe make macro understands about making different targets
Xin the make file. To make a target different to the
Xdefault, type the target name after the 'make' command.
XFor example, to compile and install the software might be
Xachieved by typing:
X
X <F10> make install<CR>
X
X> The (lint) Macro
X
XThe lint macro is similar to the (make) macro described
Xabove. It calls the make macro with an argument of lint.
X(ie (make lint)). Thus, it expects there to be a makefile
Xin the current directory with a target of lint within it.
X
XThe lint macro is provided to overcome the problems of
Xgetting reams of output from lint, and having to
Xcontinually flick backwards and forwards between the
Xoutput from lint and the source files with portability
Xproblems.
X
XThe (lint) macro firstly performs a 'make lint' in the
Xmake compilation window, and then masturbates the output
Xfrom lint so that each line of output from lint looks like
Xa warning/error message from the compiler. Once the lint
Xmacro has finished, the user can scan through the errors
Xvia <Ctrl-N> and <Ctrl-P>. (See above for details).
X
SHAR_EOF
chmod 0644 help/crisp/features/Compile.hlp || echo "restore of help/crisp/features/Compile.hlp fails"
mkdir help help/crisp help/crisp/features >/dev/null 2>&1
echo "x - extracting help/crisp/features/Filename.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/features/Filename.hlp &&
X> The (display_file_name) Macro
X
XThis macro is a utility macro to display the current file
Xname on the status line. When editing a buffer, it is
Xsometimes difficult to distinguish between two buffers if
Xthey contain files with the same filename but different
Xpath names. Since the title of a window is the file-name
Xpart of the full path, it helps to have a command
Xavailable to display the full unambiguous name.
X
XThe (display_file_name) macro is selectable from the
Xfeatures menu (The 'Current Filename' option).
X
XIf the filename is too long to fit on the status line,
Xthen the filename is truncated at the right and three dots
X'...' are inserted to show that the filename has been
Xtruncated.
X
SHAR_EOF
chmod 0644 help/crisp/features/Filename.hlp || echo "restore of help/crisp/features/Filename.hlp fails"
mkdir help help/crisp help/crisp/features >/dev/null 2>&1
echo "x - extracting help/crisp/features/Grep.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/features/Grep.hlp &&
X> The (grep) Macro
X
XThis macro is used to overcome the usual problems of grep
Xdisplaying more than a screen full of output, and
Xforgetting to use 'more' or 'pg' to capture the output. In
Xaddition the grep macro allows the user to visit each file
Xwhich contains the pattern selected.
X
XThe format of the grep macro is:
X
X (grep "pattern" "filename(s)")
X
XGrep is normally called directly from the keyboard (either
Xusing the selection from the Features menu, or by typing
X'grep' at the Command: prompt).
X
XIf (grep) is called without any parameters, then it
Xprompts for the pattern and filenames. Filenames can be
Xwildcarded (they are passed to the shell for processing).
X
XWhilst grep is operating it prints the message:
X
X Locating text...
X
XWhen the grep process has finished, a pop-up window is
Xdisplayed on the screen containing the output from the
Xgrep command. The user can move around this buffer with
Xthe usual cursor movement keys. The current entry is
Xhighlited. Pressing <Enter> on any particular line will
Xcause the grep macro to edit the file in which that line
Xoccurs and go directly to the line selected.
X
XThe grep macro also re-maps the <Ctrl-N> and <Ctrl-P>
Xkeys. Pressing <Ctrl-N> will take you to the next
Xfile/line in the output from grep. <Ctrl-P> takes you to
Xthe previous line. Thus, repeated use of <Ctrl-N> allows
Xthe user to easily see the context (lines around the
Xmatching pattern) within each file.
X
XThe (grep) macro also supports a 'Change-Mode'. In this
Xmode, the user can modify the lines in the grep pop up
Xwindow, eg to make global substitutions, and by hitting
Xthe <Esc> key, all the changes can be made to the
Xdifferent files in one go. This is useful for example, in
Xorder to make a change to a variable name across all
Xsource files.
X
SHAR_EOF
chmod 0644 help/crisp/features/Grep.hlp || echo "restore of help/crisp/features/Grep.hlp fails"
mkdir help help/crisp help/crisp/features >/dev/null 2>&1
echo "x - extracting help/crisp/features/Options.hlp (Text)"
sed 's/^X//' << 'SHAR_EOF' > help/crisp/features/Options.hlp &&
XThe options menu allows the user to temporarily change
Xvarious modes and flags in CRISP during the course of the
Xcurrent editing session. Permanent changes can be placed
Xin one of the CRISP start-up macros.
X
XThese options are collected together in one menu, since it
Xis usually difficult to remember the particular macro name
Xor options to these macros. These options tend to get
Xchanged when the user has to perform a task which is out
Xof the ordinary. For example, a programmer will normally
Xhave his keyboard layout set up for easy manipulation of
Xprograms, but occasionally (yes I know its difficult) will
Xhave to produce a memo or write some documentation.
X
XBecause writing documentation is something which may not
Xbe performed often, the user may forget which macros and
Xoptions are available to him/her. Therefore the options
Xmenu is designed to have all those easy to forget features
Xto hand.
X
XThe options menu currently has the following selections:
X
X Autoindenting
X Documents
X Status Line
X Searching
X Tabs
X
X> Autoindenting
X
XCRISP provides a macro for performing auto-indenting.
XAuto-indenting comes into operation when the user hits the
X<Enter> key.
X
XThe auto-indent macro works by going to the beginning of
Xthe current line to find out in which column the current
Xline starts. It then moves the cursor to the next line
Xwith the cursor underneath the first white space character
Xin the line above.
X
XThe auto-indenting macro understands about whether you
Xhave selected hard or soft tabs. This is necessary, since
Xif you need to un-indent on a successive line, you will
Xpress the <Backspace> key. Therefore to allow <Backspace>
Xto operate properly, the auto-indent macro inserts enough
Xspaces or tabs to take the cursor to the same column as
Xthe first non-space character in the previous line.
X
XAuto indenting is implemented via the (autoindent) macro
Xwhich is automatically called from the Options menu. When
Xthe autoindent option is selected, the macro asks whether
Xyou want autoindenting on or off:
X
X Turn autoindent on (y/n) ?
X
XIf you specify 'y', then autoindenting is turned on. If
Xyou specify any other response then autoindenting is
Xturned off. If you wish to abort the selection, just type
X<Esc>.
X
X> The Documents Option
X
XThe documents option collects together some of the
Xpreferred options for editing text files. There are three
Xoptions available at present - the setting of the right
Xhand margin where word wrap is to appear, whether text is
Xto be filled to have an even right hand margin or whether
Xthe margins are to be left ragged, and auto word-wrap.
X
XThere are two ways to do word-processing like
Xjustification of input text - autowrap and manual
Xreformatting. Autowrap causes the cursor to wrap around to
Xthe next line when the right hand margin is reached.
XAutowrap is a very CPU intensive activity. Manual
Xreformatting occurs by selecting a paragraph or a group of
Xparagraphs highlited with <Alt-A>, <Alt-M> or <Alt-L>).
XOnce the region has been highlited, the area can be
Xreformatted with the <Ctrl-F> key or from the 'Region
XManipulation' option in the Features menu. (See section on
XRegion Manipulation in the Features section).
X
X> The Status Line Option
X
XThis option lets the user turn on and off various fields
Xon the status line. This macro is simply an interface to
Xthe (echo_line) macro primitive which actually controls
Xthe appearance of the status fields.
X
XThere are four fields on the status line which may be
Xturned on and off:
X
X The Line: field
X The Col: field
X The percentage field
X The time field
X
XBy default, CRISP displays the line, column and time fields.
X
XThe Line: field is used to display the current line number
Xin the file.
X
XThe Col: field displays the current column position.
X
XThe percentage field displays how far through the file you
Xare as a percentage. If you are on the first line of a
Xbuffer, then this is displayed as 0%; the last line of the
Xbuffer displays as 'END'.
X
XIt is useful to display the line and column number, but
Xsome people may prefer to turn these options off.
X
XOn slow terminals, it is useful to avoid displaying all
Xfields, as they cause a lot of cursor movement.
X
X> The Searching Option
X
XThe searching option controls three parameters when
Xsearching:
X
X regular expressions
X case sensitivity
X block searching
X regular expression syntax mode
X
XThe regular expressions option control whether strings
Xentered at the search prompts should be treated as regular
Xexpressions or whether they should be treated as literal
Xstring patterns.
X
XCase sensitivity controls whether alphabetic characters
Xshould be compared as equivalent if they only differ in
Xtheir case, ie whether 'A' should match 'a'.
X
XBlock searching controls what happens when a search is
Xrequested and the current buffer is highlited. If this
Xoption is turned off then the search is performed as if
Xthe buffer was not highlited. If this option is on then
Xthe search starts from the beginning of the currently
Xselected region and continues until a pattern is found or
Xthe end of the region is reached.
X
XRegular expression syntax mode indicates whether regular
SHAR_EOF
echo "End of part 2"
echo "File help/crisp/features/Options.hlp is continued in part 3"
echo "3" > 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