"); gbWndPopupLinks.document.close(); if (!s_bNS3 && gbWndTemp != null) { gbWndTemp.close(); }else { gbWndPopupLinks.focus(); } return true; } return false; } onload = BSSCOnLoad; document.onclick = BSSCOnClick; onunload = BSSCOnUnload; onerror = BSSCOnError; function reDo() { if (innerWidth != origWidth || innerHeight != origHeight) location.reload(); } if ((parseInt(navigator.appVersion) >= 4) && (navigator.appName == "Netscape")) { origWidth = innerWidth; origHeight = innerHeight; onresize = reDo; } //-->

Revision History

Release Notes for 5.10.21


- Inclusion of LAUNCH32.exe, the 32-bit version of LAUNCH.EXE.

- Addition of Version resource to RTIWIN32.EXE, RTPWIN32.EXE, B2CWIN32.EXE, B2CCON32.EXE, NPLSECURE.EXE, NIAKIN32.EXE, UPGRA32.EXE, and LAUNCH32.EXE.

Bug Corrections

$DECLARE was returning an unexpected value when a C program passes the correct value to $DECLARE but the value $DECLARE passes to NPL is incorrect. In test code the values are correctly passed back to NPL until the values of 32768 and -32769 are reached. Problem occurred if the returned value's sign bit was different from its HEX(8000) bit.

The RunTime wasn't checking the number of subscripts on array field references. When it executed the statement and tried to fetch the nonexistent subscript, it accessed an illegal memory address and crashed. The RunTime was modified to check the subscript count at resolve time, and to report a mismatch as an ERR P56.

Release Notes for 5.10.19


- "Stand-Alone" setup type added to the installation procedure. This is only added for clarity - it is functionally exactly the same as "Server".

- Error reporting by NPLSecure has been improved, and an Error Codes section has been added to the installation guide. Common Problems section has been rewritten.

- Setting NiaknetwEnabled=0 prevented NPLSecure from functioning. This has been changed so that it is ignored by NPLSecure.

- Inclusion of the "LAUNCH.EXE" file.

Bug Corrections

In some cases, LIST # generates odd results, such as:

 2260 - 2230
 2290 - 2290
?26=4 - 5130
?29=4 - 5320
?2:=4 - 5140 5330
?2<=4 - 5340
?2?=4 - 5310
?3;=4 - 5190
 4000 - 2050

(Unix only)

When using NPLSecure, the RunTime generates 2 temporary fff* files in the Windows directory each time it is run. Files are not cleaned up upon exit.

Release Notes for 5.10.17


- Support has been added in $DECLARE for the NUM() floating point data type.

- The user limit upgrade procedure has been updated: if it fails, resulting messages have been clarified.

- The user limit upgrade and SHOWNPL procedures now include NIAKWA_RUNTIME in the places in which to search for the license file.

Bug Corrections

NPLSecure service is supposed to be logging informational messages when doing things like looking for security, but those messages were not in the event log.

Windows 2000 Only: Security fails with a false "user limit exceeded error" when executing the runtime on the security server, only from a drive which is mapped to a local drive. This is a bad idea anyway because 1) Using the server as a workstation causes a serious performance drain for other workstations; 2) Mapping to a local drive has been known to cause very poor disk performance in some situations (see our Tech Note 99); and 3) It is possible to use the local drive letter rather than the mapped letter.

Release Notes for 5.10.15


- Installation routines were completely rewritten using a newer, 32-bit tool. This should provide greater performance and reliability, and ensure compatibility with newer operating systems.

- All setup routines have been rewritten using a 32-bit tool, and have been drastically enhanced. This should keep NPL installation compatible with newer operating systems for some time to come. However this also means that developers should carefully review the Installation Guide. Distributors should not assume that success installing NPL in the past necessarily qualifies them to successfully install this version - please carefully review the Installation Guide.

There is a single setup routine which will install NPL in two different ways: 1) the new NPLSecure, or Protocol Independence - IP Only, method for use in networks with a Windows NT or Windows 2000 server available to act as a security server; and 2) the traditional method for use in networks which will use a Novell server or a peer-to-peer (NetBIOS) network member as the security server. It is very important that the correct method is chosen, and that the same method is chosen on the workstations as was chosen on the server.

