Friday, May 18, 2007 UniBasic version 8.1.8 Maintenance Release All Rights Reserved. Copyright (c) 1990 - 2007 by: Dynamic Concepts, Inc. Aliso Viejo, CA 92656 USA Email address: techsupport@dynamic.com Information: www.dynamic.com Downloads: ftp.dynamic.com Release instructions ==================== o This release requires an SSN authorized for UniBasic release 8. UniBasic can be used in a single user demo mode if the system lacks an SSN. o This release requires Passport version 4.1 or later. Any earlier version of Passport should be upgraded to the current release of Passport before installing UniBasic 8.1.8. IMPORTANT REMINDERS: ==================== UniBasic 8.1.8 will not run with an SSN issued for UniBasic release 7 or earlier. Please acquire and install a UniBasic 8 SSN prior to installing UniBasic 8.1.8. UniBasic 8.1.8 will not run with a release of Passport older than release 4.1. Please install the current release of passport before installing UniBasic 8.1.8. Previous versions of UniBasic will run with UniBasic 8 SSNs and the current release of Passport. Highlights of This Release ========================== o The SYSTEM statement can enable and disable a convert input to upper case mode. o The maximum number of variables can be increased from 348 to 1113. o Supports systems running Apple Mac OS X 10.4 or later (platform id "A4"). Important Files =============== README This file license.txt License terms and conditions unibasic UniBasic executable Installation instructions ========================= 1. Ensure that you have Passport version 4.1 or greater installed on your system. For common platforms, the latest Passport software can be obtained from www.dynamic.com or ftp.dynamic.com. 2. Login as 'root'. 3. Copy the distribution file to any temporary directory on your system, e.g., "/tmp". Please note that upon successful installation, all files from the current working directory and the current directory will be removed. 4. If the distribution file has a ".Z" extension, uncompress the file using the command "uncompress filename.Z". On Linux systems, use the command "gzip -d filename.Z". If the file has an extension of ".z", rename the file with an uppercase "Z" before uncompressing the file. 5. Unpack the distribution file using the command "cpio -imcduv [1:500]filename" o Fixes a problem where INPUT TIM statements never reported a timeout when standard input was set to /dev/null. Sep 15 2005 (Release 8.1) o SCO OpenServer 6 is supported by platform 55 which has been renamed as "SCO OpenServer 6 / UnixWare 7". Platform 55 is now ported on UnixWare 7.1.4 and this may cause compatibility problems on earlier UnixWare releases such as 7.1.1. o The maximum number of variables can now be increased from 348 to 1113 by setting the MAXVARS environment variable to "extended" when creating uniBasic programs. The number of variables is only increased in new programs; to increase the limit in an existing program, the program must be dumped to a text file and reloaded after a "new" command. If the MAXVARS environment is not set to "extended", newly created program files will be limited to at most 348 variables and the program files will be executable with older releases of uniBasic. Program files created with MAXVARS set to "extended" will only be usable in uniBasic 8.1 or later (a "Not a loadable program file" error will occur if an extended program is loaded in an older version of uniBasic). Setting MAXVARS to "extended" is only required to create programs - it is not needed during program execution. o The PORT environment variable can now set to the value of "any" to force autogeneration of a port number. If this feature is used, the tty name will be ignored and the first available port number starting downwards from the maximum port number will be selected. A profile script can use this feature to prevent telnet connections from using the port numbers assigned to serial ports. o Adds support for systems running Apple Mac OS X 10.4 or later (platform id "A4"). o Adds the ability to read and write standard dL4 Portable Indexed Contiguous, Contiguous, or Formatted files. ANSI characters which are not part of the 7-bit ASCII character set will be ignored when reading from dL4 Portable files. Mnemonic characters cannot be written to dL4 Portable files. o Improves compatibility with RedHat Enterprise Linux Version 3. o Increases the maximum length of terminal type names from the TERM environment variable from 9 to 80 characters. o Adds terminal translation files for "xterm" and "xterm-color" terminals. o Improves handling of improperly disconnected telnet sessions. o Changes unibasic so that it exits if an end of file is detected when reading a command line. o Fixes a problem with PSAVEd programs not running when unibasic was started with the "-X" or "-P" options. o Fixes a problem where using CALL 45 with a bad argument list caused a memory violation. o Fixes a problem such that CALL 65 sometimes caused memory violations. o Fixes a problem in which lpt.iris.sco did not delete lock files correctly on file systems where the inode number exceeded 16 bits. o Fixes a problem where email.sendmail looped forever if an unrecognized command line parameter was encountered. The script will now exit with an "exit 1" statement if a bad parameter is found. Nov 5 2004 (Release 7.2.5) o Fixes a problem in which a spanned record read reported an error 88 if a variable size extended beyond the end of the file. The error should not have occurred as long as some data had been successfully read. o Fixes a problem in which UniBasic would suddenly exit with an "error -22" or "Message queue init: Invalid argument" message. The problem occurred most often on multiprocessor systems with applications that performed a large number of SWAP or SPAWN statements. o Fixes a problem in which the port number was not correctly extracted from a terminal device name. For example, a user running with /dev/pts/123 was given port 23 instead of port 123. Sep 3 2003 (Release 7.2.4) o Compatibility with RedHat 9 Linux has been improved. May 16 2003 (Release 7.2.3) o Huge files (files larger than 2 gigabytes) are now supported on the Alpha platform (BB). o Fixes a problem in which opening an indexed contiguous file using ROPEN sometimes caused recently added or modified keys to be ignored. Feb 21 2003 (Release 7.2.2) o Fixes a problem where the PREALLOCATE 4096 option would sometimes report that a program had written to a deleted record when, in fact, no such error had occurred. o Huge files (files larger than 2 gigabytes) are now supported on the Linux platform (6D). o The Linux platform, 6D, is now compiled and linked on a RedHat 7.3 system rather than on RedHat 6.1. This platform upgrade matches that used by dL4 and was required to support files larger than 2 gigabytes. Systems using RedHat 6.x or similar kernels may need to be upgraded before using UniBasic 7.2.2. o The SCO platform, 99, is now compiled and linked on SCO OpenServer 5.0.6 rather than SCO Unix 3.2.4. o A new CALL, $CALLSTAT, has been added so that programs called by filename can determine the name of the calling program. The syntax of the new CALL is: CALL $CALLSTAT,NAME$ The string variable NAME$ is set to the name of the calling program or to "" if the current program isn't a subprogram. o Fixes a problem in which Portable files created by dL4 were opened as Universal files even though the numeric and/or string data formats were not compatible. Such files are now opened as Unix text files which is the standard open mode for non-UniBasic files. Dec 26 2001 (Release 7.2.1) o Fixes various portation problems for systems that do not support files larger than 2 gigabytes. Oct 16 2001 (Release 7.2) o Universal Indexed, Contiguous, or Formatted files larger than 2 gigabytes in size can now be created on UnixWare 7 or AIX 4.3 systems. The maximum size of the index portion of Universal Indexed files is 256 gigabytes on those systems. The size of the data portion is limited only by the amount of storage space available. To use this feature a file must be created as a huge file using the "H" attribute: Build #1,"[1:40]File" All huge files are also Universal files and can be used by both UniBasic and dL4. Currently, huge files are supported only on UnixWare 7 and AIX 4.3. They are not supported on SCO OpenServer because OpenServer does not allow user files to be larger than 2 gigabytes. In order to build huge files on UnixWare 7 or AIX, the file system must be configured to support files larger than 2 gigabytes. Please see the UnixWare or AIX OS documentation for instructions on how to configure file systems. To share huge files across a network, both the file server and the client systems must support sharing files larger than 2 gigabytes in size. Note: the ISAMSECT environment variable should be set to a value of 8 on any system using huge indexed files. The index portion (.idx) of an indexed file cannot exceed 2 gigabytes in size if the default ISAMSECT value of 4 is used. Files with very large keys (more than 64 characters) may benefit from or even require ISAMSECT values greater than 8. Universal files can be converted to Huge Universal files by using the makehuge utility. Example: #makehuge filename where "filename" is the name or path of an existing Universal file. The makehuge utility cannot change the index node size (ISAMSECT value) of a file. To change the index node size, run the "ubcompress" utility on the file with the new ISAMSECT value before converting the file into a Huge Universal file. Huge files are not supported by the current release (5.x) of IQ for Windows. o A new environment variable, ISAMMAXSECT, has been implemented to define the maximum index file node size that can be opened. Like ISAMSECT, the variable is defined as a number of 128 byte blocks. ISAMSECT still controls the node size of newly created index files. If ISAMSECT is larger than ISAMMAXSECT, then ISAMMAXSECT will be set equal to ISAMSECT. The default value of ISAMMAXSECT is 8 which allows index files with up to 1024 byte nodes to be opened. This default is compatible with the default node size of dL4 index files. The default value of ISAMSECT is 4 as in previous UniBasic releases. o The terminal translation file "term.scoansi" has been modified to be compatible with the SCO OpenServer 5.0.6 system console. Either the new term.scoansi or the old term.ansi can be used on pre-5.0.6 system consoles. o Fixes a problem in which the ubcompress utility changed the index portion of a universal file to a non-portable format. To fix a universal file that has become non-portable, run the command: ubcompress -f filename on the system on which the file was created. The "-f" option will not work correctly if a file has been moved to a platform different from that on which the file was created. When moving to a new platform, the ubcompress utility with the "-f" option should be run on all universal indexed files before the files are moved. The "-f" option will not change universal files that do not have the non-portability problem. o Fixes a problem in which the value "2^31" was sometimes treated as being equal to zero. May 15 2001 (Release 7.1.1) o A new dynamicXport CALL, $DXCOPY, has been added. This new CALL copies the input table to the output table ('CALL $DXCOPY') o Fixes a problem in which the dynamicXport CALL $DXCLOSE would not overwrite an existing file even if the filename included a trailing exclamation mark ('CALL $DXCLOSE,"file!"). Apr 26 2001 (Release 7.1) o Support for writing DynamicXport applications. DynamicXport is a new middleware product from Dynamic Concepts that makes it easier to add web access to existing UniBasic, dL4, or other applications. Five new CALLs have been added for use with DynamicXport. The new CALLs are $DXOPEN, $DXCLOSE, $DXGET, $DXSET, and $DXURL which are described in the DynamicXport programming documentation. These CALLs cannot be used unless the system SSN includes a DynamicXport license. o A new intrinsic CALL, $NCRC32, has been added to calculate 32-bit CRC values of string values. The CALL has two forms: CALL $NCRC32,C,S$ and CALL $NCRC32,C,S$,O where "C" is a 3% or 4% numeric variable that receives the calculated CRC value, "S$" is the string to be checksummed, and "O" is an optional numeric value containing a previously calculated CRC value. The second form is used to calculate the combined CRC value of several strings. In order to support checksums of entire record images, the CRC value is calculated using the DIMmed size of the string and not the current string length. String subscripts can be used to limit the number of string characters included in the CRC calculation. o A new startup option, "-X", has been added to support DynamicXport applications. DynamicXport applications written in UniBasic are started with the command "unibasic -X programpath". This format identifies the program as a DynamicXport application and configures UniBasic with necessary options. The "-X" option disables all terminal I/O (PRINT statements without a channel number will be ignored). The "-X" option is otherwise similar to the "-F" option. o An alternate form of the "-F programpath" option has been implemented to run non-interactive programs. If UniBasic is started using the command line "unibasic -P programpath", then the UniBasic program "programpath" will be executed without the normal startup text and without terminal translation. UniBasic will exit when the program exits. o A new option, "-i k", has been added to the ubconvert and ubconvertfiles utilities to support converting files with IRIS style ("k" attribute) keys. The keys must consist of character data, not binary 8-bit data. May 10 2000 (Release 6.1.5) o Fixes a problem in CALL 28 that caused a memory violation if only one parameter was used ("CALL 28,A$"). Apr 19 2000 (Release 6.1.4) o Fixes a problem that caused the QUERY utility to output no information for Universal Indexed-Contiguous files. o Fixes a problem in CALL 127 and SEARCH that prevented reporting the number of active records in Universal Indexed-Contiguous files. o Fixes a problem in CALL 24 in which no error was reported when a date did not include a year. For example, the string "01/04/**" returned the same successful result as "01/04/00". o Fixes a problem in lptfilter in which using the "-f" option caused a memory violation on some platforms. Feb 4 2000 (Release 6.1.3) o Fixes a problem in the QUERY utility in which incorrect file creation and last access dates were displayed. o Changes platform 6D to use RedHat 6.1 as the Linux reference system. This release may not be compatible with older releases of Linux such as RedHat 5.x or earlier. The platform update is necessary for compatibility with RedHat 6.x and other current Linux distributions that use glibc 2.1 as the C runtime library. o Fixes a problem in CALL 127 in which incorrect file creation and last access dates were returned. o Fixes a problem in CALLs 24, 25, 27, and 28 in which subscripted string and literal string arguments were processed incorrectly or overwritten. o Enhances CALLs 24, 25, 27, and 28 to skip leading spaces in input arguments. o Fixes a problem in TIM(3) and SPC(3) where an incorrect time was returned after the system time was changed or adjusted. o Fixes a problem in which OSNs were not available unless the user had write access to /etc/DCI/osn. o Fixes a problem in $DEVREAD in which fixed length reads returned more than the specified number of characters. o Adds a terminal translation file, term.linux, for a Linux system console. June 2 1999 (Release 6.1.2) o Change platform 55 from "UnixWare" to "UnixWare 7" to reflect move from UnixWare 2x to 7x. o Fixes a problem on Motorola SVR4 (platform C3) where Dynamic Window borders were not printed properly. December 9 1998 (Release 6.1.1.2) o Changes native OS of BB platform from OSF/1 V3 to Digital Unix 4.0 (a later, renamed release of OSF/1 with year 2000 support). o Fixes a problem where "initializing the free list" (unnecessary in UniBasic, but supported for compatibility) in a newly created Universal Indexed Contiguous file resulted in records being allocated twice if the application did not immediately write data to newly allocated records. o Fixes a problem in CALL 56 in which a search failed if the target string match included the end of the dimensioned length of the source string. For example, 'CALL 56,S$,"cd",P' would set P to -1 instead of 3 when S$ was "abcd" if S$ was dimensioned to 4 characters. August 4 1998 (Release 6.1.1) o Fixes a problem where deallocating records that were never allocated in a malfunctioning program eventually exhausted system record lock resources. o For backwards compatibility, CALL 127 now allows the third parameter, filename, to be dimensioned to 31 bytes. However, the Universal Data File attribute, (U attribute) will not be reported. This variable should be dimensioned to 64 for possible future expansion. o Fixes a problem with CALL $DATE, where $DATE incorrectly returned an eight (8) digit date for a six (6) digit requested date. May 18 1998 (Release 6.1) o Universal Data files: these file types are hardware independent, can be moved among different Unix platforms and are fully accessible using UniBasic 6 and dL4. These files are also accessible on IQ for Unix and Windows and dL4. o ubconvert is a user-level utility that converts UniBasic BCD files to Universal Data files. A separate ubconvert document is available from www.unibasic.com. o ubconvertfiles is a low-level utility that converts UniBasic BCD files to Universal Data files. The ubconvertfiles utility is fully described in a separate ubconvert document, available from www.unibasic.com. o New PREALLOCATE value, 8192, selects creation of Universal Data files. o New "communication" calls, $DEVOPEN, $DEVREAD, $DEVWRITE, $DEVPRINT, and $DEVCLOSE. o New scripts $email.mail and $email.sendmail that allow sending email from a BASIC program. o UniBasic no longer incorrectly reports "File is in use and locked" since it now detects if a process died without removing printer lock files. o UniBasic port numbers and Unix process ids are written to printer lock files. o Supports 132 columns for wyse 50 and wyse 60 terminals. The default distribution files for term.wyse50 and term.wyse60 are set for 80 column support. If you plan to use 132 columns for these emulations, please change max_x:80 to max_x:132 in the appropriate Terminal Translation Files, i.e. term.wyse50 and term.wyse60. o Supports 132 columns terminal output. o A new ubtestlock diagnostic program to test record locking in a network environment. o A new sample printer driver, lpt.iris.sco, corrects a 32-bit printer i-node problem for SCO OpenServer users. o All date and time related functions are year 2000 compliant. o Calls 24, 26, 27, and 28 can handle 4 digit years. o New TIM options, TIM(14), TIM(15), and TIM(16), return 4 digit years. User Documentation: =================== A release 7 version of the "UniBasic Reference Guide" is available from www.dynamic.com. In addition to corrections, this manual documents in detail all new features. A separate ubconvert document is available from www.dynamic.com. Passport: ========= UniBasic 8 requires Passport 4.1 or later. Please install Passport 4.1 or later prior to running UniBasic. The UniBasic installation script does NOT install Passport. The revision number of Passport can be found in /etc/DCI/passport.log or its equivalent error log file. If you attempt to run UniBasic with a Passport older than 4.1, you will see messages such as: Waiting for response from security daemon ... and eventually an exit. Networking: =========== Although this product was not specifically tested in a network environment, it should work in a properly configured NFS system which can properly handle record locking. The product itself does not use any system calls specific to networking. Please verify that your system is configured correctly if you are having problems using this product in a network environment. For your convenience, this product includes a standalone utility, ubtestlock, to assist you in testing your configuration. Year 2000: ========== In addition to date and time related functions, those user calls that are documented in the "UniBasic Reference Guide" are year 2000 compliant. Effective UniBasic 6, 2 digit years (Y2) are converted by date calls to be in the nearest century based on a plus/minus 50 years rule. A two digit year is thus assumed to be within 50 years, plus or minus, of the current year as returned by the system. For example, if the system returns 1998 as the current year, then the year 47 will be interpreted as year 2047, and year 49 will be interpreted as year 1949. Although UniBasic 8 is year 2000 compliant, an application program itself may have problems with year 2000. For instance, application programs may calculate time incorrectly, compute leap years incorrectly, or sort dates incorrectly. For example, if keys in Indexed Contiguous files contain 2 digit years, then a simple sequential search will NOT correctly sort dates. Dynamic Concepts strongly recommends that all two and three digit years should be converted to a four digit years to avoid any possible misinterpretation. Copyright Notices: ================== UniBasic is a trademark of Dynamic Concepts, Inc. dL4 is a trademark of Dynamic Concepts, Inc. IQ is a registered trademark of IQ Software Corporation. Windows is a registered trademark of Microsoft Corporation.