Thoroughbred Basic™ 8.6.0
Release Notes
Throroughbred Software logo


Enhancements

General [up]

  1. The size of the string that is specified by OPT= has been expanded to 512 characters for all operating systems.

  2. Expanded the file names specified in the DATA-FILE=/SORT-FILE=/TEXT-FILE= options from a maximum of 14 characters to 256 characters.

  3. Added FID replacement character to file names. The FID replacement character is a #, which can be used in the data file, secondary key or text field file name specified in a Link record. The # in a file name is replaced with value returned by FID(0) ( i.e. the task id ).

  4. Added file prefix to OPT=LINK and OPT=DLINK file name processing. The file prefix is stored in the Common Global Variable name ]PFX$. When opening a Link, the file prefix is first cleared. It can then be set in a File Suffix Method. For more information see "OPENworkshop Methods" in the OPENworkshop manual. The file prefix is prepended to the data file, secondary key file or text field file name before being opened.

  5. When opening a Link with OPT=DLINK|CREATE, if the data file, secondary key file or text field file does not exist, it will be created.

  6. XFD has a new option 4 which returns Link information for a file opened with OPT=LINK/DLINK.
    
    The data for option 4 is returned in the following format:
    
    	  1		Link Flags:
    				' ' = not opened with OPT=LINK or OPT=DLINK
    				'L' = channel opened with OPT=LINK
    				'D' = channel opened with OPT=DLINK
    	  2		Text flag:
    				' ' = TEXT option not specified
    				'T' = channel also opened with TEXT option
    	  3		Create flag:
    				' ' = CREATE option not specified
    				'C' = channel also opened with CREATE option
    	  4		Alias flag:
    				' ' = ALIAS= option not specified
    				'A' = channel also opened with ALIAS= option
    	  5		Data file flag:
    				' ' = DATA-FILE= option not specified
    				'D' = channel also opened with DATA-FILE= option
    	  6		Sort file flag:
    				' ' = SORT-FILE= option not specified
    				'S' = channel also opened with SORT-FILE= option
    	  7		Text file flag:
    				' ' = TEXT-FILE= option not specified
    				'T' = channel also opened with TEXT-FILE= option
    	  8 -  16 	Reserved for future use
    	 17 -  24		Link name
    	 25 -  33		Format name ( as #FORMAT or %FORMAT )
    	 34 -  49		Reserved for future use ( Screen name, View name )
    	 50 -  57		I/O Trigger name
    	 58 -  65		File suffix method
    	 66 -  67		Client/Server ID
    	 68		Basic File type:
    				'I' = IDOL-IV ( i.e. DIRECT, SORT or INDEXED )
    				'M' = MSORT
    				'T' = TISAM
    				'U' = Unix ( i.e. TEXT )
    	 69		Basic File key size, unsigned binary
    				Note:	This may be different from primary key size
    					because of key size adjustment for text fields
    	 70 -  71		Basic File record size, unsigned binary
    	 72 -  75		Basic File number of records, unsigned binary
    	 76		Primary key size, unsigned binary
    	 77		Secondary key size, unsigned binary
    	 78		Number of sort keys, unsigned binary
    				Note: This includes SORT0 for keyed files
    	 79		Maximum sort key size, unsigned binary
    	 80		Data file name length, unsigned binary
    	 81 - a	 	Data file name
    	  A		Sort file name length, unsigned binary
    	A+1 - b		Sort file name
    	  B		Text file name length, unsigned binary
    	B+1 - c		Text file name
    	  C		Table name length, unsigned binary
    	C+1 - d		Table name
    
    
  7. Text Search and Replace functions

    This TFF string function performs search and replace functions on a string.

    TFF (string-value, search-for, replace-with, [separator], option-string [,ERR=line?ref|,ERC=error?code])
    This TFF function searches the string-value replacing each matching search-for value with the corresponding replace-with value. If the optional separator character is included, multiple search and replace pairs are processed in a single function call.

    Option-string values:

    "S"    Replace all matching search strings.
    "s"    Replace only the first matching search string.
    Example:
    LET U$ = TFF("Your code is %C","%C", "1234", "s" )
    U$ will contain "Your code is 1234"

    LET SEP$="|",
    LET A$="[[sessionid]]" + SEP$ + "[[format]]",
    LET B$=SESSION$ + SEP$ + FORMAT$,
    LET HTML$ = TFF(HTML$,A$,B$,SEP$,"S")
    SEP$ is the character used to separate search and replace strings. Every occurrence of "[[sessionid]]" in HTML$ will be replaced with the contents of SESSION$ and every occurrence of "[[format]]" in HTML$ will be replaced with the contents of FORMAT$. If there will be only one match for each search argument, a lower case "s" option-string should be used to improve performance.

     

  8. Internet Uniform Resource Locator functions

    This TFF string function implements encoding and decoding of Internet URL strings.
    TFF (string-value, option-string [,ERR=line-ref|,ERC=error-code])
    URL encoding converts all but specific ASCII characters into a %HH notation consisting of a percent sign character and two hexadecimal characters. Alphanumeric characters 0-9, A-Z, and a-z, and the special characters !()*-.\_~ are not encoded. Decoding converts an encoded string back to its original form.

    Option-string values:

    "E"    Encode string-value.
    "D"    Decode string-value.
    "E+"  Encode string-value and replace space characters with a plus sign.
    "D+"  Decode string-value and replace plus sign characters with a space.
    Example:

    LET U$ = TFF("This is a simple & short test","E")
    U$ will contain "This%20is%20a%20simple%20%26%20short%20test"

    LET U$ = TFF("This is a simple & short test","E+")
    U$ will contain "This+is+a+simple+%26+short+test"

    PRINT TFF(U$,"D")
    If U$ contains the result of the first example, "This is a simple & short test" will be printed.

    PRINT TFF(U$,"D+")
    If U$ contains the result of the second example, "This is a simple & short test" will be printed.

     

  9. Encrypt a String function

    This TFF string function uses internal cipher routines to encrypt a string.
    TFF (string-value, key-string, option-string [,ERR=line-ref|,ERC=error-code])

    This TFF function uses internal cipher routines with the specified key-string to produce a random eight-byte string. The XOR string function is then called to reverse random bits in string-value to produce the result string. When string-value is the result of a previous encryption and the original key-string is provided, the new result will be the original string-value.

    This function produces strings containing binary characters $00$ through $FF$. The strings may contain characters that could be misinterpreted by applications, such as the Basic Field Separator ($8A$), the Basic Escape ($1B$), the ASCII control characters such as TAB ($09$), and String Terminators ($00$ and $24$). The HTA string function may be useful to convert an encrypted string to ASCII format.

    Since a particular key-string will always produce the same random string, key-strings should be changed periodically.

    Option-string value:   "C"

    Example:

    LET E$ = TFF("123-45-6789","SSNKEY","C")
    E$ will contain $F59D6CB0DC97540CF39766$

    LET A$="123 Old Lake Shore Road", P$="PASSWORD";
    LET B$=TFF(A$, P$, "C"), C$=TFF(B$, P$, "C")
    B$ will contain the encrypted result string and C$ will contain the same value as the original A$.

  10. For files OPENed with the DLINK option, the UNT function and *FID will always return information for the Link. For example:
    OPEN (1,OPT="DLINK") "OELCUST"; XS=UNT("OECUSTsk")
    will return XS=1


  11. WAIT for a fraction of a second is now available for Windows and UNIX. The time to wait must be 1 or 2 decimals from .00 to .99. The value 0 is automatically changed to .01. For example:
    WAIT .25
    Suspends program execution for .25 seconds.

    Note: If a particular operating system does not support timers, the value is automatically changed to 1.


  12. Daylight Saving Time information has been added to DUMP IPLCONFIG.


  13. IPLINPUT files may contain INCLUDE statements that specify files which are read in place of the INCLUDE statement


Changes

General [up]

  1. On a channel opened with OPT=DLINK to a Link to a SORT file, writing to the channel no longer return an ERR=1.

  2. On a channel opened to a Link, KEY() with a specified SRT= will now return an ERR=2 after the last sort record for the specified sort.

  3. On a channel opened to a Link, KEY() with a specified SRT="0" will no longer return an ERR=0 when a record to the Link is open on another channel.

  4. ABS() now returns an ERR=20 if the argument is not a numeric value. For example ABS(#FORMAT.STRING-VALUE).

  5. Problems opening a Link via OPT=DLINK where the secondary key/text field file name is not defined in the link header record have been resolved.

  6. Problems opening a Link where the secondary key definitions contain ASCII and/or binary string literals have been resolved.

  7. Problems with the KEY() function when a Link to an INDEXED file, with secondary keys, is OPENed via OPT=DLINK have been resolved.

  8. Problems with large secondary key definitions have been resolved.

  9. File creation via the hierarchical directory is now consistent between all file types.

  10. A problem where an ERR=11 is returned on OPEN, when the Link record contains a secondary key suffix but the dictionary does not contain any secondary key information for the link, has been fixed.

  11. A problem where an erroneous ERR=17 occurred when a key begins with $FF$ and the format does not contain a text field, has been fixed.

  12. When using OPT=DLINK, the sort keys may not be updated correctly if the primary file key size is larger than specified in the FORMAT. The problem is fixed but damaged files will need their sorts rebuilt.

  13. When using OPT=DLINK an erroneous ERR=17 caused by the size of the SORT definition has been fixed.

  14. SET CMASK now accepts the Euro ($80$), Pound Sterling ($A3$), and YEN ($A5$) currency symbols.

  15. The following PRM settings can not be modified by the SET PRM directive: bit 13 SLEEPLOCK, bit 22 SENTINEL|SMPLOCK, bit 23 JOURNALING. No error is issued.

  16. The SET PRM directive will now send the new PRM settings to any DataServer connections.

  17. OPEN with OPT="SHELL" no longer fails if more the 255 Operating System channels are already in use.

  18. Extended Daylight Saving Time begin and end dates for 2007 are now the defaults. The new PRM DSTPRE2007 is provided to revert to the 2006 dates.

  19. Daylight Saving Time beginning later in the year than it ends is now handled correctly for the Southern Hemisphere.

TS Network DataServer [up]

  1. A TCBSERV access control file has been added for enhanced security of data.

TS ORACLE DataServer/TS DataServer for MS SQL Server [up]

  1. Bindings are not done on DELETE when there are no variables to bind.

  2. When a file was opened on two basic channels, a WRITE on one channel (updating a record, not adding a new one), then READing the same record on another channel, you would not get the updated record. This was fixed.

  3. A ghost task starting up with an IPL file that included a link to an MSSQL or ORACLE directory would fail to start if their was no PRM ORACLE-LOGIN= line. This line is not necessary, since you can specify the login/password in the DEV line. This was fixed.

  4. A problem causing a page to lock when EXTRACTing non-existent records under MS SQL 2005 Server, has been fixed.

  5. A problem where the TS DataServer for MS SQL Server and the TS ORACLE DataServer did not honor the PRM WAITLOCK= has been fixed.

Copyright ©2007 Thoroughbred Software International, Inc. Unauthorized use is prohibited.