Please see the Introduction for more information.

- The Server setup no longer prepares a workstation installation - workstation installation is performed from the same setup program as the server.

- Prior revisions of 5.x also installed 4.3 files. 5.10 no longer installs any 4.3 components, including 16-bit Windows and DOS components.

- No Return Upgrades no longer require a Replacement Gold Key - the existing Gold Key is merely updated with new information. This feature only allows upgrading a 4.2 or higher Gold Key - prior revisions require replacement upgrades or new purchases.

Steps to perform an upgrade have been simplified and speeded up. Please see the NPL Universal Upgrade section titled Overview for more information.

- Installation routine now creates a registry entry signifying the installation type selected during installation. The entry is:


The entry contains "0" if the NPLSecure (Protocol Independent - IP only) type was chosen, or "1" if the Novell / NetBIOS (peer-to-peer) type was chosen. This entry is then used by Authorization Installation and License Upgrade routines. The only proper method for changing the entry is to uninstall NPL and run Setup again.

- SHOWNPL5 description "Novell" was changed to the more accurate "Networks". SHOWNPL5 now correctly allows the use of arguments, so that a functioning installation can query a different Gold Key, e.g. SHOWNPL5 A:.

- File opens have been speeded up. Previously all printer types where queried to determine if they were redirected. Now only LPTx file names are checked for this status.

Bug Corrections and Known Bugs

1242 - Known Bug not Fixed
NPLSecure service is supposed to be logging informational messages when doing things like looking for security, but those messages are not in the event log.

1241 - Known Bug not Fixed
Windows 2000 Only: Security fails with a false "user limit exceeded error" when executing the runtime on the security server, only from a drive which is mapped to a local drive. This is a bad idea anyway because 1) Using the server as a workstation causes a serious performance drain for other workstations; 2) Mapping to a local drive has been known to cause very poor disk performance in some situations (see our Tech Note 99); and 3) It is possible to use the local drive letter rather than the mapped letter.

Printing TAB(X) when X>255 was not handled properly after a SELECT PRINT xxx(Y) where Y was larger than 255. For example, SELECT PRINT xxx(512), then PRINT TAB(256) would result in a RETURN.

In certain situations, a diskimage that has been $OPENed may lose its lock during a MOVE END.

LIST T can report extra occurrences of short (5 bytes or less) text strings under some circumstances.

Introduced by 5.10.09. Recalling authorization when using NPLSecure install faults at Address 0x0042a45c.

The error pointer is incorrect when errors occur in declarations (DIM, FIELD, etc). The pointer points to the end of the declaration statement instead of the code causing the error, and may highlight the next statement instead of the correct one.

1235 - Known Bug not Fixed
Only occurs using RTxWIN. Introduced by 4.31.29. If a user-count exceeded condition occurs, RTIWIN faults with an integer divide-by-zero box instead of displaying the dialog.

Introduced by 5.01.29. If a program containing persistent breakpoint commands (STOP line,n) is SAVEd, the pcode label is not set correctly to require 5.01.29 or later. If other versions attempt to load the program they should generate an error, but don't.

NDM bug: Create conversion tables does permit use of SQL date field (type 19) in the data dictionary (an error is generated when creating the conversion table). All supported date types (including AS/400 versions etc) are now handled by the conversion routines of all 32-bit versions of NDM.

1232 - Known Bug not fixed
On 4.31.27 and 4.31.29 install programs ONLY, the Install or Recall Authorization program icon fails with undocumented error 75.

