Thoroughbred Basic™Thoroughbred Basic™

Note: For Dictionary-IV® Release Notes, refer to the OPENworkshop® link.



  1. FINPUT Enhancement. Byte 6 has been added to the FINPUT EDT= string for two new features. The first changes the action of TAB and BACKTAB to save all changes and exit with CTL set, allowing users to TAB between fields. The second swaps the functionality of Up Arrow and the ESC key. This allows users to abandon changes with the more familiar ESC.
  2. The XML shorthand <DNAME/> has been added to the TFF XML option. In input the shorthand is always recognized. For output, Option code "S" must be specified to produce . Option "Y" is automatically turned on when "S" is used.
  3. Executing console mode statements is allowed. Merging statements into the running public program must include OPT="LOCAL". Example: 00100 EXECUTE "01000 PRINT SYS",OPT="LOCAL". Note that merging statements with EXECUTE undoes many of the optimizations performed by SAVE and FIXUP.
  4. An enhancement has been added to the Windows system to enable setting the background and foreground colors of the base window. Color codes are the same as are used by the WINDOW COLOR directive. Three options are provided.
    • PRM WINDOWCOLORS=Number. Number is a single value or two added values as described for the WINDOW COLORS directive. You can not set the same color for both background and foreground.
    • Users running on Microsoft Windows can add WINDOW_COLORS=Number to the [BASIC] section of TSI.INI. Only a single value is allowed.
    • Mnemonic 'SETBWC' followed by $XX$ can be used to set the colors while running. The value of $XX$ is the combination of a background and a foreground hex color value. The change will be effective the next time the base window is cleared, usually with a 'WC' mnemonic.
    A value of 240 or $F0$ sets a white background with black characters. These options are ignored if a terminal table is selected that does not specify color support.
  5. Duplication of Numeric and String Arrays is implemented using [ALL].
  6. A rental license is available.
  7. Switch -m has been added to ptask to display output in a grid format.
  8. Devices Da through Dz can be used for DataServers. This increases the number of connections from 36 to 62.
  9. Lower case letters are now allowed data names. Example: #FMT.Today.
  10. The following information has been added to the XFD(,1) string when a channel is opened to a table via one of the DataServers:
    20Server file system type, binary; data server devices only:
    1 = ORACLE
    2 = Thoroughbred
    3 = ODBC
    4 = MS SQL Server
    5 = MySQL
  11. The server id, table name and text field table name can be overridden with the SID=, TABLE-NAME= and TEXT-FILE= options when opening an SQL table with OPEN,OPT="LINK".
  12. The following information has been added to the XFD(,4) string when a channel is opened to a table via one of the SQL DataServers:
    8Server ID flag:
    ' ' = SID= option not specified
    'S' = channel also opened with SID= option
    9Table name flag:
    ' ' = TABLE-NAME= option not specified
    'T' = channel also opened with TABLE-NAME= option
    10Commit count flag:
    ' ' = CTC= option not specified
    'C' = channel also opened with CTC= option
  13. The following information has been added to the XFD(,1) string when a channel is opened to a table via one of the DataServers:
    21Case sensitivity flag, binary; SQL data server devices only:
    0 = Perform a case sensitive key comparison
    1 = Perform a case insensitive key comparison
  14. The BREAK directive aborts a FOR/NEXT or WHILE/END loops.
  15. The CONTINUE directive jumps to the next iteration of a FOR/NEXT or WHILE/WEND loop.
  16. Case sensitivity flag added to the DEV line, parameter 5, for SQL DataServers. Setting this parameter to a non-zero value will signal to Basic to perform a case insensitive comparison of the key value returned by an SQL DataServer during a READ,KEY= operation:
    DEV D8,1,,4,,1,1,SQ:
  17. When PRM INPUTVER is active, an INPUT with numeric verification will generate an ERR=48 if the number of decimal digits entered exceeds the number of decimal digits in the verification value.
  18. When PRM PRINTRECORD is active and a PRINT RECORD directive is outputting to a file on disk, this statement causes a Line Feed character (Hex 0A) to be appended to the assembled record.

