Search Top Index
HELP V14_2.CHANGES John Williams, Jul 1992 Updated: Adrian Howard, Aug 1992 This file provides a brief overview of some of the more important new facilities provided in POPLOG Version 14.2. 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. CONTENTS - (Use <ENTER> g to access required sections) -- The "startup" Saved Image -- POP-11 -- ... Display Strings -- ... Properties -- ... Improvements To POP-11 Printing Procedures -- ... Improvements To LIB *DEBUGGER -- ... Miscellaneous -- LISP -- Prolog -- VED -- ... General New VED Facilities -- ... New Graphics Facilities In VED -- Changes To The POPLOG/X Interface -- ... General Improvements To The X Interface -- ... XVed -- ... The POPLOG User Interface -- Changes To The POPLOG/Operating System Interface -- New Documentation -- The "startup" Saved Image ------------------------------------------ The "startup" saved image (included in the standard language commands "pop11", "prolog", "clisp", etc) now has the POPLOG User Interface (PUI) loaded by default. For information on the PUI see HELP *POPLOG_UI. If you don't wish it to be invoked when -sysxsetup- is called (e.g. by pop11 %x), you can assign false to the variable -poplog_ui_enabled- (e.g. in your init.p, etc). The "startup" image also has XVed loaded with its OPEN LOOK or Motif interface parts by default. For information on XVed see HELP *XVED. To enable it to be run in "vanilla" mode (i.e no scrollbars, menus, dialogs etc), the application resource "Vanilla" can be set false (in your .Xdefaults, or in your -vedinit- procedure, etc). -- POP-11 ------------------------------------------------------------- -- ... Display Strings ------------------------------------------------ # To enable VED to represent attributes in buffer strings, integer character values have been extended to 24 bits, and a new datatype has been introduced to allow display characters (i.e. characters with attributes) to be stored and retrieved -- this is the 'dstring' (Display string). See the sections 'Overview' and 'Display Strings' in REF *STRINGS for more information. Also see the section on 'VED' later in this file. -- ... Properties ----------------------------------------------------- # New destroy property added -sys_process_destroy_action- which is cleared in the child process after a -sysfork-. This enables destroy actions to be process specific. See *SYS_PROCESS_DESTROY_ACTION. # New procedure -clear_prop_entries- added. It is functionally the same as -clearproperty- with the addition of clearing the contents of the individual "property entry" data structures in the property. This is only relevant if you use -fast_get_prop_entry- to access the internal structure of a property. -- ... Improvements To POP-11 Printing Procedures --------------------- # LIB *FORMAT_PRINT bug fixes: the ~E, ~F, ~G, and ~$ directives no longer go into infinite recursion if a line-break occurs within the printed representation of a number. Also, the ~D, ~B, ~O, and ~X directives now work properly if called from the procedure -format_string- (they used to print their argument in reverse if the colon modifier was specified). # The pretty-printer has been improved so that it now runs considerably faster on large structures, and takes account of -pop_pr_level- for controlling maximum printing depth (which means it can be used on circular structures). Also, it no longer produces spurious blank lines when printing to -charout-. # A bug in -sprintf- which caused it to behave differently from -printf- in certain situations has been removed. # LIB *SHOWTREE now works correctly when -pop_pr_quotes- is -true-. -- ... Improvements To LIB *DEBUGGER ---------------------------------- The following improvements have been made to the Pop-11 source code debugger, LIB *DEBUGGER. # A "quit" command has been added, which quits the debugger command loop, returning to either a previous invocation of the debugger or to the Pop11 top level. This works even if the debugger was invoked via the syntax work -debugger- (i.e., you are no longer forced to supply a matching -enddebugger-). # The new "inspect" command invokes the Pop11 structure browser on the value of a given variable (see HELP *INSPECT). # When a breakpoint is encountered, the debugger now prints location information (file name and line number). # A bug has been fixed which caused problems when a saved image containing the debugger was made with -sys_lock_system-. # The "skip" and "next" commands now work correctly in all circumstances. # The "print" command now takes multiple arguments. # Finally, the "where" command has been made more informative when used outside of VED. -- ... Miscellaneous -------------------------------------------------- # Improvement to LIB * FMATCHES: it is now possible to specify restriction procedures whose names are either local to the current section, or lexically scoped. # The procedure -sys_parse_string- now takes an optional boolean argument which controls whether numbers are converted with -strnumber-. # New procedure -sys_parse_poparglist- added, for parsing Unix-style command line arguments to POPLOG. See REF *SYSTEM. # New variable -poparg1- added. See REF *poparg1. # LIB *NEWC_DEC no longer leaves imported procedures on the stack. # A standard vector class with element type "exptr" is provided for. This has dataword "exptrvec", and is defined simply by defclass exptrvec :exptr; which gives all the usual procedures for a vector class. See REF *EXTERNAL_DATA # The key of external pointers is now contained in -external_ptr_key-. # The procedure -sys_timer- now takes an additional flag to allow a timer to repeat automatically. See REF *sys_timer. # The variable -popmemlim- can now have <false> assigned to it; this is the same as assigning the largest simple integer. # DEFV now words with section pathnames. # The -class_attribute- procedure can now take a single key as an argument, returning a list of attributes which when given to -conskey- would reproduce the key. # New procedure -set_subvector- which sets N components of a given vector to a given POP-11 item. # New library LIB *ARRAYFILE added. This enables integer arrays to be stored on disk in a compact form. See HELP *ARRAYFILE. # Two new autoloadable procedures installed: -libwarning- and -syslibwarning-, for printing standard "LOADING LIB" messages. See REF *LIBRARY. # The procedure -copydata- now copies arrays, as well as records and vectors. # LIB *MAKE_INDEXES added --- a facility for automatically producing indexes for a POPLOG directory tree. See HELP *MAKE_INDEXES # LIB *MKREFINDEX has been modified so that it is possible to re-define the procedure used to process each REF file. This facility may later be used to provide an indexing program for POP-11 source files. See HELP * MKREFINDEX. -- LISP --------------------------------------------------------------- # New VED key binding: the key sequence <ESC> ) closes off all outstanding opening brackets at the end of a Lisp expression. See HELP *LISPVED. # New module PROFILE added. This provides a Lisp interface to the POPLOG profiling tool. See HELP * PROFILE for details. # The Lisp compiler now recognises (but does not yet act upon) (OPTIMISE COMPILATION-SPEED) declarations. # New accurate version of ISQRT. The previous version made some intermediate floating point calculations. # FORMAT bug fix: the ~E, ~F, ~G, and ~$ directives no longer go into infinite recursion if a line-break occurs within the printed representation of a number. # Bug in DECODE-UNIVERSAL-TIME fixed: it used to produce dates like March 32nd, April 31st, etc. # The #b, #o, and #x reader macros now interpret signed numbers correctly. -- Prolog ------------------------------------------------------------- # A new library LIBRARY * HIGHER_ORDER has been added. This library defines some higher-order predicates which operate on lists and on the arguments of terms. In particular, it defines the useful maplist/2 and maplist/3. For practical purposes, a higher-order predicate is one which takes as arguments a predicate and some structured data, and applies the predicate to each component of the data. These higher-order predicates are efficient as they have been defined in terms of the new call/N family of predicates (see below). See PLOGHELP * HIGHER_ORDER for details. # The call/1 built-in predicate has been augmented by a whole family of predicates call/N (for all N > 0). In general, call/N invokes a goal formed from its arguments: the first argument is either an atom standing for a predicate name or a term representing a "closure" (i.e., a predicate with one or more "frozen" arguments), and this is applied to the remaining N - 1 arguments. The practical benefit is that a term representing the goal to be called does not have to be constructed, which is the case when only call/1 is available. The call/N family is implemented efficiently: there is an almost negligible overhead in using them, compared with invoking a goal directly in the body of a clause. There is thus no longer any efficiency barrier to defining and using "higher-order" predicates, such as maplist/2 and maplist/3, providing they are defined in terms of the appropriate call/N predicate. See PLOGHELP * CALL for details. # New predicates format/1 and format/2 can be used for formatting output. See PLOGHELP * FORMAT. # setof/3 and bagof/3 have been extended to allow existential quantification anywhere within the goal being evaluated. So for example, the following two goals are now equivalent: ?- setof(X, (Y^p(X,Y), Z^q(X,Z)), S). ?- setof(X, Y^Z^(p(X,Y), q(X,Z)), S). As a consequence, the existential quantifier ^/2 is now evaluable in its own right, with the interpretation: _ ^ G :- G . # findall/3 has been built in to the system, making the findall library redundant. See PLOGHELP * FINDALL. # fast_bagof/3 has been redefined in terms of findall/3, as follows: fast_bagof(X, P, B) :- findall(X, P, B), B \== []. This does cause a change in behaviour: any solutions in B will be in the natural (database) order where previously they were returned in *reverse* order. This was always a mistake: the change means that now findall/3, bagof/3 and fast_bagof/3 all return solutions in the same order. Given the trivial nature of the above definition, and the equally trivial: fast_setof(X, P, S) :- findall(X, P, B), B \== [], sort(B, S). use of these highly non-standard predicates is deprecated in favour of the standard findall/3. # It is no longer necessary for prolog_error/2 to have a final "catch-all" clause which traps any error: errors not catered for explicitly now get passed automatically to prolog_syserror/2. See PLOGHELP * PROLOG_ERROR for details. # Run-time error-handling is now disabled during calls to prolog_error/2 to avoid problems with infinite error loops. A new predicate prolog_error_handling/1 allows explicit re-enabling of the error handler where necessary. See PLOGHELP * PROLOG_ERROR for details. # New predicates spy_action/1 and spy_action/2 can be used to change the behaviour of the spy debugger: see PLOGHELP * SPY_ACTION. leash/1 and unleash/1 are now defined in terms of these. # New VED commands: <ENTER> spy [spec] <ENTER> nospy [spec] allow for adding and removing spy-points from the command line. The optional argument has the same form as that expected by the corresponding predicates spy/1 and nospy/1. # spy/0 no longer places spy-points on predicates whose names begin 'prolog_'. Such predicates can still be spied, but must be named explicitly. # LIB *SLOWPROCS has been fixed so it no longer alters the behaviour of programs which use fast_setof/3 and fast_bagof/3 -- VED ---------------------------------------------------------------- -- ... General New VED Facilities ------------------------------------- # New VED command <ENTER> SHOWLIBS added. See HELP *SHOWLIBS. # VED's family of global search and replace commands has been extended with another "silent" one, i.e. LIB *VED_SGSR. It does not report progress on the status line. See REF *ved_sgsr and compare *ved_sgs and *ved_gsr. # New procedure *vedclosebrackets added. # The procedure *vedgetsysfile (normally assigned to the VED key sequence ESC-h) now ignores hyphens around an identifier (e.g. -hd-). # New procedures -vedconvertline- and -vedconvertrange- which operate line -vedconvertword- on sequences of lines and marked ranges. # New procedure -veddrawline- for drawing lines between two points in a VED buffer. # It is now possible to use the "Home" and "End" keys on an NCD X terminal running (ordinary) VED. See HELP * VEDXTERM (the section entitled 'Special notes for NCD X terminal users') and HELP * NCDXTERMKEYS. # LIB * VED_SOURCEFILE now classes files as "lib" or "src" appropriately. Also, new user-assignable procedure -vedsrcfiledefaults- defined by LIB * VED_SOURCEFILE. -- ... New Graphics Facilities In VED --------------------------------- # VED is now able to represent a set of mutually-independent display attributes for each character in the buffer. These are Bold font Underline Alternative font (intended for italic) Blink (i.e. flashing) Colour number, 0 - 7 The command ENTER chat (CHange ATtributes) is provided to set and change attributes; this operates on either the current character, word, line or marked range. See 'Changing Character Attributes' in REF *VEDCOMMS. # To enable VED to represent attributes in buffer strings, integer character values have been extended to 24 bits, and a new datatype has been introduced to allow display characters (i.e. characters with attributes) to be stored and retrieved -- this is the 'dstring' (Display string). See the sections 'Overview' and 'Display Strings' in REF *STRINGS. # The new standard codes can instead be noted as 'backslash' sequences in Pop-11 character constants and strings (see 'Backslash in Strings & Character Constants' in REF *ITEMISE). In addition, the VED command ENTER ic can be used to insert graphics characters directly into a VED buffer (see REF *ved_ic). # A further benefit of this scheme over the old one is that it frees up the character-code range 16:A0 - 16:FF, allowing use of the 8-bit ISO Latin 1 character set. There is now direct support for this in the procedures -isuppercode-, -islowercode-, -uppertolower-, etc which will all recognise alphabetic characters from Latin 1 when the variable -pop_character_set- has the value (ASCII character) `1`. (See 'Character Sets' in REF *STRINGS.) # VED is now able to cope properly with files containing trailing spaces at the end of lines. If -vedreadintrailspaces- is true, then when read in, an end-of-line space is substituted with a 'trailing space' character. Such a character can also be inserted manually into a buffer with ENTER ic, and when written to a file is translated back to an ordinary space. See 'VED Special Space Characters' in REF *VEDPROCS. # In addition, VED no longer strips trailing tabs from lines when writing a file. (However, ENTER tabify can now take a '-strip' argument to say strip trailing tabs/spaces from each line). See HELP *TABIFY. # Two new procedures, -vedfile_line_repeater- and -vedfile_line_consumer-, have been introduced to allow flexible processing of VED-format files. These use the new variables -vedreadinplain- and -vedwriteoutplain- respectively, which control their default actions in respect of the control characters used to represent attributes in files, etc. See REF *VEDPROCS. # The introduction of VED character attributes and graphics characters has one unfortunate side-effect: it will represent a problem for users who wish to use editors other than VED to examine POPLOG files. As mentioned above, when written to a file, VED translates both attributes and graphics characters to sequences containing non-printing control characters. However, when read into another editor, these extra control characters will not only not receive their VED interpretation, they will be explicitly displayed. Thus files containing these will come out looking rather unpleasant. (As of this moment, there is no use of either attributes or graphics characters in any POPLOG files, but this situation will soon change: documentation (and probably comments in program files) will gradually begin to make use of them.) To allow some way for other editors to access sensible (if impoverished) versions of files, a library program -stripvedfile- is therefore provided; this can be run as shell/DCL command pop11 stripvedfile [ -o <outfile> ] <file> etc. It reads a VED file <file> and outputs it as plain text (with all extra control characters removed) to the standard output (or <outfile> if -o supplied). See LIB *STRIPVEDFILE. NOTE that, in an X environment, it is perfectly possible to run XVed in tandem with another editor. Thus even if you don't wish to use XVed for your general editing, you still have the option of using it for the more limited purpose of viewing POPLOG documentation, etc. # The variable -vedstatusheader- is no longer used by VED. This string was formerly used as the start of the status line (including space for the line number of the current file). VED now creates the status line display directly from the variables -vedscreenstatus_-_mark- et al (see 'Special Character Variables' in REF *VEDVARS). However, -vedstatusheader- remains as an autoloadable file which creates a string of the appropriate length, providing upward compatibility for programs that use datalength(vedstatusheader) to get the length (which is always 9). # VED search and substitute strings can now contain all backslash recognised in Pop-11 strings (see REF *ITEMISE). E.g. <ENTER> gs/\St/ / would substitute all 'trailing space' characters in a file with ordinary spaces. You can use character attribute specifications in the substitute string (but note that in the search string they are ignored, i.e. you can't make the search dependent on attributes). E.g. <ENTER> s"foo"\{b}baz" would substitute occurrences of word "foo" with "baz" in bold. "@&" in the substitute string is treated as a single character, and is replaced by the matched string with any attributes that currently has, plus any new ones specified on the @& 'character' itself. E.g. <ENTER> s"foo"\[b]@&" would add bold to occurrences of "foo". To enable the matched string to be got without its current attributes, "@%" has also been introduced. Thus <ENTER> s"foo"\[b]@%" replaces any existing attributes with bold. -- Changes To The POPLOG/X Interface ---------------------------------- -- ... General Improvements To The X Interface ------------------------ # The XpwScrollText widget has been extended to support: i) Direct drawing of the graphic characters used by VED ii) Support for upto four fonts. iii) Support for upto eight foreground/background combinations on screen at the same time. iv) Support for bold, underlined, and flashing text. For details see REF *XpwScrollText. # The XpwScrollText widget has a new resource XtNnoGrayScale which controls whether GrayScale displays will be treated as StaticGray displays. # LIB *RC_GRAPHIC can now draw rounded rectangles with -rc_draw_oblong- # The "input" resource of a LIB *RC_GRAPHIC window is now controlled by the -rc_wm_input- variable (see HELP *RC_GRAPHIC.) # Support for multiple Toolkit versions has been added via the variable -XLINK_VERSION-. See HELP *X and HELP *NEWPOP. # Support for OpenWindows 3.0 has been added. # New keyboard handling library LIB *XT_KEYBOARD has been added. See REF *XT_KEYBOARD. # The procedure -XpwStackColorRangeInfo- has been added to the XpwGraphic widget library. It fetches the same information as -XpwColorRangeInfo- without creating a vector. See REF *XpwStackColorRangeInfo for more information. # The procedure -XptCheckWindowedWidget-, which checks if a widget has an associated window, has been added to LIB *XPT_TYPECHECK. For details see REF *XptCheckWindowedWidget. # The procedure -XGetGCValues- has been added to LIB *XGraphicsContext. See REF *XGetGCValues for details. # The procedure -XCloseDisplay- has been added to LIB *XHouseKeeping. See REF *XCloseDisplay for details. # The X interface now behaves reasonably after a -sysfork-. All the displays and application contexts in the child process are closed. X processing can only continue in the same process a display was opened in. # Non-POPLOG callbacks can now be removed with -(fast_)XtRemoveCallback- and -(fast_)XptRemoveCallbackList-. # In LIB *PROPSHEET -propsheet_show- and -propsheet_hide- now work correctly for imported property boxes. # The procedure -XptDefaultSetup- now behaves correctly if it cannot open a display. Also, if -XptDefaultDisplay- contains a string when -XptDefaultSetup- is called, the string is used as the name of the display to be opened. # The -(fast_)XptValue- procedures are now re-entrant and can safely be used in callback procedures. # Many minor bugs fixed --- see HELP *XNEWS for full information. -- ... XVed ----------------------------------------------------------- # Several new window settings have been added relating to the new VED character attributes. XVed now supports up to four fonts and eight simultaneous foreground/background colour combinations. In addition to this there is the capability for underlined, bold, and flashing text. For more information see REF *XVed # The XpwScrollText widget used for XVed windows now automatically handles drawing of the graphics characters used by VED and LIB *SHOWTREE. This means you can use any fixed-width font for XVed, regardless of whether it supports graphics characters or not. # A new XVed application setting BellVolume which allows you to change the volume of the beep produced by -vedscreenbell- (if possible.) # Two new application settings in XVed (DialogBackground and DialogForeground) can be used to alter the foreground and background colours of XVed specific dialog boxes. See *DialogForeground for more information. # The XVed menubar and scrollbar colours can now be set dynamically from within XVed via window settings. See *menubarForeground and *scrollbarForeground for more information. # A new XVed application setting *Vanilla has been added to suppress the menubars and scrollbars when using Motif or OPEN LOOK. # A New XVed application setting *ShowFileName controls whether the filename of the current VED buffer is shown on the status line. # An XVed library compatible with PWM *SUNKEYS_SUNVIEW bindings added. See REF *XVED. # The -xved_value- procedure can now update multiple settings with one call by supplying a list of keys. # Selection of lines in XVed now works correctly when the left margin has been changed. -- ... The POPLOG User Interface -------------------------------------- # Motif versions of the Help and Library tools and file selector now resize their scrolling lists appropriately when the tools are resized. # Exit procedures from POPLOG via the control panel are now deferred rather than run within the callback (which caused problems under VMS when restarting POPLOG). # HELP *POPLOG_UI moved to the main help directory. # OPEN LOOK dialogs can be re-parented. -- Changes To The POPLOG/Operating System Interface ------------------- # (Unix only) The behaviour of -sys_io_control- when applied to terminal devices has been changed. Previously, -sys_io_control- would recognise terminal -ioctl- requests specially and interpret them relative to the POPLOG device parameters, rather than doing the -ioctl- system call. Now, -sys_io_control- always performs the requested -ioctl- call and returns <true> or <false> to indicate its success or failure. To keep the POPLOG device parameters in step with the terminal settings, the terminal state is first set from the stored device parameters before the -ioctl- call is made, and then the device parameters are updated from the terminal state after the call has returned. This new behaviour makes it unnecessary to flush the device parameters out to the terminal by making an additional call to -sys_io_control- with a null last argument: the effect of any such existing calls will now be system-dependent, but typically they will return <false> and leave the terminal state unchanged. See REF *sys_io_control. # (Sun-4/SPARC POPLOG Only). A serious bug has been fixed in the run-time code generator for Sun-4 POPLOG. For procedures over a certain size, it caused incorrect code to be planted for a -sysGO_ON- instruction (e.g. as generated by a Pop-11 -go_on- statement). This was liable to affect procedures with two or more dlocal expressions (e.g. two or more dlocal active variables), as the internal code generated for this makes use of -sysGO_ON-. # (Unix only) The autoloadable procedure *DISCAPPEND has been made much more efficient on Unix. The improvement is particularly noticeable with very large files. # (Unix only) The -pipeout- procedure can now take a reference containing a procedure as its CHAR_SOURCE argument. The procedure will be used to write the data to the pipe. # (Unix only) New procedure -sys_dir_size- added (like Shell 'du'). See REF *sys_dir_size. -- New Documentation -------------------------------------------------- # New REF files added: REF *DOCUMENTATION REF *ENVIRONMENT_VARIABLES (Unix only) REF *LOGICAL_NAMES (VMS only) REF *POP_UI (after "uses popxlib" only) REF *XT_KEYBOARD (after "uses popxlib" only) LISP REF *REFFILES # New HELP files added: HELP *ARRAYFILE HELP *MAKE_INDEXES HELP *NEWS.V14 HELP *POPARCHIVE HELP *V14_2.CHANGES LISP HELP *PROFILE PLOGHELP *FORMAT PLOGHELP *HIGHER_ORDER PLOGHELP *SPY_ACTION # New TEACH files added: TEACH *PAIRS --- C.all/help/v14_2.changes --- Copyright University of Sussex 1992. All rights reserved. ----------