NDM issue: If a file is opened with a total number of key segments exceeding the NDM configured limit (default 24 or can be configured with '31405 / NDM_SET_MAX_KEY_SEGS) NDM's does not generate an error but may overwrite internal tables, causing unexpected results. In one case, a previously opened file could no longer be accessed - the 'file is open' flag array was overwritten. NDM now generates an error.

Release Notes for 5.10.11

- Some additional changes have been made to accommodate situations where the security location designated by NIAKWA_RUNTIME or $RUNDIR is on a network share, not on a mapped drive. Under these circumstances, byte 34 of $MACHINE contains '\', not a drive letter.

For example:

set NIAKWA_RUNTIME=\\myserver\NPL

At this time, if security fails to pass from the indicated UNC location, the dialog that prompts for the gold key diskette location can only accept drive A or B (not another UNC or drive letter).

Release notes for 5.10.09

- On Windows terminal servers, default partition numbers for all sessions are now unique. Note that some rtiwin.ini options can attempt to change the partition number. If these options would cause duplicate partition numbers on the server, the program will not start.

If an RTIWIN process faults, or the session should disconnect from the server without properly exiting, the partition number(s) that it was using will remain allocated until all NPL users have exited.

- B2CWIN32 and B2CCON32 now support 2 additional command line options to control character set translation options when converting from a .SRC format file (as used by, e.g. the workbench) and .OBJ files (compiled versions).


  -CHARSET w1n1[w2n2...]

When CTRAN OFF is set, NPL performs no character set translation. Values in quotes, comments, etc are copied as binary values and between source and object versions.

This is the default value for all previous versions of B2C, except the B2CWIN32 version used by the workbench editor and debugger, which defaulted to CTRAN ON. The console versions B2CCON32 also assume CTRAN OFF as the default.

When CTRAN ON is set, NPL performs character set translation between SRC files and OBJ files, assuming that SRC files are using a windows character set and OBJ files use the standard NPL character set as published in the reference guide (with no user-defined extensions or changes).

In particular, the following equivalences are assumed as a standard translation set:

Character description

Windows hexcode

NPL hexcode

a circumflex



e circumflex



i circumflex



o circumflex



u circumflex



a dieresis



e dieresis



 i dieresis



o dieresis



u dieresis



a grave



e grave



u grave



A dieresis



O dieresis D6



U dieresis






Section symbol



British pound



e acute



c cedilla



cent sign






left brace



right brace



Euro symbol



(Euro symbol translation has been added to standard list on this release).

All other characters are treated as untranslateable. The windows hex code for a vertical bar (|) (HEX(7C)) is RESERVED FOR ESCAPE SEQUENCES for untranslateable characters. An untranslateable character always generates a sequence |hh when converting from OBJ to SRC, and any sequence of the form |hh in a SRC file is converted to the code HEX(hh) in an OBJ file.

The above standard translation set may be added to or revised using the new CHARSET option. The charset option specifies additional or replacement translateable characters, as a list of 4-hexdigit codes. As with the TRANSLATE option, the first 2 characters represent the Windows hexcode, and the second 2 characters represent the NPL equivalent.

So for example if your NPL applications have been universally extended to treat NPL HEX(9D) as an N-tilde character (windows code HEX(F1)), the command line option:


will do this translation (in addition to the standard translations).

Any translations entered on the command line override the standard translations. You may explicitly indicate that a character is 'untranslateable' by using 00 for the 'translate-to' value. For example, to indicate that the NPL 'beta' character should be treated as untranslateable instead of converting to a windows character, the option:

  -CHARSET 008E.DF00

Would accomplish this (the second option ensures that reverse translation is also disabled, ie a Windows beta character is not translated to the NPL beta either).

If the NPL character set you are working with is totally unrelated to the Windows or NPL character sets (eg, if a DOS CODE PAGE is the standard) you can omit the default translations by starting the CHARSET option with the special value 0000. For example

  -CHARSET 0000.E47D

indicates that all characters outside the range HEX(20-7C) which is common to NPL and Windows are untranslateable, and the NPL character HEX(7D) should be replaced by Windows character HEX(E4).

Release Notes for 5.01.29

  In order to function with the Workbench debugger, NPL maintains some new information concerning the source location from which each line is loaded. Maintaining this information is not expected to cause performance problems, but the possibility remains that for some applications it will.


- Some new syntax enabled for the Workbench debugger. These statements may also be useful to users without access to the WB debugger (eg on UNIX systems) in some rare situations, so they are documented here. If source code contains many statements or multiple lines, some of the parameters required may require careful counting of statements or lines.

- New syntax (implemented for Workbench debug):

  STOP line-number, [LINE] index [OFF] [,MODULE module-name][,FILE file-name]

  Line-number is program line number.

  index is either a statement number on the line, or [if LINE keyword used] a text line number.

  The MODULE keyword is required to simplify future syntax additions. Module-name is the name of an INCLUDE module as a quoted string or alpha-variable.

  The FILE keyword is required to simplify future syntax additions. File-name is the name of a program file as a quoted string or alpha-variable.

  At most one of the MODULE or FILE options may be specified. If none is specified, the current LIST MODULE is the default.

  The statement sets a persistent breakpoint, or if the OFF keyword is used, clears a previously set persistent breakpoint.

  The module selected is either the current LIST module (if no module-name specified) or the designated module name, which must contain a valid NPL identifier or blanks for the root module.

  If the FILE option is specified, the breakpoint is activated only if indicated line was loaded (into any module) from the specified file name.

  A persistent breakpoint causes the program to STOP when the targeted statement is executed (without requiring a program modification to actually enter a STOP statement). If the LINE option is used, the index refers to the text line number for the extracted source text (each end of line graphic terminates a text line).

  So on the following source line (with < representing a return graphic:

  0010 FUNCTION Rewire(posts, ;number of posts <
  gauge, ;wire gauge <
  insulation): ;insulation flag <
  DIM nSpools
  nSpools=0 :;start counting

  the commands STOP 10,3 and STOP 10,LINE 5 are equivalent, and each stops before the nSpools=0 statement is executed.

  When the LINE option is used, the first statement that begins on the indicated text line is targeted. If no statements start on that line, the first statement that starts after that line is targeted.

  Program modifications and overlays do not disable persistent breakpoints. They will be retargeted before the new program is RUN. If after the overlay, the targeted statement or line is out of range, or the referenced module is not loaded, the persistent breakpoint is temporarily disabled.

  If the line, module, and file of the breakpoint exactly match a previously defined item, an error 270 (Duplicate breakpoint) is issued.

  Persistent breakpoints targeted to scramble-protected code are always disabled.

  In immediate mode, if the targeted statement is loaded (ie. the indicated module is loaded, the referenced line number exists, it was loaded from the specified file if any, and the targeted statement number is valid), NPL displays the targeted statement to confirm that you entered the correct statement number or text line number, eg:

  0010:: DIM nSpools: ...

  or (if $OPTIONS byte 45 bit HEX(40) is set):

  0010,3: DIM nSpools: ...

  If the module containing the breakpoint is resolved, the breakpoint immediately becomes active.

  Otherwise the warning message:

  Breakpoint disabled.

  is displayed.

  In program mode, no output is displayed. In non-interpreter versions (RTP) this statement is ignored.

  A STOP OFF directive removes the persistent breakpoint. The line and module of the breakpoint should exactly match a previously defined item.

  If the indicated breakpoint does not exist, an error 269 (No such breakpoint) is issued.

  LIST DT displays currently active persistent breakpoints as a series of STOP statements. Where the targeted statement is loaded, the source code for the targeted statement is displayed.

- Revision to B2CWIN32 - if an ascii pipe character HEX(7C) (|) is encountered in a source file and it is not followed by 2 hex digits no escape sequence is parsed, and the HEX(7C) character is passed unchanged to the compiler (previous versions generated an error). If the same program is recalled, the source will display an NPL HEX(7C) character, which is a British Pound sign (£).

- On previous releases, RTI tracks the sequence of programs loaded in the root module to arrive at the current program (displayed as Program Load Sequence by LIST DT).

  As of this version, NPL also tracks the source location used to load each line of program text. This information is of practical interest to applications that make extensive use of program overlays, and can be used to determine where a specific line of program text was loaded from.

  The source location information is displayed in one of the following forms, as appropriate:

  When loaded using LOAD [DC] T or a multiple program load statement:

  T/xxx, "filename"

  When loaded using LOAD DA from a specific sector:

  DA T/xxx, (sector)

  When loaded using LOAD BOOT or from the command line boot file specification:

  BOOT "boot-file-name"

  Under some circumstances (ie after changes to the $DEVICE table) the device associated with the device address (/xxx) may no longer be in the device table, or may have changed. In these circumstances, the /xxx indicator is followed by the original $DEVICE file name used to load the program.

  Sometimes (ie after a CLEAR P operation or overlay with a line number range specified), not all of a program loaded will still be in memory. In these circumstances, the source location information is preceded by the word 'PART' to indicate that only part of the source code is in memory.

  Occasionally (ie. after editing lines in immediate mode) the lines in memory may have changed since being loaded. In these circumstances, the source location information is preceded by the word 'MERGE' to indicate that program edits have been applied to the source code. Deleting lines by entering just the line number, and adding new lines that follow another line are also treated as program edits and result in the same indicator. RENUMBER and RENAME V operations are also treated as program edits. CLEAR P operations are not treated as edits.

  The source location information is displayed in each of the following circumstances:

  (1) In a LIST DT display, a series of LOAD statements are displayed immediately after the 'Program Load Sequence' information. One line is displayed for each source file whose program text contributes to the current contents of the root module. The source location information used to load are displayed, followed by one or more ranges of line numbers that the program text occupies. For example:

  Program Load Sequence: SP LOAD
  LOAD T/D33, "SP LOAD" 0010-8290

  (2) In response to a STEP command, before the listing of the next executable program statement (preceded by the FROM indicator). For example:

  0010 SELECT @PART "SP @GLBL": ...

  (3) When stepping through code, before the listing of the next executable program statement (preceded by the FROM indicator) only if the source information has changed. For example:

  0010 SELECT @PART "SP @GLBL": ...

  (4) Under unusual circumstances, usually the result of immediate mode commands, the contents of a library (INCLUDE) module may also contain code from more than one program file, or may have been edited or partially removed. In such circumstances, the contents of the module are displayed in LIST DT immediately after the INCLUDE line which defines it, in the same format as the root module (a series of LOAD statements).

- Specific sections of the LIST DT display may now be requested using a keyword modifier. The following keywords are supported:

  [ FILE ]
  [ DEVICE ]
  [ TRACE ]
  [ STEP ]
  [ STOP ]

  If no keyword is specified, all sections of the LIST DT display.

  The following example shows the division of a typical LIST DT into sections:

  -----------------------------------------------------SELECT section
  SELECT CI /001, INPUT /001, PLOT /000, TAPE /005, LOG /000 OFF

  SELECT PRINT /005(80), LIST /215(80), CO /005(80)
  SELECT DISK /D33, #1/D34, #2/D34
  -----------------------------------------------------FILE section

  -----------------------------------------------------DEVICE Section
  $DEVICE(/004) = "LPT1"
  $DEVICE(/015) = "C:\temp\example.txt"
  $DEVICE(/D10) = "A:"
  $DEVICE(/D11) = "PLATTER1.BS2"
  $DEVICE(/D12) = "PLATTER2.BS2"
  $DEVICE(/D33) = "PROGD3C.D33"
  $DEVICE(/D34) = "DATAD3.D34"
  -----------------------------------------------------PROGRAM section
  Program Load Sequence:SP SORT
  LOAD T/D33, "SP SORT " 0010- 8410
  -----------------------------------------------------INCLUDE section
  Executing MODULE " "
  -----------------------------------------------------TRACE section
  -----------------------------------------------------STEP section
  -----------------------------------------------------STOP section
  STOP 0010, 1, FILE "SP SORT "

Release Notes for 5.01.27

Bug Corrections and Known Bugs

Bug 1227
Introduced by 5.01.23. If the name of a file used in a DATALOAD DC OPEN statement is evaluated using a string FUNCTION, and that function does I/O using file numbers, an incorrect file number can be used by mistake. Prior to 5.01.23, if the FUNCTION used I/O with indirect or absolute addresses, but no t file numbers, the error did not occur. On 5.01.23, if the I/O involved indirect or absolute addresses, an error occurs on the DATALOAD DC OPEN statement.

Bug 1228
If RTIWIN[32] is started with the /B option, when the application came to foreground (waits for the first keystroke) the screen was blank. It now correctly contains the current value for the application.

Bug 1230
If the name of a boot file specified on the command line was more than 50 characters, it was truncated. Limit has been extended to 128 characters.

Bug 1231
Introduced by 5.01.21. Correction of Bug 1221 causes Workbench Editor (5.00.09) to fail to load programs with syntax errors, because it treats a non-0 exit code from B2CWIN32 as fatal (rather than just an indicator of syntax errors). That correction has been removed. Only B2CCON32 can be used for batch compiles, etc., since it still generates a non-0 return code if the program(s) contain syntax errors.

If a user-count exceeded condition occurs, RTxWIN reports an integer divide-by-zero dialog box instead of displaying the user limit exceeded dialog. This only effects 16-bit Windows, usually 4.31.23 or higher, but sometimes earlier revisions also.


- On 32-bit versions, $DEVICE specifications which allow for operator printer selection now display the "Print Setup" dialog (instead of "Page Setup" as on the previous releases).

  For example:


  Note that it is always possible to access the printer "Properties" dialog from this dialog.

  A $DEVICE which doesn't permit operator print selection but allows configuration of the printer (CFG=Y option) displays the "Page Setup" dialog as on previous releases (and the button to select a different printer is disabled).

  For example:


  always goes to the default printer, but the operator may elect not to use the default landscape mode.

  If both the printer selection and setup options are active, both dialogs are displayed in order, the first to check printer selection and the second to check printer configuration options.

  For example:


  Displays the "Print Setup" dialog, followed by the "Page Setup" dialog. In this case, while in "Page Setup", the choice of printer can still be changed.

  Note that if an explicit printer name is used which is invalid for the current user, a message box is issued (by windows) with the message "The printer could not be found", and the default printer is used instead.

- The focus problem with Instant Vinny applications (/C option on command line) under Windows 98 and Windows 2000 (in which the NPL window would appear to have focus, after clicking on a frame button, but keystrokes were not being received by NPL), has been corrected.

  Note that the correction temporarily makes the behavior of background applications work the same as Windows 95 and Windows NT 4.0 - they can pop up and interrupt a foreground application. This effect is for the whole desktop, not just for the Instant Vinny application. When the instant Vinny application exits, the default Windows 98/ Windows 2000 behavior is restored.

- A new 'Edit' submenu is added to the System Menu on the windows versions, which works like the equivalent option in a Command Prompt window.

  In particular:

  The 'mark' option of the submenu permits selecting an arbitrary rectangular area of the NPL window, using either the keyboard arrows (unshifted to move start point, shifted to select end point) or mouse (click left mouse button and drag to select). The caption of the window is prefixed with the word 'Mark' to indicate a marking operation is in progress. During the marking operation, keyboard and mouse input is not passed on to the NPL application.

  The 'copy' option (or return key) copies the text in the selected rectangle to the windows clipboard (and ends the marking operation). No formatting information (color, font or underlines) is copied. A return character is inserted in the copied text at the end of each line (except the last). (Note: in a future version, Ctrl-C and Ctrl-Y will also execute 'copy'.)

  The marking operation may be canceled at any time without affecting the clipboard by pressing the ESCAPE key.

  The 'paste' option transfers the current text in the Windows clipboard to the NPL application via the keyboard, as a series of keystrokes (not at a 'mark'ed location, but rather wherever typed information would be sent in the application).

  Caution should be exercised when pasting large amounts of information into an application. If the application experiences an unexpected condition before it has read all the keys, the remaining keys of the paste operation may be misinterpreted by the application as a response to operator prompts unless the keyboard is flushed by the application error handler. Many applications flush the keyboard to ensure operator typeahead is not similarly misinterpreted.

  If a mark operation is performed on a running application, when the mark operation completes some information such as the position of the cursor and mouse and the contents of the window caption may be restored to the values they had at the start of the mark operation, rather than any value they were changed to during the operation. For best results, only start a mark operation when the application is waiting for a key and not otherwise updating the display.

  Note that the previously implemented copy and paste operations available to the line editor are still available. In general these are preferred over the edit submenu operations when entering program text, since they are sensitive to the meaning of the 'end of line' graphic in program code, and can handle operations on lines that exceed the screen size.

  Non-English users may wish to replace the keywords used by the edit menu. This can be done by adding the following items to rtiwin.ini (in any section, such as [general]):

  CopyStringReplaceMent=Cop&y Enter

  and then replacing the value after the = sign with the appropriate language version.

  Note that the '&' should precede the appropriate shortcut key if any (it will appear underlined), and for the Copy item, a TAB character should separate the 'Copy' keyword and the 'Enter' shortcut key description.

  The MarkOperationReplacement string is the prefix which appears in the caption while a mark operation is in progress.

- On windows systems, copy and paste operations have been revised to conform where possible to the windows character set. In particular, when a string is copied to the clipboard, the system variable $PRINTER (also used for XLA=Y printer types) is used to translate NPL characters to their windows equivalents. When a string is pasted from the clipboard, the current $KEYBOARD values for simple keys are used to translate windows characters back to NPL keystrokes.

  For text which falls in the ASCII range where NPL and Windows character sets agree, no effect should be seen. For text containing accented characters in the range HEX(10-1F) and other characters such as the Euro which have equivalents in the Windows character set, text copied to the clipboard should paste into Windows applications more correctly than on previous releases, and text copied from windows applications should paste properly into NPL applications.

  Note that in cases where there is no exact equivalence between windows and NPL characters, these characters may be converted when copied to and pasted from the clipboard. As a special case, the underline character (HEX(5F)) is never converted when copying to or from the clipboard.

Release Notes for 5.01.23

Bug Corrections

Bug 1223
The COPYALL.BAT batch file will only accept A or B as a command line parameter, not A: and B: (which is what the error message displays if the parameter is not recognized. It should accept all of these. Note: COPYALL is no longer available in 5.10.

Bug 1224
If a $DEVICE() reference is to a windows printer, with the '?' or SET=Y option to allow operator selection of the printer, the LANDSCAPE or PORTRAIT option is not the default in the dialog. If it is different from the printer default, and the operator does not reset it, the wrong orientation of the document results.

Bug 1225
If the -TRANSLATE option creates a diskimage file name with lower case letters in it, these may be changed to uppercase by the fix for bug 1216. This translation technique is used extensively by the workbench editor/ debugger, so updating these programs with the affected versions of B2CWIN32 means that saving a program with lower case letters saves the program as uppercase instead (possibly overwriting another program).

Bug 1226
When converting from B2C UNSIGNED_BINARY to an NDM integer type, a value with high-order bit (HEX(80) in most significant byte) was extended as a signed value with HEX(FF)'s. Should have zero-extended.

Additional Information

- As of this release, if a file number is open for stream I/O (by the OPEN # statement), the statements $OPEN and $CLOSE directed to #x will lock the affected file.

For example:

  0000 ;FILELOCK
  ;enable select #x<directory name$> usage
  DIM O$64:O$=$OPTIONS:STR(O$,58,1)=OR HEX(01):$OPTIONS=O$
  DIM W$256
  OPEN #1,"rtiwin.ini" :;open the file for stream I/O
  $OPEN #1 :;locks the file
  R=READ #1,W$ :;read data
  S=SEEK #1,0 :;reseek to start
  $CLOSE #1 :;release the lock
  CLOSE #1

  You can also use the line-number exit form of $OPEN to check for an existing lock on the file.

  Note that the behavior of other applications when accessing locked areas of a file is system dependent. On some platforms (UNIX) the locks are advisory - the data can be accessed by other users even when locked. On other platforms (Windows) the data cannot be accessed by other users when locked (an error occurs on the READ # or WRITE # command).

- As of this release, the 16-bit version of RTIWIN uses the C language interface to Netware (NWCALLS.DLL) exclusively. Older versions used the ASM language interface (NETWARE.DRV) version where this appeared to be reliable, but newer versions of the Novell client are proving to be somewhat erratic in maintaining support for the ASM interface.

  Since rev 4.30 (Feb/98), the NPL SETUP procedure has installed a copy of NWCALLS.DLL as part of the standard system files, so this file should be available on all systems licensed to use this maintenance release. If for any reason this system file is not available, NPL will no longer detect a Novell environment, and may refuse to operate unless the NPL installation directory is on a local drive. It will be necessary to re-run NPL setup in that case.

- As of this release, $OPTIONS bytes are implemented to enforce strict print alignment of lines and columns when printing to Windows print spoolers (not using XPA=Y option). $OPTIONS byte 60 should contain the binary number of Lines per inch required, and $OPTIONS byte 61 should contain the binary number of Characters per inch required. This option is most typically required when printing on preprinted forms.

  So, for example, to enforce printing alignment to 6 LPI and 10 CPI locations:

  DIM O$64
  STR(O$,60,1)=BIN(6) :;6 LPI
  STR(O$,61,2)=BIN(10) :;10 CPI

  Should result in a printout with exactly 6 lines per inch, 10 characters per inch.

  The option applies to all printer addresses.

  Horizontal alignment works on a character by character basis - each character is printed centered in a cell. For windows printers whose default font is proportional, this option will ensure columnar alignment, but may trim the edges of characters (especially capital letters) that are wider than the requested CPI, and will make thin letters (i, l) seem to be unusually widely spaced.

  This option is not implemented on previous releases, and has no effect on those releases.

Release Notes for 5.01.21


1. This release now responds to the registered window message "NPL_QUERY_FONTSIZE" which returns the current NPL font size in pixels as a DWORD value. Previous versions of the RunTime do not process this message and return a 0 value.

2. For users with custom startup displays, the startup display appears only for the first active partition on the desktop.

Bug Corrections:

Bug 1222
If stream data statements are enabled ($OPTIONS byte 58 HEX(01) bit on), and a SELECT DISK statement has been used to point to a directory, LIST DT does not correctly show the status of the SELECTed DISK.

Bug 1221
If B2C is used to compile programs that have syntax errors, the exit code of the program indicates success. It should indicate a failure so that batch files can react appropriately.

Bug 1220
If two NPL windows are displaying a non-blinking text cursor, switching from the background window to the foreground window by a mouse click on the caption bar of the background window sets the blink rate for all other applications including non-NPL applications to a very slow rate. Only effects Win 95 and Win 98 operating systems.

Bug 1219
$USER statement is not working correctly on NetBIOS networks. A return value of -1 (4294967295) is given for all user count requests.

Release Notes for 5.01.19

Bug Corrections:

Bug 1213
The RTIWIN32 window occasionally did not repaint correctly after another window was dragged across it. The problem occurred if "Show Window Contents while Dragging" was a selected option in the Display settings of the Control Panel.

Bug 1214
Spurious User Limit Exceeded messages sometimes occurred when using NiaknetW (NetBIOS) to count users.

Bug 1215
The table used for line number resolution could become corrupted, if a /Main procedure or FUNCTION evaluated at resolve time contained calls to external DEFFN' functions and passed small numeric constants or expressions (less than 256) as arguments. This would result in incorrect line number resolution or a spurious resolve-time error. Additionally, the bug could occur when certain NPL statements (COPY T, $SHELL, $HELP, MAT MERGE, SAVE T, $RUNDIR, $ARGS, $ENVIRONMENT, $ERR, $OSERR, READ DC T) were used inside a resolve-time FUNCTION or PROCEDURE.

Bug 1216
If a .SRC file was compiled into a diskimage, the file name in the diskimage could be either upper or lower case depending on the preferred case of the file system. The name will now be saved as upper case, for consistency with previous runtime versions, unless the LCASE option is used to override this behavior.

Bug 1217
Program resolution failed if an included module triggered memory reorganization. The reorganization caused the INCLUDE statement to move in memory.

Bug 1218
The C character displayed as a Euro character and the Euro glyph was blank.

Important Information:

The following is a significant procedural change from past Releases but only affects the "Network Wide Once-A-Day Security" feature in a NetBIOSnetwork environment.

The 16-bit RTIWIN version no longer leaves an active DLL running to reply to NiaknetW queries from elsewhere on the network. This impacts a user (on a NetBIOS network) that loses the installed fingerprint and is forced to pass security each day from the gold key diskette. The copy of RTIWIN that passes security on the server must be left running on the network for other users to pass security without the installed fingerprint.