Windows Only

  1. Enhancements to support Microsoft Windows Standard Printers.

    Expanded escape sequences supported by our type 3 printer driver to allow setting the default character width and height absolute point values.

    'ES',$57xx$ - xx = $0A$ to $FF$ sets the default width.
    'ES',$48xx$ - xx = $0A$ to $FF$ sets the default height.

    For printers using 600 DPI,

    'ES',$573C$ sets 10 CPI ($3C$ = 60)
    'ES',$4864$ sets 6 LPI ($64$ = 100).

    Requires a True Type Outline font.

    Added the ability to select the required font from a program.

    ES',$46xx$,"Font Name" - xx = binary length of "Font Name" (Max = 31).

    Additional values have been added to the DSD() function at position 21:

    21,2  16 bit unsigned binary Horizontal Resolution
    23,2  16 bit unsigned binary Vertical Resolution
    25,2  16 bit unsigned binary Character Width
    27,2  16 bit unsigned binary Character Height
    29  up to 31 characters Font Face Name

    Information is only available for Spool Type 3 printers after an OPEN.

    These enhancements are intended to be used before any data is printed. However they may be used at any time. A 'PB' mnemonic is recommended to insure complete sequences are sent to the driver. Some usage affects other settings. Example - setting character width will affect sequences that refer to characters, such as set left margin.

  2. Enhancement to the SYSTEM directive. Added a Windows call to get the exit code when the process completes and return it in TCB(9).
  3. Enhancement disables Microsoft Clear Type.

    Microsoft's Clear Type technology that intends to make fonts look better on LCD monitors interferes with some functions of our mono spaced fonts. This is particularly noticeable when reverse video characters are printed by a window restore or our WINDOW DELETE and WINDOW REFRESH directives. Clear Type is enabled by default in Windows 7.

    This enhancement disables Clear Type for fonts loaded by Basic. The enhancement can be disabled by adding "CLEAR_TYPE=ON" to the [BASIC] section of TSI.INI.
  4. Support for "\\.\" notation with COM devices has been added to terminal and printer DEV lines.
  5. All Thoroughbred Windows services can be started on a non-default port number after system startup. The port number can be changed by running TBServiceMgr.exe, selecting Properties for a service and then changing the port number on the Options tab.



  1. Basic functions crash because of incorrect data types. Typically the problem occurs when the input to a function is from a Format element defined as an SQL Date (Type 5 or Type 8). These are stored as a numeric offset from some point in time. Attempting to use POS() or DEC() will probably not provide the expected result and frequently will crash Basic. The crashes are more frequent on 64 Bit systems. In 8.8.0 an ERR=20 will be returned if an argument is not the expected type.
  2. These statements can cause a Segment Fault in the Basic Windows driver:

    00100 WINDOW CREATE (80,20,0,0) "BORDER=NONE"
    00200 PRINT @(0,18),'SB','CL',@(0,19),'CE'

  3. Very large statements can cause LIST to reach an internal limit of 255 unique variable names in a single statement. In 8.8.0 an ERR=37 replaces the misleading ERR=20. The text for ERM(37) has been changed to "Structure/Locate/Name Table Overflow".
  4. Using LIST when the listed statement exceeds 32767 characters results in random characters output.
  5. If a non-existent Array is passed to an ENTER using [ALL], DUMP STR ARRAYS may display random values left over in memory. Example:

        Called by OO22Z1 at line number 30
    MSG$[ refers to CNM$[ in level 8
    SA$[]Number of elements = 0
      Defined dimensions = 538994541:1077970829
    FA$[]Number of elements = 0
      Defined dimensions = 6357155:1437419479

    Note: If the number elements are less than 1 no further information will be displayed.
  6. Under some conditions, DUMP STR ARRAYS (DUMP$[ALL]) will generate corrupt array entries. DUMP to a file and DUMP to the screen do not have the problem.
  7. Some FORMAT and OPT="DLINK" processing unintentionally reset the ERR system variable to 0 when there was no error.
  8. Some OPT="" values were not cleared after an I/O operation involving a Network DataServer. Example:

    OPEN (1,OPT="TEXT") "FILE1"
    OPEN (2,OPT="TEXT") "FILE2"
    WRITE (2,OPT="APPEND") "File 2 Text"
    CLOSE (2)
    WRITE (1,IND=0) "File 1 Text"

    The second write is actually done with OPT="APPEND", not IND=0.
  9. KEY() of a record Extracted on a Network DataServer using OPT="DLINK" is not returned. Example:

    30 OPEN (1,OPT="DLINK") "GLLRJRL2"
    40 READ (1,KEY="0000000099"+"999",ERC=11)
    50 PEXTRACT (1)
    60 K$=KEY(1)
    70 PRINT K$

    K$ = ""
  10. A sequential PEXTRACT at the beginning of an Auto Expanding file gives the expected ERR=2 but leaves a random record locked. Example:

    OPEN (1) "AEFILE"

    plock will report a locked area of the file the size of a record.
  11. A KEY() or PKY() function before a sequential READ or PREAD causes unnecessary key block searches.
  12. A limit of four commas prevents necessary commas in the system portion of a DEV= option. Example:

    OPEN (C,DEV="255,1,1,,cat | txt2pdf arg1, arg2, arg3") "LP"

    The limit has been removed.
  13. Using INSERT mode in FINPUT can cause underscores to disappear.
  14. When PRM JOURNALING is active and a file is OPEN with OPT="DLINK", a WRITE with a DOM= option will leave an existing record locked. This is caused by the DOM= terminating the operation without removing the EXTRACT of the "before" value for the Journal.
  15. SET CTC will now return an ERR=17 if the specified commit count is greater than 65536.
  16. XFD(,1) byte 1 contains $01$ instead of $07$ for non-unix clients.
  17. Properly disconnect from all data servers if Basic fails to start.
  18. Problems when a connection to an SQL data server cannot be made have been corrected.
  19. Display issues in EDITF with the CLOSE, MERGE, and REMOVE directives have been corrected.
  20. Proper error messages for PRM OPENLIB are now displayed.
  21. Problems starting a Ghost from a Basic where the IPL file contains a MySQL data server connection have been corrected.
  22. Problems where erroneous ERR=30's and ERR=37's are returned for a program containing a large number of format and data name references have been corrected.
  23. SAVE will now return an ERR=37 when the maximum number of formats in a program is exceeded.
  24. A problem saving values to a table where the precision > 2 for numeric types 0-2 has been corrected. (BSCA 871 0013)
  25. A problem when performing I/O on the same SQL DataServer link on multiple channels has been corrected.
  26. A problem where an ERR=11 is returned instead of an ERR=150 when DOM= is specified during SQL DataServer I/O has been corrected.
  27. Doing a REMOVE without a KEY= will not generate an ERR=11 if the record is extracted while in a secondary sort.
  28. A problem where GOTO label_name did nothing while debugging in console mode has been corrected.
  29. A problem where ERASE "NAME" where NAME is an existing directory fails with ERR=12 has been corrected.
  30. ERR=label_name where label_name does not exist will no longer generate an ERR=21. The next highest level error trap will be used. The error processing priority is Function ERR, Statement ERR, then SETERR.

Windows Only

  1. A RELEASE directive is now executed when Windows message WM_ENDSESSION is received to insure proper procedures are followed during a system shutdown.
  2. An erroneous ERR=17 in Server Side Socket support is fixed. WRITE with OPT="SOCKET|CLOSE" has been fixed.
  3. Journaling - a locking problem with CISAM/TISAM files has been corrected.
  4. During start up the main window parameters for height, width, and mode are checked for unreasonable values that would cause the window to not be displayed.
  5. Improved support to slave printing for GDI printers. Implemented for both Windows Basics and TbredComm. For details, please see TbredComm enhancements.
  6. Fixed dashed graphics characters problem (BSCW FONT 0006).