Search Top Index
HELP V14.CHANGES A.Sloman Feb 1991 CONTENTS - (Use <ENTER> g to access required sections) -- The purpose of this file -- OVERVIEW OF THE MAIN CHANGES -- Interface to X Windows System (Version 11 Release 4) -- Running VED under X -- Provisional hooks for multi-window XVed -- Access to operating system and filestore -- External procedures and data (using C, Fortran, etc) -- New data types and data-structure facilities -- New startup mechanisms. Starting Lisp, Prolog, ML in VED -- New VED editor startup mechanisms -- New syntax for tailoring VED: vedset ... endvedset -- New VED terminal libraries -- Additional major changes to VED -- Miscellaneous changes to VED -- Immediate mode in VED -- LIB * SUBSYSTEM: facilities for mixed language programming -- Ports to new machines -- Contrib directory tree -- Re-building POPLOG -- Store Manager and Garbage Collector -- Standard ML Version 2 -- Lisp Changes -- Prolog Changes -- Pop-11 syntax -- New "include" library mechanism for shared declarations -- New or changed procedures, global variables, etc -- Words, identifiers and sections -- Pop-11 matcher -- New documentation and browsing mechanisms -- New or updated documentation files -- -- New or updated DOC files -- -- New or updated REF files -- -- New or updated HELP files -- -- New or updated TEACH files -- Errors and tracing -- New virtual machine instructions -- New compiler control facilities -- VMS specific changes -- UNIX specific changes -- Net News tools (UNIX only) -- SUN POPLOG only -- LIB FLAVOURS -- POPLOG Window Manager (PWM) -- New expert system tool -- Miscellaneous additional changes -- Miscellaneous bug fixes -- New POPLOG-based products available from ISL -- POPLOG User Information -- NOTE ON FILENAMES -- Further information on previous changes -- The purpose of this file ------------------------------------------- This file lists the most important changes for POPLOG Version 14 since Version 13.6. In most cases the changes are upward compatible extensions that can be ignored if you are not interested in the new features. In a few cases the changes may affect existing programs, e.g. VED start up files. The next section highlights a few of the most important changes. More details are given in the following sections. This file is organised by topic unlike HELP * NEWS, which is organised by date (latest first) and includes most of the information presented below, sometimes with more detail, and also lists some minor bug fixes not included here. The REF and HELP files referred to give more details concerning all the facilities mentioned. HELP * LISPNEWS, HELP * PLOGNEWS and HELP * PMLNEWS provide details of changes in the Prolog, Common Lisp and POPLOG ML subsystems, respectively. The PML help file HELP * VERSION2 summarises the new ML system. Many changes to Pop-11 (e.g. the new X windows facilities, new data-types, new external interface facilities, callbacks, etc.) are also available to users of other POPLOG languages via calls to Pop-11. HELP * XPOP_NEWS includes information about changes to the POPLOG X Window System interface. This will be of interest only to users who had pre-release test versions of POPLOG Version 14. See the final section of this file for more information on change notes. This file generally uses Unix-style file name formats, as these are automatically translated by VMS POPLOG. The section "NOTE ON FILENAMES", below, gives more information. -- OVERVIEW OF THE MAIN CHANGES --------------------------------------- Version 14 POPLOG adds many new features. The table of contents gives the main headings, expanded below. Highlights include the following (with more details below): o The most important single addition is a rich interface to the X Window System Version 11 release 4, considerably enhancing the potential of POPLOG for graphics, mouse and menu driven interfaces, etc. This was meant to be ready early in 1990, but X has several different layers, and at higher levels it allows for a variety of standards (e.g. Motif, OpenLook). Instead of requiring users to develop all interface software from the bottom up, we wanted to make it easy dynamically to link in already available packages (e.g. Athena, Motif and OpenLook widget sets). Providing such flexibility proved very difficult, and delayed V14 by nearly a whole year. It required several deep changes in POPLOG, including making it easier to share data between POPLOG and external programs, support for "callbacks" from external programs to POPLOG programs, and extensions to the event-handling facilities in POPLOG. The internal representation of POPLOG data was changed so that, for example, a POPLOG array of (null-terminated) strings could look like an array of strings to a C program. It was also necessary to allow users to create temporary POPLOG data-structures that were guaranteed not to be re-located by a garbage collection, so that pointers to them could safely be handed to external procedures. The POPLOG Widget Set, a collection of "ready made" widgets was also developed, for graphics, text windows, menus and the like, along with tutorial documentation and illustrative library programs and utilities. NOTES: (1) The X facilities are initially available only for Unix POPLOG systems. The VMS version should be available during 1991, perhaps released as POPLOG Version 14.1 (2) It is intended that the new X facilities will be used to provide a "user-friendly" interface for new users of POPLOG. A prototype should be available for POPLOG Version 14.1 o The POPLOG compilation mechanisms have been extended with new compiler control facilities for various kinds of optimisations. These are described below. o Standard ML Version 2.0 (see below) is now included with POPLOG, unlike the earlier version which had to be ordered separately. The Edinburgh ML library is included in the $popcontrib directory, along with programming examples from the forthcoming book on ML by Lawrence Paulson. o Improved Edinburgh DEC-10 Prolog compatibility. (This syntax may be made standard for POPLOG from Version 15). A system of "commands" replacing the unsatisfactory use of macros for implementing commands like "ved" in Prolog is described below. There are other Prolog bug fixes and improvements summarised below. o POPLOG Common Lisp has a number of extensions (e.g. debugging aids) improvements (e.g. efficiency and bug-fixes) and CLX and PCL are provided in the $popcontrib directory. o The "SUBSYSTEM" mechanisms for combining different POPLOG languages and switching between them have been improved and rationalised. More below. o There are many improvements to the POPLOG editor, VED, including an improved editor startup mechanism (using termcap on Unix systems), a filename completion facility, improved VED tailoring facilities, and improved Emacs emulation. See below. (A multi-window facility for VED will be available later, based on the Xpop interface.) o Online documentation files have been much improved, with more of the technical detail now available in REF files and easily accessible via the "ENTER ??" mechanism, which has been improved and generalised to work for all the POPLOG languages and for user extensions, though the Prolog online documentation has not been revised for this mode of access as most predicates have their own help files. It is also now easier to get online documentation for one POPLOG language whilst working with another language. (See section on "New Documentation and browsing mechanisms, below".) o Improved interface to external languages (C, Fortran, etc.) including a "callback" facility, and new improved syntax for defining external links. "External function closures" enable users to create procedures that combine external functions with POPLOG data, adding to the flexibility of the callback mechanism. o Virtual machine support for lexical blocks, leading to improved Lisp performance and greater modularity in Pop-11 programs. o A "contrib" library containing public domain software and free POPLOG-based software provided by users is included in the $popcontrib directory. It includes the code from the widely used Gazdar and Mellish textbook on natural language processing, all the program code from the book "Computers and Thought" by Sharples et al., and the Edinburgh ML library. It also contains POPLOG versions of CLX and PCL(CLOS). For more details, see the file $popcontrib/contrib.news o POPLOG now runs on a wider range of hosts. See below. o New high resolution timer. o Improved access to Unix utilities as described in HELP * PIPEUTILS. This includes several new commands for invoking Unix utilities and reading the results into a VED buffer. Also improved version of LIB DIRED (directory manipulation in the editor), and a Unix net-news interface. See HELP * VED_NET, HELP * VED_POSTNEWS o There are many additional improvements and extensions, for example, consdevice for creating pseudo devices, and many utilities in libraries with source code included, E.g. a new expert system tool (LIB NEWPSYS). o New products based on POPLOG are being offered for sale by Integral Solutions Ltd., the main POPLOG commercial distributor. See below. o Several new HELP files provide information about the POPLOG user group, books relevant to POPLOG, commercial distributors, the POPLOG User's email forum, etc. See the section on POPLOG User Information, below. o COMING: in version 14.1 it is planned that the X facilities will be available for VMS. In addition there will be a multiple timed interrupt facility, allowing different procedures to be associated with different time intervals. o COMING: POPC - the stand-alone compiler for producing deliverables (initially only for Pop-11, later for other languages). REF * IDENT describes "weak" declarations which can be used in preparation for the new facility. Several of the autoloadable libraries have been modified to use the facility. See, for example LIB * SYSSORT -- Interface to X Windows System (Version 11 Release 4) --------------- (Not available for VMS until POPLOG Version 14.1) o The X Window interface mentioned above now makes it possible for POPLOG to support graphical and "WIMP" facilities whether POPLOG is running on a desktop workstation or on a powerful central machine accessed via a remote windowing "X server" i.e. an X terminal. o Although the POPLOG Window Manager (PWM) remains available it will not be developed further, and it is hoped that its users will eventually port their programs to the POPLOG X interface, which is far more general and flexible and usable on a wider range of machines. o The X Window System provides a fairly low level standard, and there are considerable differences between different graphical tools and window managers based on X. In particular they have different "look and feel" specifications. Some are based on Motif, some on Open look, some on the MIT Athena system, and so on. Unfortunately, just getting started with X, whether using POPLOG or not, can be something of a hurdle for many people, and users will be dependent on X manuals or guides, or help from local X experts, e.g. in setting up appropriate environment variables in their login files, creating their X initialisation files, which vary from one X system to another (OpenWindows, Motif, MIT Athena X, etc.) HELP * VEDXTERM gives some information on ensuring that Sun or HP keyboard function keys transmit appropriate codes under X, likewise HELP * VEDDXTERM for DEC POPLOG users. o Sun workstations will generally be supplied with OpenWindows, which provides the "OpenLook" look and feel, but it is also possible to obtain Motif widget sets for Suns. DEC and HP machines will generally come with Motif tools, though it appears that DEC may delay full implementation of X11R4 client facilities. (It is claimed that their X11R3 server will support X11R4 clients.) For these reasons the POPLOG X interface is designed to make it possible for users to link in whatever X widget sets they need, and some general purpose graphical and text widgets are provided with POPLOG. o Linking and unlinking of widgets can be done dynamically via POPLOG's external interface, providing a very flexible development environment, even for developing and testing C-based widget sets intended for use without POPLOG. o Some of the additions to POPLOG in version 14 described below were aimed specifically at support for this kind of development, including the call-back mechanism, new facilities for passing data between POPLOG and external procedures, signal and event handling, and fixed address structures. o There is a new directory subtree ($usepop/pop/x/*) provided with POPLOG, which contains most of the X facilities. However there are a few "linking" documentation files and libraries in the main POPLOG sub-tree, e.g. HELP * XPOP, and LIB * POPXLIB. The latter must be compiled in order to access the other files. I.e. do, in your init.p file: lib popxlib or uses popxlib to gain easy access to other POPLOG X documentation and code libraries. o Facilities are provided for asynchronous handling of toolkit events by invoking callback procedures defined in POPLOG. See REF * xt_event and also REF *SYSIO, REF * SIGNALS. o The POPLOG Widget Set provides a collection of tools for developing text-based or graphics based interactions. A brief introduction is provided in TEACH * XpwDemo. TEACH * RC_GRAPHIC demonstrates graphical tools based on this. The source code for the POPLOG widget set is written in C and can be freely used without POPLOG. See $usepop/pop/x/Xpw/* The main documentation is in $usepop/pop/x/pop/ref/Xpw* o Note that many of the Xpop program and documentation file names have mixtures of upper and lower case, following the convention for X documentation and identifier names. The exact mixture of upper and lower case must be typed when following up cross-references, except when using <ESC> h. (HELP * VEDEXPAND describes a mechanism for inserting text from a file into the VED command line.) o See HELP * XPOP for an introduction to the Xpop facilities. A full understanding of available facilities can be obtained only by browsing library and documentation files in the directory tree $usepop/pop/x/* especially $usepop/pop/x/Xpw - Source files for the POPLOG Widget Set $usepop/pop/x/pop - The main documentation and library files for Xpop, especially $usepop/pop/x/pop/ref - Xpop REF files $usepop/pop/x/pop/help - Xpop HELP files $usepop/pop/x/pop/teach - Xpop TEACH files $usepop/pop/x/src - Low level Xpop interface code o The REF files generally presuppose knowledge of the X Window System. HELP * XPOP and the TEACH files (e.g. TEACH * RC_GRAPHIC, and TEACH * XpwDemo) can be used to get started without prior knowledge of X, though users may need help from X experts in setting up their general X environment. o A "relative co-ordinate" (RC_) graphical library is provided, which makes it easy to write interactive graphical programs based on a user-defined co-ordinate system rather than pixel-based co-ordinates. See TEACH * RC_GRAPHIC for an introduction, HELP * RC_GRAPHIC for more detail. An advanced graph-drawing package based on the RC_ library is described in TEACH * RC_GRAPHPLOT, HELP * RC_GRAPHPLOT. See also $usepop/pop/x/pop/lib/rc* o A collection of demonstration programs is provided in the $popcontrib/x directory including a draft package for interfacing Prolog to the X windows facilities. (See the section on the "Contrib" directory below.) The relevant files are: $popcontrib/x/demos/* $popcontrib/x/pop/* $popcontrib/x/prolog/* (These may later be moved into the system if found to provide a satisfactory basis for a Prolog interface to X.) More may be added later. o COMING: A collaborative project to develop a collection of user interface design tools, between Sussex University, Integral Solutions Ltd. and BMT Ltd, began in mid 1990 and will provide a sophisticated user interface design environment (UIDE) based on the POPLOG X interface. -- Running VED under X ------------------------------------------------ Users who do not need to make use of any of the Xpop facilities for graphical interaction, but do want to use VED in an ordinary "xterm" window on an X server (e.g. on Suns or HP workstations running X), should look at the file HELP * VEDXTERM for information on tailoring VED for the "xterm" terminal emulator. It explains how to set up the environment so that function keys work, and describes a simple facility for controlling VED with the mouse, LIB * VEDXGOTOMOUSE. For use with DECWINDOWS, see HELP * VEDDXTERM HELP * HPXTERMKEYS shows key mappings for an HP 9000 under Xterm. The full XVed system will provide more sophisticated interaction, using multiple text windows, from POPLOG Version 14.1. -- Provisional hooks for multi-window XVed ---------------------------- The incomplete draft file HELP * WVED lists a provisional collection of identifiers added to facilitate tailoring of VED to work with a separate window for each file. These will eventually be used by the multi-window XVed package. For now, users should not attempt to use them. -- Access to operating system and filestore --------------------------- (See also sections below on UNIX and VMS facilities.) There have been many extensions and enhancements, summarised here. o A new constant * sys_machine_type, whose value is a list containing details of the host machine, now complements the existing * sys_os_type and * sys_processor_type. o sys_os_type- has been revised to include proprietary software names (e.g. SunOS, HP-UX etc.) in more cases than previously. [NB: Users who have programs which test the value of -sys_os_type- should check that the tests are still valid.] o This new information has been put to use in a revised LIB *SYSDEFS which defines a more comprehensive set of flags and version numbers for distinguishing between different host systems. In addition, * DEFV, analogous to the existing macro * DEF, has been introduced to simplify tests on the version numbers defined by LIB * SYSDEFS. These utilities can be used for producing portable libraries with compile-time options using, e.g. #_IF DEF BERKELEY .... #_ENDIF See HELP *SYSDEFS, * DEF, * DEFV o sysopen can now take an optional 4-th argument specifying whether to return <false> or mishap when a file cannot be opened, depending on the error. (This change means that -readable- is now just a closure of -sysopen-.) See REF * sysopen. o Facilities for handling signals and interrupts have been extended. See REF * SIGNALS, which has been completely revised, partly in order to meet the requirements for the X windows interface described above. o Changes to sys_signal_flag: its value can now be a vector of signals to block while running the handler, and values can be assigned for a set of signals simultaneously. See REF * sys_signal_flag. o A new procedure -consdevice- allows `user' devices to be constructed. These `pseudo' devices can then be used with standard I/O procedures such as -sysread-, -syswrite- etc to implement simulated I/O channels (there is also an associated new procedure -device_user_data-). This is used, for instance, to define pop_null_device, now the standard "null" device. If read, always at EOF. If written to, output is discarded. See REF *pop_null_device o The new facilities are described in REF *SYSIO (which has been overhauled, and the previously separate Unix and VMS versions combined into one). o If pop_exit_ok is false this now inhibits any terminal IO by the system on exit (user -popexit- procedures should respect it also) See REF *SYSTEM/pop_exit_ok o New procedure -fast_sysexit- exits POPLOG without tidying. This can be used to prevent some infinite looping errors when there are problems writing files on exit, etc. See REF *SYSTEM o * sys_file_stat now accepts a null vector as its second argument. This provides a way of testing whether a file exists without creating a device record (as -readable- does). o New procedure -sys_host_name- added. This returns the name of the machine POPLOG is running on. See REF * SYSTEM/sys_host_name. LIB * POPHOST updated to use -sys_host_name-. Also, it prints a warning message when loaded (to encourage system adminstrators to amend it). o There are new procedures for extracting individual filename fields provided by the new procedure * sys_fname and others built on top of it: * sys_fname_path, * sys_fname_nam, * sys_fname_name, * sys_fname_namev, * sys_fname_extn, These procedures use an internal cache so that successive operations on the same file name will not cause unnecessary garbage. See REF *SYSUTIL. They make obsolete the old filename parsing routines such as * sysfileparse, * sysfilename. o * sysfileok has been enhanced so that if given the optional extra argument true, it provides a parse of filenames into component fields after doing any translation. Compare * sys_fname. See REF * SYSUTIL * sysisprogfile is now an autoloadable library file defined in terms of sys_fname_extn. SHOWLIB * SYSISPROGFILE for details. o New procedure * sys_read_lines for reading in a specified range of lines from a file, and returning a string for each line: sys_read_lines(FILE, L1, L2) -> (LINE_L1, ..., LINE_L2, NREAD) The FILE argument can be a file name, or a device record. See REF * sys_read_lines o line_repeater is a utility for creating a line-repeater for a file, (ie. a procedure that returns a string each time it is called). See REF line_repeater o The use of one of % $ or ! at the beginning of a line to spawn a Unix shell or VMS DCL sub-process has caused quite a lot of trouble. The procedure CHARIN has been redefined so that it will now do this only if the character at the beginning of a line is in the user assignable variable * pop_charin_escapes, which, in VMS POPLOG defaults to [`$`] and on Unix to [ `%` `$` `!`]. The procedure VEDSETPOP has been redefined to set pop_charin_escapes to [], so that the mechanism will no longer be triggered accidentially in VED immediate mode (See HELP *IM) or in processes that compile from the VED buffer. (VED allows an alternative mechanism for spawning sub-processes from the command line, as described in REF * VEDCOMMS) o POPLOG no longer automatically alters terminal settings on entry. Whenever it is entered (or re-entered after being suspended) it records the current terminal settings and re-sets them on exit or suspension. This should overcome various problems including using POPLOG via Emacs. NB. More changes relevant to operating system access are described in the UNIX and VMS specific sections. See also changes related to external data in the section `New data types and data-structure facilities' below. -- External procedures and data (using C, Fortran, etc) --------------- The facilities for handling external procedures and external data have been significantly extended, partly in order to support the new X interface described above. o POPLOG uses a new representation of data to facilitate sharing of data-structures with external procedures. In particular, POPLOG pointers now refer to the third word of all structures, which, for vector type structures is where the data begins. (The previous word points to the key for the datatype.) This change makes POPLOG pointers to vectors and records directly useable by external procedures, as explained in the section `Format of POPLOG Data Structures' in REF * DATA. The change should have no other effect on user programs, except for programs that abuse 'fast' procedures. The value fields of identifiers and the cont fields of references are now in different places, which means for example that -fast_idval- will no longer work on references, nor -fast_cont- on identifiers, etc. o There is a new callback mechanism described in REF * EXTERNAL/Callback allowing external procedures to invoke POPLOG procedures. External function closures, described in the section `New data types and data-structure facilities', below, enhance this facility. o V14 provides a whole new set of facilities for defining and accessing external structures -- including new, more convenient, ways of loading and calling external functions (the term `external function' replacing the old `external procedure'). As well as a completely rewritten REF *EXTERNAL (now covering both Unix and VMS), and radical revisions to REF *KEYS and REF *DATA, these changes are covered by two new REF files: REF *DEFSTRUCT - Pop-11 syntax for defining and accessing both POPLOG and external structures REF *EXTERNAL_DATA - Using external data structures in POPLOG, and POPLOG data externally The changes are completely upward-compatible with previous versions of the system; the old facilities for loading and calling external procedures remain as autoloadable libraries. An associated change is that the field specifiers of the three built-in vectorclasses strings, shortvecs and intvecs have changed from integers 8, -16 and -32, to the words "byte", "short" and "int" respectively. However, -class_spec- still returns the old values (which it does by applying -field_spec_info- to the actual -class_field_spec- of the keys, the latter being the new replacement for -class_spec-). See REF *KEYS. o Object files containing external functions and data may be loaded with the new syntax form (defined in REF *EXTERNAL): exload <mark item> <input files> <identifier specs> endexload; This runs the operating system linker ("ld" in Unix, "link" in VMS) to link in with the POPLOG system specified object files and then provides access to the named external functions and data defined in those files, including the use of implicit access procedures, and automatic type conversion procedures. A "batching mechanism" is provided that enables external loads to be batched, in order to save time and space, as described in REF * EXTERNAL/exload_batch. o There are special facilities for dealing with abnormal exits from POPLOG procedures invoked by external callbacks. These are described in REF * EXTERNAL/Abnormal o WARNING: Care is needed if the the new callback facilities are combined with POPLOG processes (REF * PROCESS). Although processes can be run and suspended as normal inside callback, you cannot suspend a process ACROSS callback (that is, so as to include external calls in the process's context). See REF * EXTERNAL/Processes o There are more convenient facilities for declaring links to external C programs, provided by LIB * NEWEXTERNAL, which makes accessible LIB * NEWC_DEC To use the new version it is necessary to do lib newexternal before using the forms described in HELP * NEW_CDEC. The changes are: A completely new parser, and interface paradigm. The difference between the paradigms presented by LIB * c_dec and LIB * newc_dec (the new version) is in the level of help given to the programmer. There is no automatic coercion performed on a procedure's input arguments. The exception to this is a "var args" (ie. variadic function) capability. This should allow programmers to write more efficient code. The new interface also allows the programmer to specify C style structure declarations. The return argument of external procedures can be typed to be one of these structures, causing coercion to be performed automatically on the return data. See HELP * NEWEXTERNAL, * EXTERNAL, * NEWC_DEC, o POPLOG has a new facility for creating 'fixed-address' data structures, that is, structures whose memory locations are guaranteed to remain unchanged by garbage collection, as long as the structures remain in use. This facility solves one of the principal problems associated with using POPLOG data structures inside external procedures. See information under `Store Manager and Garbage Collector', below. o REF * SHADOWCLASS describes LIB *SHADOWCLASS and LIB *SHADOWKEY, which provide a utility designed to bridge the gap between ordinary POPLOG record- and vectorclasses and external class specifications as used by -defexacc- etc. (see REF *DEFSTRUCT). -- New data types and data-structure facilities ----------------------- o There are major enhancements to the facilities for creating record and vector classes, in addition to those concerned with external data mentioned above. The new features are described in REF * DEFSTRUCT, REF * EXTERNAL_DATA, and REF * KEYS. o New built in data types, described in REF * DATA, are "external_ptr" Pointer to external data (including external functions) (See REF * EXTERNAL_DATA "XptDescriptor" X toolkit Interface Descriptor (See REF *XTOOLKIT) o The new syntax word "defclass" is used to construct new record and vector classes, making recordclass and vectorclass redundant, though they are still available as autoloadable libraries for backward compatibility. The new construct, defined in REF * DEFSTRUCT has the form defclass <declaration> <dataword> <attributes> <typespec> ; It copes with a wide range of options, and allows user-defined field types, field value conversion procedures, special facilities for accessing external data. o External data can be accessed (or functions called, etc) either with in-line code generated by the syntax construct -exacc-, or with procedures defined by -defexacc-, both defined in REF *DEFSTRUCT. The latter has the form defexacc <declaration> <name> <attributes> <typespec> ; This constructs new access/update procedures for external data. It uses -cons_access- (see REF *KEYS) to create or procedures appropriate to the <typespec> argument supplied, including any external pointer-class structure. The mechanisms support "implicit" access procedures and "implicit type access" specifications. o The -exacc- syntax form generates in-line code to access external data and call functions, avoiding the use of access procedures, and trading space for time. exacc <attributes> <typespec> <pointer expression> <access part> -exacc- is also usually a more convenient form for calling external functions; it is particularly designed for use with pointers to external functions and data. It uses the new POPLOG VM instruction -sysFIELD-, see REF *VMCODE). o Facilities are also provided for "address mode" accessing, using pointer values as data, and for specifying re-use of intermediate structures for the sake of avoiding garbage collections, but with reduced "safety". o The new callback mechanism that allows external procedures to invoke POPLOG procedures introduces the risk of POPLOG procedures invoking a garbage collection which might cause POPLOG data previously handed to a still active external procedure to be re-located, with disastrous results. To prevent this there is a new facility, -cons_fixed- described in REF * EXTERNAL_DATA. See the section on `Store Manager and Garbage Collector' below. o In order to allow externally-defined callback procedures that invoke POPLOG callback procedures and give them `client' data, `external function closures' are now provided. These are records that allow an arbitrary POPLOG item to be `frozen' as an argument into an external function. When passed out as an external argument it represents an executable object; when called, its action is to deposit the frozen argument value in the standard variable -pop_exfunc_arg-, and then call the base function (which gets whatever actual arguments were passed to the closure). (See REF * EXTERNAL_DATA, REF * EXTERNAL/Callback). o All the built in data-types now have corresponding identifiers referring to their keys, e.g. pair_key, vector_key, etc. o isclosure- now returns 1 if its argument is a "protected" closure whose components cannot be changed. See HELP * CLOSURES. o Some new "fast" procedures described in REF * FASTPROCS * fast_prop_entry_arg, * fast_apply, * fast_chain, * class_fast_access added. See REF * KEYS (???) -- New startup mechanisms. Starting Lisp, Prolog, ML in VED ----------- o Please note: the file that used to be called $popcom/poplib is now called $popcom/popenv, to reflect its role in defining environment variables. o The system startup procedures have been drastically revised, and more control provided for users. For full details see REF * SYSTEM, which has been considerably revised and extended. o A new system variable * poparg0 holds the string containing the command POPLOG was started up with. This is usually the same as hd(poparglist0), but in some cases poparglist0 can get altered. Then poparg0 preserves the original start-up command name. o Argument strings passed to POPLOG on startup (and put into -poparglist- etc) can now be formed into sub-lists by using the argument strings '(' and ')' as list brackets. That is, all arg strings between these two are collected into a single sub-list element of -poparglist-. See REF * poparglist0. o There are new special optional startup flags %nobanner, %noinit, %x, to control startup procedures as described in REF * SYSTEM/syssetup, and a mechanism for bracketing arguments given to POPLOG on startup, so that the bracketed arguments go into a list (See REF * SYSTEM/poparglist0). So the following special command line arguments, all starting with `%`, are recognised: %nobanner suppresses printing of the startup "banner" %noinit prevents compilation of initialisation files %x tells POP-11 to start-up under X The %x argument may optionally be followed by a bracketed list of X arguments, which is assigned to the variable -popunderx-. For example, pop11 %nobanner %x \( -display cx010:0.0 \) causes POPLOG to startup under X without printing the banner. The variable -popunderx- will have the value: ['-display' 'cx010:0.0'] o In order to allow saved images to take arguments using the "-" prefix that is standard in Unix, and to allow the same notation to be used in VMS and UNIX there is a new saved image startup notation. E.g. pop11 +foo +baz -flag arg1 arg2 Will run the saved image baz.psv that was created as a "layer" on the saved image foo.psv, and will provide the rest of the command line as arguments to go into poparglist. The "+" notation for invoking saved images also works for VMS, as an alternative to "/", improving the uniformity of POPLOG between VMS and Unix. For details see REF * SYSTEM. The old notation can also still be used (on Unix). I.e. pop11 -foo -baz -flag arg1 arg2 will run three layered saved images foo.psv, baz.psv and flag.psv with two arguments. o The system initialisation procedure -syssetup- is now available for use in user programs. It is useful for re-initialising after restoring a saved image. See REF * syssetup. o Startup procedures for POPLOG Lisp, Prolog and ML have been improved so that if they are run with an argument such as "ved <filename>" or "help <filename>" they will go straight into VED, and read in the appropriate file, as if the command had been given to VED. E.g. prolog help news This is not done for Pop-11 (a) because it is inconsistent with the existing mechanism for giving a program file name as argument to Pop-11 (See REF * SYSTEM) and (b) because "ved", "help", "teach" etc are already defined as abbreviations for this purpose. o Users wishing to make saved images that include all their VED tailoring files pre-compilied, for quicker VED startup, should use the new file LIB * MKVEDIMAGE. See HELP * MKVEDIMAGE o The directory $poplocalauto is now included in $popcomppath (used for running Pop-11 with a file to be compiled). See REF * SYSTEM for details. o POPLOG startup routines no longer give an error if a directory included in $popcomppath or $popsavepath does not exist. -- New VED editor startup mechanisms VED needs to know how to control the screen on the current terminal, and how the function keys (if available) are mapped onto VED procedures. New improved procedures are now used, which should make it much easier for most users to get started using POPLOG, though existing users may have to make slight changes to their vedinit.p files. o The VED startup mechanism for identifying the terminal in use and tailoring itself to the terminal has been drastically revised, though MOST things will work as before. The new mechanisms are described fully in HELP * TERMINAL, which explains how to configure VED for your terminal, and REF * VEDTERMINALS which describes how VED determines which terminal it is, how it configures itself to make use of that terminal, and summarises which terminal types are known. Library files configuring VED to the screen and to the keyboard have been separated, so that (e.g.) people using a particular VDU can load the screen control file, and do their own keyboard mapping. The new terminal configuration files are to be found in $popvedlib/term, i.e. $usepop/pop/lib/ved/term/* o If the terminal is not already known, then (on Unix systems) the TERMCAP file will be used to configure VED. o A consequence of the changes is that saved images can now contain compiled versions of several libraries for configuring VED. Then when the saved image starts up the relevant screen and key facilities are set up quickly and automatically, at the cost of some wasted space, which will matter less if the saved image is shared between several users. This is particularly useful if VED is used on a time-shared machine with by people using different terminals. See HELP * MKVEDIMAGE. o Another consequence is that when VED finally sets up the key bindings for the terminal it can over-ride uses of "vedset keys", or "vedsetkey" included at top level in your vedinit.p file. This can be overcome by inserting all such instructions into the body of a procedure called "vedinit" defined in your vedinit.p file. That procedure will be run after the basic terminal key bindings have been set up. (This means that if you use "ENTER dk" to define new key bindings in your vedinit.p file you should later move them inside the definition of vedinit.p). To save space, you can make your vedinit procedure end with the line identfn -> vedinit; o As described in REF * VEDTERMINALS, a terminal library loaded explicitly in a "vedinit.p" file (e.g. "uses vedvt220") still takes precedence over the new terminal identification mechanisms, if POPLOG is started up interactively. o The biggest change is for Unix users, where * vedterminalselect (used for automatic terminal interrogation) is now null by default: VED will consult the $TERM environment variable to find the terminal type rather than using the answer-back mechanism. Also, VED no longer assumes a Visual 200 terminal as a default case, but will prompt the user for the terminal name instead. o A new procedure *VEDUSETERM simplifies the process of configuring VED for a particular terminal type: the call veduseterm(TERM) tries to set up VED for the terminal type TERM, and returns a flag indicating whether the set-up was successful. VEDUSETERM may load a terminal library, or on Unix systems, consult the TERMCAP database. VEDUSETERM can be called more than once if (for example) the terminal is initially set up incorrectly. o Most VED terminal libraries have been revised to conform to a standard format: instead of containing in-line code to configure VED, each library defines a procedure to do this instead. This will be called automatically if the library is loaded from a "vedinit.p" file compiled by -vedsetup-, but not otherwise. This may impact on users who have made saved images containing terminal libraries: the fix for this is to insert a call to the terminal specific procedure (e.g. vedvt220(); vedxterm(); etc.) at the point at which the library is loaded. For more details see HELP * TERMINAL. -- New syntax for tailoring VED: vedset ... endvedset ----------------- A new syntax word "vedset" simplifies the definition of new VED key bindings (providing syntactic sugar for calls to *VEDSETKEY) and for initialising screen-control variables in terminal libraries. Thus it is no longer necessary for users of Prolog, Lisp or ML, to learn the details of how to represent strings in Pop-11, as vedset has a more mnemonic notation. For example: vedset keys enter = esc cr ;;; <ESC> <RETURN> invokes vedenter markfind = ^b a ;;; CTRL-B a invokes vedmarkfind ENTER define = 'DEF' ;;; typing DEF invokes ved_define endvedset vedset screen ;;; assign string '\^[[D' to vvedscreencharleft charleft = esc [ D ;;; Move cursor left charright = esc [ C ;;; Move cursor right endvedset See HELP * VEDSET for full details, where many more options are described. Examples of its use can be found in the files in $usepop/pop/lib/ved/term/* o See also HELP * DK, for interactively defining keyboard mappings. This has been enhanced. -- New VED terminal libraries ----------------------------------------- o The ved terminal customising libraries are now all stored in $usepop/pop/lib/ved/term/*.p. The 'term' sub-directory of $popvedlib is now included in popliblist and popuseslist. For each terminal type there are normally (though not always) three files, including one for the key-bindings, and one for setting the screen-control variables and procedures: e.g. for a VT220 type terminal the three files are vedvt220.p, vedvt220keys.p, vedvt220screen.p acessible as LIB * VEDVT220, LIB * VEDVT220KEYS, LIB * VEDVT220SCREEN The first file loads the other two, but they can be accessed independently if necessary. Some terminal types share "keys" files or "screen" files. Many terminals have their own help files also. The following are included in the $popvedlib/term directory (excluding the screen and key versions): vedansi.p vedatari.p vedbbc.p vedbbcvt100.p vedcifer.p vedcmdtool.p veddxterm.p vedhpkeys.p vedhpscreen.p vedpwmsun.p vedsun.p vedsun_cmd.p vedsunkeys_NOSUNVIEW.p vedsunkeys_SUNVIEW.p vedsunxtermkeys.p vedtvi.p vedtvi925.p vedvi200.p vedvi500.p vedvi55.p vedvi550.p vedvt100.p vedvt200.p vedvt220.p vedvt300.p vedvt320.p vedvt52.p vedwinsun.p vedxterm.p If VED does not have an appropriate library to customise itself to the terminal, it will use the "termcap" entry, if available. LIB * VEDANSI is now provided for terminals without function keys, e.g. some X terminals. See HELP * ANSIKEYS. It uses LIB * VEDNEWKEYS. LIB * VEDSUN now works both on the console and in a shelltool window but LIB * VEDWINSUN has been kept for compatibility. LIB * VEDCMDTOOL provides for a sunview command tool window o LIB * CIFER and HELP * CIFER removed. Long since redundant. (See HELP * VEDCIFER). LIB * VEDATARI, HELP * VEDATARI and HELP * VEDATARIKEYS, included for Atari ST using UniTerm terminal emulator. -- Additional major changes to VED o A new procedure *VEDSCREENCONTROL is used to output all terminal control sequences to the terminal. This replaces the old *VEDSCREENESCAPE. The difference is that the new procedure no longer automatically adds the VEDESCAPE character to each sequence it prints. The corollary of this is that all the screen control variables such as VVEDSCREENCHARRIGHT, VVEDSCREENCHARUP, VVEDSCREENCLEAR etc. now have the leading escape character included as part of their values. NB.NB. Users who have written their own terminal libraries or have made use of these variables in some other way should check their code for consistency with the new mechanism. In most cases it will suffice to replace calls of VEDSCREENESCAPE with calls of VEDSCREENCONTROL, but explicit assignments to any screen control variables will typically have to be changed. The relevant screen control variables are listed in the `Terminal Descriptions' section of REF * VEDTERMINALS. More detailed information is in `The "screen" file' section of HELP * TERMINAL o The default VED key bindings are now more completely described in HELP * VEDKEYS. Some VED terminal setup libraries will over-ride them as described in their help files. The defaults can always be restored by running the new procedure vedoldkeys, which is the default value for the variable veddefaultkeys (See REF * VEDTERMINALS). There are some additional key bindings now provided by -vedoldkeys- to help users whose keyboards lack adequate function keys. The new facilities are flagged with "++" in HELP VEDKEYS. o There is also a new (far more systematic) set of key bindings, loosely modelled on Emacs (but made compatible with VMS and access via networks). These are described in HELP * VEDNEWKEYS. If you wish to use these make sure that there is call of vednewkeys() in your vedinit.p file, before any terminal conversion libraries are loaded. Alternatively put this in your vedinit.p vednewkeys -> veddefaultkeys; It would be better to use the new more rational bindings as the default, but too many old VED users complained at the change when it was tried early in 1990. For more information on all this see REF * VEDTERMINALS, HELP * TERMINAL, HELP * INITIAL, HELP * VEDOLDKEYS, HELP * VEDKEYS, HELP * VEDNEWKEYS o VED's behaviour on starting up a new file has changed slightly. Previously the procedure -vedsetfiletypes- used to make -compile- the default value of -popcompiler-, so that it had to be over-ridden explicitly in different versions of -vedfiletypes- called in different contexts. This initialisation is now done outside -vedsetfiletypes- whenever a new file is created. (See HELP * VEDFILETYPES) o The default value of -vedfiletypes- has changed slightly. 1. It has a new default condition making -vednotabs- true and -vedbreak- true. Changing these for a particular file used previously to affect the values for the next file read in. 2. Defaults for Lisp and ML have been added to -vedfiletypes- and to -vednonbreakfiles- 3. The variable -vedindentstep- is set by default for all files so that if changed for one file it is not inherited for all other files. Users wishing to have a different default value should assign an appropriate list to -vedfiletypes- in their vedinit.p See HELP * VEDFILETYPES/DEFAULT o The user-defineable procedure vedinitialise(ITEM) is now invoked after creation of a new VED file or renaming of an existing one, to enable user-defined actions to be performed after the file has been read in from disk or an empty buffer created. This was not previously possible with * VEDVEDDEFAULTS or * VEDFILETYPES, both of which are accessed before the file is read in, in order to set up variables that control the reading. Possible values for ITEM are: true - invoked by -vedreadfile- when it creates a new empty buffer because no file was found on disk false - invoked by -vedreadfile- when it has found the file on disk and read it in. "ved_name" - invoked by -ved_name- when used to change the name of an existing file. For details See REF * vedinitialiase and HELP * INITIAL - section on Tailoring VED o HELP * VEDFILECOMPLETE describes a new mechanism for automatic file name completion in VED. By default this is now bound to "ESC 3", but that may be overridden by some terminal key libraries. o Various enhancements to LIB VEDEMACS. See HELP * VEDEMACS o DIRED (Unix only) directory-browsing facility extended in various ways since V13.6. See HELP * DIRED. -ved_dired- has been altered so that if a dired command to produce new directory information is given in a file that was originally produced by ved_dired, then instead of putting the new information in a separate temporary file, it splices it into the current file. This default is controlled by the variable -dired_current_file- and can be suppressed by doing the following in your vedinit.p" vars dired_current_file = false; See also REF * diredpipein The inserted listing can be removed by the "ENTER -dcd" (Delete Current Directory) command. In the commands "ENTER dired -mv <name>" "ENTER dired -cp <name>" if <name> is the name of a directory, then the file named on the current VED line is moved or copied to the named directory. The former can now cope with moving or renaming a directory. Two new commands for copying or renaming WITHIN the existing directory: ENTER dired -mvd <new name> ENTER dired -cpd <new name> These rename or copy the file to the new name but in THE SAME directory as the original. Hence it is not necessary to type the full pathname. ENTER dired -load compiles the file specified by the current line in the VED buffer. It is sensitive to the file extension. ENTER dired -grep <string> will run grep to search for occurrences of the string on the file(s) specified by the current line in the VED buffer. See HELP * DIRED, SHOWLIB * DIRED_GREP (Compare * VED_GREP) LIB * DIRED (see HELP * DIRED) has been modified so that the key sequence CTRL-X CTRL-X is equivalent to ENTER qdired. o HELP * VEDXTERM , VEDDXTERM describe support for VED in XTERM and DXTERM windows. o Most information about VED procedures and variables can now be found in the overview files: REF * VEDPROCS, * VEDCOMMS, and * VEDVARS. These are more complete than previous VED overview HELP files. o LIB * VEDWORDSTAR provides a partial VED emulation of the WORDSTAR editor. See HELP * VEDWORDSTAR o There is more information on changes to VED in the section below on new documentation and browsing facilities, and in the section on Miscellaneous changes to VED. -- Miscellaneous changes to VED --------------------------------------- o TABS in files are no longer lost. Users who leave *VEDNOTABS TRUE (the default) and do not set their *VEDFILETYPES so as to make VEDNOTABS false in all cases where tabs should be preserved, have occasionally lost the tabs in files and found them hard to replace properly. To reduce the risk of this happening in future, the variable VEDREADINTABS now defaults to TRUE. This means that if a file read into VED contains tabs, then VEDNOTABS will be set FALSE for that file and tabs will be preserved. To restore the old behaviour put 'false -> vedreadintabs' into your 'vedinit.p' file. o * vedstartwindow has been made an active variable. Its value is now tied to that of * vedscreenlength: whenever the screen length changes, vedstartwindow is adjusted automatically in proportion. See REF * vedstartwindow. o * vedloadline (i.e. compile the current line) now maps onto the key sequence <ESC> d, by default. o vedtableft added, to complement vedtabright. See REF * vedtableft o LIB * VED_DK has been extended to make the ENTER dk command far more versatile, so that it can be used to map a key sequence onto a known VED function or onto an ENTER command. For details See HELP * DK o ENTER ljmr extended to cope with negative argument, and bug fixed. See REF * ved_ljmr o New VED command ENTER cols added. If called, VED will display the current column number on the status line, instead of the current line number. Uses the procedure *ved_cols and the variable *vedstatusshowcols. o Global variable -vedinputfocus- put in to fix bug in connection with immediate mode has had to be exported for use in things like LIB * WINDOWS. If not false, it specifies the VED file that should be made current when control returns to top level in vedprocess. o New procedure * VEDCHECKSIZE to determined whether * VEDRESIZE should be invoked. o New procedure *VEDSEARCHFILETYPES added. It returns the value that -vedsetfiletypes- would assign to a given variable for a given filename. (It uses vedfiletypes non-locally). o New VED command ENTER hkeys added. This displays a HELP file which illustrates the current set of VED key bindings. Documented in REF * VEDCOMMS/ved_hkeys o HELP * VEDSUN has been substantially rewritten. It discusses the various libraries for using VED on a Sun workstation, including the new variable -vednosunviewkeys- which can be used to force LIB * VEDSUNKEYS to load the key mapping described in the file HELP * SUNKEYS. See also HELP * SUNKEYS_SUNVIEW and REF * VEDTERMINALS/vedsun. o The libraries that set up VED on a Sun now make use of the extra right hand keypad keys available on Sun type-4 keyboards. o New VED commands for manipulating list expressions in the VED buffer. ENTER gbl Go to beginning of list ENTER gel Go to end of list ENTER gol Go out of current list ENTER mbl Mark beginning of list ENTER mel Mark end of list ENTER mcl Mark current list These all use a new procedure -vedfindbracket- for searching for bracket characters in VED. -vedfindbracket- is intended as a replacement for -vedmatchbracket-. See REF * VEDCOMMS and REF * VEDPROCS for more details. o ENTER grep (Unix only) provides a mechanism for searching named files for occurrences of a string, using one of the "grep" family of programs. See HELP * VED_GREP o Bugs fixed in LIB WINDOWS (the version of VED for more than 2 windows on a VDU), and documentation revised. See HELP * WINDOWS o * vedrestorescreen, * vedfindpdheader, and a number of other VED procedures have now been made user definable. They are indicated in REF * VEDPROCS with the [procedure variable] specification instead of just [procedure]. o Some VDUs based on the VT100 terminal control sequences can now handle character insertion and deletion in a line. This can be used to speed up some of VED's interactions. See LIB * VEDVT100SCREENEXTRA o New procedure * vedscreenblankpartline, described in REF * VEDPROCS o A number of new "hooks" into VED have been provided at the request of users, and defined in REF * VEDPROCS. * vedinitialise(item), allows user initialisation procedures to be run after a new file has been read in, unlike * vedvedefaults. * vededitortrap allows a user-definable procedure to be run whenever vededitor starts or is re-started (via the VED command). * vededitorexit allows a user-definable procedure to be run whenever vededitor is about to exit, normally or abnormally. Compare the existing * vedprocesstrap, * vedcommandtrap o Two new procedures for more efficient screen handling. See REF * rawsubstringout, * vedrefreshpartline o The latter permits * vedrefreshblock to be reimplemented so that it handles tabs correctly (See LIB * VEDBLOCKS) o LIB * VEDBLOCKS extended (see HELP * VEDBLOCKS). The procedures * vedoverlayblocks and * ved_yotb can be used for overlaying a text block on some text in the VED buffer in such a way that spaces in the overlaid block are "transparent". LIB * VEDBLOCKREPEATER takes in a vector of strings such as might be produced by * VEDCUTBLOCK and returns a character repeater. o Abnormal exits from VED did not always reset the screen properly, both in the POPLOG Window Manager and when using ordinary terminals. This has now been fixed by re-organising -vededitor- so that appropriate action is always taken whether it is exited normally or abnormally, including re-setting * popcompiler. The new standard way to exit from VED temporarily or permanently is via the procedure * VEDEXIT, and * VED_POP has been redefined to use it. o Documentation on * VEDOPEN corrected to point out that it can take two optional extra arguments. o Altered -vededitor- and -vedreadfile- so that after errors they don't leave terminal in graphics mode. o Fixed bug in -vedgetsysfile- (<ESC> h) which sometimes prevented it searching for the item following "/" as in HELP * VEDGETSYSFILE/strings o ENTER wapp <file> Write and append current VED buffer to file. Much faster than ved_to because it uses * discappend ENTER wappr <file> Write and APPend marked Range to file. ENTER wappdr <file> Write and APPend to FILE then Delete marked Range o A new VED search procedure vedteststartsearch(string) searches for a line starting with the string. o The variable * ved_last_char is now available to users. It holds the last character read in by -vedprocesschar- or -vedgetproctable- * Two new undocumented system procedure variables -vedlastcommand-, veduserdocommand(BOOL, PDR), will be used later for further VED enhancements. o ENTER s VED's interactive search and substitute command, has been extended to allow the response "g" meaning: do the search and substitution globally, without further interaction. This is useful if you wish to check that you have given the right pattern before allowing the global replacement. Also ved_s no longer calls vedscreenbell when there are no more occurrences to replace. See HELP * VEDSEARCH o LIB * VEDARGINT added, to complement LIB * VEDARGNUM. The former, but not the latter, produces an error if a non-integer is produced. Several VED utilities that could have produced bizarre errors if given non-integral values, have been changed to use VEDARGINT, namely ved_bl ved_br ved_dc ved_dl ved_dw ved_mc ved_ml ved_mw. o The VED_TIDY procedure for indenting Pop-11 programs has been considerably improved and extended. (a) There are two new user-modifiable global lists controlling its behaviour. (1) A list giving words that "quote" everything following them up to the occurrence of a closing bracket. So the intervening words do not affect indentation. A list of possible closers can be associated with each such word. ved_tidy_skip_pairs = [vedset [endvedset] lib [^newline ;]] (2) A list of words each specifying that N additional items are to be read in and regarded as quoted, and therefore ignored. I.e. they have no effect on changing indentation. N is in a list, for compatibility with ved_tidy_skip_pairs ved_tidy_skip_some = [" [2] nonmac [1] nonop [1] nonsyntax [1] uses [1]] (b) ved_tidy no longer corrupts strings going over more than one line (e.g. with pop_longstrings true, or `\` at end of line). (c) The closing vector bracket or list bracket now lines up with its opener, if on a line by itself. (d) Indentation after vars, dlocal, lconstant, etc. is incremented by vedindentstep, not by 5 as previously. (e) "return" has been removed from vedbackers. "=>" and "==>" have been added to vedforwarders. (f) Labels are no longer de-indented to column 1. Instead they are de-indented to the same level as the beginning of the current procedure definition. (g) ved_tidy fixed to deal more sensibly with "%". E.g. "%]" "%}" and "%)" now work like the corresponding closing brackets (h) ved_tidy no longer gets confused by `'`. o New VED procedures (documented in REF * VEDPROCS): *ved_ccw changes the case of the current word; *vedprevsent, *vednextsent move to start of previous/next sentence; *vedprevpara, *vednextpara move to start of previous/next paragraph; *vedtopwindow relocate the current line at the top of the window (companion to -vedmidwindow-); *vedresize(lines, columns) resizes the display after the window size has changed. (Replaces vedwin_adjust) *vedchecksize(lines, columns) -> boolean Check whether vedresize needs to be invoked o vedputchar - (an obsolete synonym for * vedinput) has been WITHDRAWN. o Corrected bug in UNIX version of ved read routine - lines are no longer broken at column 512. Also, ved file read speed increased by approximately 30%. Note that devices to be passed to -vedreadin- should be preferably opened mode <true>, i.e. disk block I/O, rather than the previous "line". o ved_splice used to give an inappropriate error if invoked before ved_cut. Now fixed. See REF * ved_splice, * ved_cut o ved_imsh (Unix Only) used sometimes to give no response to the first command, then, after each subsequent command, produce output to the previous command. Now fixed. See HELP * IMSH -- Immediate mode in VED ---------------------------------------------- o Pop-11 VED commands like "ved", "help", etc now work correctly in VED immediate mode compilation. o VED's immediate mode mechanism is now fully(?) documented in REF * VEDPROCS (see -vedsetpop-, -vedprocswaiting-, -veddocr) o Two new procedures: * ved_end_im terminates input in immediate mode (since it is not possible to type in the end of file character directly); * ved_switchmode_im switches immediate mode between allowing <RETURN> to hand the current line to the compiler and requiring ved_lmr to be invoked. See HELP * IM o Added "ENTER noprompts" command for tidying files created by immediate mode. See HELP * VED_NOPROMPTS. o (Unix POPLOG Only). The VED facility for interaction with the C-shell via a VED buffer previously would not work if the user's .cshrc file defined a changeable prompt string. This has now been fixed by using a constant, but user assignable prompt string, as described in HELP * CSH_COMPILE and HELP * IMCSH. o The procedures csh_compile, sh_compile and dcl_compile, used by the ENTER commands imcsh, imsh, imdcl, have been altered to prevent slow sideways scrolling when long lines are printed in VED. See (on Unix) HELP * IMCSH, *IMSH, (on VMS) *IMDCL *DCL_COMPILE o As explained above, the change to CHARIN prevents commands starting with shell escape characters triggering incomprehensible behaviour. See REF * pop_charin_escapes -- LIB * SUBSYSTEM: facilities for mixed language programming --------- LIB * SUBSYSTEM has been substantially revised and is documented in the much revised HELP * SUBSYSTEMS, and the new file REF * SUBSYSTEM. Some of these extensions are experimental and further revisions are likely for POPLOG V15. The New library LIB * MKSSIMAGE added, for building saved images that contain subsystems. See HELP * MKSSIMAGE for more details. o Two new command files added to create mixed language saved images: The files are (add '.com') for VMS $usepop/pop/com/mklispplog Creates a saved image with Prolog loaded on top of Lisp $usepop/pop/com/mkploglisp Creates a saved image with Lisp loaded on top of Prolog (Both saved images will automatically contain Pop-11 and VED. o New procedure -is_subsystem_loaded- tests whether a given language subsystem has been loaded. See HELP * IS_SUBSYSTEM_LOADED. o The section on `New documentation and browsing mechanisms' below contains further information relevant to POPLOG sub-systems, especially getting information about one language while working with another. -- Ports to new machines ---------------------------------------------- o POPLOG now runs on the following machines: new versions (since V13.6) are marked with asterisks. VAX, VAXstation (VMS/Ultrix/Bsd Unix), * DECStation and DECServers running Ultrix (E.g. DECStation 3100) * MIPS workstations and servers Sun3, Sun4 * SPARCStation, SPARCServer * Solbourne HP 9000 300 (M680x0) series workstations with HPUX Sequent Symmetry with Dynix * Sun386i (This machine is no longer being sold by Sun. So 386i POPLOG will not be kept up to date) Apollo with Bsd Unix (Apollo POPLOG is frozen at V13, unless demand increases) Orion 1/05 (with Clipper). (This version is no longer being updated or supported because of inadequate demand. It was frozen at V13.5) o Pre-release versions of POPLOG exist for * MAC II running A/UX * 80386/80486 PCs running Unix system V These may be made more generally available if there is sufficient demand. Other ports are under consideration. -- Contrib directory tree --------------------------------------------- Software, documentation and teaching material supplied free by POPLOG users, and distributed "as is" without support, or any warranty are now included in the $popcontrib directory. See HELP * CONTRIB for an overview. Software provided includes versions of CLX and CLOS (PCL) tailored for POPLOG Lisp users, and the program examples from the Gazdar and Mellish books on Natural Language Processing. (See HELP * POPREFS). It includes an extended version of the POPLOG window manager provided by Anthony Worrall of Reading University. There are also additional demonstration programs, library utilities, Xpop demonstrations, and the Edinburgh Standard ML library. The file $popcontrib/contrib.news will summarise additions to the contrib library. NOTE: whether the POPLOG contrib library is available will depend on your installation manager. It may be deleted to save space. -- Re-building POPLOG ------------------------------------------------- For system administrators:- Anyone intending to re-link poplog is advised to examine relevant command files, starting from: $usepop/pop/src/newpop (Unix POPLOG) usepop:[pop.src]newpop.com (VMS POPLOG) These files reference other files that are also relevant. Comments at the top of the files indicate linking options. Please also see the notes for the POPLOG administrator, and notes on installation in the printed POPLOG documentation. See also HELP * NEWPOP -- Store Manager and Garbage Collector -------------------------------- o A new facility permits POPLOG users to create "fixed address" structures that will never be relocated by the garbage collector as long as they remain in use. This means that pointers to them can safely be handed to C programs, including programs that "call back" to POPLOG procedures that may trigger garbage collections. (Although non-relocatable they are garbage collectable.) The main new procedure is: cons_fixed(ARG_1, ..., ARG_N, KEY, HOLD) -> FIXED_STRUCT cons_fixed(ARG_1, ..., ARG_N, KEY) -> FIXED_STRUCT This creates 'fixed-address' structures, whose memory locations do not change. An ordinary constructor procedure is called, but in such a way that the result is allocated memory in a separate part of the heap reserved for fixed-address objects --- and where its address is guaranteed to remain unchanged by garbage collection, until it is no longer accessible, in which case it will be garbage collected and the space re-used. The HOLD argument provides an option to automatically hold the new structure on a global list (from which, when no longer required, it can be freed with the procedure -free_fixed_hold-). This allows POPLOG structures to be created for use by external procedures, where the structures are not pointed to by any other POPLOG structure. There are three additiona new procedures, viz * init_fixed, * copy_fixed and * is_fixed. See 'Fixed-Address POPLOG Structures for External Use' in REF *EXTERNAL_DATA. There are number of associated changes in the store-allocation mechanisms of POPLOG, which may result in slightly different patterns of memory use in existing programs. In particular, the garbage collection message output when -popgctrace- is true has been revised and extended. See REF *POPGCTRACE. -- Standard ML Version 2 ---------------------------------------------- o POPLOG ML (PML) is an implementation of Standard ML version 2.0, including modules. It is now supplied as standard with POPLOG. The PML help file HELP * VERSION2 gives detailed information concerning the differences, and explains how to keep a copy of the old POPLOG ML working if you wish to. o Users who had previously obtained POPLOG ML as an optional extra will need to find out how the version has changed. For details see HELP * PMLNEWS The ML system has been radically revised to meet the new specification. In addition to the extensions required for the new standard, there have been many efficiency improvements, better support for ML in the editor VED, and improved facilities for switching between different POPLOG languages, as described in HELP * SUBSYSTEMS and REF * SUBSYSTEM. o In addition to ML-specific changes, many of the new features available to Pop-11 users can be accessed by ML users. In particular, this applies to all the X Window System interface mechanisms. -- Lisp Changes ------------------------------------------------------- o There have been many changes to POPLOG Common Lisp concerned with improved efficiency, bug fixes, improved debugging aids, improved documentation, better support for LISP in VED, and additional tools for mixed language programming, described in HELP * SUBSYSTEMS with technical details in REF * SUBSYSTEM. The ved_?? and ved_? mechanisms now work for LISP. o The new "contrib" directory includes some Lisp facilities, including PCL and CLX. o See HELP * LISPNEWS and HELP * LISPCHANGES for full details. o In addition to Lisp-specific changes, many of the new features available to Pop-11 users can be accessed by Lisp users. In particular, this applies to all the X Window System interface mechanisms. -- Prolog Changes ----------------------------------------------------- See HELP * PLOGNEWS for full details. o The use of Prolog macros for implementing directives such as "ved", "help" etc. has been discontinued, and a new system of commands instituted in its place -- see PLOGHELP * COMMANDS. The virtue of this is that command names (unlike macros) are treated specially only at the start of a top-level goal or clause, which should fix a long-standing complaint. A new command "pop11" has been added as an abbreviation for :- prolog_language(pop11). o The new LIBRARY * EDINSYNT provides full Edinburgh (or DEC-10) syntax in POPLOG Prolog. To get full Edinburgh syntax, type: ?- library(edinsynt). followed by: ?- syntax(edinburgh). See PLOGHELP * EDINSYNT for details. o The module system has now been incorporated into the standard Prolog system rather than being a library, and has been improved in a number of ways. In particular, it is now possible to make inter-module calls, that is, to invoke predicates (which need not have been named in an interface specification) by prefixing the call with the module pathname of the defining module. In other words, $-Name$-Goal will invoke Goal inside module Name. See PLOGHELP * MODULES, and the details in HELP * PLOGNEWS. o Predicates that are to be asserted and retracted can now be declared "dynamic" with considerable improvements in efficiency. There are improved facilities for switching between different POPLOG languages, as described in HELP * SUBSYSTEMS and REF * SUBSYSTEM. o A new facility has been added which allows the pre-processing of clauses read when consulting or reconsulting a file. The user may define transformations to be applied to each clause by asserting clauses for the predicate term_expansion/2. See PLOGHELP * EXPAND_TERM. Note that this is compatible with similar facilities in some other Edinburgh-style Prolog systems. o Full user defined pretty printing is now available in POPLOG Prolog. The evaluable predicate print/1 now checks for the definition of a suitable portray/1 clause at every level of the term. Previously, if the call to portray/1 failed at the top-level of the term, write/1 was invoked immediately. See PLOGHELP * PRINT. In addition, all debugging output is now printed using print/1, and so will take note of portray/1 clauses. o The functionality of the evaluable predicate save/2 has been considerably enhanced. It now accepts as its second argument a (possibly empty) list of attributes, which give control over whether the Prolog saved image is created as a locked system (and if so whether the nonwriteable area should be made shareable) and whether standard Prolog system initialisation should be performed when the image is restored. This particularly simplifies the creation of layered saved images from Prolog. See PLOGHELP * SAVE. o The mechanisms previously described in HELP *BASEPROLOG have been withdrawn, as POPLOG Prolog has been substantially re-implemented. o In addition to Prolog-specific changes, many of the new features available to Pop-11 users can be accessed by Prolog users. In particular, this applies to all the X Window System interface mechanisms, though $popcontrib/x/prolog includes some Prolog-specific facilities for interacting with X. -- Pop-11 syntax ------------------------------------------------------ o The Pop-11 itemiser has been altered so that it is now possible to represent control characters in strings or character constants without using upper case. E.g. `\^a`, `\^b` etc are equivalent to `\^A`, `\^B` etc. and similarly in strings. HELP * ASCII, HELP * STRINGS, and REF * ITEMISE updated. o Pop-11 now supports expression sequences in update mode, where the expressions are evaluated in reverse order. This makes possible `stack tuple' assignments of the form 1,2,3 -> (x,y,z); equivalent to 1,2,3 -> z -> y -> x; 1,2,3 -> if <cond> then x,y,z else u,v,w endif; As normal, an empty expression in update mode is interpreted as an erase, so that foo(x,y) -> (u,,w) would erase the second result of -foo-, and foo(x,y) -> (,,) would erase all three, etc. o A `tuple' facility is also available for use with "=" in identifier declaration and -dlocal- statements, thus: lvars (remainder,quotient) = 14//4; dlocal (u,,w) = foo(x,y); Note that parentheses that are associated with identprops, etc are completely separate from `tuple' parentheses. Thus something like vars procedure (p1, p2) = (identfn, identfn); is NOT allowed; however, tuple parentheses may occur either inside or outside the other kind, i.e. both of vars ( procedure (p1, p2) ) = (identfn, identfn); vars procedure ( (p1, p2) = (identfn, identfn) ); are legal. (Also, commas for separation are MANDATORY everywhere inside tuple parentheses.) o The output local syntax of -define- and -procedure- is similarly extended, so that define foo(x, y) -> (u, v, w); corresponds to the existing define foo(x, y) -> w -> v -> u; etc. o The new Pop-11 syntax construct #| <statement sequence> |# counts how many items are pushed onto the stack by the statement sequence. E.g. #| "a", "b", "c" |# => ** a b c 3 This construct largely does away with the need for -cons_with-, since cons_with consstring {% ... %} can now be written more simply as consstring(#| ... |#) (Note that what #| actually puts on the stack is (stacklength after) - (stacklength before) which means that if more items are removed than added, then the result will be negative.) See REF * SYNTAX/#|, * POPSYNTAX o The -dlocal- statement now reads identifier names with -itemread- instead of -readitem-, meaning that macros can be expanded. The only respect in which this is non- upward-compatible is that making a macro identifier dlocal now requires "nonmac", e.g. dlocal nonmac foo; This change also applies to 'define dlocal ... '. o The ':pdr_valof' option to -define- is now replaced by define <name> = <expression> enddefine e.g. define constant procedure iscolour = member(%[red orange yellow blue green indigo violet]%) enddefine; o The "for ... endfor" loop syntax has been made user extensible using for_form (in a manner that is similar to the extensibility of "define" using define_form). Full details are provided in HELP * FOR_FORM. New forms provided include: for <var1>, <var2> ... in_vectorclass <vector1>, <vector2>, ... do ... for <var1>, <var2> ... in_vector <vector1>, <vector2>, ... do ... for <var1>, <var2> ... in_string <string1>, <string2>, ... do ... for <var1>, <var2> ... in_subscripted <struct1>, <struct2>, ... do ... for <var1>, <var2>, ... in_list <list1>, <list2>, ... do ... for <var1>, <var2>, ... on_list <list1>, <list2>, ... do ... for <keyvar>,<valvar> in_property <property> do ... fast_for <entry> on_property <property> do ... for <var> from_repeater <pdr> do ... The "with_index" option allows the loop body to use an index variable, for iteration over vectors: e.g. for a with_index b in_vector v do [^a ^b] => endfor; HELP * FOR_FORM also explains how to define new iteration constructs using define :for_extension <name>(varlist, isfast); ... enddefine; o recordclass and vectorclass are now syntax words rather than macros, and also now accept "lconstant", "lvars", etc as declaration keywords for the key and associated key-procedure identifiers. (However, *defclass provides a more general construct.) -- New "include" library mechanism for shared declarations ------------ o All .ph files in $usepop/pop/lib/include are now set up so that when used with #_INCLUDE they declare only 'lconstant' macros (but reverting to 'global constant' as before if directly compiled). (This is achieved by the autoloadable macro INCLUDE_constant, which produces either 'lconstant' or 'global constant' depending on whether the file is being #_INCLUDEd or not; to determine this it tests the variable -pop_#_include_stack-. For full information see REF * LIBRARY/Include, REF * #_INCLUDE, REF * PROGLIST. o The autoloadable macro -include- provides a "uses"/"lib" like syntax and mechanism for #_INCLUDEing files. It uses * popincludelist to search for .ph files. The default is global vars popincludelist = ['$poplib/include' '$poplocal/local/include' '$usepop/pop/lib/include']; See HELP *INCLUDE, LIB * INCLUDE o LIB * VED_SHOWINCLUDE makes it easy to use VED to examine "include" files accessed via -popincludelist-. E.g. try ENTER showinclude sigdefs.ph or ENTER showinclude sigdefs Cross references in documentation files also work, e.g. See INCLUDE * xdefs -- New or changed procedures, global variables, etc ------------------- o popliblist has been changed to popautolist. o rawcharout generalised so that it can take a string instead of a character, so that -vedoutascii-, which now simply calls it, is strictly redundant, though it can still be used for modularity. o New POP-11 compiler variable -popclosebracket_exec- allows recognition of 'execute' context during compilation. See REF * POPCOMPILE. o The procedure -pdnargs- now has an updater. See REF * PROCEDURE. o Two new autoloadable library procedures added, * dupnum and * applynum, completing this table sysERASE erase erasenum sysPUSHS dup dupnum sysCALLS apply applynum o -apply- and -applynum- have updaters. see REF * STACK, * PROCEDURE -- Words, identifiers and sections ------------------------------------ See REF * WORDS and REF * SECTIONS, both updated. REF * IDENT describes some important new facilities relevant to the potential use of the POPLOG stand alone compiler POPC, to be made available later on. In particular there is a new form of "weak" declaration for use in connection with facilities that may or may not be included in a deliverable. -- Pop-11 matcher ----------------------------------------------------- LIB * FMATCHES, described in HELP * FMATCHES makes available a new version of the Pop-11 pattern matcher that can be used with in sections and with lexical variables. fmatches can also find some matches involving nested lists with repeated "??" variables, not found by matches. For example vars x, y; [[1 2 3 4][3 4 1 2]] matches [[??x ??y][??y ??x]] => ** <false> [[1 2 3 4][3 4 1 2]] fmatches [[??x ??y][??y ??x]] => ** <true> See HELP * FMATCHES for full details, including the disadvantages (e.g. fmatches is a syntax word and cannot be passed as an argument to a procedure). -- New documentation and browsing mechanisms -------------------------- The online documentation mechanisms have been considerably improved, and generalised in order to be equally useful for all the POPLOG languages, and so as to be more extendable by users. o In particular the ved_?? and ved_? procedures for accessing summary information no longer require their own database (previously stored in $usepop/pop/lib/data/ved_what/*). Instead they have been integrated with the REF files, using the doc_index subdirectory, mentioned below. This saves duplicated documentation, and makes it easier to browse the summary information according to topic area. Consequently, "ENTER ?? member" will get the same information as "ENTER ref member", except that the former will save the text in a short temporary file, whereas the latter reads in the whole REF file (REF * LISTS in this case.) For more information see HELP * QUERY, HELP * MKREFINDEX o The documentation access procedures ved_help, ved_ref, ved_teach, and ved_doc have been generalised. They all use -syssearchpath-, which has been generalised in two ways (See HELP * SEARCH_LISTS): (a) -syssearchpath- accepts search lists that can contain not only directory names, but also lists of names, procedures, words that are names of procedures, or identifiers whose idvals are procedures. (The latter is preferable to use of words because it survives changes of section.) If a "flat" list of directory names is wanted, * flatten_searchlist can be used, though it will not deal with procedures in search lists. (b) If syssearchpath does not find a file with the appropriate name in one of the directories D, syssearchpath looks to see if D contains a sub-directory called 'doc_index'. If so, that is assumed to contain index files created using the mechanisms described in HELP * MKREFINDEX, which can point to a subsection in one of the files in D. If so, that section of the file is read into a temporary VED buffer. This is the also the mechanism now used by ved_??. (See HELP * QUERY). This new mechanism makes it possible for many short HELP files to be combined in one HELP or REF file, whose entries are accessed via the doc_index sub-directory. Examples of such new "portmanteau" files are REF * VEDPROCS, REF * VEDCOMMS, and REF * VEDVARS, showing the different formats that the indexing mechanism can cope with. A consequence of this is that it is now possible to access the REF documentation for any procedure by giving the command REF <procedure name>. REF * member (Some of the old overview HELP files are now redundant, and have been removed, e.g. HELP * VEDCOMMS) o Users can themselves now create doc_index files for accessing sub-sections in their own documentation, using the new procedures described in HELP * MKREFINDEX. mkrefindex(DIR); sys_parse_doc_index_entry(STRING) -> VEC sys_search_doc_index(NAME, DIR, EXACT) -> N description_hdr_start(LINE) -> BOOL description_hdr_end(LINE) -> BOOL description_hdr_name(LINE) -> STRING o The "subsystem" mechanisms have been considerably revised and extended to facilitate switching between languages. The most important changes are described in HELP * SUBSYSTEMS/Documentation. In particular From inside VED, you can always get hold of documentation relevant to a particular subsystem by prefixing the appropriate command with the subsystem name. For example, no matter which language you are currently using, you can always view documentation on the Prolog error handler by doing: ENTER prolog help error or on the Common Lisp FLET special-form with ENTER lisp ref flet Some other commands, relevant to software developers, can now also take a sub-system "prefix". E.g. the command ENTER prolog lmr will compile the marked range as a Prolog program, while ENTER lisp f insert will locate the definition of the Lisp function INSERT. Such commands are useful for mixed-language programming, where a single file may contain fragments of code written in various languages. "ENTER pop11" can be used in the same way. For more information, see HELP * SUBSYSTEMS. o Many areas of POPLOG have been documented more fully, using the format required for convenient access via these mechanisms. Most of the basic information has been collected into REF files, though HELP files are still used to provide overviews, extended examples, discussions of pros and cons of techniques, etc. o The VED command "ENTER helpfor" has been considerably improved. See HELP * HELPFOR. o Failed documentation requests now produce polite "not found" messages, instead of causing a MISHAP. It is now possible to trap failed requests by redefining the new procedure *vedsysfileerror. o HELP * VED_INDEXIFY describes the facilities for putting headings, building tables of contents, and using "ENTER g" to go to a section. For a tutorial introduction see HELP * ENTER_G. ved_indexify has been changed so that if used to re-build a table of contents it no longer deletes portions in which extra bits of text have been inserted. o For improved documentation on libraries and search lists: see REF * LIBRARY HELP * AUTOLOAD HELP * POPLIBLIST HELP * POPUSESLIST HELP * SEARCH_LISTS (new file). -- New or updated documentation files --------------------------------- There are many new files concerned with X facilities. For overviews see HELP * XPOP, REF * XPOPINDEX, HELP * XPOPINDEX, TEACH * XPOPINDEX, Additional X-related files are in: $usepop/pop/x/pop/ref/* $usepop/pop/x/pop/help/* $usepop/pop/x/pop/teach/* $usepop/pop/x/pop/doc/* -- -- New or updated DOC files The online copies of the Installation, Administrator's, and User Guides (DOC PIG, PAG and PUG) have been removed (because they are now produced using FrameMaker. From now on, they will only be supplied in hard copy format. Updated DOC * SYSSPEC (system overview) DOC * VEDMANUAL updated and reformatted for online use. Still not complete, however. On Unix systems, online "man" files for POPLOG are kept in $usepop/pop/doc/man/* -- -- New or updated REF files There are many new REF files, several of which make old HELP files, especially summary help files, redundant. Most of the old REF files have been extensively revised and extended, and in some cases re-formatted so as to provide information accessible via ved_??. See REF * REFFILES, REF * INDEX REF * SYSTEM has been radically revised to describe the new startup procedures, including some X startup information. Information about saved images is now in REF * SYSTEM instead of REF * SYSUTIL. New REF files, include: REF * VEDPROCS, * VEDCOMMS, replacing and improving on old HELP files with these names REF * REFFILES overview of REF files REF * LIBRARY gives information on libraries and search lists (See also HELP files on this.) REF * SHADOWCLASS Describes LIB * SHADOWCLASS New Xpop REF files: see REF * XPOPINDEX REF * POPCOMPILE extended with a section on different compilation contexts. REF * MISHAP_CODES Some mishap messages start with a string of characters representing a code for the error. This file contains a summary of those codes, which can be accessed via ENTER ??, or ENTER ref commands. E.g. REF * crsv. This file replaces previous separate help files for different error codes. See also HELP * ERRORS and REF * MISHAPS The Pop-11 procedure -charin- is now fully documented in REF * CHARIO REF * OBSOLETE lists all identifiers that have been superseded, though some have autoloadable backward compatibility libraries. All other REF files have been either substantially re-written or extended. -- -- New or updated HELP files New Xpop HELP files: see HELP * XPOP, * XPOPINDEX HELP * LISPNEWS and HELP * PLOGNEWS have been updated, HELP * PMLNEWS and HELP * XPOP_NEWS created. HELP * INITIAL now explains how individuals can avoid system-wide tailoring done in $popsys/init.p $popsys/vedinit.p etc. It has also been extensively revised, with a section added on POPLOG ML. HELP * QUERY, HELP * MKREFINDEX describe the ved_?? and ved_? mechanisms and how to build index files that use them. A number of HELP files have been added or improved, with cross references brought up to date, including HELP * STANDARDS, * NEWC_DEC, * EXTERNAL, * INITIAL, * SUBSYSTEMS HELP * NEWPROPERTY, * PVED, * EQUAL, * MARK, * LIBRARIES HELP * DOCUMENTATION, * VED, * HELPFILES, * VEDSEARCH HELP * LOGICAL_KEYS, * VEDCOMMANDS, * VEDVEDDEFAULTS * VEDEMACS HELP * VEDGETSYSFILE HELP *LIBWORDS, *POPPROCS, *POPVARS. Improved documentation on libraries and search lists: see REF * LIBRARY HELP * AUTOLOAD, * POPLIBLIST, * POPUSESLIST and HELP * SEARCH_LISTS (new file). Information about lexical scoping clarified, with examples, and discussion of pros and cons of lexical scoping, provided in: See HELP * LVARS, HELP * LEXICAL, HELP *DLOCAL. HELP * DLOCAL extended to explain problems with initialised variables in dlocal expressions. Previous documentation did not give adequate warnings about ways in which use of lexical scoping can generate unwanted garbage collection overhead. This is now explained in HELP * LVARS. Related information in HELP * LEXICAL, * EFFICIENCY has also been updated. Several HELP files concerned with numbers improved: HELP * INTOF, HELP * FRACOF, and the section of HELP * EQUAL concerned with comparing numbers HELP * VEDKEYS has been re-written to have a clearer structure, with an indication of new "default" key bindings. HELP * VEDNEWKEYS describes an alternative, more rational option. HELP * VEDSETKEY considerably expanded and updated. The new notation for customising VED is described in HELP * VEDSET The HELP files VEDCOMMS, VEDPROCS, VEDVARS, and VEDWORDS have been deleted and replaced by the following REF files: REF * VEDCOMMS, REF * VEDPROCS REF * VEDVARS (all used by ved_??). Added HELP * BUGFORM for use in reporting bugs, by UK academics who obtain POPLOG direct from Sussex University. HELP * NEWPSYS describes the new LIB * NEWPSYS o HELP files for three obsolete procedures have been updated: HELP * POPCONSTRUCT, * POPDEFINECONSTANT, * POPDEFINEPROCEDURE For information on their replacements see REF * pop_pop11_flags, LIB * COMPILE_MODE. o The following obsolete HELP files have been deleted, because the identifiers they described have been renamed: DEADPROC DEVNAME POPDEVRAW POPDPLACES REALOF SYS_INPUTON_TERMINAL SYSCOMPILE SYSLOOP SYSLOOPEND SYSNEED SYSNMTRY SYSNVARIABLE SYSSTRUCTURE SYSTRY SYSTXCOMP SYSTXSQCOMP SYSXCOMP SYSXSQCOMP FASTPROCS (See the REF file) See REF * OBSOLETE -- -- New or updated TEACH files New Xpop TEACH files: see TEACH * XPOPINDEX TEACH * TEACH and other VED-related files have been made less terminal dependent, using the "logical" key names listed in HELP * LOGICAL_KEYS Improved/revised TEACH * GC, * STACK, * PARSE, * PROLOG, * RIVER, and many others TEACH * LISTS and TEACH *SETS considerably revised and improved. TEACH SETS now includes suggestions on how to specify a procedure as a step towards designing and implementing it. Further improvements in TEACH * RECURSE1, * RECURSE2, * RECURSE3. TEACH *EVANS referred to non-existent TEACH *PICDEM. The latter has now been installed, using LIB * PICDEM (a simple program illustrating some problems of describing and recognising 2-D shapes.) TEACH * PSYSRIVER has a demonstration of LIB * NEWPSYS -- Errors and tracing ------------------------------------------------- o The procedure -sysprmessage- added, for printing messages in standard POPLOG error format (but not necessarily flagged by the word "MISHAP"). The procedures -sysprmishap-, -sysprwarning-, and -warning- now all use -sysprmessage-. See REF * MISHAPS. o Users wanting to over-ride some of the default settings for the Pop-11 error handler can now do this more easily, using the variable -pop_default_prmishap-. Its default value is -false-. If a procedure is assigned to it then that be used as the value for prmishap inside VED instead of -vedprmishap-. It will also be used inside ved_lmr, which also previously used to over-write user's error handlers. o Printing in error messages in VED is now controlled by setting pop_pr_level = 20, instead of using a special purpose print routine. This also fixes a bug: the previous version could not cope with errors involving pairs. -- New virtual machine instructions ----------------------------------- o The POPLOG VM now supports lexical blocks, which allow the scopes of lexical identifiers to be constrained. In the POPLOG VM this is represented by two new pseudo-instructions sysLBLOCK sysENDLBLOCK and in POP-11 by the syntax lblock <statement seq> endlblock These can be used (nested to any depth), either inside procedures or at execute level, e.g. in define foo(); lvars x; lblock lvars y; ... endlblock lblock lvars z; ... endlblock enddefine; the variables -y- and -z- are accessible only inside their respective blocks (whereas -x- is accessible everywhere in the procedure); moreover, the resources utilised for -y- in the first block are freed for reuse in the second block, etc. This mechanism speeds up some Common Lisp programs. See REF * VMCODE for full details. o Lexical blocks (lblock ... endlblock), can be used at top level as well as in a procedure. So the following POP11 code outside a procedure lvars i; for i to 10 do lblock lvars j = i; procedure(); j endprocedure endlblock endfor; will now create a new variable -j- (and thus a different lexical closure) each time round the loop, just as it would inside a procedure. A result of this change is that testing for -popexecute- false is no longer a reliable way of determining whether code is being planted inside a procedure (since it will be false inside a non-executing lblock, enclosed in a procedure or not). Instead, use the new variable * pop_vm_compiling_list, which holds a list of all procedures currently being compiled, and can therefore be tested == or /== to nil. (Note however that -popexecute- true is still the correct test for being at execute level, i.e. whether -sysEXECUTE- can be called or not). See REF *VMCODE for full details. o Two new VM instruction sysFIELD, sysUFIELD for generating in-line access and update code, render obsolete all of the following: sysFIELD_VAL, sysUFIELD_VAL, sysSUBSCR, sysUSUBSCR sysEXT_FIELDVAL, sysUEXT_FIELD_VAL, sysEXT_SUBSCR, sysUEXT_SUBSCR -- New compiler control facilities ------------------------------------ There are new control mechanisms in the POP11 and POPLOG VM compilers: o A new variable, -pop_debugging-, is intended to serve as a general indication as to whether programs are being compiled in debugging or 'real-use' mode. It also combines the roles previously played by the variables -popconstants- and -pop_optimise- (which for upward compatibility are now autoloadable active variables). Permanent constants were previously 'turned off' by assigning <false> to -popconstants-; this now corresponds to -pop_debugging- having the value <true>. Since the default value of -pop_debugging- is "undef", constants are (as before) on by default. Setting -pop_optimise- true previously caused the VM to do extra optimisation; this now happens when -pop_debugging- is <false> (i.e. extra optimisation is also off by default). (Note that -pop_debugging- is NOT local to any system procedures, so assigning to it is guaranteed to change its value globally.) See REF * IDENT and REF * pop_debugging o The POP11 compiler variables -popdefineconstant-, -popdefineprocedure-, -popconstruct- and -pop_args_warning- have all been replaced by flag bits in a new variable -pop_pop11_flags- (analogous to -pop_vm_flags- for the VM compiler). These are defined and described in INCLUDE * pop11_flags (use ESC h to read this, or "ENTER showinclude pop11_flags") and REF * pop_pop11_flags. Further information is in the comments in LIB * COMPILE_MODE. (The old variables remain as autoloadable active variables.) o There are also a number of new VM compiler flags in -pop_vm_flags-. These are mainly concerned with disabling the inclusion of run-time checking code (although these are only effective when -pop_debugging- is false). See INCLUDE * vm_flags or (ENTER showinclude vm_flags) and REF * VMCODE. o Both -pop_pop11_flags- and -pop_vm_flags- to be are localised to every compilation stream, procedure and lexical block, and there is a new (autoloadable) syntax construct -compile_mode-, which permits the flag bits in either variable to be set or cleared (either singly or in groups) on the basis of keyword arguments. E.g. a POP11 program file can now make -define- default to 'constant procedure' for that file only by including the command compile_mode:pop11 +defcon +defpdr; at the beginning. So compile_mode can used locally within a procedure or lexical block to affect compilation of that procedure or block, e.g. to turn off procedure entry checking, or checking at backward jumps, etc. For more detail, and examples, see SHOWLIB * COMPILE_MODE, which includes detailed documentation. -- VMS specific changes ----------------------------------------------- o The procedure -systranslate- which translates logical names has been upgraded to use the current standard VMS system routines for this purpose (it was previously using old routines which became obsolete in Version 4 of VMS). As a consequence, logical names with the "concealed" attribute are now dealt with correctly, i.e. not translated by default. (Also, names with the "terminal" attribute will not now have an underscore prefixed to the translation). o The handling of arguments to a POPLOG process from the DCL foreign command line has now been further enhanced. Essentially, POPLOG now behaves like a Unix shell, in that it automatically expands filename arguments containing wildcard characters (e.g. '*.p' will be replaced by all matching filenames). In addition, a filename argument with an @ character prepended is replaced by further arguments read from the specified file; this surmounts the problem of the DCL foreign command line being limited to 255 characters, and enables larger numbers of arguments to be supplied. See REF *POPARGLIST0 for full details. An associated change is that the procedure * sys_file_match no longer necessarily returns fully-qualified filenames, but instead produces names containing only those parts which appeared in the given file specification (e.g. filenames matched by '*.p' will be of the form 'foo.p', 'baz.p', etc, with no directory or version.) See REF *SYSUTIL. (Note that the rationale behind these changes is to allow POPLOG programs to be written in a portable way. A program can now simply assume that arguments are available Unix-style, whether it is run on Unix or VMS.) -- UNIX specific changes ---------------------------------------------- o The Unix version of * SYSTRANSLATE now has an updater (the VMS version already had one). This can now be used to alter * POPENVLIST. See REF * SYSUTIL o POPLOG will henceforth try to standardise on having all (non-empty) strings representing directory pathnames be recognisable as such by ending with / . For example, this is now true of -current_directory-, all members of * popliblist and * popuseslist, and the result of the new procedure * sys_fname_path for getting the path part of a filename. (Also, the operator * dir_>< given an empty string as second argument will now append / to the first if it's non-empty and doesn't end with one. Thus for path /= nullstring, the result of path dir_>< nullstring will always have a trailing / ) o HELP * SYSPIPE gave wrong information about the argument to -syspipe-. Now corrected. See also REF * SYSIO/syspipe o * sys_input_waiting now accepts a list of devices to be checked. o A new procedure * sys_async_input allows control over asynchronous input (using SIGIO) on a device. See REF * SYSIO o TERM and HUP signal handlers now both exit tidily (write VED files etc.). Minor changes to suspend/continue signal handling to improve response to termination while suspended. See REF *SIGNALS. o Fixed bug in -sys_file_match- which prevented correct matching of pattern chars inside [ ] (e.g. [a-z]). Also, -sys_file_match- with true STRIP argument now returns separate directory pathnames ending with / (except when empty). See REF * sys_file_match o A high resolution timer is now provided in Unix POPLOG, based on the setitimer(2) system call. E.g. on a Sun-3 the resolution is now 1/50th of a second instead of 1 second. See REF * syssettimer. o New library LIB * ITIMER_VIRTUAL added. This defines a POP11 interface to the virtual interval timer provided by the C library function SETITIMER(2). See HELP * ITIMER_VIRTUAL for details. o A new VED command for reading Unix 'man' files. ENTER man [<section number>] <name> reads output of 'man' command into VED, then removes underlining, for easy reading. See HELP * MAN o Unix mail facilities have been improved. o ved_Reply (for replying to Unix mail) altered to handle more cases correctly. Also no longer interferes with VED search state variables. (See HELP * VED_REPLY, SHOWLIB * VED_REPLY) o ved_reply- altered to insert "Re: " in subject line o ved_mdir (for building index to Unix mail file) altered to include "To:" line. See HELP * VED_MDIR o LIB VED_SEND has been changed so as to use the Unix mail program rather than sendmail. This means that the full range of facilities is available in .mailrc files. It also makes sending mail from VED very much faster. However, users cannot now add arbitrary additional header lines to mail messages, as they are not kept in the header by mail. Various new control variables have been added to ved_send and ved_sendmr. See the revised HELP *SEND and SHOWLIB * VED_SEND/History o Extended LIB * VED_SEND as follows: If the command "ENTER sendmr" is given with no arguments then, in order to preserve Unix mail file format (e.g. for ved_mcm), any lines in the message that start with 'From ' will have '>' inserted at the beginning. This can be suppressed by assigning -false- to the new user-assignable variable -vedindent_From- (default is true). (see HELP * SEND) o Attempting to read the interactive device (terminal or pipe) could result in an infinite loop if that device were no longer readable. This might occur, say, if running via a telnet connection which prematurely breaks. POPLOG will now attempt to write all VED files and exit if such a condition occurs. o LIB * PIPEOUT extended so that it can produce output to the terminal if necessary. HELP PIPEOUT is now part of HELP * PIPEUTILS o Changes to facilities described in HELP * PIPEUTILS: The command ved_rsh was not available on non-Bsd type unix systems, e.g. HPUX, so an equivalent command ved_remsh has been provided, for running remote commands from VED. The ved_rved command has been generalised to work on non-Bsd systems providing 'remsh' but not 'rsh'. HELP * PIPEUTILS has been updated. -vedpipein- (see HELP * PIPEUTILS) now allows its third argument, the -file- to be FALSE, in which case the incoming information is read into the current VED file after the current line. o New BSD Unix utilities. A collection of utilities developed by Roger Evans has been added to the non-autoloadable, non-supported library $usepop/pop/lib/lib as illustrations of useful programming techniques available on Berkeley Unix systems for communication between poplog and other subprocesses. Documentation is to be found in the following help files HELP * NOECHO HELP * PTYFORK HELP * MUX HELP * VEDMUX HELP * VSH Of these the most interesting user utility is VSH, which offers a 'shell-in-ved-buffer' interface - like IMCSH only more sophisticated. These and other facilities in the $usepop/pop/lib/lib directory are not necessarily supported. See DOC * SYSSPEC o Some new commands for printing files from VED. These are -ved_lp- (uses HP-UX 'lp') and -ved_lpr- (uses Berkeley Unix 'lpr'). It is now recommended that on Unix systems instead of ved_print, either ved_lp or ved_lpr should be used, whichever is available. See HELP * LP and HELP * LPR. o -vedpipein- and procedures defined in terms of it HELP * PIPEUTILS were capable of producing "zombie" processes that would not die until you exited from poplog. This bug has been fixed. Programs that used lib pipein directly still have to call -syswait-. See REF * SYSUTIL/syswait o The system now behaves more rationally when EOF (^Z or ^D) is typed to a terminal prompt; it now always puts out a newline after this (and as a consequence, no longer needs to put out a special newline when the system exits, meaning that there will be no surplus newline output when exiting in any way other than by EOF, as was previously the case). o BERKELEY UNIX POPLOG ONLY The * device_full_name of a device now dereferences symbolic links, i.e. it is always the name of the underlying file (rather than the name of any symbolic link that was used to open it). o BERKELEY UNIX POPLOG ONLY POPLOG now checks to see if it is 'backgrounded' before attempting to alter terminal modes. If it is, it stops, by sending itself the TTIN signal (see REF *SIGNALS), as it would if it attempted to read while backgrounded. The previous behaviour was causing serious problems with some operating systems. o The default value for the TTOU signal handler is now <true>, that is, the (Bsd) Unix default action (which is to stop immediately). The previous value (tidy screen and stop) proved unworkable for TTOU. o New procedures -sys_search_unix_path- and -run_unix_program- added (for locating and executing Unix programs from within POPLOG). See REF * SYS_SEARCH_UNIX_PATH and HELP * RUN_UNIX_PROGRAM respectively. (For Lisp users there is a new module, "run-unix-program", added, for running Unix programs See HELP * RUN_UNIX_PROGRAM for details.) -- Net News tools (UNIX only) ----------------------------------------- A collection of utilities is now provided for reading and sending Net News from within VED. These have been used at Sussex University for some time and a few other places. However, they are offered on an "as is" basis and will not necessarily be supported, though reports of faults may receive action. For reading news, see LIB * VED_NET, LIB * VED_GN, all documented in HELP * VED_NET. For posting news, or preparing followups to news items, or cancelling a news item, see LIB * VEDPOSTNEWS, documented in HELP * VED_POSTNEWS (The library will need editing for some sites.) -- SUN POPLOG only ---------------------------------------------------- The directory '$popsunlib' is now automatically included in -popliblist- (and -popuseslist-). It is no longer necessary to do this in an 'init.p' file. If you use a Sun as a terminal, but actually run POPLOG on a different processor, you may still have to do: uses popsunlib o LIB SUN_TTY_SIZE updated to use newer ioctl. o (Sun-2/3 POPLOG Only) The Sun-2 and Sun-3 systems are now (by default) linked with the version of the C maths library 'libm.a' in /usr/lib/fswitch. This means that math functions doing floating-point operations will use run-time-switched routines that automatically test for and use any floating-point hardware support (FPA, MC68881, Sky) available on the host machine (internal POPLOG floating-point operations always use these switched routines). (Cf the C compiler '-fswitch' option.) o (Sun-4/SPARCStation POPLOG Only) A serious problem that could occur while running external procedures inside POPLOG has been overcome (this was associated with programs that called -malloc- to get dynamic memory for use with floating-point operations). o The library OLDVEDSUN (and associated help file) have been removed (as previously advertised). -- LIB FLAVOURS ------------------------------------------------------- Only minor changes to this object oriented programming library: o Bug fixed in -quitmessage- for update methods. See REF * FLAVOURS o The command file for building the 'flavours' saved image now ensures that -setpop- is assigned to -interrupt- when the image is restored. -- POPLOG Window Manager (PWM) ---------------------------------------- o LIB V12PWM is no longer supported. See HELP * V12PWM o On Suns, the value that the PWM assigns to the environment variable $TERM has been changed from "pwm" to "pwmsun". o PWM identifier names have been rationalised according to the conventions described in HELP * PWMNAMES, and autoloadable library synonyms provided for backward compatibility for programs using the old identifiers. o REF * PWM is a new overview file. o The library directory '$poppwmlib' is now automatically added to -popliblist- when POPLOG starts up under the PWM. o Users now have more control over whether and when the input focus is moved automatically if multiple VED windows are used. A new variable -vedpwmwindowchanged- has been introduced. If it is true when control returns to -vedprocess- and if the user assignable variable -vedusepwmwindows- has appropriate values, then the mouse pointer is "warped" to the current VED window. This automatic warping can be controlled by the user. E.g. If -vedusepwmwindows- is a list and contains the word "ved_q" then quitting a file will move the input focus to the next available VED file window, otherwise not. If the word "ved_rb" is in the list -vedusepwmwindows- then ved_rb now properly moves the input focus to the next window displayed, otherwise not. To use multi-window VED in the pwm, but without ANY automatic change of input focus put the following into your vedinitpwm.p file. Assigning true to vedusepwmwindows is now equivalent to assigning the list [vedswapfiles vedfileselect ved_rb] -> vedusepwmwindows; to it, which will make ESC x (vedswapfiles) and ESC e (vedfileselect) work as expected. (In the Beta-test POPLOG (V13.91), having any value other than [] could cause odd effects when the input focus is moved. This has now been fixed.) See REF * VEDPROCS/vedusepwmwindows, for more details. This change has been used to modify * ved_diff and * ved_cdiff so that they don't repeatedly expose the "other" window. o * VEDFILESELECT now works under the PWM. The input focus moves to the selected window if the word "vedfileselect" is in the list -vedusepwmwindows-. o LIB * SUNICONFILE had had a bug from V13.7. Now fixed, generalised and made more efficient. WARNING: because suniconfile reads image files faster, programs that used delays in writing raster arrays to the screen may need longer delays. o HELP PWMCOLOUR removed. It was made obsolete by HELP * PWMCOLOURS o Two new PWM libraries (courtesy of Reading University) added. See LIB * PWM_MAKE_LABELITEM and LIB * PWM_MAKE_LISTITEM. -- New expert system tool --------------------------------------------- HELP * NEWPSYS describes a new more general and more efficient forward chaining production system interpreter than was previously provided by LIB * PSYS and LIB * PRODSYS. It includes various aids to constructing expert systems, including a built in menu facility. Rules can be partitioned for efficiency. TEACH * PSYSRIVER provides an extended example showing a simple planning expert system. o LIB * PRODSYS, the demonstration production system interpreter has been improved. See TEACH * PRODSYS. SHOWLIB * PRODSYS/History -- Miscellaneous additional changes ----------------------------------- o LIB * INSPECT now ignores colons in command input (to soothe users of the Lisp debugger who are used to preceding commands with a colon). o There is an improved version of * sys_lock_system allowing much greater control over which structures are kept writeable and which are made nonwriteable. Associated with this are two new operators * writeable and nonwriteable, a new procedure * sys_writeable_prop, and a new variable * pop_record_writeable. See 'Creating Layered Systems' in REF * SYSTEM. An associated change is that * conskey (and * defclass, * recordclass and * vectorclass) can now take optional "writeable" and "nonwriteable" attributes for a new class key. See REF * KEYS, REF * DEFSTRUCT o Two new autolodable checking procedures * check_string and * fi_check, like * checkinteger but returns the integer if OK and does not check its second and third arguments. o Speeded up and rationalised * POPINDEX, which is used also by * SOURCEFILE and * POPWHERE. The index building mechanism is now able to cope with some of the newer syntax forms. LIB * BUILDINDEX is now used for index building scripts. The scripts for building the indexes have been extended to include Pop-11 files in the prolog, lisp and Xpop sources. The scripts are: $usepop/pop/com/mkind (Unix) usepop:[pop.com]mkind.com (VMS) o New format for search lists. They can contain not only strings (names of directories), but also sublists, or words whose valof is a search list, or an ident whose idval is a searchlist or a procedure which when applied to the wanted name returns false or the required file path name. See HELP * SEARCH_LISTS The library procedure * flatten_searchlist has been provided to produce a list of strings (directory names) from search lists using the new format, e.g. * popuseslist or * poplibist. o extend_searchlist is now available for adding directories to search lists if not already present. See REF * LIBRARY/extend_searchlist o New (autoloadable) procedure * newprwarning added. If assigned to -prwarning-, extra information (i.e. the current filename and line number) will be printed whenever a 'DECLARING VARIABLE' warning occurs. o A new (protected) variable trap procedure * pop_chario_trap is now called by -charin-, -charout-, and -charerr-. See REF *CHARIO. o New procedures * pop_setpop_compiler, * sys_process_poparg1 concerned with system startup. o New user-definable procedure *LOADCOMPILER, default value -compile- is provided, for use by * load. It is redefined by LIB * SUBSYSTEM for different languages. o POP11 autoloading can now be turned off by assigning false to the new variable -pop_autoload-. (This is more convenient than the old method of assigning [] to -popliblist-, since ensuring that autoloading is back on in contexts that require it can be done without worrying about saved values of -popliblist-, etc.) o New procedures -sysEXEC_COMPILE- and -pop11_exec_compile- for compile-time code execution. See REF *VMCODE and REF *POPCOMPILE. o Added "missing" compilation procedure * pop11_need_nextreaditem See REF * POPCOMPILE o Previously, properties could only be temporary on the argument item; they can now be temporary on the value item, or on either the argument or the value. They can also be 'unconditionally' temporary, i.e. cleared at every garbage collection. See -newproperty- and -newanyproperty- in REF * PROPS. o property_size added. It returns the table size of a property (NOT the number of entries). See REF * property_size. o * substring now returns the standard empty string * nullstring when the result is empty. o isendstring('','') previously gave an error. It now returns 1. This also fixes certain errors that occasionally caused VED to go badly wrong when given a file name with no file name part. o Changes to the process mechanism: New procedures -suspend_chain- and -ksuspend_chain- allow control to be regained after (k)suspending a process, by chaining a procedure out of the call of -runproc- which ran the process. The procedure -consprocto- has been replaced by a better procedure -consproc_to-. The old one remains in the autoloadable library. A process can now be constructed as either 'volatile' or 'non-volatile'. See REF *PROCESS for full details. o The POP2 syntax words "lambda", "function", "enddo" and "exit" have been removed from the standard values of -vedopeners-, and -vedclosers-. They are added to these lists by the library LIB POP2. -- Miscellaneous bug fixes -------------------------------------------- This is an incomplete list. See HELP NEWS and the other language-specific news files for more details. o The pretty-print arrow (==>) has been modified so as to ensure that poplinemax is set locally to vedscreenwidth - 3. This prevents unwelcome horizontal scrolling on long lines. Also A minor bug in the procedure -pretty- invoked by ==>, which caused long lines to be printed with excessive refreshing in VED, has been fixed. o The procedure -pretty-, used by ==>, has been modified so that it never increases poplinewidth or poplinemax, though it still decreases them if necessary to fit in a VED window. o The system no longer crashes if too large a value is assigned to pop_callstack_lim. A mishap now results if the operating system's limit on call stack memory is about to be reached; this makes it safe to assign any value to pop_callstack_lim. See REF *POP_CALLSTACK_LIM. o A bug in the 'destroy actions' mechanism (see REF *PROPS) has been fixed. Formerly the existence of an independent destroy action for an object was not in itself sufficient to retain entries for the object in temporary properties when the object became otherwise garbage. Now it is. o Certain uses of * pop_after_restore could lead to a system crash (because the system was calling it in an inappropriate place). Now fixed. o * ved_w1 now restores cursor to status line if that is where it was, and prevents a bug that caused VED to get the value of * vvedbuffersize wrong, so that it could not access most of the file. o LIB * DATAFILE now successfully copes with empty properties. o vedreadfile checks its first argument more thoroughly. It used to allow a first argument that was not a procedure, and that could cause problems later. o Fixed bug in -vedfileselect-. It previously got into trouble if a file had something like a list for vedfileprops o LIB * SHUFFLE. no longer removes repeated elements from the list. o LIB * SYSSORT previously used global variables that could prevent temporary lists being garbage collected. Now fixed. o The garbage collector now locally resets -cucharout- to -charout- if its current value is -identfn-. This prevents infinite GC loops in data constructors that locally redefine -cucharout-, e.g. ><. o (Sun-4 POPLOG Only) Fixed a serious bug in the passing of arguments to external functions. See HELP NEWS o In order to reduce the occurrence of spurious trailing spaces in files written by VED vedswitchstatus and vedsaveglobals both now call vedtrimline. o Bug in the power operator ** fixed. -2 ** -1 now produces -1_/2 instead of 1_/-2 o LIB * SHOWTREE used to call VEDSETUP while the file was being compiled. It now does so only if the current input (popdevin) is a terminal. o LIB * EXTERNAL now handles -array_of_pointer- structures properly. o LIB * VTURTLE bug: vturtle_origin was wrongly adjusted. Now fixed. (TEACH * VTURTLE) o Various commands using -vedsysfile- now ensure that vedinit.p has been called BEFORE they accessed the relevant search lists. o LIB VED_WTYPE now copes properly with active identifiers and syntax operators. See REF * VEDCOMMS/ved_wtype o In certain situations (including bugs in user programs) -vedline- could end up negative or == 0, leading to an error. This is now corrected: -vedline- is set to 1 in such cases. o Previously * vedprocess changed * pop_after_restore locally by assigning * vedrestorewindows to it. Instead it now does: vedrestorewindows <> pop_after_restore -> pop_after_restore; so that user procedures in -pop_after_restore- will run when saved images created inside VED are restored. See REF * SYSTEM/pop_after_restore o (Sun4 Only) Under certain (fairly rare) circumstances, the run-time code generator produced code for a procedure that failed to initialise certain lvars correctly, causing the garbage collector to crash (it happened only with procedures that had some non-locally used lvars, but fewer than 2 ordinary lvars). Now cured. -- New POPLOG-based products available from ISL ----------------------- Integral Solutions Ltd, who have been distributing POPLOG since mid 1989 now offer a growing collection of POPLOG-based tools and packages, including: POPLOG-Neural A Neural net demonstration and teaching package POPLOG-Flex A Prolog-based expert system shell, originally developed by Logic Programming Associates, and now ported to POPLOG Prolog. POPLOG-Rules A rule-induction package. POPLOG-Oracle An interface to the Oracle database system. Other companies selling POPLOG-based products include Program Validation Ltd, and COGSYS Ltd. -- POPLOG User Information -------------------------------------------- A collection of HELP files has been provided giving information supplied by the POPLOG USER GROUP (PLUG). They are HELP *RESOURCES - file cross-referencing useful info sources HELP *PLUG - The POPLOG and Pop Languages User Group HELP *POPFORUM - E-mail discussion group HELP *POPREFS - Books and other written material about Pop HELP *POPCONTACTS - Contact addresses for Pop issues and products HELP *POPSYSTEMS - Pop-related systems and products -- NOTE ON FILENAMES -------------------------------------------------- In some of the examples in this file and elsewhere, UNIX file name format is used. VMS users should do the corresponding translation. E.g. UNIX version VMS version ------------ ----------- $usepop/pop/lib/psv/eliza.psv USEPOP:[POP.LIB.PSV]ELIZA.PSV $usepop/pop/com/poplog USEPOP:[POP.COM]POPLOG.COM The addition of ".COM" is required only for DCL command files in the [POP.COM] OR [POP.SRC] directory. Apart from this, the UNIX format may be used in all VMS POPLOG programs to ensure portability. They will automatically be translated. See the section on "File Specifications" in DOC * SYSSPEC -- Further information on previous changes ---------------------------- For summaries of previous changes between versions of POPLOG please see HELP * V13_6.CHANGES HELP * V13.CHANGES For more detailed change notes (in chronological order): HELP * NEWS.4 HELP * NEWS.5 HELP * NEWS.6 HELP * NEWS.7 HELP * NEWS.8 HELP * NEWS.9 HELP * NEWS.V10 HELP * NEWS.V11 HELP * NEWS.V12 HELP * NEWS.V13 HELP * NEWS.V13_6 HELP * NEWS See also HELP * LISPNEWS HELP * PMLNEWS HELP * PLOGNEWS HELP * XPOP_NEWS --- C.all/help/v14.changes --- Copyright University of Sussex 1991. All rights reserved. ----------