VED Manual
NOTE:
This was originally intended to be a printable file. However, it got
corrupted a few years ago, and the original, from which the formatted
version was derived, has been lost. So it has been re-formatted in a
form that makes it easier to access online, and some minor corrections
added to bring it up to date. There are several REF files that provide
more complete and up to date overviews of part of the information in
this manual. However, for the present this manual retains its usefulness
for anyone wishing to program VED, until a completely new version can be
provided.
Readers are assumed to have the basic knowhow provided by the tutorial
files:
TEACH * TEACH, TEACH * VED, TEACH * BUFFERS.
Useful REF files include
REF * VED, * VEDCOMMS, * VEDPROCS, * VEDTERMINALS, * VEDVARS
Useful HELP files include
HELP * VED, * TERMINAL, * VEDCOMMANDS, * VEDSEARCH, * DOCUMENTATION
HELP * VEDKEYS, * VEDNEWKEYS, * LOGICAL_KEYS, * VEDSYSFILE
VED Reference Manual
by
Chris Slymon, Aaron Sloman and John Gibson
(original version 1983)
School of Cognitive and Computing Sciences
University of Sussex
Brighton, BN1 9QH
CONTENTS - (Use g to access required sections)
-- 1.0 INTRODUCTION
-- 2.0 STARTING VED
-- 2.1 Entering from Monitor Level
-- 2.1.1 Starting VED on VMS Systems
-- 2.1.2 Starting VED on UNIX Systems
-- 2.2 Starting VED from within The Poplog System
-- 2.2.1 Editing Files
-- 2.2.2 Examining Documentation And Library Files
-- 3.0 OVERVIEW OF VED PROCESSING
-- 3.1 Initialisation Procedures
-- 3.2 Overview of VED process
-- 3.3 VED top level procedure - vededitor
-- 3.4 VED's interaction manager -vedprocess-
-- 4.0 AUTOMATIC TERMINAL SELECTION
-- 5.0 FILENAMES
-- 5.1 Filename Length
-- 5.1.1 VMS Systems
-- 5.1.2 Version Numbers in VMS
-- 5.1.3 Directories in VMS
-- 5.2 UNIX
-- 5.2.1 Multiple Versions
-- 5.2.2 Directories
-- 6.0 FILE ACCESS
-- 6.1 File protection on VMS Systems
-- 6.2 Unix Systems
-- 7.0 COMMAND EXECUTION
-- 7.1 Character Table Mechanism
-- 7.2 Tables: Stucture And Access
-- 7.3 Tables: Alteration
-- 7.4 Command line interpretation
-- 7.5 Command Buffer
-- 7.6 Defining New Commands
-- 7.6.1 Autoloading
-- 7.6.2 Error Handling And Messages
-- 7.6.3. Error Handling Procedures
-- 7.6.4 Debugging Ved Procedures
-- 8.0 REPRESENTATION
-- 8.1 Text
-- 8.2 Tabs
-- 8.2.1 Vednotabs
-- 8.2.2 Vedhardtabs
-- 8.3 Variables
-- 9.0 BUFFERS
-- 9.1 File Record Maintenance
-- 9.2 Manipulating Buffer Records
-- 9.3 Manipulating arbitrary text blocks
-- 10.0 WINDOW SIZE
-- 10.1 Window Position
-- 10.2 Aligning The Screen
-- 10.3 Putting Files On Screen
-- 11.0 INPUT AND OUTPUT
-- 11.1 Interaction with the terminal
-- 11.2. Input
-- 11.3 Output to VED buffer or screen
-- 11.3.1 Output to screen
-- 11.3.2 Printing in the editor
-- 11.3.4 Suppressing output to the screen
-- 11.3.5 Refreshing and updating the screen
-- 11.3.6 Screen Control
-- 11.3.7 Graphics
-- 11.4 Files in VED
-- 11.4.1 Reading files from disk
-- 11.4.2 Writing files to disk
-- 11.4.3 Disk Quotas
-- 11.4.4 Procedures For Writing To Disc
-- 11.4.5 Automatic Writing Of Files
-- 11.4.6 Input from VED buffer to program
-- 11.4.7 Output To VED Buffer
-- 11.5.1 Break Mode
-- 11.5.2 Character Insertion
-- 12.0 STATIC MODE
-- 13.0 CURSOR POSITIONING
-- 13.1 Procedures For Changing The Cursor Position
-- 13.2 Syntax Directed Moves
-- 13.3 Testing The Edit Position
-- 13.4 Position Stack Commands
-- 14.0 MARKED RANGES
-- 15.0 DELETE COMMANDS
-- 15.1 Yanking: retrieving deleted text
-- 15.2 Moving And Copying Text
-- 16.0 COMPILE FROM BUFFER COMMANDS
-- 16.1 Compiling From Disc Files
-- 16.2 Compilers
-- 16.3 Compiling Buffers
-- 16.4 Compiling Sections Of The Buffer
-- 16.4.1 Output
-- 16.4.1.1. Error Messages
-- 16.4.1.2 Interactive programs
-- 16.5 PROLOG Compilation
-- 16.6 Other Languages
-- 17.0 LEAVING VED
-- 17.1 To VED
-- 17.2 Quitting to Poplog
-- 17.2.1 Procedures For Returning Control To Poplog
-- 17.3 To DCL (VMS) or SHELL (Unix)
-- 18.0 SEARCH AND SUBSTITUTE COMMANDS
-- 18.1 vvedsrchstring
-- 18.2 ved_search
-- 18.3 ved_backsearch
-- 18.4 vedtestsearch
-- 18.4.1 vedlocate
-- 18.4.2 vedbacklocate
-- 18.5 Search Strings
-- 18.6 Examples
-- 19.0 COMBINED SEARCH AND SUBSTITUTION COMMANDS
-- 19.1 Interactive Substitution
-- 19.1.1 Replacement Strings
-- 19.1.2 Examples
-- 19.2 Non-interactive Substition
-- 20.0 MISCELLANEOUS PROCEDURES
-- 20.1 Compilation
-- 20.2 Deletion
-- 20.3 Interactive Definition Commands
-- 20.4 ved_dk
-- 20.5 Writing To Disk
-- 20.6 Text Formatting
-- 20.7 Case transformation
-- 20.8 Further ENTER commands
-- 20.9 Text Input Functions
-- 20.10 Pop-11 Format Insertion
-- 21.0 APPENDIX 1: Some important VED variables
-- 22.0 APPENDIX 2: Variables associated with each buffer
-- INDEX
0.1 INTRODUCTION
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
VED is a display-editor developed for the Poplog system at the
University of Sussex. It combines a powerful set of basic mechanisms and
facililities making it possible to extend indefinitely the range of
commands available. It can work either on a "dumb" VDU or on a
sophisticated workstation, with either the Poplog Window Manager or the
X windows system.
VED contains many features not normally found in combination:
a) Several files may be edited and displayed on the screen
simultaneously.
b) Cursor movement is not confined to the text areas.
c) Cursor positions can be stored and returned to later.
d) The screen can scroll horizontally (left and right) to accommodate
lines that are longer than the screen width.
e) In-built syntatic knowledge allows compilation of individual
procedures, syntax-directed searches, etc.
f) Text and program formatting facilities are provided.
g) Editing commands typed on the 'command line' are stored and may be
repeated without retyping, or edited to correct mis-spellings etc.
h) A portion of a file may be marked and the marked range taken as
input to a program, or as commands to a command interpreter. Output
may be either interleaved with the commands in the same file, or sent
to a different file displayed on the screen. So, for example, a file
in the editor may function as a complete log of an interaction with
some program, and may subsequently be edited, saved on disc, etc.
i) The editor can provide a window for interacting with the shell on
Unix systems or with DCL on VMS. This enbles commands to be edited
and redone, and output comes into the editor buffer.
j) Editor subroutines may be accessed from user programs, thereby
enabling VED to be used as a general purpose terminal independent
user interface that can be read and typed into by human users, and
can be read and printed into by programs. In particular VED can
produce a simple character-based graphical facility.
k) In combination with search lists and a built in cross referencing
mechanism, VED can provide a hypertext-like browser for online
documentation and program libraries. Different categories of
documentation are catered for, and users can add new libraries in the
basic categories or extend the documentation categories.
VED is written in Pop-11, an AI language similar in power to LISP but
with a syntax more like PASCAL. All the editor procedures are Pop-11
system procedures and are available to the user. Similarly all the
editor data structures are Pop-11 data structures (strings and vectors).
This allows users who wish to extend or tailor the editor to their own
requirements considerable flexibility.
This manual attempts to explain the internal mechanisms of VED and to
describe the range of VED procedures that are available. Some details
concerning VED are only summarised here, with pointers given to more
elaborate online documentation in Poplog HELP or REF files.
Some Pop-11 procedures are described in detail, but the reader will
normally be referred to the comprehensive (and labyrinthine) on-line
help system for information on Pop-11. (See HELP * POPREFS for books on
Pop-11.)
Some details are operating system specific, either VAX-VMS (tm) or UNIX
(tm). Poplog runs on a variety of Unix operating systems. Also some of
the facilities depend on whether the Poplog Window Manager is in use, or
the X Windows system. See REF * VEDTERMINALS for more information on
terminal types and how they are recognized by VED.
The editor is under continuous development. Enhancements are announced
in the online HELP * NEWS file.
All commands, procedure names, and VED variables are in lower case, and
a few in a mixture of upper and lower case. In order to make them stand
out in the text some identifiers may be presented in upper case. In most
cases hyphens are used instead, as in -vedsetwindow- the name of a
procedure.
Some of the VED functions have "logical" names. A partial list is given
in HELP * LOGICAL_KEYS
0.2 STARTING VED
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
0.3 Entering from Monitor Level
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
For Poplog users, the login procedure will usually define a command
"ved" that enables the editor to be called directly from monitor level
e.g. to start editing a file called 'change.me', users would type, to
DCL on VMS or the shell on Unix:
ved change.me
The mechanisms used for invoking Poplog in this and other ways are
described in REF * SYSTEM and HELP * PARAMETERS. The details of the
initialisation process, (e.g. compiling user setup files called init.p
and vedinit.p) are described below.
0.4 Starting VED on VMS Systems
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The command for running VED must be defined as a 'foreign' command, to
enable arguments to be passed to the image. This can be done in
either the system's or user's login.com file:
ved :== $usepop:[pop.pop]pop11 """sysinitcomp(); ved
The three quotes are DCL string notation and USEPOP is the logical
name for the home device of the [POP...] directory tree. See the
Poplog file $USEPOP:[POP.COM]POPENV.COM and the Poplog Administrator's
Guide for more information.
0.5 Starting VED on UNIX Systems
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The UNIX system works in a similar fashion using shell environment
variables to supply the arguments. See the files
$usepop/pop/com/poplog
$usepop/pop/com/popenv
The directory for Poplog executable images ($popsys) should be added
to the environment variable PATH. This directory should also contain a
link from a file VED to the Pop-11 image.
The system interprets the name X under which it is run from the
translation of the environment variable "pop_X". If a translation is
found, it replaces arg0 and the other arguments are then shifted
'right' one place, arg0 becomes arg1, etc.
The environment variable popved should then be defined as it is
(implicitly) in $usepop/pop/com/popenv
setenv popved ":sysinitcomp(); ved "
0.6 Starting VED from within The Poplog System
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The commands for entering VED from within Poplog are all defined as
Pop-11 macros or as special commands defined in the other Poplog
languages: Prolog, Lisp and ML.
These commands initialise the editor in slightly differing ways
depending on whether VED is to be used for creating and editing user
files (using the "ved" command), or for examining the system's library
and on-line documentation files (using one of "showlib", "teach",
"help", "ref" or "doc").
The reader is referred to a later section for advice on the treatment
of filenames.
0.7 Editing Files
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Once VED is running it maintains a list of current files in a Pop-11
list called -vedbufferlist-. There will usually be one or more of these
files displayed in a window on the terminal, though if control has been
temporarily handed back to Pop-11 or another language the files will be
invisible. It is possiible to have more files in the list than are
currently displayed. In particular on simple VDUs there will normally be
only one or two files displayed, though with window managers it is
possible to display each separate VED file in a different window. The
library program described in HELP * WINDOWS shows how the number of
files displayed at once on a VDU screen can be increased beyond the
normal maximum of 2.
No matter how many different files are displayed there will always be
one file which is the "current" file, and this one is the first file in
-vedbufferlist-.
Each file is represented by a number of attributes, 34 of them at the
time of Poplog Version 14, and when a file becomes current these
attributes are assigned to Pop-11 global variables, including -vedline-,
-vedcolumn-, -vedlineoffset-, -vedcolumnoffset-, -vednotabs-, etc.
The Pop-11 macro VED should be used to edit or create files with VED
ved
Similar commands are available from other Poplog languages, as explained
in the Poplog User Guide and the VED User Guide. The "ved" command
searches for the named file, in the directory specified in the filename
or, if no directory is part of the filename then it searches in the
current directory and places it on the screen if it is found.
Information about extending the list of directories where VED searches
is described in HELP * VEDSEARCHLIST
If no filename is given the filename held as the value of -vedvedname-
is used. -vedvedname- initially has the value 'temp.p' but each call of
VED with a filename updates -vedvedname- so that it always refers to the
most recently edited file, if one exists.
The procedure -vedveddefaults- is called by VED every time a new file is
read in to the buffer. This is initially equal to -identfn-, a procedure
which does nothing, but may be altered by the user to produce different
default values for VED variables, e.g. to set -vedwriteable-,
-vedbreak-, or -vedcompileable-, depending on the filename. In addition
the mechanisms described in HELP * VEDFILETYPES can be used to control
initialisation of VED buffers.
E.g. -vedveddefaults- can be defined to make -vednotabs FALSE for '.p'
files (this makes VED convert leading spaces to tabs on output).
define vedveddefaults();
not(sysisprogfile(vedcurrent)) -> vednotabs
enddefine;
-vednotabs- is one of several VED variables associated with each file.
0.8 Examining Documentation And Library Files
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The TEACH, HELP, DOC and REF macros can be used to examine the Poplog
systems on-line documentation files with VED e.g
ref words
help vars
The SRC and SHOWLIB macros can be used to examine files from the
Poplog systems source and program libraries with VED e.g
showlib showlib
All these commands are all defined in terms of the procedure
-vedsysfile-. This requires three arguments:
1) a word whose valof is the filename.
2) a list containing a directory path to be searched for the file.
3) an initialisation procedure to be run before editing commences.
E.g. the TEACH command, which enables the user to examine simple
instruction files for computer novices, is defined as
vedsysfile( "vedteachname", vedteachlist, vedhelpdefaults)
-vedteachname- is the variable holding the name of the TEACH file to be
examined, either a user-supplied filename or a system default (which
is usually either an index or instruction file).
The default name is updated in such a way that it always refers to the
most recent TEACH file or the system default. When quitting a TEACH
file, VED searches the current list of files being edited for a TEACH
file and if one exists, makes that the value of -vedteachname-.
The default name variables are all of the same form, e.g. -vedsrcname-,
-vedrefname-. See REF * VEDVARS.
-vedteachlist- is the list of directories to be searched looking
for the specified file, when the "teach" command is used.
The search procedure is -vedgetlibfilename-. This takes a directory
list, a default filename and a filename. It searches the directories in
the list till it finds a file of the given name and returns the full
path name of the file, also assigning that name to be the new valof the
default filename, e.g.
vedgetlibfilename(popuseslist,"vedlibname",'flatten.p')
returns popautolib:flatten.p and makes this the valof (vedlibname).
The directory lists may be altered by the user to include personal
libraries or exclude some system directories. The initial lists are
arranged so that the "local" directories are searched before the
system directories.
The initialisation procedure -vedhelpdefaults- is called every time a
new file is read in to the buffer. This puts VED into a write-protected
mode, preventing accidental corruption of the system files.
0.9 OVERVIEW OF VED PROCESSING
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
0.10 Initialisation Procedures
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
On entry to both the Poplog system and VED an attempt is made to
compile certain initialisation files and run initialisation
procedures. This enables users to define their own utilities to
extend VED and to alter default settings of editor variables. A
listing of the default values for VED variables is in Appendix 1.
On entry to the Pop-11 system an attempt is made to compile the file
init.p. from the POPLIB directory. POPLIB is a user-assignable
logical name/environment variable that should refer to a directory
that be used for the users library files. The default assignment will
usually be the user's login directory.
If init.p is NOT found in POPLIB, Pop-11 attempts to compile init.p
from the current directory.
When VED is first called, it first attempts to compile the file
vedinit.p firstly from POPLIB, and failing that, from the current
directory.
It then runs the user definable procedure -vedinit-. This can be defined
in the user's init.p or vedinit.p but defaults to -identfn-, which does
nothing.
Whenever a new file is created, or read in from disk, the
user-definable procedure -vedveddefaults- is run (default value is also
-identfn-), unless the file is a system library file, e.g. a HELP, or
TEACH, or SHOWLIB file (see above), in which case -vedhelpdefaults- is
run. In addition, after running -vedveddefaults- VED runs
vedsetfiletypes(vedfiletypes)
where -vedfiletypes- is a user definable mapping from a path name to
initial values of VED variables associated with the file.
(See HELP * VEDFILETYPES).
After the file has been read in but before it is set on the screen, the
user-definable procedure -vedinitialise- (with no arguments) is run.
Finally if the new VED buffer is to be made visible on a VDU then the
procedure -vedinitfile- (with no arguments) is run. It is also run every
time a user file is set on the screen for editing, even when it has been
in the editor for some time.
The variable -vedfileprops- is associated with the 'current' file and
may be used by user procedures, e.g. to record that -vedinitfile- has
been run (this would enable VED to behave differently the first time a
file is edited) . The default value of -vedfileprops- is FALSE.
0.11 Overview of VED process
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The following chart summarises the whole process of running VED,
including initialisation:
MONITOR LEVEL
|
V Compile init.p
ENTER Poplog
|
V
|
ENTER VED
| Compile vedinit.p
| &
V Run -vedinit-
| Initialise terminal setup
|
START LOOKING FOR FILE (using search list) <-----------*
| |
FOUND FILE |
| Run vedveddefaults, and use vedfiletypes ^
V |
READ IN FILE (or create new empty one) |
| |
V Run vedinitialise |
| |
PUT FILE ON Run -vedinitfile- |
SCREEN |
| |
V ^
DO EDITING Run -vedprocess- |
| (May include editing several new files)-->-*
V Repeatedly runs -vedprocesstrap- and
| -vedcommandtrap-
|
QUIT A FILE Run -vedvedquitfile-
|
V
QUIT VED Return to Pop-11, Prolog, Lisp or ML
| (Return to VED with "ved " command)
V
|
QUIT POPLOG Runs -vedpopexit- -popexit-
This chart does not include the direct invocation of VED procedures
by user programs, which can happen either inside or outside VED.
Whenever a large init.p or vedinit.p has to be compiled, the use of a
saved image containing the modified VED will save time. The HELP files
SYSSAVE and SYSRESTORE explain how to save and restore images.
0.12 VED top level procedure - vededitor
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
When VED is running this is in the context of the procedure -vededitor-,
which is called with two arguments
vededitor(, )
There are two cases to consider, depending whether VED is already
running (detected by testing whether -vededitor- is TRUE)
(a) If already in VED then -vededitor- simply gets the file, using
the defaults set up by the first argument and -vedfiletypes-, i.e.
it runs
vedgetfile(, )
(b) If it is not already in VED then -vededitor- calls -vedsetup- to
initalise VED, and starts up VED, including switching to raw mode.
It gets the ved file, as above, does anything necessary to inform
the window manager that it has started, then calls a procedure to
run the interaction with the terminal:
vedprocess()
If this ever exits then the screen is reset to non-raw mode, and any
tidying up of windows is done.
0.13 VED's interaction manager -vedprocess-
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
This procedure sets up some of the environment for VED, including
redefining -interrupt- to be -vedinterrupt- and -prmishap- to be
-vedprmishap-.
It then repeatedly cycles round a loop, reading in characters from the
terminal and taking action depending on what is typed in.
On each cycle, it tidies up the screen and the status line if necessary,
calls a user-definable procedure of no arguments called -vedprocesstrap-
and then reads in enough characters to identify a command.
This task is done by the procedure -vedprocesschar-, also of no
arguments.
-vedprocesschar- repeatedly reads input via -vedinascii- which returns a
character or procedure, assigned to -ved_last_char-
If ved_last_char is a procedure it is obeyed, and control returns to
-vedprocess-.
If ved_last_char is a character, then vedgetproctable(ved_last_char) is
used to read in more characters until a recognizable character sequence
has been found. This makes use of the character tables -vednormaltable-
-vedescapetable- and their sub-tables, as described below. The result of
reading in a sequence of characters should be that a procedure is found
which is then run. In many cases there will simply be the procedure
-vedinsertvedchar-, which takes no arguments and simply does:
vedcharinsert(ved_last_char)
I.e. the character typed in is put in the VED buffer.
If the ENTER key is pressed, then the character sequence will be
recognised as requiring the procedure -vedenter- to be run. This
transfers the cursor to the status line (command line) and allows a
command to be built up. Many of VED's procedures have to check whether
they are being invoked from the status line or not, using the boolean
variable -vedonstatus-. Commands on the status line go into a special
VED buffer, and the visible command line is just an ordinary VED window
showling one line of that buffer.
One procedure that has a different action on the command line is
-veddocr-, the procedure associated with the RETURN key. In normal
circumstances -veddocr- just inserts a line break. If it is in an
"immediate mode" VED file as described in HELP * IM, then it hands the
current line to the compiler associated with that file. If invoked on
the status line, however, -veddocr- attempts to get the command obeyed.
It does this by running the procedure -veddocommand-. This essentially
has to work out what command is intended. Some, like the search
commands, are recognized directly as built in, but others can be
interpreted as commands to run user-defined or other procedures whose
names start "ved_" and end with the command name. Details are described
below in the section on Command line interpretation, and also in
HELP * VEDCOMMANDS
The user definable procedure of no arguments, -vedcommandtrap-, is run
just before each command.
Further details of all these processes are described below.
0.14 AUTOMATIC TERMINAL SELECTION
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The initial state of VED is dependent upon the terminal being used.
Different terminals require different command sequences to control the
screen etc. Selection between terminals may be done automatically on the
first call of VED. The mechanisms were drastically revised for Poplog
Version 14.
Details may be found in REF * VEDTERMINALS and HELP * TERMINALS.
Further information about initialisation sequences can be found in
REF * SYSTEM and HELP * INITIAL.
0.15 FILENAMES
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
This section describes the treatment of filenames by the Poplog
system, in particular some possible side effects of the interface with
particular operating systems.
0.16 Filename Length
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Whilst there is no limit to the length of filenames within Poplog,
operating systems tend to impose a limit on filename length. Whenever
an attempt is made to access a file whose Poplog "name" is longer than
the host operating systems limit, the Poplog file handling utilities
will truncate the name to an acceptable length - a process which may
have unforseen side effects.
E.g. on a system that accepts 8 character filenames, with an optional
file type, the command
:ved longfilenumberone.p
will result in VED reading or creating the file LONGFILE.P. This is
the same file that would be edited with the command
:ved longfilenumbertwo.p
To avoid confusion it is better, if possible, to restrict filenames to
the length allowed by the host operating system.
See also the discussion of autoloadable files in the chapter on
command mechanism.
0.17 VMS Systems
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
VAX-VMS allows filenames to contain up to 39 alphanumeric characters
with a file type of up to 39 characters and a version number, e.g.
verylongfilename.longfiletype;32
File names that are longer than 39 characters will be truncated to the
initial 39 characters.
VAX-VMS allows underscore characters (_), in filenames in addition to
alphabetic and numeric characters.
Truncation of file names and file types is done by the procedure
SYSFILEOK, described in REF * SYSUTIL/sysfileok
0.18 Version Numbers in VMS
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
VED can be used to edit specific versions of a file if supplied with a
version number. E.g.
:ved file.lsp.2
Subsequent attempts to write this file to disc may fail if a version
of the file exists with a version number that is one greater than the
currently edited file, e.g. FILE.LSP.3.
Renaming the file to the current name, without the version number will
allow the file to be written.
0.19 Directories in VMS
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Directory names are not truncated. Attempts to access files in
non-existent directories, or from directories with more than the
permitted number of characters in the name will produce an error.
0.20 UNIX
.-.-.-.-.-.-.-.-.-.-
Non-Berkeley type UNIX systems allows filenames to contain up to 14
characters. Any user defined fields e.g. file types or version numbers
must be included in these 14 characters. FILENAME.EXT.1 is an
acceptable filename but FILENAME.EXT.12 is not.
Poplog asumes that filenames on Unix systems contain only two fields,
file-name and file-type, separated by a full-stop e.g. file1.foo -
version numbers are not supported, old versions of files are
distinguished by `-` characters appended to the end of the file name
(see below).
File names that are longer than 14 characters will be truncated.
Whilst its length permits, only the file-name will be truncated, the
file-type will not be altered. E.g. LONGFILENUMBERONE.PLJ- will become
LONGFILE.PLJ-
As Berkeley-type UNIX systems, e.g. SUNOS, Dynix and HP-UX 6.5 or
later allow very long file names, VED will not normally need to
truncate.
A dollar sign at the beginning of a filename signifies that the next
word is an environment variable, e.g. $poplib/FOO refers to the file
FOO in the user's pop-library directory.
Poplog allows filenames containing the cshell metacharacters \, $, ",
(, [, !. The shell escape character (the backslash \) must be used
when referring to these files from the shell. E.g. foo[d is an
acceptable filename to Poplog, but this must be referred to as foo\[d
from the shell.
0.21 Multiple Versions
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Poplog does not support version numbers for files on Unix systems.
Instead, a chain of files is maintained where the numbers of `-`
appended to the filenames indicates the generation order of the files.
The number of versions of files that will be maintained by the system
is POPFILEVERSIONS, i.e. POPFILEVERSIONS = 3 means maintain the
lastest version (foo1) and two old versions (foo1- and foo1--).
0.22 Directories
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Attempts to access files in non-existent directories, or from
directories with more than 14 characters in the name e.g.
directorynameandahalf/whynot.try, will produce an error.
0.23 FILE ACCESS
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
0.24 File protection on VMS Systems
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
On VAX-VMS systems the default protection for the directory containing
the file applies. This cannot be altered from within VED.
0.25 Unix Systems
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The access mode for writing new files is controlled by the variable
POP_FILE_MODE, for which 8:0664 (i.e. -rw-rw-r--) is the default
value.
0.26 COMMAND EXECUTION
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
All actions performed within the editor are affected by the execution
of Pop-11 procedures. There are two command mechanisms for accessing
and executing these procedures:
1) Key sequences are associated with particular procedures via a
table-lookup mechanism
2) Certain procedures can be called by name from the command line
at the top of the edit window.
0.27 Character Table Mechanism
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
VED maps characters read from the terminal onto Pop-11 procedures of no
arguments through a tree of tables and lists using the following
algorithm (the procedure -vedprocesschar-):
Read a character.
Look up the corresponding entry in the vector -vednormaltable-
If it is a procedure apply it.
If it is undef, sound the terminal bell.
If it is a vector or a list, read another character and use it
to access this structure. Repeat this process until
either a procedure or undef is found.
In its normal setting -vednormaltable- maps ordinary printing characters
onto the procedure -vedinsertvedchar- and - (ASCII 27) onto the
vector -vedescapetable-. This in turn, maps the character -vedquery-
(default ?, ASCII 63) onto the vector -vedquerytable-
It may be necessary for the user to set up different tables to cater for
non-standard terminals. See REF * VEDTERMINALS and HELP * TERMINALS
0.28 Tables: Stucture And Access
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Tables may be either lists or vectors, the different methods used for
referencing these structures are invisible to the user.
The vectors used by VED are 127 element vectors, each element being a
Pop-11 procedure, another table or UNDEF. These vectors are accessed
using character ASCII codes as subscript values, e.g. CTRL-A (ASCII
1) will point to the first element of a vector and X (ASCII 88) will
point to the 88th element.
Lists used by VED as a character table must contain a series of
entries of the form: character code followed by a procedure. The
list is accessed by searching the list for the relevant character
code. If the code is present in the list the following item is
returned, otherwise UNDEF. E.g
[% `a`, ved_aa,
`B`, ved_ab %] -> vednormaltable(`a`);
maps the procedure ved_aa onto the character sequence ab and the
procedure ved_aB onto the sequence aCTRL-B.
0.29 Tables: Alteration
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The character tables use by VED can be altered with the procedure
-vedsetkey- :-
vedsetkey(,- );
VED's character tables are altered so that the characters in the
string map onto the item, which must be a procedure or a string.
If the item is a procedure, it will be executed whenever VED reads the
character sequence represented by .
e.g. to make the sequence ? Q refresh the screen, with the
procedure -vedrefresh-
vedsetkey('\^[?Q', vedrefresh);
(where \^[ represents in a string)
When the item is a string, the characters in this string will be
placed in VED's input stream and will themselves be read by VED.
e.g. to make CTRL-E insert a line containing enddefine;
vedsetkey('\^E', '\renddefine;\r');
(where \r represents in a string)
Attempts to use -vedsetkey- to define abbreviations e.g.
vedsetkey('def', 'define');
will NOT work. VED checks that the first string is not a sub-string
of the second string. Consider the example above, whenever 'def' is
typed, 'define' will be put into the input stream, 'def' will be read
again and 'define' once more fed into the input stream. This will
continue until the system runs out of memory and generates a mishap.
Abbreviations must start with a "special" character e.g. CTRL-A
vedsetkey('\^Ad', 'define');
It can be wasteful to use long strings as the first argument to
-vedsetkey- as several character tables will have to be created.
Strings containing three 's in a row should also be avoided as
this sequence is used by some VED procedures.
See also -ved_dk- for an interactive version of -vedsetkey-.
See HELP * VEDKEYS for a complete listing of the default key/procedure
mappings. The default mappings preceding Poplog Version 14 are in
HELP * VEDOLDKEYS
Since Poplog Version 14 a new syntax has been provided for tailoring
VED. This is aimed at users who do not know Pop-11 and do not wish to
learn to use the Pop-11 string notation. See HELP * VEDSET.
0.30 Command line interpretation
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Any Pop-11 procedure whose name starts with the prefix 'ved_' can be
called directly from the command line at the top of the edit-window by
typing the procedure name without the prefix, followed by . E.g.
typing q on the command line will cause the procedure -ved_q- to be
run.
As the normal method of reaching the command line, the procedure
-vedenter-, is usually associated with the ENTER key which can be found
on most terminals, these commands will often be referred to as ENTER
commands, e.g. ENTER q.
A command normally consists of two parts, the command name and an
(optional) argument string. When a command is given the command line is
separated into the command string and an argument string at the first
'space' on the command line or at the first change of character type.
There are a few commands that are dealt with specially by built in
mechanisms, namely the commands that deal with searching, described
below, i.e. ENTER / ENTER " ENTER \ ENTER `
All other commands are recognised in a manner that allows extra commands
to be defined by users. Unless the command name is in a mixture of upper
and lower case, it is converted to lower case (all ENTER commands can
therefore be given in either upper or lower case) and the "ved_" prefix
is attached. If the VALOF the resultant word is a procedure (possibly
found in the auto-loading libraries), this is executed, otherwise an
error occurs.
The argument string (which may be empty) is assigned to the global
variable -vedargument-, where it can be accessed by the procedure.
If a numerical argument is required, the procedure STRNUMBER must be
used to convert the argument to a number, e.g.
strnumber(vedargument) -> vedargument;
The procedure SYSPARSE_STRING can be used to convert an argument
containing spaces into a list of strings (also converts strings to
integers), e.g.
sysparse_string(vedargument) -> vedargument;
0.31 Command Buffer
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Commands are stored in a temporary 'command buffer'. The command line
is a 1-line window into this buffer and can be edited like any other
line in a file. Sequences of commands can be easily repeated without
retyping. Obviously, only those commands associated with key
sequences may be used to edit the command buffer.
There are two procedures that can be used for moving the cursor into
the command buffer;
-vedenter- moves the cursor to the start of a blank line at the end of
the command buffer.
-vedstatusswitch- moves the cursor to the previously held position
within the command buffer, or if already in the command buffer
switches back to the text. (This can be used for altering a command
already on the command line or for exiting from the command buffer
without executing a command).
A third procedure -vedredocommand- executes the command currently on the
command line.
Cursor movements made on the command line cause the position in the
command buffer to change. -vedenter- called within the command buffer
is equivalent to a move to the end of file.
When the length of the command buffer exceeds 30 lines, lines are
deleted from the top of the command buffer.
A line in the command buffer can be executed by keying RETURN or
-vedredocommand- with the cursor positioned anywhere on that line. The
line will be copied to the end of the command buffer, unless it is
already at the end of the buffer, or the line at the end is the same.
A marked range of commands may be obeyed with the procedure -ved_lmr-
(see below).
-ved_yankc- will 'yank' a copy of the marked range in a file into the
'command' buffer.
vedputcommand() inserts the string into the command buffer at
the end of the buffer.
There is only one command buffer for all files being edited. On
switching files the current position in this buffer is retained.
0.32 Defining New Commands
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The user can define Pop-11 procedures to provide extensions to the
editor using either of these mechanisms. E.g. A command to insert
three semi-colons, the Pop-11 end-of-line comment indicator, at the
beginning of the next line might be defined as :
define ved_comment;
vednextline();
vedinsertstring(';;;')
enddefine;
This could then be invoked as
ENTER comment
or the procedure could be mapped onto the sequence ESC ; by;
vedsetkey('\^[;', ved_comment);
0.33 Autoloading
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The "autoload" facility enables user extensions to the Pop-11 system
and VED to be stored in system or personal library directories. These
procedures will then be compiled only when called. This will result
in a slower response to the first call of the procedure but reduces
the size of the system. If a large set of extensions to VED is
regularly used, the use of a 'saved image' containing these extensions
will save time.
Whenever the Pop-11 compiler encounters an unknown word it searches a
number of directories for a file of the same name as the word. If it
finds such a file it compiles it.
Unless due care is taken with declaration conventions this may have
undesirable effects on operating systems that allow only short file
names.
For example, some versions of Unix allow only 14 characters in a file
name. E.g. if an autoloadable library contains the definition of the
procedure ITSALONGNAMEPROC, in a file called ITSALONGNAME.P (i.e.
ITSALONGNAMEPROC truncated to 12 letters and '.P' added), then if the
user uses a variable ITSALONGNAME without first declaring it, the Pop-11
autoload mechanism will inadvertently compile the file ITSALONGNAME.P
The list of directories to search is held in the variable POPAUTOLIST.
This can contain either strings or lists or procedures (as explained in
HELP * SYSSEARCHPATH). Normally it will contain only strings, which are
names of directories.
In the user's init.p file, which is automatically loaded when starting
Pop-11, POPAUTOLIST can be initialised to include the names of any
"personal" library directories.
E.g on VAX-VMS systems
[ '[home.library]' ^^popautolist] -> popautolist;
or on Unix systems
[ 'home/library' ^^popautolist] -> popautolist;
0.34 Error Handling And Messages
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
User extensions to the editor can trap errors and interrupts. A
knowledge of Pop-11 error and interrupt handling is required for this.
In order to prevent interrupts and errors causing a loss of edit
information, VED locally resets -interrupt- and -prmishap- to be
-veddointerrupt- and -vedprmishap-.
-veddointerrupt- returns control to the top level of VED, i.e.
-vedprocess-, calling -vedpopready- if its current value is not
-identfn-. Thus for debugging purposes in VED, -popready- can be
assigned to -vedpopready- enabling -popready- to be invoked when errors
occur or when CTRL-C is typed. (When the "load marked range" mechanism
is used, default values are assumed to -interrupt- and -prmishap- and if
these are to be changed this must be done within the command that is
executed in the marked range, or by procedures invoked from those
commands.)
-vedprmishap- resets the value of -vedprintingdone- to tell the editor
that the screen has been corrupted, and prints long data structures in
an abbreviated form.
0.35 Error Handling Procedures
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vederror(string)
Aborts current procedure and purges the input stream,
returning control to the top-level editor procedure. Prints
string on status line.
vedinterrupt()
Abort current processing. Return to top level of VED.
vedpopready()
Null procedure. Can be redefined for debugging, e.g.
popready -> vedpopready;
vedputmessage(string)
Print message on status line. Does not cause interrupt.
vedtoperror()
Abort processing, and print 'TOP OF FILE' message.
0.36 Debugging Ved Procedures
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The library procedure -veddebug- can be used to test and debug ved
procedures.
veddebug(string)
The input string is printed out on the status line and the system
pauses until a character is typed. If this character is RETURN, then
the program continues running, otherwise POPREADY is called.
ved_wtype
Causes information about the current word to be displayed, e.g. its
identprops and type of its VALOF if it's an ordinary variable.
0.37 REPRESENTATION
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
This section discusses the representation of text within VED, in
particular ,newline and tab characters.
0.38 Text
.-.-.-.-.-.-.-.-.-.-
Text is held as a set of character strings stored in the vector
-vedbuffer,- each string corresponding to a single line in the source
file. There are normally NO explicit carriage return(ASCII 13) or
line-feed(ASCII 10) characters in VED buffers. Newline characters are
implied between the lines. This is the equivalent of the VAX-VMS
carriage-return attribute file-type. See the section on input from
disc-files for more detail.
Carriage return or line-feed characters that are present in the input
file, e.g. output from DEC RUNOFF will be read into the buffer, and
represented as control characters. The screen reresentation of these
characters will be terminal dependent. E.g. on the Visual 200, all
control characters are represented by a small raised circle.
0.39 Tabs
.-.-.-.-.-.-.-.-.-.-
On input to a buffer, tab characters may be turned into an appropriate
number of spaces or retained as tab characters. Tab stops are assumed
to occur at regular intervals across the page, the size of a tab being
governed by the value of -vedindentstep-. If retained as tab
characters, the tab is either HARD, and attempts to delete or insert
text from 'within' the tab will produce an error or the tabs is SOFT,
and deletion or insertion of text within the tab will cause the tab to
be converted to spaces and the action will succeed.
The conversion of tabs is controlled by -vednotabs-, which can be
overridden by -vedreadintabs- to preserve tabs in existing files. The
Type of tab characters is controlled by -vedhardtabs-, and the size of a
tab stop by -vedindentstep- (see below).
0.40 Vednotabs
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
-vednotabs, which can be TRUE or FALSE, governs the conversion of tab
characters into spaces on input to the buffer:
-vednotabs is TRUE
This is the default setting for -vednotabs and signifies that
tab characters are to be converted into spaces on input(see
-vedindentstep-).
-vednotabs is FALSE
Tab characters are retained as tabs. Each tab is represented
within the buffer as a number of tab characters corresponding
to the number of screen locations filled by the tab (see
-veddecodetabs-). Leading spaces will be converted to tab
characters when a file is written to disc.
The procedure -ved_tabs- switches the value of -vednotabs- and displays
the new value on the status line.
0.41 Vedhardtabs
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
When -vednotabs- is FALSE (or has been FALSE at some point during the
editing session) there will be tab characters present within the
buffer. -vedhardtabs- governs whether text may be deleted or inserted
when the current position lies within a tab.
When -vednotabs- has been TRUE for the whole session, -vedhardtabs- has
no effect.
vedhardtabs is TRUE
The default setting. Attempts to delete or insert characters
when the cursor is positioned within a tab produce an error
message. When deleting a character immediately in front or
behind a tab, the whole tab will be deleted.
vedhardtabs is FALSE
The tab will immediately be converted to spaces and the
appropriate insertion or deletion will succeed. When deleting
a character immediately in front or behind a tab, the tab will
be turned into spaces and a single space deleted.
0.42 Variables
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The size of the current line (i.e. the number of characters on the
line) is held in the variable -vvedlinesize-. This may not be the same
as the length of the string holding the text, which may at times be
longer than necessary. This is to reduce the need for garbage
collection while providing space for extra characters to be inserted.
See * VEDSETLINESIZE and * VEDTRIMLINE.
Similarly -vvedbuffersize- holds the current length of the file, i.e.
the number of lines of text in the buffer. -vedbuffer- may also have
extra space at the end to allow for extra lines to be inserted. See
* VEDBUFFEREXTEND * VEDUSEDSIZE.
0.43 BUFFERS
.-.-.-.-.-.-.-.-.-.-.-.-.-
While a file is being edited, information about the current state of
that file (its name, size, the current location, stacked positions
etc.) and also certain variables for controlling the editing
environment (break mode, tab size etc.) is held in global variables.
When the focus of attention switches to a different file, the current
state of the editor must be stored in order to save this vital
information. Each file currently held in the editor is associated
with an edit record, a vector that holds the information (i.e the
current values of the editor global variables) about the current state
of that file.
A file record for each file currently being edited is stored in the
list -vedbufferlist-. Records are added to or removed from this list as
files are read into VED or exited from.
-vedcurrentfile-, which indicates the file currently being edited,
always points to the first element of -vedbufferlist-.
-vedupperfile- and -vedlowerfile- correspond to the two windows on the
screen. One of these is normally the same as -vedcurrentfile-. The other
will be the second element of -vedbufferlist-, if there is one, or FALSE
if there is either only one window on the screen or buffer in the
editor.
0.44 File Record Maintenance
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
File records are NOT updated automatically whenever the constituent
variables change. The procedures -vedsaveglobals- and -vedsetglobals-,
must be used to save and restore the current values, as required.
vedsetglobals()
use the contents of a file record to set the editor variables.
vedsaveglobals()
store within a file record the current values of the state
variables.
E.g. to find the value of a variable in a file record the following
procedure could be used;
define vedvalofin(file, word) -> result;
vedsaveglobals(vedcurrentfile); ;;;save current file
vedsetglobals(file); ;;;restore old file
valof(word) -> result; ;;;find value of WORD
vedsetglobals(vedcurrentfile); ;;;restore initial state
enddefine;
Note that -vedsetglobals- and -vedsaveglobals- do not alter the value of
-vedcurrentfile-.
The variables saved by -vedsaveglobals-, i.e. those variables that are
specific to individual buffers, are listed in Appendix 2.
0.45 Manipulating Buffer Records
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The procedure -vedpresent- can be used to test whether a file is being
edited:
vedpresent()
The is assumed to be a filename. -vedpresent- returns
the edit record for that file, if it is currently being
edited, or FALSE if it is not. i.e. vedpresent(vedcurrent)
== vedcurrentfile must always be TRUE.
There are procedures for accessing and manipulating edit records.
vedgetfile(, )
This procedure is called by -vededitor- to put on screen,
reading from disc or creating a new file, if necessary.
vedopen(filename)
Produces a file structure for the file, if necessary reading
the file from disc.
ved_ved {i.e. ENTER ved}
Assumes that the value of -vedargument- is a string which is the
name of a file. If the file has been accessed previously, the
effect is merely to set the file on the screen, if necessary
displacing another edit window. If no argument is given
(-vedargument- = '') then the last argument to VED is used, and
if there was no previous use, a default file name is used.
vedselect()
Assigns the string to -vedargument- and calls -ved_ved-
vedobey(,)
can be a file-name or a file structure, as produced by
-vedopen-.
-vedobey- sets the file on the screen and runs the procedure.
Changes made to the file will be shown on the screen if they
occur within the initial window. Otherwise the user program will
have to call -vedcheck- to ensure the changed portion is on
screen. After running the procedure, -vedobey- returns control
to whatever environment it was called from.
vedappfiles()
Cycles through -vedbufferlist-, applying the procedure in
environments corresponding to all the files currently being
edited (compare *APPLIST). E.g. a procedure to clear every
buffer might be defined as
define ved_allclear();
vedappfiles( ved_clear);
enddefine;
0.46 Manipulating arbitrary text blocks
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The library package LIB * VEDBLOCKS provides mechanisms for deleting
copying moving and overlaying blocks of text. The required rectangular
block is indicated by pushing the VED positions at a pair of diagonally
opposite corners of the block, using -vedpushkey-.
Full details are provided in
HELP * VEDBLOCKS
HELP * VEDFILLBLOCK,
HELP * VEDYANKBLOCK
HELP * VEDREFRESHBLOCK
HELP * VEDCUTBLOCK
including information about the following commands:
Deleting, saving, moving or copying an indicated block of text:
ved_dtb
ved_sdtb
ved_mtb
ved_smtb
ved_ttb
ved_stb
Re-inserting text previously stored in -vvedblockdump-
ved_ytb
ved_sytb
ved_yotb
Insert spaces into a text-block
ved_itb
ved_sitb
Utility procedures:
getblockargs() -> line1 -> col1 -> line2 -> col2;
vedfillblock(line1,col1,line2,col2,char);
See HELP * VEDFILLBLOCK
vedrefreshblock(line1,col1,line2,col2,dotail);
vedcutblock(line1,col1,line2,col2,boolean) -> vector;
vedblockrepeater(vector_of_strings) -> procedure;
vedyankblock(vector_of_strings);
See HELP * VEDYANKBLOCK
vedoverlayblock(vector_of_strings);
0.47 WINDOW SIZE
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The default version of VED allows one or two files to be on the screen
simultaneously in separate windows. Library packages exist that
provide facilities for multiple windows.
Each window is made up of a single command line and an arbitrary
number of text lines. The command line is positioned at the top of
the window. If there are two windows the command line for the lower
window acts as a separator between them.
The size of the window or windows is governed by the length of the
screen (-vedscreenlength-) and the value of -vedstartwindow-.
The lower window will contain -vedstartwindow- lines (i.e. the command
line with -vedstartwindow- - 1 lines of text) and the upper window, if
there is one, fills the remainder of the screen (i.e. -vedscreenlength-
- -vedstartwindow- lines).
The default setting is for two windows of equal size, but windows of
unequal size are allowed and a single window may be obtained by setting
-vedstartwindow- equal to -vedscreenlength-.
Although the length of the current window is stored as the value of
-vedwindowlength-, all the procedures that refresh and bring files onto
the screen (except -vedrefresh-) use the value of -vedstartwindow- to
govern the screen layout.
To illustrate how the window variables affect the appearance of the
screen, consider the two procedures -ved_ws- and -vedsetwindow-.
ved_ws
Sets -vedstartwindow- to be the value of -vedargument- converted
to a number, and refreshes the screen e.g.
ENTER ws 16
sets -vedstartwindow- to be 16, producing (for a 24 line screen)
two unequal windows: a 16-line lower window and an 8-line
upper window.
(If -vedargument- is an empty string, the current value of
-vedstartwindow- is displayed)
vedsetwindow()
resets the value of -vedwindowlength- without altering the
value of -vedstartwindow-. This produces a temporary escape
from the current window size. The final screen layout
depending upon the initial values of both variables:-
1) -vedwindowlength- less than -vedscreenlength-.
-vedwindowlength- will be made equal to -vedscreenlength-,
resulting in a full screen window, whatever the current
value of -vedstartwindow-.
2) -vedwindowlength,- -vedstartwindow- and -vedscreenlength-
all equal.
-vedwindowlength- will be set to half of -vedscreenlength-,
thus successive calls of -vedsetwindow- when
-vedstartwindow- = -vedscreenlength- will switch between
full and half-screen windows.
3) -vedwindowlength- equal to -vedscreenlength-
and -vedstartwindow- less than -vedscreenlength-
-vedwindowlength- will be set to -vedstartwindow-
As -vedsetwindow- does not refresh the whole screen, production of a
window that is less than the whole screen produced will leave the rest
of the screen unchanged.
0.48 Window Position
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The cursor is not restricted to the areas of the display that are filled
with text. The variables -vedlineoffset- and -vedcolumnoffset- hold the
position of the window relative to the file.
-vedlineoffset- is the number of lines preceding the first line of the
window. Thus the first visible line is vedlineoffset + 1. Initial
value is 0.
-vedcolumnoffset- is the number of columns of text to the left of the
edit window. Normally this is 0, but is incremented during scrolling
left, and decremented when scrolling right.
0.49 Aligning The Screen
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vedcursorset()
Returns TRUE if (vedline, vedcolumn) defines a location in the
visible window otherwise FALSE. Causes the cursor to be moved
to the correct screen location.
vedsetcursor()
Moves the screen cursor to the correct location, if the
current position is in the visible window.
vedcheck()
Checks that cursor position is in current window, shifting
window and refreshing or scrolling the screen if not. Whether
the screen is scrolled or refreshed depends upon the distance
that would need to be scrolled to make the current position
visible.
vedalignscreen()
Aligns the window so that the current location is in a visible
position. The window is then refreshed.
vedsetscreen()
Aligns the screen and puts the string on the status line.
0.50 Putting Files On Screen
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vedsetonscreen(,)
Sets file on the screen, with string as message. The file
must be a file record.
ved_ved
Assumes that the value of -vedargument- is a string which is the
name of a file. If the file has been accessed previously, the
effect is merely to set the file on the screen, if necessary
displacing another edit window.
vedselect()
Assigns the string to -vedargument- and calls -ved_ved-
vedswapfiles()
Sets on the screen the last edited file. If it is already on
the screen moves the cursor into the window for that file. A
subsequent call of this procedure will switch back to the
previous file. If -vedstartwindow- has a value less than
-vedscreenlength-, then thE two windows remain on the screen,
and swapping involves merely moving the cursor into the right
window.
0.51 INPUT AND OUTPUT
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
This section discusses VED's input and output mechanisms from the
point-of-view of a Pop-11 program. It does not include any information
about the redirection of i-o for POP procedures run from within VED,
which is contained in the section on compilation from the buffer.
Three sources of input are considered in turn: terminals, disc-files
and VED buffers. First the default mechanisms of the editor are
described and then procedures that are available to the user are
catalogued.
0.52 Interaction with the terminal
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Screen handling within VED is described in a separate section.
Pop-11 normally uses CHARIN to read characters typed at the terminal,
and CHAROUT to transmit characters to the terminal.
charin() -> character
charout(character)
These use the devices POPDEVIN and POPDEVOUT respectively.
VED normally uses RAWCHARIN and RAWCHAROUT to communicate with the
terminal. These use 'raw' input mode, i.e. the devices POPRAWDEVIN and
POPRAWDEVOUT. This 'raw' mode implies that there is to be no echoing
of characters, no formatting of output, and that all characters will
be 'break' characters. Certain control characters retain their
functions, e.g. CTRL-Y remains an interrupt character on VAX/VMS
systems.
The procedure -vedscreenraw- sets the terminal in 'raw' mode, and
transmits the escape sequence -vedscreensetpad-. This sets the terminal
modes required by VED. This includes setting the terminal's numeric
keypad (if it has one) to transmit escape sequences.
-vedscreenreset- resets the terminal to its original state.
0.53 Input
.-.-.-.-.-.-.-.-.-.-.-
In 'raw' mode the editor reads characters from the terminal using the
procedure -vedinascii-. The characters are passed to -vedprocesschar-
which maps them onto procedures (see above).
-vedinascii- works as follows:-
Flush any output waiting to go to the screen.
Check whether the list -ved_char_in_stream- is empty.
If -ved_char_in_stream- is empty.
Return the first non-null character read from the terminal
with -rawcharin-. Every character is a 'break' character, and
there is no prompting, or echoing.
If -ved_char_in_stream- is non-empty.
Return the first item if it's a non-null character.
If the first item is a string, explode it, return the first
non-null character and add any others to -ved_char_in_stream-
Items may be placed into the input stream for VED (i.e. into
-ved_char_in_stream)- with the library procedure -vedinput-:
vedinput(
- )
Put the item, which can be either a character or string, on
the front of -ved_char_in_stream-. This is defined as
conspair(item, vedcharinstream) -> vedcharinstream
-vedinascii- will continue waiting for something to be typed on the
terminal. To specify a limit for the waiting time, -charin_timeout- can
be used.
charin_timeout(integer) -> character or FALSE
Waits until N hundredths of a second have elapsed, or a
character has been pressed at the terminal.
If a character is pressed, then it is returned. If not, FALSE
is returned.
If several characters are typed during the wait, the first one
will be lost.
As an example, consider the following procedure, which searches for the
next occurrence of a character to be read from the terminal. The first
version using -vedinascii- will wait forever for a character to be
typed:-
define ved_next_char();
vedlocate( consstring( vedinascii(), 1));
enddefine;
the second version, using CHARIN_TIMEOUT waits one second for a
character to be typed, before sending an error message.
define ved_next_char();
vars char;
if charin_timeout( 100) ->> char then
vedlocate(consstring(char,1))
else
vederror('NO INPUT DURING READ PERIOD');
endif;
enddefine;
0.54 Output to VED buffer or screen
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
0.55 Output to screen
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Characters are sent to the terminal by -vedoutascii-.
vedoutascii( or );
This uses -rawcharout- and -poprawdevout-. Output is buffered and
characters are sent only when one of th efollowing occurs:
1) a null character is output (i.e. rawcharout(0)).
2) the buffer, which holds 128 characters, is full.
3) -poprawdevout- is flushed using -sysflush- i.e.
sysflush(popdrawdevout)
4) rawcharin() is executed.
As -vedinascii- uses -rawcharin-, this last condition ensures that
the output buffer will be flushed before each character is read from
the terminal.
-vedoutascii- will accept either a single character or a character
string and outputs the character or string of characters to the
terminal. It is used by both -vedscreenoutput- and
-vedscreencontrol-: these can also therefore accept single
characters or strings.
vedscreenoutput( or )
Output character to screen. If the character is >= 8:200 then
graphic mode is set before the character is sent (see
-vedgraphon-). Otherwise graphic mode is reset.
vedscreencontrol( or )
Outputs the string, which should transmit suitable screen
control characters to the terminal, or invokes the procedure.
0.56 Printing in the editor
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vedprmishap()
A version of -prmishap- that is used by VED. This sets
-vedprintingdone- to be TRUE so that the screen will not be
refreshed until the user has been asked to press the return key.
vedputmessage()
Prints a message string on the status line.
0.57 Suppressing output to the screen
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Output to the terminal can be supressed by setting -vedediting- false.
All the procedures that update the screen check that -vedediting- is
true before sending output to the terminal. -vedediting- can, of course,
be reset locally by procedures that want to suppress screen refreshing.
Making -vedediting- false will not interfere with normal operation of
programs that read from or insert in the VED buffer.
0.58 Refreshing and updating the screen
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The screen will need updating whenever there has been a change in
either the contents of the buffer or the position of the cursor.
For efficiency reasons, VED does not use a screen map. Most of the
procedures that change the contents of the buffer will update the screen
as needed. It may however be necessary to cause the screen or part of
the screen to be refreshed if an explicit change is made to the contents
of the buffer e.g. by altering the value of vedbuffer(vedline).
Procedures for refreshing the screen are described below.
The screen position of the cursor is checked during each cycle through
-vedprocess-, by -vedcursorset-. If the current position of the cursor
is not in the window, -vedcheck- is called to align and refresh the
window. The cursor may therefore be moved freely about the edit buffer
by user procedures.
vedrefresh()
Refreshes the current window and the associated status line.
Also resets the terminal keypad mode.
vedrefreshrange(,,)
Refresh the current window from the BUFFER lines first to
last, inclusive. If flag is TRUE, all the lines will be
marked, if FALSE no lines will be marked. If flag is UNDEF,
checks whether each line is in the marked range and marks it
if necessary.
vedrestorescreen()
-vedrestorescreen- is called during each cycle through
-vedprocess-: when -vedprintingdone- is false this does nothing,
otherwise it prints a message and waits for the user to type a
character, whereupon it sets the last edited file back on the
screen. When -vedstartwindow- is less than the length of the
screen, the printing (e.g. error messages) will remain visible,
above the edit window.
VED alters -cucharout- locally to ensure that any printing using
the standard Pop-11 print procedures or any calls to DCL set
-vedprintingdone- to be TRUE. -vedprintingdone- is checked
during each cycle of -vedprocess- and when TRUE causes
-vedrestorescreen- to be called when control returns to VED.
0.59 Screen Control
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
All of the screen control procedures detailed in this section are
available to the user and provide a convenient set of tools for terminal
handling.
VED's screen control procedures use a collection of variables whose
names all start with "vvedscreen". Their values are either strings of
characters recognised by the terminal in use or procedures that do what
is required for various screen functions, like deleting a line, moving
the cursor, scrolloing the screen, etc. The variables are described in
REF * VEDTERMINALS. All communication with the screen goes via the
procedure -vedscreencontrol- also defined in REF * VEDTERMINALS.
For example the procedure -vedscreenclear- uses -vedscreencontrol- to
send the character sequence -vvedscreenclear- to the terminal. Output of
these control sequences is buffered (see above).
A full account of the screen control variables is given in connection
with identifiers beginning 'vvedscreen' in REF * VEDTERMINALS. There are
many library files that set these variables in the directory
For VDUs which are unable to delete or insert lines in the middle of the
screen, -vednolineinsert- should be set TRUE. In this case some of the
following procedures will not alter the screen directly, but change the
value of -vedrefreshneeded-. This records the line below which the
screen should be completely refreshed. Refreshment occurs at an
appropriate time.
vedscreenreset()
Prepare to produce normal printout, or read in characters at
bottom of screen, in non raw mode.
vedscreenxy(,)
Using real screen coordinates, position the cursor at (col,
line). The top left-hand corner is (1,1).
vedscreenbell()
Ring bell, i.e. vedoutascii( `\^G`). This can be redefined by
users who find it irritating. E.g. to make it do nothing:
identfn -> vedscreenbell;
vedscreenchardown()
Move cursor down a line ON THE SCREEN, and increase
-vedscreenline- by 1.
vedscreencharleft()
Move cursor left on screen, and decrease -vedscreencolumn- by 1.
vedscreencharright()
Move cursor one character to the right on screen, and increase
-vedscreencolumn- by 1.
vedscreencharup()
Move cursor up the screen, and decrease -vedscreenline- by 1.
vedscreenclear()
Clear the screen, moving the cursor to the top-left of the
screen.
vedscreencleartail()
Delete screen line to right of cursor,
vedscreendeletechar()
Delete current character ON SCREEN, first switching graphic mode
OFF.
vedscreendeleteline()
Delete a line on screen. is in window co-ordinates and
the cursor is moved to the beginning of the line if it is not
already on that line.
vedscreengraphoff()
If -vedgraphicmode- is TRUE then set graphic mode off and
-vedgraphicmode- FALSE, see below.
vedscreengraphon()
If -vedgraphicmode- is FALSE then set graphic mode on and
-vedgraphicmode- TRUE, see below.
vedscreeninsertchar(char)
Insert the character on current line on screen. Checks whether
-vedinserting- is true, if not, turns graphic mode off and sets
terminal insert mode. Then outputs character to screen. Does not
turn insert mode off.
vedscreeninsertline()
Inserts a blank line on the screen below screen line .
Moves the cursor to the necessary position.
vedscreenpulldown()
The section of the window above WINDOW line is pulled
down one line, effectively deleting a line from the screen and
inserting a blank line at the top of the window. Doesn't
affect the status line.
vedscreenpullup()
The section of the window below WINDOW line is pulled
up one line, deleting a line from the screen and inserting a
blank line at the bottom of the window. Doesn't affect the
status line.
vedscreenpushdown()
The section of the window below WINDOW line is pushed
down one line, inserting a blank line and deleting a line from
the bottom of the window. Doesn't affect the status line.
vedscreenpushup()
The section of the window above WINDOW line is pushed
up one line, inserting a blank line and deleting a line from
the top of the window. Doesn't affect the status line.
vedscreenright()
Move to right of window.
vedsetstatus(,,)
(System use). Re-build status line.
0.60 Graphics
.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Graphics characters are used by VED on the status line and to indicate
the current line and marked ranges. The default values for expressed
as 8:200 + character code. 8:200 is Pop-11 syntax for 128 as an octal
number.
vedscreenmark
Character used to indicate lines in marked range, a vertical
line. Default value: 8:200 + `x`.
vedscreenlinemark
Character after the line number in status line, a capital T
turned 90 degress counter-clockwise, Default value: 8:200 +
`t`.
vedscreencursor
character for horizontal bar. Used to indicate current line
when cursor is on command line. Also used as part of status
line. Default value: 8:200 + `q`.
vedscreencursormark
Character indicating current line, in marked range, a little
cross. Default value: 8:200 + `n`
vedscreencommandmark
Character after command, while it's being obeyed, also before
line number, a T turned 90 degrees clockwise. Default value:
8:200 + `u`.
vedscreencontrolmark
Character that is used to indicate control characters, a
degree symbol. Default value: 8:200 + `f`.
See HELP * GRAPHCHARSETUP
0.61 Files in VED
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
0.62 Reading files from disk
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
On VAX-VMS systems, files are read a single record at a time, each
record being copied into a string representing one line of text. Input
files are assumed to have VAX-VMS carriage return attributes, i.e. they
do not have explicit carriage return or line-feed characters. If the
source file does contain or characters, e.g. files produced by
DEC RUNOFF, these will be read into the buffer.
This behaviour is simulated in UNIX systems where newline characters
will be treated as end-of-record when reading files.
Tabs are converted to spaces or not as governed by the value of
-vednotabs (see above)
-vedreadintabs
If this is true, and -vednotabs- is TRUE, then if there are any tab
characters in the file then -vednotabs- is set FALSE and tab
characters are preserved. Set this TRUE (the default) if you want
files you create to have no tabs (i.e. -vednotabs- is set TRUE) but
you don't want to lose tabs in existing files.
-vedbreak- has no effect when files are read from disc. Lines that are
longer than -vedlinemax- will not be broken on input.
vedreadin( or )
Requires a filename or a device record as argument and reads a
file from disc, making a string for each line. Returns the
number of lines read. The strings are left on the stack.
Alters tabs to spaces or not as governed by -vednotabs.
The device record is of the kind produced by SYSOPEN.
sysopen(,,)
Returns a device record for an already existing file, FALSE if
the file cannot be opened.
FILENAME should be a string.
MODE should be 0, selecting read only mode.
ORGANIZATION should be "record", this implies that the file is
record oriented and will be read a record at a time.
0.63 Writing files to disk
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
On VAX-VMS systems, files are written as variable-length record files
with carriage return attributes i.e. without carriage return or
line-feed characters between the lines. Each line in the buffer is
written as a single record representing one line of text.
On UNIX systems files are written as a sequence of bytes, with a
line-feed character (ASCII 10) output at the end of each line.
Spaces are converted to tabs or not as governed by the value of
-vednotabs- and --vedindentstep-(q.v.).
Trailing spaces are stripped from the text and empty lines are removed
from the end of the file.
See also REF * SYSIO for information on more basic Poplog facilities in
terms of which Poplog is implemented.
0.64 Disk Quotas
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
In VMS disk overdrafts are usable for writing to files that are already
open (i.e. new files can't be created when over quota). A warning
message is issued when first exceeding quota.
When an error occurs in writing to a disk-file device, e.g. because the
disk is full or the user's quota has been exceeded, then, the device is
automatically closed, and the device record is given to the procedure
-pop_file_write_error- which then deals appropriately with the
situation.
A Poplog device record contains 2 names: device_open_name(device) is the
name by which the file was opened, and device_full_name(device) is the
full name.
VED locally redefines pop_file_write_error(device) to be
sysdelete(device_full_name(device)) ->;
deleting the latest, incomplete, version of the file. This means that if
you temporarily leave VED in order to purge files in order to get back
under disk quota the last complete version of the file will still be on
the disk.
0.65 Procedures For Writing To Disc
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The following procedures will normally write only files that have been
altered and are "writeable" to a disc-file of the same name. The values
of -vedchanged- and -vedwriteable- are checked. If -vedwriteable- is
false the file will not be written. If -vedchanged- is false the file
will only be written to a new name.
The basic procedure for writing a buffer to a disc file is
-vedwriterange-.
vedwriterange(,,)
Write from line to line of the current buffer to
disc-file . must be less than , and the
minimum of and -vvedbuffersize- will be used for the
upper limit.
On VAX-VMS systems, -vedwriterange- checks whether -vedversions-
is FALSE. If -vedversions- is non-FALSE, it must be an integer
as the file will be PURGED so that no more than -vedversions-
copies are retained.
-vedwriterange- is used by all of the following procedures:
vedwritefiles()
Cycle through -vedbufferlist- writing all writeable and changed
files.
ved_w
If -vedargument- is the null string then write all files that
have been altered i.e. -vedwritefiles-. Otherwise write the
current buffer to the file -vedargument- (locally resets
-vedchanged- to force a write).
ved_w1
Write only the current file.
0.66 Automatic Writing Of Files
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
-vedautowrite- uses -vedchanged- to count changes to individual files.
-vedchanged- is incremented every time a change is made to a file. Each
character typed into or deleted from the buffer counts as one change.
Deleting or substituting a string (e.g. using -vedclearhead-,
-vedwordrightdelete-, -ved_s-, etc.) counts as one change. Global
substitutions also count as one change.
When -vedchanged- for a file exceeds -vedautowrite-, then that file, and
only that file, is saved. A tolerable value for -vedautowrite- is
probably around 800. This facility may be disabled by setting
-vedautowrite- to be FALSE.
ved_autowrite n
Sets the value of -vedautowrite- to be N, N = 0 sets
-vedautowrite- to FALSE. If no argument is given, displays the
current value.
0.67 Input from VED buffer to program
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vedcurrentchar()
Return or update character under cursor. Cursor position
reamins unchanged.
vedrepeater() -> character
Returns next character in the buffer, and moves cursor on.
Sets * POPLASTCHAR.
vedrangerepeater(,) -> character-repeater
Return a character repeater for the range of lines from the
current buffer. This repeater will return TERMIN at the end
of the range.
vedthisline() -> string
Return the string representing current line, equivalent to
subscrv(vedline,vedbuffer). See -veddecodetabs-, -vedthisline-.
veddecodetabs() -> string
Remove the extra tabs that may be put into a string by
vedcharinsert(tab).
When -vednotabs is FALSE, lines containing tabs will contain
"extra" tab characters representing the portion of the screen to
be padded out. -veddecodetabs- converts the character string for
such a line to a string with the right number of tabs, using
-vedindentstep- to determine tab boundaries.
vedthisstring()-> string
Unlike -vedthisline-, this returns a string with the proper
number of tabs. Equivalent to veddecodetabs(vedthisline())
vedmoveitem() -> item
Return the next text item in file, moving the cursor past it.
vednextitem() -> item
Returns next text item in file, without moving the cursor.
0.68 Output To VED Buffer
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Printing characters are inserted into the file at the current location
as they are typed, with a procedure, -vedinsertvedchar-. This procedure
uses variables that are local to the top-level VED process (see
-vedcharinsert- below).
When the RETURN character (ASCII 13) is input, the current line is
broken at the current location, and any text following the cursor
position is moved on to the next line.
A left margin can be set by altering the value of -vedleftmargin-, which
must be either a positive integer or a procedure returning an integer.
When -vedleftmargin- is greater than zero the text on the new line will
begin after -vedleftmargin- space characters. Excess leading spaces are
deleted from the beginning of the new line.
When a tab character (ASCII 9) is entered spaces (ASCII 32) or tabs
will be entered into the current line up to the next column that is a
multiple of -vedindentstep-. (See the section on text representation.)
Control characters and other non-printing characters may be inserted
into the buffer with -ved_ic- q.v.
0.69 Break Mode
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
In break mode, continuous typing without pressing RETURN will cause the
line to be broken at word boundaries, in such a way as to maximise the
number of words on a line. Spaces are taken to indicate word boundaries.
In this mode, the maximum length of a line is -vedlinemax- + 1
characters (the text justifying procedures e.g. --ved_j- allow lines of
only -vedlinemax- characters).
If break mode is off, the screen will be scrolled horizontally to
accommodate the text.
Break mode is controlled by the value of -vedbreak-. Break mode is OFF
when -vedbreak- is FALSE. The procedure -ved_break- switches the value
of -vedbreak-, turning break mode on and off.
-vedbreak- is set when the file is first edited, according to the file
extension. The variable -vednonbreakfiles- holds a list of file
extensions which cause VED to set -vedbreak- to FALSE when the file is
edited.
0.70 Character Insertion
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The procedure -vedcharinsert- may be used to insert characters into
the buffer.
-vedcharinsert-()
Insert ASCII character at current location. This will
cause the screen to be updated appropriately if -vedediting- is
true. Most characters are simply inserted as they are. Some
characters (e.g. the TAB character `\^I` or RETURN `\^M` or
NEWLINE `\^n` characters) will cause more complex actions,
including breaking a line, padding the current line with spaces
or tabs to the next tab stop.
vedinsertstring( or );
The characters in the string or word are inserted immediately
after the current location. Newline and tab characters have
the usual effect. Defined as
appdata(item, vedcharinsert);
The library procedures for inserting Pop-11 constructs all use
-vedinsertstring-. E.g. -ved_until- defined below:
define ved_until(); /* Insert template for UNTIL statement */
vedlinebelow();
vedpositionpush();
vedinsertstring(
'\n\tuntil CONDITION do\n\t\tACTION\n\tenduntil;');
vedpositionpop();
enddefine;
See SHOWLIB * VED_DEFINE for another example of the use of
-vedinsertstring-.
The procedures -vedlineabove- and -vedlinebelow- insert blank lines
above or below the current line, moving the cursor to the start of that
line, as determined by -vedleftmargin-.
ved_r() assumes that -vedargument- holds the name of a file and reads
that file into the current buffer after the current line.
-vedout- returns a character consumer that writes into a buffer.
vedout(,,,,)
the five arguments are as follows:-
- filename, must be a string or a word. The buffer to
be written into.
- a boolean value that controls whether the
previous window (if different from the one used for insertion)
is restored after each character is inserted.
- a boolean value that whether the insertions are
shown on the screen.
- a procedure (e.g. -vedendfile- or -ved_clear-) to
be run once on the file, before the character consumer is
created.
- a procedure to be run when the character
consumer is given TERMIN.
If is TRUE, -vedscreenflush- may have to be called after
writing has finished, to make the output appear on the screen, as the
output to the screen is buffered.
If this is called from outside the editor, with TRUE, the
screen may get into a confused state.
With RETURNTOFILE TRUE the character consumer may be a very slow, as
it will change files after outputting each character.
To avoid overheads, the status line is not updated after each
character. Hence the line number will be misleading.
vedbufferextend()
Ensure there is enough room for at least one more line in
-vedbuffer-
vedsetlinesize()
Must be called every time -vedline- is changed. Updates the
value of -vvedlinesize-.
vedtrimline()
Use this before -vedline- is altered, to remove trailing spaces
from the current line.
0.71 STATIC MODE
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Static mode is controlled by the value of -vedstatic- : static mode is ON
when vedstatic is TRUE. The procedure -vedsetstatic- switches the value
of -vedstatic-, turning static mode on and off.
Static mode alters the behaviour of several procedures. The most
important change is in the single-character insertion procedures:
instead of inserting characters at the current location and shifting
the rest of the current line to the right, these procedures will
replace the current character with the new one, and then move the
cursor one place to the right.
-veddocr- is disabled, therefore typing carriage return has no effect
and with break mode on, lines will not be broken when they grow too
long.
The behaviour of some of the delete procedures is affected. Those
procedures that delete text within lines overwrite with spaces. This
affects -vedchardelete- -veddotdelete- -vedclearhead- -vedcleartail-
-vedwordleftdelete- and -vedwordrightdelete-. -vedlinedelete- is not
affected.
-vedwordleftdelete- and -vedchardelete- are additionally affected in
that they will have no effect at the beginning of a line.
Movement commands function normally in static mode.
0.72 CURSOR POSITIONING
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The current location of the cursor is stored in the variables -vedline-
and -vedcolumn-. When the cursor is positioned at the beginning of a
file, -vedline- and -vedcolumn- both have the value 1.
0.73 Procedures For Changing The Cursor Position
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vedjumpto(,)
Moves the cursor to the specified line and column position
vedcharup() and vedchardown()
Move current position a single line vertically, without
changing the current column.
vedcharleft()
Move the cursor one character to the left, if necessary moving
to the end of the previous line or scrolling the screen
horizontally.
vedcharright()
Move the cursor one character to right, scrolling the screen
if necessary.
vedcharupleft(), vedchardownright(), vedchardownleft() and
vedcharupright()
Move one character diagonally, using VEDCHARUP/DOWN and then
VEDCHARRIGHT/LEFT.
vednextline()
Move to the beginning of the next line, as indicated by
-vedleftmargin-.
vedwordleft() and vedwordright()
Move a word to the left or right. Word boundaries are
determined by the full text itemising rules of Pop-11, see HELP
ITEMISE for further details.
vedcharleftlots() and vedcharrightlots()
Move horizontally a quarter of -vedscreenwidth-.
vedcharuplots() and vedchardownlots()
Move vertically a third of a WINDOW.
vedcharuprightlots(), vedcharupleftlots(), vedchardownrightlots()
and vedchardownleftlots()
Move diagonally third of a WINDOW vertically quarter of a
SCREEN horizontally.
vedscreenup() and vedscreendown()
Move to top or bottom of screen.
vedscreenleft(), vedscreenright() and vedscreenmiddle(): Move to
left, right or middle of screen on current line.
vedtextright(), vedtextleft() and vedcharmiddle()
Move to right, left or middle of TEXT on current line.
vedtopfile() and vedendfile()
Move to top or bottom of file.
vedmarkfind()
Move to beginning of marked range.
0.74 Syntax Directed Moves
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
ved_mm
Move to Matching end. Uses -vedopeners- and -vedclosers- to
recognise opening and closing brackets. E.g. If the cursor
is just before "if", ENTER MM moves it to after the matching
"endif".
ved_mp
Match parenthesis. Moves right to next '(', or ')'. Then
moves left or right to matching ')' or '('.
vedmoveitem() -> item
Return next text item in file, move cursor past it, see also
-vednextitem-
0.75 Testing The Edit Position
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
vedatend()
TRUE if at end of file (i.e. after last line of text).
vedatitemend(,)
True if that location is legitimate Pop-11 item boundary for
end if word, number, etc.
vedatitemstart(,)
True if that location is legitimate start for Pop-11 item.
vedatstart()
True if at the beginning of the first line of the file.
0.76 Position Stack Commands
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The position stack, -vedpositionstack-, allows cursor positions to be
stored and retrieved. -vedpositionstack- is a list of 3-element vectors,
each vector contains a line number, a column number and the row number
in the current window.
-vedpositionstack- is manipulated by the following procedures;
vedpositionpush()
Adds the current position i.e. line, column and row number in
the current window to the start of -vedpositionstack-
vedpushkey()
Adds the current position to the start of -vedpositionstack-
If the stack contains more than five positions the last one is
removed, ensuring that if -vedpositionstack- has more than 5
saved positions, it will be truncated. Thus only the 5 most
recently pushed and non-popped positions will be available.
-vedpositionpush- should be used in procedures which don't want
the stack truncated.
vedpositionpop()
Moves the cursor back to the position at the front of the
stack. Does not restore position of line in window. If the
stack contains less than five saved positions the restored
position is then moved to the back of the stack.
vedpopkey()
Moves the cursor to the position at the front of the stack,
restoring the position of the line in the window. If the stack
contains less than five saved positions the restored position is
then moved to the back of the stack.
-vedpopkey- is like -vedpositionpop- except that if the restored
position is not in the current window, it restores the position
so that it occupies the same row in the window as when the
position was saved. E.g. if you save a position with the
procedure starting at the top of the screen, then when it is
POPped the procedure will again start at the top.
vedexchangeposition()
Exchanges the current position with that at the top of the
stack. The current position is placed at the top of the
stack. Does not truncate the stack when it contains more than
five positions.
The saved positions are adjusted appropriately by procedures which
insert or delete lines.
A separate stack is saved for each file edited. Thus when switching
from one edit buffer to another, the locations reachable using
-vedpositionpop- change.
The procedure -ved_cps- clears the positionstack by assigning an empty
list to -vedpositionstack-.
0.77 MARKED RANGES
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Sections of the file can be "marked" in order to select text for
deletion/movement or to restrict the scope of certain editor funtions.
The line number of the first line in the marked range is held in
-vvedmarklo- and that of the last line in -vvedmarkhi-. No marked range
exists when -vvedmarkhi- is equal to zero.
The marked range will be denoted on the screen by a 'mark', usually a
vertical line, placed against every line of the range in the first
column of the screen. The character for this mark is held in
-vedscreenmark-.
The marking of the range on the screen may be supressed by setting
-vedediting- to be FALSE, or by setting -vedscreenmark- to be `\s`.
The procedures used to mark ranges are:-
vedmarklo()
Select the current line as the first of "marked" range, i.e.
make -vedline- the value of -vvedmarklo-. If the new value of
-vvedmarklo- is greater than the current value of -vvedmarkhi-
-vvedmarkhi- will be made equal to -vvedmarklo- The screen is
updated accordingly.
vedmarkhi()
Select the current line as the last of "marked" range. i.e. make
-vedline- the value of -vvedmarkhi- and update the screen
accordingly. If the new value of -vvedmarkhi- is less than the
current value of -vvedmarklo-, -vvedmarklo- will be made equal
to -vvedmarkhi-. The screen is updated accordingly.
ved_crm
Unmarks the marked range, leaving no portion of the file
marked. The screen is updated accordingly.
Procedures for finding and checking marked ranges:-
vedmarked()
Returns TRUE if line is in marked range, otherwise FALSE.
vedmarkfind()
Make the beginning of marked range the current position.
The procedures -vedmarkpush- and -vedmarkpop- manipulate a stack of
marked ranges. The stack itself is not accessible, but consists of a
list of three-element vectors. Each vector contains two line numbers and
a character code (-vvedmarkhi- -vvedmarklo- and -vvedsreenmark-). These
procedures can be used for saving and restoring marked ranges within
user defined procedures. For an example of their use SHOWLIB * VED_JJP.
vedmarkpush()
Push the current marked range and screen mark onto the stack.
Does not reset the marked range.
vedmarkpop()
Pop the most recently stored marked range, resetting
-vvedmarkhi- -vvedmarklo- and -vvedscreenmark- If part of the
range is in the current window, it will be marked on the
screen.
There are several procedures for marking certain specific
portions of the buffer:-
ved_mbe
Mark file from beginning to end.
ved_mbf
Make first line of the file the beginning of marked range.
ved_mef
Make last line of file end of marked range.
ved_mcp
Mark current Pop-11 procedure from beginning to end.
0.78 DELETE COMMANDS
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Although VED doesn't make available a general UNDO facility for
recovering from changes made to the buffer, there is a limited
capability for undoing the effects of deletions.
Three buffers are maintained for the storage of single instances of
deleted text, -vveddump- -vvedwordump- and -vvedlinedump-. Most of the
delete procedures copy the deleted text into one of these buffers, the
contents of which can be reinserted into the buffer with the YANK
commands(see below).
There is a fourth buffer used by the library procedures -ved_cut- and
-ved_splice-, namely -vvedcut_dump-, a list of strings.
Finally LIB * VEDBLOCKS, which can be used for inserting and deleting
arbitrary rectangular blocks of text in VED, uses -vvedblockdump- a
vector of strings.
There is only one version of each delete buffer, so they provide a
mechanism whereby text may be copied between files, as well as between
different parts of a file.
The procedures for deleting portions of the buffer are:-
vedchardelete()
Delete character to left of cursor.
When called at the start of a line, joins that line to the end
of the preceding line. Unnecessary spaces and tabs are
removed, and if the preceding line is not empty, a single
space is inserted between the two merged text portions. If
break-mode is set and the line is too long, it will be broken
at a suitable place.
veddotdelete()
Delete the character underneath the cursor.
vedclearhead-()
Delete everything to the left of the cursor on the current
line and store the deleted text in -vvedworddump-
When called at the start of a line, joins the line to the end
of the preceding line (see -vedchardelete- above).
vedlinedelete()
Delete the current line and copy the deleted text into
-vvedlinedump-, unless the current line is empty in which case
the contents of -vvedlinedump- will remain unchanged.
vedcleartail()
Delete everything to the right of and including the character
below the cursor and store the deleted text in -vvedworddump-
Has no effect at the end of a line.
vedwordleftdelete()
Delete the word to the left of and not including the cursor
and place the deleted text in -vvedworddump-
A "word" is determined by the Pop-11 character types. Text
will be deleted until a character type boundary is reached.
Roughly, a group of spaces or a sequence of characters that
would be recognised as a text item in Pop-11 will be deleted.
When called at the start of a line, joins that line to the end
of the preceding line(see -vedchardelete- above).
vedwordrightdelete()
Delete the word(see above) to the right of and including the
cursor and store the deleted text in -vvedworddump-
If called at the end of a line this procedure moves the cursor
to the beginning of the next line.
ved_d
Delete marked range and store the deleted text in -vveddump-
ved_da
Delete marked range and append to -vveddump-
0.79 Yanking: retrieving deleted text
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
VED (at present) maintains three temporary stores for text deleted from
the buffer.
-vveddump-
for text deleted by ved_d, or ved_da or copied by ved_copy
(A list of strings)
-vvedworddump-
ved_y or ved_yank
Insert the contents of -vveddump- into the current file after
the current line.
Either procedure can be given a line number as an argument.
If a numeric argument is supplied, the contents of -vveddump-
will be inserted after that line, e.g.
y 0
to insert the contents of -vveddump- at the beginning of the
file.
ved_yankl
Insert the contents of -vvedlinedump- before the current line.
ved_yankw
Insert the contents of -vvedworddump- at the current position.
All the yank commands can be used several times on the same buffers,
and for copying text between files.
There is one other YANK procedure -ved_yankc- which behaves somewhat
differently from the others...
ved_yankc
Insert the contents of the marked range into the command
buffer. The cursor will be returned to the current location
in the text.
0.80 Moving And Copying Text
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The delete buffers can be used for copying and moving text, both
within a file and between files. Some of the following procedures
alter the delete buffers locally, these do not therefore change the
contents of the buffers. Unless otherwise indicated it should be
assumed that the buffer contents will change.
ved_copy
Copy the marked range into -vveddump-
ved_ca
Append a copy of the marked range onto the end of -vveddump-
ved_m
Move the marked range to after the current line, uses -vveddump-
locally.
ved_t
Insert a copy of marked range after the current line, uses
-vveddump- locally.
The procedures -ved_ti- -ved_to- -ved_mi- and -ved_mo- can be used for
moving and copying text from buffer to buffer. (Compare the "append"
procedures listed below, ved_wapp, ved_wappr, etc.)
All these procedures assume that if -vedargument- is non-empty it is a
filename, specifying which file other than the current one is
involved. The default file is the most recently edited file i.e. the
second file in -vedbufferlist-. None of these procedures alters the
value of -vveddump-.
T stands for Transcribe (or copy), M for Move (i.e. delete and yank)
I stands for In (to the current file), O stands for Out (from current
file)
ved_ti
transcribe (copy) marked range from IN to current file.
ved_to
transcribe marked range OUT to other file.
ved_mi
MOVE marked range from IN to current file i.e. (delete
from other file).
ved_mo
MOVE marked range OUT to from current file i.e.
(delete from current file).
In the case of -ved_to- and -ved_mo- if the specified doesn't
exist it will be created.
In all cases the new text is inserted immediately after the "current"
line in the target file. The inserted text will not be 'marked', in
either case.
0.81 COMPILE FROM BUFFER COMMANDS
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Rapid switches may be made between the Poplog subsystems, (i.e.
Pop-11, PROLOG and LISP) and VED. Pop-11, PROLOG and LISP code may be
compiled directly from the buffer, and PASCAL programs (on VMS machines
only in the buffer may be compiled and executed from the buffer.
0.82 Compiling From Disc Files
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The compiler used by these procedures will depend upon the Poplog
subsystem from which the editor was entered.
ved_load
Assumes that -vedargument- holds the name of a file and attempts
to load that file.
ved_lib
An autoloadable extension to VED that assumes that -vedargument-
holds the name of a library file in one of the directories in
POPUSESLIST and attempts to load it. If no file extension is
specified the value of POP_DEFAULT_TYPE will be added to the
name given e.g. '.pl'.
0.83 Compilers
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The compiler used by those procedures that compile text from VED buffers
will depend upon the current value of -popcompiler-. This is set for the
current file when it is read into the editor, according to the file
type:
compile for Pop11 files
lisp_compile for Lisp files.
prolog_compile for Prolog files.
(PROLOG text will be compiled in reconsult mode).
ml_compile for ML files
The user procedure -vedveddefaults- can over-ride this setting, as can
the user defined list -vedfiletypes-. See HELP * VEDFILETYPES.
A single file/buffer may contain a mixture of Pop-11, PROLOG and LISP
text. For an explanation of the mechanism for switching between the
Poplog languages within a single file see HELP * LANGUAGES.
0.84 Compiling Buffers
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
ved_l
Compile (load) all the compileable files, and continue editing
the current file.
ved_l1
Load only the current file.
vedcompilefiles()
Compile all compileable and changed files.
0.85 Compiling Sections Of The Buffer
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The procedure -ved_lmr- uses -popcompiler- to compile the text in a
marked range. If there is no marked range, the current line is compiled.
Some syntax errors are trapped, and a shortened message printed on the
command line. The cursor will then be positioned at the point the
compiler has read to.
Other output may be directed to editor buffers or not as the user sees
fit.
0.86 Output
.-.-.-.-.-.-.-.-.-.-.-.-
Output that is generated during the compilation of program text with
-ved_lmr- can be directed into an editor buffer (either the current file
or a different file), or be printed out at the bottom of the screen.
These options are controlled by the variable -vedlmr_print_in_file-,
which may be FALSE, TRUE, or a STRING.
If -vedlmr_print_in_file- is a string, this string will be used as a
filename. Output will go into the named file, at the end of the file.
The default value of -vedlmr_print_in_file- for Pop-11 users is the
string, 'output', for prolog users 'prolog.pl', and so on.
If -vedlmr_print_in_file- is TRUE then output will go into the CURRENT
file.
If -vedlmr_print_in_file- is FALSE, output is printed at the bottom of
the screen, and VED will request the user to press RETURN before
refreshing the screen.
The procedure -ved_output- (i.e. ENTER output) can be used to alter the
value of -vedlmr_print_in_file- as follows:
If -vedargument- is a string that is = '.' i.e.
ENTER output .
Then the current file (i.e. the one in which ved_lmr is invoked)
will become the output file.
elseif -vedargument- is a string that is = '^' i.e.
ENTER output ^
Then output will go onto the screen without going into any file.
otherwise if -vedargument- is a string it is assumed to be a file-name.
ENTER output foo.p
Then will make the file called 'foo.p' the output file.
If -vedargument- is an empty string, the current value of
-vedlmr_print_in_file- is displayed.
0.87 Error Messages
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Some syntax errors will be trapped, and instead of a full error
message, a short message will be displayed on the command line. The
cursor is left at the point that the compiler has read to. This will
not neccessarily be the source of the error.
Run-time errors or undeclared variables will cause a full message to
be printed, either
in the output file (if -vedlmr_print_in_file- is a file name) or
at the bottom of the screen, if -vedlmr_errs_in_file- is FALSE or
-vedlmr_print_in_file- is FALSE, or
in the current file, if -vedlmr_print_in_file- is TRUE and
-vedlmr_errs_in_file- is TRUE.
The default for -vedlmr_errs_in_file- is FALSE.
The combination of both -vedlmr_print_in_file- TRUE and
-vedlmr_errs_in_file- TRUE is convenient for preparing a record of a
full interactive session, including all error messages.
The procedure -ved_errs- sets -vedlmr_print_in_file- TRUE, switches the
value of -vedlmr_errs_in_file-, and reports the current value.
If error messages are put into the current file they are automatically
marked, so that they can be deleted with ENTER D. Warning messages
about undeclared variables are inserted as comments, so they can be
deleted or left in the file.
If error messages are inseerted into the current file the symbol '^'
should appear above the error message to show how far the compiler had
got before the error occurred. (The mistake will not always be
exactly at that location. Sometimes it may be several lines earlier.)
Undeclared variable messages may occur immediately before or after the
line where the variable is first used.
0.88 Interactive programs
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Interactive programs invoked by the user can call standard interactive
procedures like -rawcharin- -charin- and -readline-. The last two will
prompt for something to be typed in the file currently specified by
-vedlmr_print_in_file-, and when RETURN is pressed the current line will
be handed over as input to the program. To represent -termin-, i.e. the
"end of file" character for interactive programs invoked in VED it is
necessary to call the procedure -ved_end_im-. By default this is
associated with the input key sequence ESC CTRL-z. However CTRL-z is not
available for some Unix users, as it is set as the "suspend" character,
so in such cases it is necessary to use
ENTER end_im
In earlier versions of Poplog a special procedure -vedreadline- was used
inside VED as an alternative value for value of -readline- to be used by
-ved_lmr-. This is now redundant, though LIB * VEDREADLINE remains as a
demonstration library program.
When an interactive procedure is invoked in VED it is not necessary to
respond immediately. As long as the user moves to another VED file it is
possible to invoke any Poplog facilities, including calling other
procedures or inspecting HELP files, before returning to the interactive
file to type in the answer. This is because the interaction makes use of
the Poplog "process" mechanism. Compilation of a marked range causes a
process to be started up that is suspended when interaction is required.
Pressing RETURN in the interaction file causes the process to continue,
with the current line as input. Alternatively a range can be marked and
and lmr used to provide more than one line of input.
0.89 PROLOG Compilation
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
As the prolog system is a sub-system of Pop-11, most of the preceding
section applies to the compilation of PROLOG text from the buffer e.g.
when VED is called from PROLOG, all the commands that would normally
cause an exit to Pop-11 return control to the PROLOG system.
In a similar way, HELP, TEACH and REF files can be accessed. File
names should not be enclosed in quotes. An example line would be:
?- ved myfile.pl
To return to Prolog, any of the normal ways of exiting from VED may be
used.
After an exit from VED using -ved_x- any files that have been changed
and whose names end in .PL will be 'reconsult'ed.
Various other facilities of VED can be used if files of Prolog code
have the extension .PL e.g. a marked range can be 'reconsulted' with
-ved_lmr-.
As the action of 'reconsult' is to supersede any existing definition
for a predicate with the new clauses, it is important to mark the
WHOLE of the new definition of a predicate that has changed.
Prolog goals can also be included in a marked range to be
'reconsult'ed, just as in any file that is 'consult'ed or
'reconsult'ed. These goals will be tackled by Prolog when it reaches
them.
If goals perform any input/output - output will be to the DOIT buffer
and the input will be taken from the marked range.
All input will be taken from the marked range, EXCEPT in two important
cases. When Prolog is prompting to see whether alternative solutions
are required, or when it is prompting for an option at a spy point.
It will then read from the terminal (and copy the input into the DOIT
buffer).
Syntax errors will be announced in the DOIT buffer, and Prolog will
try reading again from it's position in the marked range. Other
mishaps cause a message to be displayed and an immediate abort back to
VED.
When Prolog called from VED interacts via the terminal, it is convenient
to use the POP procedure -readline- A possible definition for such a
Prolog predicate would be;-
readline(L) :- prolog_eval(apply(valof(readline)),L).
This gives prolog users all the advantages of interaction in the editor,
as described above.
0.90 Other Languages
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
On Unix systems, the easiest method for compiling programs written on
non-Poplog languages is to use the shell escape commands from the
command line.
On VMS systems commands could be provided to use DCL command files to
enable the compilation and running of non-Poplog programs from within
VED. Examples of these commands (for compiling PASCAL programs) are
in the [POP.LIB.VED] directory, and documented in HELP * PASCAL/
ved_pascomp
Compile and link the current file, creating .OBJ and .EXE
files.
ved_pasexec
Execute a previously compiled image of the current file (i.e.
search for a .EXE file, in the same directory as the current
file and, if successful, RUN it).
ved_pasrun
compile AND execute current file.
In each case an error will occur if the current file is not a '.PAS'
file.
The screen will be cleared at the start of execution and various
messages will be produced as compilation proceeds.
Each of the above commands may have optional assignments of the input
and output streams to files (or devices). The assignments take the
form:
in=foo.dat; (get input from file foo.dat)
out=results.lis; (send output to results.lis)
Spaces are not permitted and the semicolon is always required.
These assignments may be in either order (if both are specified). The
default is to read from and write to the terminal.
Devices,directories etc. may be specified as required (the string
between '=' and ';' is passed literally to DCL).
Examples:
ENTER pasrun (input and output to terminal)
ENTER pasrun in=mydat.;out=results.lis;
ENTER pasrun in=mydat2.; (output to terminal)
ENTER pasrun out=bing.baz;
Note: input and output specifications may be given with any of the
above commands, but -ved_pascomp- doesn't use them for anything, since
they only apply when the program is run.
On Unix systems there are two demonstration packages for compiling C and
Fortran programs from VED. See HELP * CCOMP, HELP * FCOMP.
0.91 LEAVING VED
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
0.92 To VED
.-.-.-.-.-.-.-.-.-.-.-.-
This section attempts to explain what happens when a file is quit, but
control remains within the editor.
There is one basic procedure for quitting a file and retaining control
within VED, -ved_q-. All the other procedures mentioned in this section
are based on this.
ved_q
Quits the current file, removing the file record from
-vedbufferlist-. If both -vedwriteable- and -vedchanged- are TRUE
then a check will be made as to whether the file should be
saved, unlike -ved_rrq-, which quits regardless.
The file at the head of -vedbufferlist- becomes the current
file, if this list is empty then the default file will be read
into the buffer, see below.
The default file name is changed according to the following
algorithm:-
if there are no more files in the editor i.e. -vedbufferlist- is
empty then
if the current file is a TEACH file, assign
vedteachdirectory:teach to -vedteachname- i.e. make -vedteachname-
point to TEACH TEACH.
else assign an empty string to the default name, forcing the
choice of the relevant system default file e.g. 'temp.p' when
quitting VED files or an index when quitting DOC and REF files.
The user-assignable procedure -vedvedquitfile- is run whenever a file is
quit in VED. It's default value is -identfn-.
0.93 Quitting to Poplog
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
It is possible to put Pop-11 instructions on the VED command line.
When the command line starts with a colon (the Pop-11 prompt) then the
rest of the command is treated as Pop-11 code to be compiled. Any
output will appear on the status line if possible, otherwise at the
bottom of the screen.
0.94 Procedures For Returning Control To Poplog
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
These procedures all return control to the Poplog subsystem from which
VED was entered.
ved_pop
Returns control to the Poplog subsystem from which VED was
called e.g. Pop-11. Saves the state of the current file and
executes exitfrom(vedprocess).
ved_c
returns control to Poplog, saving the edit state. Compiles
all files that need compiling i.e. those files for which both
-vedcompileable and -vedneedscompiling- are TRUE.
-vedneedscompiling- will be set TRUE for any compileable file
when it is changed and will be set FALSE after the file is
compiled.
The compiler used for each file will depend upon the value of
-popcompiler- for that file. If an error occurs during
compilation, control returns to VED with the file that caused
the error as the current file.
If the compilation succeeds, -ved_pop- is executed, returning
control to Poplog.
ved_c1
Compiles the current file, if necessary i.e if both
-vedneedscompiling- and -vedcompileable- are TRUE. The compiler
used will depend upon the value of -popcompiler-. Executes
-ved_pop- if successful.
ved_x
Writes all the changed and writeable files, then compiles all
the compileable files which need compiling. Equivalent to
executing -ved_w- followed by -ved_c-
ved_x1
Compiles and writes only the current file as neccessary, i.e.
executes -ved_w1- followed by -vedc1-
0.95 To DCL (VMS) or SHELL (Unix)
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
On exit from the Poplog system i.e. when SETPOP reads TERMIN(^Z) from
the standard input, the procedure SYSEXIT is called. SYSEXIT first
closes all the currently open files and then runs the user-assignable
procedure POPEXIT(default -identfn-). Unless the procedure in POPEXIT
prevents the system from exitting, e.g. by doing a SETPOP, the procedure
-vedpopexit- is then executed. -vedpopexit- checks if there are any
changed but unwritten files and if -vedalwaysask- is FALSE writes all of
these files to disc. If -vedalwaysask- is TRUE and there are changed
files the user will be asked whether they should all be written.
If POPEXIT is re-defined, it may be wise for it to call vedpopexit().
N.B. -sysexit- is not called when the Poplog session is terminated
with ^Y in VMS or the "kill" signal in Unix.
Commands for ending the editing session:
ved_qq
Quits the editor, requests confirmation if any files have been
altered since they were last saved.
Uses SYSEXIT.
ved_xx
Exits from VED, writing all the files that have been altered.
ved_rqq
Resets the terminal and exits from VED and Poplog. Does not
call SYSEXIT.
0.96 SEARCH AND SUBSTITUTE COMMANDS
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
This section describes the procedures for searching VED buffers for
text strings. These procedures allow the search string to contain
special characters e.g. to accept only successful matches that begin
or end on text boundaries etc.
See also REF * VEDVARS and HELP * VEDSEARCH
All the search procedures are case specific i.e. if the search
argument is 'AbCd' then matches will be made only against 'AbCd' and
not against 'abcd' or 'ABCD'. There is no provision for a non-case
specific search, though the user can implement this, if desired. It
must be noted however that as the search procedures, as presently
implemented, utililse VAX-VMS string matching instructions, a search
procedure written entirely in Pop-11 will probably be very slow.
0.97 vvedsrchstring
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
All the search procedures update the value of -vvedsrchstring-. This
will be either FALSE, before the first call of a search procedure, or
the most recently used search-string.
0.98 ved_search
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
The most convenient user-interface with the search procedures is
provided by -ved_search-, a procedure that searches forwards through the
buffer for the target string.
-ved_search- is called directly from the command line interpreter for
the most commonly used search commands; ENTER / and ENTER " by-passing
the command-line parser, and without splitting the command line into
command and argument strings. It assumes that -vedargument- contains the
complete command line and its behaviour depends on the first character
in -vedargument- (the delimiter) as follows:-
If the string delimiter is '/' i.e. ENTER /string/
Search forward for the first occurrence of 'string'.
If the string delimiter is '"' i.e. ENTER "string"
Search forward for the first occurrence of 'string' that
starts and ends on text item boundaries, using the full text
itemising rules of Pop-11. I.e. it rejects embedded occurrences
of the string.
The delimiting character at the end of these commands is optional,
unless the string has trailing spaces, in which case the final
occurrence of the delimiter is required to indicate how many spaces.
If -vedargument- contains only one character, this must be either `/` or
`"` indicating search type, and the most recent search string, the
value of -vvedsrchstring-, is searched for.
When the search is successful, -vedline- and -vedcolumn- are altered so
that the cursor is positioned at the start of the found string.
When no matching string is found between the cursor position and the
end of the file, -ved_search- will "wrap around" and start again at the
top of the file.
When a search is unsuccesful -vederror- is called and the original
cursor position is retained.
The procedure -ved_re_search- searches forward for the first occurrence
of most recent search string used. It is normally mapped onto the
key sequence /
Similarly -ved_re_backsearch-, described below, searches backwards. It
is normally mapped onto \
0.99 ved_backsearch
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
This function is called in similar fashion to VEDSEARCH by ENTER \
or ENTER `, i.e.
ENTER \string\
or
ENTER `string`
As before the final occurrence of the search string delimiter is
optional, unless used to indicate spaces, e.g.
ENTER `string `
These commands cause VED to search backward until it finds an occurrence
of 'string' and positions the cursor at the start of the occurrence.
The use of the second form is analogous to ENTER ", i.e. it prevents the
location of embedded strings.
-ved_backsearch- differs from -ved_search- in that it does not wrap
around from the beginning to the end of the file. (Before version 14 it
could not contain any special search characters, e.g. @?, but that
restriction has been lifted, though on long files searching backwards
can be slow if search patterns are used.)
The procedure -ved_re_backsearch- searches backwards for the most recent
search string using -ved_backsearch-
vedtestsearch
-vedtestsearch- requires two arguments, a string and a flag and returns
TRUE or FALSE
vedtestsearch(string, flag) -> boolean
The string, possibly including special characters is searched for, in
a forwards direction. If a successful match is found, TRUE is
returned, otherwise FALSE.
If flag is FALSE, -vedtestsearch- will accept only those matches for
that begin and end on text item boundaries, otherwise any
occurrence of will be accepted.
This procedure does not test for 'wrapping', therefore
while vedtestsearch('example') do
;;; DO NOTHING!
endwhile;
will cycle indefinetely if there is a successful match.
18.4.1 vedlocate
---------------------
-vedlocate- is a library procedure that "packages" -vedtestsearch-
vedlocate(, or )
-vedlocate- searches forwards through the buffer for an occurrence of
the target item. If this item is a word or integer it finds only those
occurrences that begin and end on text item boundaries. If the item is a
string, -vedlocate- finds any occurrence, whether embedded or not.
-vedlocate- leaves the cursor positioned at start of the matching text
if it is successful and calls -vederror- if no match is found.
18.4.2 vedbacklocate
-------------------------
-vedbacklocate- searches backwards for the first occurrence of its
argument using -ved_backsearch-
vedbacklocate(
- )
If
- is a word or integer it will match only occurrences that begin
and end on text item boundaries. If item is a string matches any
occurrence. Calls -vederror- if unsuccessful.
18.5 Search Strings
--------------------------
Search strings may be composed of ordinary characters, and special
pattern elements, with the following properties.
@? : matches any single character
@@ : matches a '@'
@ : matches the delimiter character
@a : matches beginning of line
@z : matches end of line
\^A : matches CTRL-A
(For more complete details of how to insert CONTROL-characters into
search strings see HELP ASCII).
18.6 Examples
--------------------
These examples refer to the enter commands
/fred/ : search forward for next occurrence of 'fred'.
"fred@z : search forward for next occurrence of "fred"
at the end of a line. Will not find alfred
// or / : search for the next occurrence of previous
search string.
"" or " : search for the next occurrence of previous
search string that begins and ends on text
boundaries
/fred@z@ajoe : search for 'fred' at the end of a line followed
by 'joe' at the beginning of the next line.
/\^L : search for CTRL-L i.e. form-feed
19.0 COMBINED SEARCH AND SUBSTITUTION COMMANDS
-----------------------------------------------
VED provides substitution procedures that search for a string and
replace it with another one. The substitution can be interactive or
not as required.
19.1 Interactive Substitution
------------------------------------
-ved_s- is the procedure that does the interactive substitution, asking
the user whether each successful match of the search string should be
replaced. This is normally invoked from the command line, e.g.
ENTER s/string1/string2/
-ved_s- assumes that vedargument holds a string beginning with a
delimiter character, and containing at least one other delimiter to
separate the search and replacement strings. The acceptable delimiter
characters are / or ". These signify whether embedded or non-embedded
instances of the search string are to be replaced. The two delimiter
characters must be of the same type e.g.
ENTER s/string1"string2
will cause an error.
-ved_s- searches forward for the next occurence of the first string, and
if found, "wiggles" the cursor and prompts for instructions. The
acceptable responses are
y or Y : do the substitution and stop.
RETURN : do the substitution and search for the next
occurrence of string1.
DEL : leave this occurrence unchanged and continue search
n or N : stop without doing the substitution.
The search string must conform to the requirements detailed above, in
the section on search.
The matching instance of the search string is assigned to
-vvedfoundstring-
19.1.1 Replacement Strings
-------------------------------
The replacement strings may contain the following special sequences:
@n : insert a newline
@ : insert the character used as the delimiter
@& : insert a copy of the text matched by the search string
@@ : insert @
If an empty search string is given, the most recent search string is
used. If both search and replacement strings are omitted, the most
recent search and replacement strings are used.
19.1.2 Examples
--------------------
s/fred/fried : transform 'fred' into 'fried', interactively.
s"fred"fried : as above, but ignores occurrences of 'freddy'
s"f@?@?d"fried : transform both 'fred' and 'food' into 'fried'.
s/@z@a@z@a// : delete a blank line
19.2 Non-interactive Substition
--------------------------------------
The non-interactive substitution procedures detailed below all expect
-vedargument- to be in the form described in the previous section.
ved_gs
Global Substitute: replaces ALL occurrences of the search string
in the current VED file. A running count of the number of
substitutions is displayed on the status line.
ved_sgs
Silent Global Substitute: like ved_gs, but does not display the
counter. This can make it much faster on large files.
ved_gsr
Substitute ALL occurrences of the search string in the MARKED
RANGE. (See HELP * MARK)
ved_gsl
Globally Substitute occurrences of the search string in the
current Line.
ved_gsp
Globally Substitute occurrences of the search string in the
current Procedure.
The number of substitutions will be counted and a running total
displayed on the status line for all except ved_sgs.
Examples
ENTER gs/@af/F : change all f's at the start of a
line to F
ENTER gs : redo previous substitution,
possibly on a different file.
If the delimiter " is used then only non-embedded strings will be
replaced.
20.0 MISCELLANEOUS PROCEDURES
------------------------------
20.1 Compilation
-----------------------
ved_lcp
load the current procedure. This causes the current procedure
to be marked, and then loaded. The procedure heading must
start at the beginning of a line.
ved_pcmr
Prolog Compile marked range. For use with prolog when the
current value of -popcompiler- is not suitable.
ved_plx
exit from VED and call prolog on the current file in
re-consult mode.
See also REF * VEDCOMMS, for a more complete list of VED commands.
20.2 Deletion
--------------------
ved_dcp
Delete current procedure and copy text to -vveddump-. Uses
VED_MCP and VED_D()
ved_delout
Delete all Pop-11 output lines i.e. lines beginning with '**',
from the current file.
ved_deof
Delete from and including the current line up to the end of
the file and copy text to -vveddump-
ved_clear
Delete everything from the current file. Does NOT copy text
to a safe location.
See also REF * VEDCOMMS and REF * VEDPROCS
20.3 Interactive Definition Commands
---------------------------------------
With the procedure -ved_dm- it is possible to interactively define a new
edit macro, the name of which must be entered with the command from the
command line and, if required, store the definition in the user's
vedinit.p. file. e.g. suppose that a frequently made mistake is to
mistype 'define' as 'dfine'. a command called FIX could be defined,
which will effect a global substitution.
ENTER dm fix
The user will be asked whether the change is to be permanent, and if
so the user's vedinit.p file will be edited, otherwise a temporary
file will be used. The procedure ved_fix will be defined and the user
will be prompted to press keys and terminate with pressed three
times. At this point all the keys that would have to be pressed to
give the command directly should be pressed. I.e.
ENTERgs/dfine/defineRETURN, then, three times. The definition
of ved_fix will then be completed, and loaded, and the user's
vedinit.p file will be written, if necessary.
Mistakes made while defining the macro, can be deleted with ESC then
DEL.
When the definition is completed, typing
ENTER fix
will be the same as typing
ENTER gs/dfine/define
20.4 ved_dk
------------------
Vedsetkey has been packaged, for ease of use during editing sessions, in
the procedure -ved_dk-, which allows the user to interactively define
new functions for key sequences. This will inquire as to whether the
change is to be permanent and if so, edit the user's vedinit.p file
accordingly, otherwise a temporary file will be used.
Two strings of characters are read from the terminal, the key or key
sequence to be defined and the characters which are to be simulated.
Mistakes can be deleted with the sequence DEL.
20.5 Writing To Disk
---------------------------
ved_w
write all files that have been altered.
ved_w
write the current file to the specified file name.
ved_w1
write only the current file.
ved_wq
write and then quit the current file.
ved_wqved
Like wq followed by a call of VED on a new file.
ved_wr
write marked range into file .
ved_wved
Like w1 followed by a call of VED on a new file.
The following can be used to APPEND to an existing file on the disk.
ved_wapp
Write and APPend whole current ved buffer to named FILE on disc,
without reading it into VED like ved_to.
ved_wappdr
Write and APPend to FILE then Delete marked Range (Much faster
than ved_mo and doesn't read FILE into VED).
ved_wappr
Write and APPend marked Range to FILE. (Much faster than
-ved_to-. Uses -discappend-).
See also REF * VEDCOMMS and REF * VEDPROCS
20.6 Text Formatting
---------------------------
ved_centre
Centres current line. Uses -vedleftmargin-, and -vedlinemax-.
ved_j
Fills marked range. Uses -vedleftmargin-, and -vedlinemax-.
ved_lcw n
Transforms next N words to lower case. N defaults to 1.
ved_ljmr
Left Justify Marked range. Uses -vedleftmargin-.
ved_margin n
Set -vedleftmargin- to be N, if no argument, uses cursor
position.
ved_right
Adds string to current line, right adjusted. If no argument
is given, right adjusts text on current line. Uses
-vedlinemax-.
ved_smr
Alphabetically sort the marked range.
ved_sw
Swap the two characters to left of cursor.
ved_swl
ved_swr
Swap the two words to the left or right of the cursor. Uses
space as delimiter
See also HELP * FORMAT, HELP * PAGE
20.7 Case transformation
-------------------------------
vedchangecase()
If the cursor is on an alphabetic character it changes its case
from lower to upper or vice versa. This is often mapped onto CTRL-n
or ESC-u
vedcapword()
Capitalises the initial letter of the current word, making sure
all other characters are in lower case, then moves right to
next word.
ved_lcw n
Transforms next N words to lower case. N defaults to 1.
ved_lcl n
Transforms next N lines to lower case. N defaults to 1.
ved_ucw n
Transforms next N words to upper case. N defaults to 1.
ved_ucl n
Transforms next N lines to upper case. N defaults to 1.
20.8 Further ENTER commands
----------------------------------
ved_h
Allows the user to choose from a list of help files on topic.
Copes with minor spelling errors and truncated topics.
ved_help
Reads in a file from the help library, or if name is ommited a
short introductory file.
ved_hk
Display information on a key, i.e. the name of the associated
function, if any.
ved_qhelp
Quits the current file and reads in a file from the help
library.
ved_vh
Allows the user to search a file containing information about
command mode functions for help on topic.
See also HELP * DOCUMENTATION, REF * VEDCOMMS
20.9 Text Input Functions
--------------------------------
ved_ic n
inserts ASCII character N into the buffer.
20.10 Pop-11 Format Insertion
-----------------------------------
There are several functions for inserting pop11 text e.g. VED_UNTIL
causes an 'until' construct to be input into the buffer after the
current line.
So ENTER until
inserts:
until CONDITION do
ACTION
enduntil;
This uses -vedinsertstring- as follows;-
define ved_until();
vedlinebelow();
vedpositionpush();
vedinsertstring(
'\n\tuntil CONDITION do\n\t\tACTION\n\tenduntil;');
vedpositionpop();
enddefine;
Other template insertion functions and the text inserted are
ved_define
define NAME (PARAMETERS) -> OUTPUT;
vars VARIABLES;
enddefine;
ved_if
if CONDITION
then ACTION
elseif CONDITION
then ACTION
else DEFAULT
endif;
ved_repeat
repeat NUMBER times
ACTION
endrepeat;
ved_unless
unless CONDITION
then ACTION
endunless;
ved_while
while CONDITION do
ACTION
endwhile;
It is easy for users to define their own extensions to this facility,
using the techniques illustrated in the definition of ved_until,
above.
21.0 APPENDIX 1: Some important VED variables
----------------------------------------------
This lists some of the main VED variables. See also REF * VEDVARS.
NAME TYPE DEFAULT WHERE
vedautowrite integer/false 1500
vedalwaysask boolean false
vedversions integer/false false
vedwriteable boolean file-dependent
vedbackers list [then times do else elseif
elseunless step till forever
quitif quitunless nextif nextunless
returnif returnunless and or case]
vedforwarders list [-> ->> --> ==> =>]
vedclosers list [) enddefine endfast_for endfor
endforeach endforevery endif
endlblock endprocedure endrepeat
endswitchon endunless enduntil
endwhile endfast_repeat end close]
vedopeners list [( define fast_for for foreach
forevery if lblock procedure repeat
fast_repeat switchon unless until while]
vedbreak boolean file-dependent
vednonbreakfiles list See HELP * VEDFILETYPES
veddelspaces boolean true
vedindentstep integer 4
vedleftmargin integer/procedure 0
vedlinemax integer 78 (Depends on terminal)
vednotabs boolean Depends on file type
vedcompileable boolean file-dependent
vedlmr_errs_in_file boolean true
vedscreenlength integer 24 (depends on terminal)
vedscreenwidth integer 80 (depends on terminal)
vedwindowlength integer varies
vedscrollscreen integer false
vedstartwindow integer 12
vedhelpdirectory string depends on operating system
veddocdirectory string depends on operating system
vedrefdirectory string depends on operating system
vedteachdirectory string depends on operating system
vvedampersand integer 131
vvedquery integer 129
22.0 APPENDIX 2: Variables associated with each buffer
-------------------------------------------------------
The variables saved by -vedsaveglobals-, i.e. those variables that are
buffer specific are as follows (this list may change);
vedcurrent
veddirectory
vedbuffer
vedline
vedlineoffset
vedcolumnoffset
vedcolumn
vedstatic
vedbreak
vedchanged
vedwriteable
vedneedscompiling
vedcompileable
popcompiler
vedpositionstack
vvedmarklo
vvedmarkhi
vvedmarkprops
vedmarkstack
vvedbuffersize
vvedlinesize
vednamestring
vedleftmargin
vedlinemax
vednotabs
vedindentstep
vedwindowlength
vedscreenoffset
vedfileprops
vedprocwait
vedwasonstatus
vedstatusline
vedpwmwindow
vedpathname
INDEX
-----
The page numbers are no longer appropriate, and will be updated if and
when this file is properly reformatted.
Autoloadable files, 14 Graphics characters, 28
Automatic terminal selection, 7
Help, 4
Break mode, 32
Identfn, 4
Charin, 22 Init.p, 5
Charin_timeout, 23 Initialisation procedures, 5
Charout, 22 Interrupt, 15
Command buffer, 13
Command mechanism, 10 Lisp_compile, 42
Compilation, 42
Compile, 42 Marked ranges, 37
Cursor positioning, 35 compilation, 43
Debugging ved procedures, 15 Newline characters, 16
Definining new commands, 14
Delete buffers, 39 Pascal compilation
insertion, 40 vms command files, 46
Disk quotas, 29 Pop11 format insertion, 57
Doc, 4 Pop_file_write_error, 30
Dumps, 39 Popcompiler, 42, 48, 61
Popdevin, 22
Entering ved Popdevout, 22
from lisp, 3 Popdevraw, 22
from monitor level, 3 Popexit, 49
from pop11, 3 Poplastchar, 31
from prolog, 3 Popautolist, 14
Error handling, 15 Popready, 15
Popuseslist, 42
File records, 17 Position stack, 36
Filenames Prmishap, 15, 24
length, 8 Prolog compilation, 45
truncation, 8 Prolog_compile, 42
unix, 9
directories, 10 Rawcharin, 22, 24
environment variables, 9 Rawcharout, 22, 24
filename truncation, 9 Readline, 44
metacharacters, 9 Ref, 4
multiple versions, 9
vms, 8 Saved images, 6
directories, 9 Screen control procedures, 26
file types, 8 Search, 49
filenames, 8 case, 49
underscore, 8 delimiter, 50
version numbers, 8 strings, 52
Files wrapping, 50
unix Showlib, 4
access mode, 10 Src, 4
vms Static mode, 34
access mode, 10 Strnumber, 12
Substitution, 52
delimiter, 53 Ved_load, 42
interactive, 53 Ved_m, 41
responses, 53 Ved_margin, 56
non-interactive, 54 Ved_mbe, 38
replacement strings, 53 Ved_mbf, 38
Sysexit, 49 Ved_mcp, 39
Sysopen, 29 Ved_mef, 38
Sysread, 28 Ved_mi, 41
Ved_mm, 36
Tabs, 16 Ved_mo, 41
Teach, 4 Ved_mp, 36
Text Ved_output, 43
deletion, 39 Ved_pascomp, 46
buffers, 39 Ved_pasexec, 46
Text formatting, 56 Ved_pasrun, 46
Ved_pcmr, 55
Ved, 4, 61 Ved_plx, 55
Ved_autowrite, 31 Ved_pop, 48
Ved_backsearch, 50 Ved_q, 47
Ved_break, 32 Ved_qhelp, 57
Ved_c, 48 Ved_qq, 49
Ved_c1, 48 Ved_r, 33
Ved_ca, 41 Ved_re_backsearch, 51
Ved_centre, 56 Ved_re_search, 50
Ved_char_in_stream, 23 Ved_repeat, 58
Ved_clear, 55 Ved_right, 56
Ved_copy, 41 Ved_rqq, 49
Ved_cps, 37 Ved_s, 53
Ved_crm, 38 Ved_search, 50
Ved_d, 40, 55 Ved_smr, 56
Ved_da, 40 Ved_sw, 56
Ved_dcp, 55 Ved_swl, 56
Ved_define, 57 Ved_swr, 56
Ved_delout, 55 Ved_t, 41
Ved_deof, 55 Ved_tabs, 17
Ved_dk, 56 Ved_ti, 41
Ved_dm, 55 Ved_to, 41
Ved_errs, 44 Ved_ucw, 57
Ved_gs, 54 Ved_unless, 58
Ved_gsl, 54 Ved_ved, 19, 22
Ved_gsp, 54 Ved_vh, 57
Ved_gsr, 54 Ved_w, 30, 56
Ved_h, 57 Ved_w1, 30, 48, 56
Ved_help, 57 Ved_while, 58
Ved_hk, 57 Ved_wq, 56
Ved_ic, 57 Ved_wqved, 56
Ved_if, 58 Ved_wr, 56
Ved_j, 56 Ved_ws, 20
Ved_l, 42 Ved_wtype, 16
Ved_l1, 42 Ved_wved, 56
Ved_lcp, 54 Ved_x, 48
Ved_lcw, 56 Ved_x1, 48
Ved_lib, 42 Ved_xx, 49
Ved_ljmr, 56 Ved_y, 40
Ved_lmr, 43 Ved_yank, 40
Ved_yankc, 13, 40 Veddocdirectory, 59
Ved_yankl, 40 Veddocr, 34
Ved_yankw, 40 Veddointerrupt, 15
Vedalignscreen, 21 Veddoitfile, 59
Vedalwaysask, 49, 59 Veddoitlimit, 43, 59
Vedappfiles, 19 Veddotdelete, 34, 39
Vedargument, 12 Vedediting, 25, 37
Vedatend, 36 Vededitor, 19
Vedatitemend, 36 Vedendfile, 36
Vedatitemstart, 36 Vedenter, 12-13
Vedatstart, 36 Vederror, 15
Vedautowrite, 31, 59 Vedescape, 60
Vedbackers, 59 Vedescapetable, 10
Vedbacklocate, 52 Vedexchangeposition, 37
Vedbreak, 4, 29, 32, 59, 61 Vedfileprops, 6, 61
Vedbuffer, 16-17, 61 Vedforwarders, 59
Vedbufferextend, 17, 34 Vedgetfile, 19
Vedbufferlist, 18, 41, 47 Vedgetlibfilename, 5
Vedchanged, 30-31, 61 Vedgraphicmode, 27
Vedchardelete, 34, 39 Vedhardtabs, 16-17
Vedchardown, 35 Vedhelpdefaults, 5
Vedchardownleft, 35 Vedhelpdirectory, 59
Vedchardownleftlots, 35 Vedinascii, 23-24
Vedchardownlots, 35 Vedindentstep, 16, 29, 31-32,
Vedchardownright, 35 59, 61
Vedchardownrightlots, 35 Vedinit, 6
Vedcharinsert, 32-33 Vedinit.p, 6, 55
Vedcharleft, 35 Vedinitfile, 6
Vedcharleftlots, 35 Vedinput, 23
Vedcharmiddle, 36 Vedinserting, 27
Vedcharright, 35 Vedinsertstring, 33
Vedcharrightlots, 35 Vedinsertvedchar, 10, 32
Vedcharup, 35 Vedinterrupt, 15
Vedcharupleft, 35 Vedjumpto, 35
Vedcharupleftlots, 35 Vedleftmargin, 32-33, 35, 59, 61
Vedcharuplots, 35 Vedline, 35, 61
Vedcharupright, 35 Vedlineabove, 33
Vedcharuprightlots, 35 Vedlinebelow, 33
Vedcheck, 21, 25 Vedlinedelete, 34, 39
Vedclearhead, 34, 39 Vedlinemax, 29, 32, 59, 61
Vedcleartail, 34, 39 Vedlineoffset, 21, 61
Vedclosers, 36, 59 Vedlmr_errs_in_file, 44, 59
Vedcolumn, 35, 61 Vedlmr_print_in_file, 43-44
Vedcolumneoffset, 61 Vedlocate, 51
Vedcolumnoffset, 21 Vedlowerfile, 18
Vedcompileable, 4, 48, 59, 61 Vedmarked, 38
Vedcompilefiles, 42 Vedmarkfind, 36, 38
Vedcurrent, 61 Vedmarkhi, 38
Vedcurrentchar, 31 Vedmarklo, 38
Vedcurrentfile, 18 Vedmarkpop, 38
Vedcursorset, 21, 25 Vedmarkpush, 38
Veddebug, 15 Vedmidscreen, 59
Veddecodetabs, 31 Vedmoveitem, 32, 36
Veddelspaces, 59 Vednamestring, 61
Veddirectory, 61 Vedneedscompiling, 48, 61
Vednextitem, 32 Vedscreengraphon, 27
Vednextline, 35 Vedscreeninsertchar, 27
Vednonbreakfiles, 32, 59 Vedscreeninsertline, 27
Vednormaltable, 10 Vedscreenleft, 35
Vednotabs, 16, 28-29, 31, 59, 61 Vedscreenlength, 20, 59
Vedobey, 19 Vedscreenline, 26
Vedopen, 19 Vedscreenlinemark, 28
Vedopeners, 36, 59 Vedscreenmark, 28, 37
Vedout, 33 Vedscreenmiddle, 35
Vedoutascii, 24 Vedscreenoffset, 61
Vedpopexit, 49 Vedscreenoutput, 24
Vedpopkey, 37 Vedscreenpulldown, 27
Vedpopready, 15 Vedscreenpullup, 27
Vedpositionpop, 37 Vedscreenpushdown, 27
Vedpositionpush, 36 Vedscreenpushup, 27
Vedpositionstack, 36, 61 Vedscreenraw, 22
Vedpresent, 18 Vedscreenreset, 22, 26
Vedprintingdone, 15, 25 Vedscreenright, 27, 35
Vedprmishap, 15, 24 Vedscreensetpad, 22
Vedprocess, 15, 25 Vedscreenup, 35
Vedprocesschar, 10, 23 Vedscreenwidth, 35, 59
Vedpushkey, 36 Vedscreenxy, 26
Vedputcommand, 13 Vedscrollscreen, 59
Vedputmessage, 15, 25 Vedselect, 19, 22
Vedquery, 10 Vedsetcursor, 21
Vedquerytable, 10 Vedsetglobals, 18
Vedrangerepeater, 31 Vedsetkey, 11, 14, 56
Vedreadin, 29 abbreviations, 12
Vedreadline, 44 Vedsetlinesize, 17, 34
Vedredocommand, 13 Vedsetonscreen, 21
Vedrefdirectory, 59 Vedsetscreen, 21
Vedrefname, 5 Vedsetstatic, 34
Vedrefresh, 25 Vedsetstatus, 27
Vedrefreshrange, 25 Vedsetwindow, 20
Vedrepeater, 31 Vedsrcname, 5
Vedrestorescreen, 25 Vedstartwindow, 20, 25, 59
Vedsaveglobals, 18 Vedstatic, 34, 61
Vedsaveglobals,, 61 Vedstatusline, 61
Vedscreenbell, 26 Vedstatusswitch, 13
Vedscreenchardown, 26 Vedswapfiles, 22
Vedscreencharleft, 26 Vedsysfile, 4
Vedscreencharright, 26 Vedteachdirectory, 47, 59
Vedscreencharup, 26 Vedteachlist, 5
Vedscreenclear, 26 Vedteachname, 5, 47
Vedscreencleartail, 26 Vedterminalselect, 7
Vedscreencolumn, 26 Vedtestsearch, 51
Vedscreencommandmark, 28 Vedtextleft, 36
Vedscreencontrolmark, 28 Vedtextright, 36
Vedscreencursor, 28 Vedthisline, 31
Vedscreencursormark, 28 Vedthisstring, 31
Vedscreendeletechar, 27 Vedtoperror, 15
Vedscreendeleteline, 27 Vedtopfile, 36
Vedscreendown, 35 Vedtrimline, 17, 34
Vedscreenescape, 24, 26 Vedupperfile, 18
Vedscreengraphoff, 27 Vedusedsize, 17
Vedveddefaults, 4, 6, 42
Vedvedname, 4
Vedversions, 30, 59
Vedwasonstatus, 61
Vedwindowlength, 20, 59, 61
Vedwordleft, 35
Vedwordleftdelete, 34, 39
Vedwordright, 35
Vedwordrightdelete, 34, 40
Vedwriteable, 4, 30, 59, 61
Vedwritefiles, 30
Vedwriterange, 30
Vvedampersand, 59
Vvedbuffersize, 17, 61
Vveddump, 39-41
Vvedfoundstring, 53
Vvedlinedump, 39-40
Vvedlinesize, 17, 61
Vvedmarkhi, 37-38, 61
Vvedmarklo, 37-38, 61
Vvedquery, 59
Vvedscreenalpha, 60
Vvedscreencharleft, 60
Vvedscreencharright, 60
Vvedscreencharup, 60
Vvedscreenclear, 26, 60
Vvedscreencleartail, 60
Vvedscreencursorupscroll, 60
Vvedscreendeletechar, 60
Vvedscreendeleteline, 60
Vvedscreengraphic, 60
Vvedscreeninsertline, 60
Vvedscreeninsertmode, 60
Vvedscreenmark, 38
Vvedscreenovermode, 60
Vvedscreenpoint, 60
Vvedscreenresetpad, 60
Vvedscreensendidseq, 7
Vvedscreensetpad, 60
Vvedsrchstring, 50
Vvedworddump, 39-40
Vvedwordump, 39
Windows
position, 21
size, 19
Yanking, 40
--- C.all/doc/vedmanual
--- Copyright University of Sussex 1990. All rights reserved. ----------