HELP VEDTOXVED                                     Adrian Howard June 91

Suggestions for transferring VED programs to XVed.

         CONTENTS - (Use <ENTER> g to access required sections)

 -- Introduction
 -- -vedprocess- and -vedediting-
 -- XVed and -vedstartwindow-
 -- The use of -vedupperfile- and -vedlowerfile
 -- Input and Output with XVed
 -- Related Documentation

-- Introduction -------------------------------------------------------

XVed is a new product for POPLOG 14.1, and may not work with all
programs that previously worked in terminal versions of VED or PWM VED.
In most cases programs will operate as they did previously, but there
are several differences in XVed that will cause some VED programs to
break. These changes will mostly affect badly behaved programs that
make assumptions about the type of terminal VED is attached to.

This file gives some pointers to differences between XVed and previous
VED editors, possible conversion problems, and suggestions for their
solution.

-- -vedprocess- and -vedediting- --------------------------------------

From Poplog 14.1, -vedprocess- operates via a  POPLOG process
(-vedprocessproc-). Unlike old VED and PWM, XVed suspends
-vedprocessproc- when there is no VED input waiting, and resumed it when
input appears on VED's input stream and Poplog is in a long term wait.

In other words, you are no longer either running, or not-running VED.
XVed is continuously starting and stopping. This means that the
-vedediting- variable is not a valid test for whether the editor has
control of the screen.

The boolean value in the variable -vedinvedprocess- is -true- when the
VED is running and -false- otherwise. This is the equivalent of checking
that -vedprocess- is in the calling chain, ie:

    iscaller(vedprocess) == true

An alternative way of finding out if VED is running is to check that the
VED process is active, ie:

    isliveprocess(vedprocessproc) == vedprocessproc

The fact that VED now operates via a process means that -dlocal-
expressions in VED based procedures must take into account the fact that
the VED process may be suspended or resumed.

The following example does NOT take suspend and resume into account, and
will in fact cause XVed to go into an (interruptable) loop:

    define temp_file();
        dlocal 0 %
            vededitor(vedhelpdefaults, 'foo'),  ;;; Edit file on entry
            ved_q()                             ;;; Quit file on exit
        %;
        ;;; .... make changes to 'foo' ....
    enddefine;

The (incorrect) entry/exit actions will be triggered every time the VED
process is suspended or resumed. A better version of the procedure must
check -dlocal_context- to ensure that it is not a suspend or resume that
is causing the procedure to exit:

    define temp_file();
        dlocal 0 %
            ;;; If entry not caused by resume
            if dlocal_context <= 2 then
                vededitor(vedhelpdefaults, 'foo'),  ;;; edit the file
            endif,
            ;;; If exit not caused by suspend
            if dlocal_context <= 2 then
                ved_q()                             ;;; quit the file
            endif
        %;
        ;;; .... make changes to 'foo' ...
    enddefine;

See HELP *DLOCAL for more details of -dlocal- expressions.

-- XVed and -vedstartwindow- ------------------------------------------

This variable is completely ignored in XVed since the concept of split
screen buffers has disappeared. To find out the number of rows in the
current buffer do:

    xved_value("currentWindow", "numRows");

To find out the number of rows of the next window to be created do:

    xved_value("nextWindow", "numRows");

(see REF *XVED for details of setting and reading XVed window values).

-- The use of -vedupperfile- and -vedlowerfile ------------------------

Since screens are never split in XVed the value of -vedupperfile- is
always the ved file structure associated with the currently selected
file (-vedcurrentfile-) while the value of -vedlowerfile- is always
-false-.

-- Input and Output with XVed -----------------------------------------

A basic point that needs to be emphasised is that XVed is *not* a
terminal. It will not respond to escape sequences that would, for
example, move the cursor on a VT220 terminal.

Some programs assume that -rawcharin- and -rawcharout- could be used for
communication with VED. This assumption is INCORRECT. Raw input and
output will, by default, operate in the base *terminal* window, not in
the current XVed window. All character input and output to XVed should
be by the low-level -vedscr_...- procedures (see REF *VEDPROCS/Low level
VED input and output).

-- Related Documentation ----------------------------------------------

REF *XVED - Overview of XVed
REF *VEDPROCS/Low level VED input and output - Low level VED IO

--- C.x/x/ved/help/vedtoxved -----------------------------------------
--- Copyright University of Sussex 1991. All rights reserved. ----------
