SUPRTOOL Version 4.0 Database Handyman for HP-UX Enhancements Allbase Databases Suprtool now supports Allbase databases. You can open an Allbase database with the Open command and choose input tables with the Select command. See the "Allbase" section later in this document for a complete description of the Allbase features that are available in Suprtool. We have tested the new Allbase access with Allbase version G.1.09 for HP-UX. We believe that it will be compatible with future versions of Allbase. We have not tested Suprtool with any of the F versions of Allbase. Add Command [Add] Use the Add command to "insert" records into an Oracle table. You must specify the Oracle tablename and you must have opened the Oracle database to which you wish to add records. The tablename specified must be a valid table and not a view. The fields from the input source, or the extracted names must be the same as the column names in the table to which you wish to add records. You do not have to specify all columns in the table; unreferenced columns will be given default values depending on their data-type. You cannot currently add records from another SQL table, but you can extract the records you want into a file and then add from that file. Examples The first example shows a typical Add task. A self-describing file's records are added to the table called customer. This assumes that the self-describing file has the same structure and that the fieldnames are the same as the column names. >open oracle scott tiger {open SQL database} >in custrecs {input file you wish to add} >add customer {specify the Oracle table} >exit {execute the task} Our next example shows how to add by redefining the fields from a self-describing file into a table. The names are redefined so that the fieldnames being extracted will match those in the table of the SQL database. >open oracle scott tiger {open SQL database} >in custrecs {input file you wish to add} >def cust_name,custname {redefine the items to match} >def cust_addr,address {the names in the table} >extract cust_name {extract data under the column name} >extract cust_addr >add customer {specify the Oracle table} >exit {execute the task} Our final example shows input from a flat file. >open oracle scott tiger {open SQL database} >in salehist {input file you wish to add} >def cust_number,1,6,byte {redefine the items to match} >def item_no,7,10,byte {the names in the table} >def sales,18,4,double >extract cust_number {extract data under the column name} >extract item_no >extract sales >add customer {specify the Oracle table} >exit {execute the task} Allbase Access Suprtool now supports Native Char and Native VarChar data-types. The Form command reports these fields as being Char(N) and VarChar(N) respectively. Extract Command Previous versions of Suprtool would not allow arithmetic expressions that started with a constant. If you have an arithmetic expression that starts with a constant, Suprtool assumes that you are attempting to extract a single constant value and not an arithmetic expression. To specify an arithmetic expression that starts with a constant, surround the expression with parentheses. For example, Incorrect >extract c = 6000 - cost Error: Missing comma or invalid arithmetic expression Correct >extract c = (6000 - cost) Form Command The Form command, which displays all of the accessible tables, now shows the ownername for both Allbase and Oracle databases. Previously the Form command on an Allbase database would display only those tables for the ownername specified during the Open command. Suprtool now displays all of the accessible tables. The tables are displayed in descending order by owner- and tablename. If $Invalid(date-field) The If command now has a $invalid function to find all invalid dates for a particular field. An invalid date is any number of a particular date format whose date equivalent cannot be found on the calendar. For example, a date with a month of 99 will be considered invalid. >in kb.calls >item date-created,date,yymmdd >item date-modified,date,yymmdd >if $invalid(date-created) or $invalid(date-modified) >out baddates,link >xeq Item Command The Item command now allows the following new date formats: ccyymmdd, ccyy, ccyymm, aammdd. See the section "Suprtool and the Year 2000" for a complete description. Set Date Command Suprtool now has two new Set Date commands: Set Date ForceCentury On | Off Set Date Cutoff nn See the "Suprtool and the Year 2000" section for a complete description of each of these settings. Form Command The Form command has been enhanced to identify columns that allow null values in SQL tables. Before the Form command can show the columns in a selected table, it has to be preceded by valid Open and Select commands. >form Column Name: Allbase Type: Nulls: Suprtool Type: CUSTOMERNUM Decimal (8) N Packed DELIVERYDATE Decimal (8) Y Packed PRODUCTNUM Decimal (8) N Packed PRICE Decimal (8) Y Packed PURCHASEDATE Decimal (8) N Packed SALESQTY Decimal (4) Y Packed SALESTAX Decimal (8) Y Packed SALESTOTAL Decimal (8) Y Packed If $Null(fieldname) The If $null(fieldname) command has been added so that you can select rows that have null values in them. This feature is available only for SQL databases, and you can use this command only on columns that allow null values. >if $null(SALESTOTAL) If you want to find only values that are not null, you can add the NOT keyword in front of $null. >if not $null(SALESTOTAL) Item Command You can specify Oracle dates on the Item command by using the keyword Oracle. For example, >item transdate,date,oracle The Oracle date attribute is only allowed on fields that are exactly seven characters long. Oracle Dates Use the Item command to specify that a field contains an Oracle date. Once you have identified an Oracle date, you can use the $date and $today features in both the Extract and If commands to extract or select on Oracle dates. Oracle dates have both a date and a time component, but Suprtool only processes the date component. Output,Link Option If you use the Item command to identify the fields that are Oracle dates, the self-describing files created by the Link option of the Output command will automatically include this information. If you specify a self-describing input file with Oracle dates, Suprtool will automatically recognize the Oracle date attribute. Set Oracle Rows The minimum value for Set Oracle Rows has been changed from 10 to 1. Allbase Suprtool can now read Allbase tables and views. The Open and Select commands are used with Allbase. The Form command has been enhanced to show information about Allbase databases. Form Command [F] The Form command now displays information about an open Allbase database. After an Open command, the Form command displays the tables available to the user, together with the owner names. After a Select command, the Form command displays the columns in the specified table. >open Allbase Partsdbe.allbase scott >form Allbase Owner Table: MANUFDB SUPPLYBATCHES MANUFDB TESTDATA PURCHDB INVENTORY PURCHDB ORDERITEMS PURCHDB ORDERS PURCHDB PARTINFO PURCHDB PARTS PURCHDB REPORTS PURCHDB SUPPLYPRICE PURCHDB VENDORS PURCHDB VENDORSTATISTICS RECDB CLUBS RECDB EVENTS RECDB MEMBERS SCOTT EMP >select * from scott.emp >form Column Name: Allbase Type: Nulls: Suprtool Type: EMPNO Decimal (4) N Packed ENAME VarChar (10) Y Byte JOB VarChar (9) Y Byte MGR Decimal (4) Y Packed HIREDATE Char (10) Y Byte SAL Decimal (7,2) Y Packed COMM Decimal (7,2) Y Packed DEPTNO Decimal (2) Y Packed Open Command [OP] This command opens an SQL database. Only one database can be opened at a time. For example, >OPEN ALLBASE DBEname Owner The Suprtool syntax for Allbase is slightly different from that for Oracle. Instead of a password, Suprtool expects the "owner" name that is associated with a specific Allbase database. Select Command [SEL] Specify a select-statement for an open SQL database. The Select command in Suprtool supports all of the select-statement features of the open SQL database. Only one Select command can be specified at a time. Allbase sorts data: >select * from user.account@emp order by ename Suprtool sorts data: >select * from user.account@emp >sort ename The Select command can contain any expression or clause that is supported by the SQL database. However, there are some Suprtool commands that may perform faster than select-statements (e.g., Suprtool Sort command versus Order By). Set Allbase Rows When the input source is an Allbase database, Suprtool reads more than one row at a time. By default, Suprtool fetches 100 rows at a time. With the Set Allbase Rows command, you can change the number of rows; the minimum number of rows is one and the maximum number is 990. You must specify Set Allbase Rows before you enter the Select command. Data-Types When you specify a Select command, Suprtool figures out how to translate the Allbase internal data-types into formats that it can process. Not all Allbase data-types can be processed by Suprtool. The following table lists the Suprtool data-type that corresponds to each Allbase data-type: Allbase Data-Type Suprtool Data-Type integer double smallint integer binary Not Supported char byte varchar byte real ieee-32 float ieee-64 decimal packed numeric packed TID Not Supported date byte time byte datetime byte interval byte varbinary Not Supported long binary Not Supported long varbinary Not Supported Date and Time Types Allbase has four types of fields that are associated with dates and times. These fields are converted to byte-type data and are returned with specific lengths. The date and time fields are returned with the following byte lengths: Data-Type Length DATE 10 TIME 8 DATETIME 23 INTERVAL 8 Allbase Performance Suprtool provides you with easy ways to let either Allbase or Suprtool do most of the work. Whether it is best to use Allbase or Suprtool really depends on your specific machine, database, and application. You can use the Select command to force Allbase to do most of the processing or you can use Suprtool to do the work. In our testing, Suprtool consistently sorts 1.5 times faster than Allbase. Your performance improvements may be different than ours, so we recommend that you take some common tasks and try them with both tools. Here is an example of sorting with Allbase and then with Suprtool: Allbase sorts data: >select * from user.account@emp order by ename Suprtool sorts data: >select * from user.account@emp >sort ename Restrictions Suprtool still has the following restrictions in Allbase: 1. Suprtool needs the ownername to select a specific table. For example, >select * from purchdb.orders In this example, the owner is purchdb and the tablename is orders. 2. Suprtool cannot handle the Allbase date format. However, the To_Char function in the select-statement can convert the Allbase date format into something that Suprtool can handle. For example, >select qty,TO_CHAR(date,'YYYYMMDD') from manufdb.testdata >def mydate,date[1],8 {redefine testdate} >item mydate,date,yyyymmdd {define the date format} >if mydate<=$today(-900) STExport There are four enhancements to STExport. The new HTML command lets you specify output for web pages. The Delimiter Space option is now the default if you specify HTML Preformatted. The new Heading Column option makes it much easier to specify individual headings for each field in the input source. The Date Invalid option lets you decide how STExport should handle invalid dates in the input source. Invalid Dates By default, all invalid dates are formatted as asterisks. STExport treats any date that does not have a valid century, year, month, or combination (e.g., February 29, 1999) as invalid. You can specify how you want STExport to format invalid dates by using the Invalid option of the Date command. If you specify $date invalid null STExport produces a zero-length field if you specify Column Variable, and spaces if you specify Column Fixed. If you want to specify an explicit string for all invalid dates, do so after the Invalid option. For example, $date invalid "%%%%%" causes STExport to produce a string of five percent-signs for any invalid date. Delimiter Command You can now specify a space between fields by doing Delimiter Space. If you specify HTML Preformatted, then Delimiter Space is enabled. Heading Command It is difficult to get headings right when you have to specify all of the quotes and delimiters with the Heading Add option. Use Heading Column to specify individual column headings without formatting information. When you use Heading Column, STExport treats each individual column as a byte-type field. All formatting commands that apply to byte-type fields are then applied to each of the column headings. For example, if you specify Heading Column 'Account' Heading Column 'First Name' Heading Column 'Last Name' Heading Column 'City' Heading Column 'State' and Quote Double and Delimiter Comma are in effect, then STExport produces this heading: "Account","First Name","Last Name","City","State" Notes You cannot combine the Add and Column options. You must specify one or the other. If you start with Heading Add and then later specify Heading Column, STExport erases the heading you created with Heading Add and starts over with the first column that you specify with Heading Column. Similarly, if you start with Heading Column, a Heading string or Heading Add will start over with a new heading. HTML Command [HT] Use HTML to format web pages for either Internet or Intranet applications. HTML None | Preformatted | Table | Title string | Heading string (Default: None) Web applications expect data in a special format called the Hypertext Markup Language (HTML). Use the HTML option to request that STExport format the input file into HTML format. Maximum Size of HTML Files Web browsers often cannot process large documents. The maximum size depends on what browser is in use, the version of the browser, the operating system in use, and how much physical memory is present on the client machine where the browser is running. We suggest that you limit your web pages to less than 1,000 lines and restrict the number of columns, unless you are certain that your users can handle larger files. This is not a limitation of STExport, but is rather a limitation of how web browsers work. Preformatted Format To preserve columns and spacing for each output line, use HTML Preformatted. This command puts the
 tag around all  of  the
          data  from the input file.  Most web browsers display preformatted
          text in a fixed-width font such as  Courier.   Therefore,  if  you
          specify HTML Preformatted, you should also select Columns Fixed.


   Table Format

          Use  HTML  Table  to create output in HTML table format.  STExport
          creates tables with a border between each column and row.   Tables
          make  it  easier to read tabular information, but not all browsers
          support tables.


   Title

          All HTML documents must have a title.  By default,  STExport  uses
          the  title "This is the Title".  You should specify your own title
          using the Title option.


   Heading

          The heading appears before the column headings and the  data  from
          your  input  file.   By  default,  there  is  no heading.  Use the
          Heading option to specify your own heading.


   Column Headings

          If you specify HTML Table, use  the  Heading  command  to  specify
          column  headings  for  HTML output.  The Heading Fieldnames option
          produces acceptable column headings,  but  it  is  better  to  use
          Heading  Column to specify a string for each of the fields in your
          input file.


   Roman-8 Characters

          HP 3000 and HP 9000 computers use the Roman-8 character set.   The
          characters  in  the  Roman-8 set are similar to, but not identical
          with, the ISO-8859-1  character  set.   Web  pages  must  use  the
          ISO-8859-1 character set.

          When formatting byte-type fields, STExport attempts to convert any
          Roman-8  input  character  into   the   corresponding   ISO-8859-1
          character.   Those characters that cannot be converted are dropped
          from the output.  The following characters cannot be converted:


               ©  169    grave mark

               ª  170    circumflex

               ¬  172    tilde

               ¾  190    function symbol

               Þ  222    beta symbol

               ë  235    capital-S, Icelandic

               ì  236    small-S, Icelandic

               î  238    capital-Y, umlaut


   Notes

          If you specify HTML Table, STExport sets

               Quotes None

               Delimiters None

          If you specify HTML Preformatted, STExport sets

               Quotes None

               Delimiters Space

               Columns None

          In either case, any changes cause STExport to print a  warning  to
          let  you  know  that  these  options have changed.  If you do want
          quotes around  byte-type  fields  or  delimiters  between  fields,
          specify these options after selecting the HTML option.



   Suprtool and the Year 2000


          We  are  in  the  midst of addressing many of the issues that face
          data-processing  departments  with  the  impending  turn  of   the
          century.


   Two-Digit Years

          Currently, the date format of yymmdd collates (sorts) correctly if
          the date is not beyond December 31, 1999.  For example,  say  that
          the  current  date  is  961210; this is numerically less than next
          year, the date value of which is  971210.   At  the  turn  of  the
          century,  dates in the yymmdd format (or yymm) will no longer sort
          correctly because the value of December 10, 2000 (001210) is  less
          than the value of dates before January 1, 2000 (e.g.  961210).

          Consequently,  if  you  have  a  date beyond 1999 stored in yymmdd
          format, a relative operation such as

              >if date-field >= $date(96/12/10)

          will not find the date of December 10, 2000.


   If Command and Year 2000

          Because dates beyond 1999 will not collate properly for the yymmdd
          format, the If command now produces an error if the year specified
          in a $date or $today function  is  greater  than  1999,  the  date
          format  is  yymmdd  or  yymm,  and  we  are  performing a relative
          operation, such as greater than.


   Set Date Cutoff

          Suprtool used to assume 19 for the century for any  user-specified
          $date with a two-digit year.

          For example:

              >item date-field,date,ccyymmdd
              >if date-field <= $date(09/12/26)

          Previously,  the $date function converted the user-specified $date
          to

              1909/12/26

          in order for it  to  be  compared  to  the  date-field  format  of
          ccyymmdd.   Now  with  Set  Date  Cutoff xx, you assume 20 for the
          century if the year specified in the $date function is  less  than
          the value of Set Date Cutoff.

          For example:

              >set date cutoff 10
              >item date-field,date,ccyymmdd
              >if date-field <= $date(09/12/26)

          Suprtool in this case assumes the full $Date to be:

              2009/12/26

          Conversely,  if  the  value  of  Set  Date  Cutoff was 5, then the
          assumed century would be 19.

          The default value of Set Date Cutoff is 10.


   Set Date ForceCentury

          Set Date ForceCentury On does not allow a yy date to be entered in
          the $Date function.  It forces the user to enter a full ccyy date.

             >set date forcecentury on
             >item date-field,date,ccyymmdd
             >if date-field >= $date(96/12/10)

          Error:You must specify the century or Set Date ForceCentury off

          The default value for Set Date ForceCentury  is  off.   The  $Date
          function is available in both the If and Extract commands.


   New Date Formats

          The Item command now supports four new date formats:

              Format                Date-Types
              ccyymmdd              X8 Z8 J2 K2 P10
              ccyymm                X6 Z6 J2 K2 P8
              ccyy                  X4 Z4 J1 K1
              aammdd                X6


   AAMMDD Date Format

          The  aammdd  date  format was developed by James Overman of HP for
          use in their MM3000 product.  This format is  available  only  for
          the X6 data-type.

          AAMMDD is similar to yymmdd, but the year portion of the date uses
          a combination of numbers and letters of the alphabet to  represent
          years beyond 1999.

          By  substituting a letter of the alphabet in the first position of
          the year, we can extend a six-digit date and also ensure that  the
          dates collate correctly.  For example:

              YY of AAMMDD        CCYY
              A0 - A9             2000 - 2009
              B0 - B9             2010 - 2019
              C0 - C9             2020 - 2029

          Because letters are greater than numbers in the collating sequence
          we can ensure that aammdd dates beyond 1999 will order correctly.


   Invalid Dates

          The If command now has a $invalid function  to  find  all  invalid
          dates  for a particular field.  An invalid date is any number of a
          particular date format whose date equivalent cannot  be  found  on
          the  calendar.   For  example,  a  date with a month of 99 will be
          considered invalid.

             >input dsales
             >item deliv-date,date,ccyymmdd
             >if $invalid(deliv-date)
             >out baddates,link
             >xeq


   Converting Dates

          Suprtool is capable of converting dates from one format to another
          using  a  variety of Suprtool features.  You will see how Suprtool
          can convert common dates without the century to  those  that  have
          the century included.


   Case 1:  Converting a J2 Date from YYMMDD to CCYYMMDD

          Because  Suprtool  can  do arithmetic expressions, you can alter a
          date to put 19 in front of it.  But what if all the dates are  not
          actually  dates  but  instead  are filled with 9's as some sort of
          flag to your application?

          You have a dataset with two date fields, which are J2 items in the
          date format yymmdd.

              File: kb.calls     (SD Version B.00.00)  Has linefeeds
                 Entry:                     Offset
                    CALL-NBR             I2      1
                    CALL-TAKER           X20     5
                    CALL-CATEGORY        X2     25
                    STATUS-FLAG          X2     27
                    COMPANY-NAME         X60    29
                    SERIAL-NBR           X4     89
                    DATE-CREATED         J2     93
                    DATE-MODIFIED        J2     97
              Entry Length: 100  Blocking: 1

          First,  you  need  to  know  and  understand your data.  Are there
          invalid dates?  If so, does the  value  have  some  other  logical
          meaning?  Are they, for example, flags for your application?

              >in kb.calls
              >item date-created,date,yymmdd
              >item date-modified,date,yymmdd
              >if $invalid(date-created) or $invalid(date-modified)
              >list
              >xeq

          After fixing up the dates that are incorrect you can now get ready
          to start converting the dates.

          You can put 19 in front of all the appropriate dates by using  the
          following extract statement.

               >in kb.calls
               >item date-created,date,yymmdd
               >if not $invalid(date-created)
               >ext call-nbr / serial-nbr
               >ext date-created = date-created + 19000000
               >ext date-modified
               >out kb.calls.new
               >xeq

          If  you  have records containing years between 00 and 10, and they
          actually represent 2000 and 2010, you should change the If command
          to  update  them  in  a separate pass.  The first pass updates all
          twentieth-century dates:

               >in kb.calls
               >item date-created,date,yymmdd
               >if not $invalid(date-created) and date-created / 10000 > 10
               >ext call-nbr / serial-nbr
               >ext date-created = date-created + 19000000
               >ext date-modified
               >out kb.calls.new
               >xeq

          The second pass updates those dates in the twenty-first century:

               >in kb.calls
               >item date-created,date,yymmdd
               >if not $invalid(date-created) and date-created / 10000 <= 10
               >ext call-nbr / serial-nbr
               >ext date-created = date-created + 20000000
               >ext date-modified
               >out kb.calls.new,append
               >xeq

          You can now repeat these steps for the date-modified field.


   Case 2:  X6 YYMMDD Data to X8 CCYYMMDD

          The following Suprtool task shows how you can generate a new file.

          Consider the following self-describing file and  its  date-created
          and date-modified fields:

              File: kb.calls     (SD Version B.00.00)  Has linefeeds
                 Entry:                     Offset
                    CALL-NBR             I2      1
                    CALL-TAKER           X20     5
                    CALL-CATEGORY        X2     25
                    STATUS-FLAG          X2     27
                    COMPANY-NAME         X60    29
                    SERIAL-NBR           X4     89
                    DATE-CREATED         X6     93
                    DATE-MODIFIED        X6     99
              Entry Length: 104  Blocking: 1

          You  want  to  convert  to a date format with room for a cc at the
          beginning of the date.  In order to convert these dates  you  need
          to  be  able to put either a 19 or 20 in front of the yymmdd date,
          depending on the value of the year.  Before you can do  either  of
          these  you  must  confirm,  once  again,  that you have no invalid
          dates.

              >in kb.calls
              >item date-created,date,yymmdd
              >item date-modified,date,yymmdd
              >if $invalid(date-created) or $invalid(date-modified)
              >list
              >xeq

          Once you have confirmed that there are no invalid  dates  you  can
          start  converting  the dates that you have.  Because there are two
          date-fields  in  this  file  you  must  be  careful  to  add   the
          appropriate  century  for  the proper field.  For this example you
          assume that if a year is less that 1950 then the century should be
          20.

              >in kb.calls
              >item date-created,date,yymmdd
              >if date-created >= $date(1950/01/01)
              >out kb.calls.new
              >ext call-nbr / serial-nbr
              >ext "19"
              >ext date-created
              >ext date-modified
              >xeq

          Now insert 20 in the century for the appropriate records:

              >in kb.calls
              >if deliv-date < $date(1950/01/01)
              >ext call-nbr / serial-nbr
              >ext "20"
              >ext date-created
              >ext date-modified
              >out kb.calls.new,append
              >xeq

          Now  you can convert the other field from the flat file, and add a
          century to the date-modified field:

              >reset
              >in kb.calls.new
              >item date-modified,date,yymmdd
              >if date-modified >= $date(1950/01/01)
              >out kb.calls.new2,link
              >ext call-nbr / date-created
              >ext "19"
              >ext date-modified
              >xeq
              IN=19716, OUT=19716.  CPU-Sec=5.  Wall-Sec=9.

          Because you extracted all 19716 records you know you do  not  have
          any records with the purch-date field that need to be updated with
          a 20.


   Case 3:  X6 MMDDYY Data to X6 YYMMDD

          The following Suprtool task shows you how to convert a date  in  a
          self-describing file from mmddyy to yymmdd format.

          Consider  the  following self-describing file and its date-created
          and date-modified fields:

               File: calls     (SD Version B.00.00)  Has linefeeds
                 Entry:                     Offset
                    CALL-NBR             I2      1
                    CALL-TAKER           X20     5
                    CALL-CATEGORY        X2     25
                    STATUS-FLAG          X2     27
                    COMPANY-NAME         X60    29
                    SERIAL-NBR           X4     89
                    DATE-CREATED         X6     93        <>
                    DATE-MODIFIED        X6     99        <>
              Entry Length: 104  Blocking: 1

          You want to convert these two dates to a data  format  of  yymmdd,
          before you add a century in front of the year.  This can be easily
          accomplished by defining each sub part of the date and  extracting
          those parts in the new order.

              >in calls
              >def date-created-mm,date-created[1],2
              >def date-created-dd,date-created[3],2
              >def date-created-yy,date-created[5],2
              >def date-modified-mm,date-modified[1],2
              >def date-modified-dd,date-modified[3],2
              >def date-modified-yy,date-modified[5],2
              >ext call-nbr / serial-nbr
              >ext date-created-yy
              >ext date-created-mm
              >ext date-created-dd
              >ext date-modified-yy
              >ext date-modified-mm
              >ext date-modified-dd
              >out calls2,link
              >xeq

          You  now  have  a  file  with  the  dates in yymmdd order, but the
          self-describing information shows three separate fields.

              File: calls2     (SD Version B.00.00)  Has linefeeds
                 Entry:                     Offset
                    CALL-NBR             I2      1
                    CALL-TAKER           X20     5
                    CALL-CATEGORY        X2     25
                    STATUS-FLAG          X2     27
                    COMPANY-NAME         X60    29
                    SERIAL-NBR           X4     89
                    DATE-CREATED-YY      X2     93
                    DATE-CREATED-MM      X2     95
                    DATE-CREATED-DD      X2     97
                    DATE-MODIFIED-YY     X2     99
                    DATE-MODIFIED-MM     X2    101
                    DATE-MODIFIED-DD     X2    103
              Entry Length: 104  Blocking: 1

          You can convert these several fields to  one  field  with  another
          extract task:

              >in calls2
              >def date-created,93,6,byte
              >def date-modified,99,6,byte
              >item date-created,date,yymmdd
              >item date-modified,date,yymmdd
              >ext call-nbr / serial-nbr
              >ext date-created
              >ext date-modified
              >out calls3,link
              >xeq
              IN=19716, OUT=19716.  CPU-Sec=5.  Wall-Sec=9.

          You now end up with a file that looks like this:

              File: calls3     (SD Version B.00.00)  Has linefeeds
                 Entry:                     Offset
                    CALL-NBR             I2      1
                    CALL-TAKER           X20     5
                    CALL-CATEGORY        X2     25
                    STATUS-FLAG          X2     27
                    COMPANY-NAME         X60    29
                    SERIAL-NBR           X4     89
                    DATE-CREATED         X6     93      <>
                    DATE-MODIFIED        X6     99      <>
              Entry Length: 104  Blocking: 1

          You then add the century to these fields as described above.


   Bugs Fixed


          Allbase.  The  following  problems  in  Allbase  access  have been
          fixed:

          1. Suprtool now properly sets Char fields to spaces if  the  value
             in the Allbase column is null.

          2. Suprtool now correctly reports the length of VarChar columns.

          Bus Error.  Suprtool no longer fails with a bus error when IEEE-64
          fields in an Oracle table are not 64-bit aligned.

          Extract Command.  An obscure error  message  was  printed  when  a
          conversion  or  arithmetic expression overflowed the target field.
          For example, assume that sales-qty has values  greater  than  100:
          the following commands will result in overflow:

                >get    d-sales
                >define small-field,1,2,display
                >extract  small-field = sales-qty
                >output   somefile
                >xeq

               Error:  Overflow of arithmetic expression

               Input record number: 0

          Extract  Command.  Suprtool  no longer stops with a fatal internal
          error when an arithmetic expression is specified with the  Extract
          command.

          Export  Command.  STExport  no longer puts a trailing comma on the
          Heading line.

          STExport no longer truncates large numbers when they are formatted
          with decimal places and signs.

          If  Command.  The  If  command  produced  an  error  if  you  were
          comparing two packed-decimal fields with  a  different  number  of
          decimal places.

          List  Record.  The List command would lock up your keyboard.  This
          no longer happens,  but  a  subsequent  press  of  Return  at  the
          Suprtool  prompt  may  not  be  recognized  if  you  are  using  a
          Reflection terminal emulator.  You can get control back by doing a
          Soft  Reset, (Alt-S), and you can prevent this problem by changing
          the Reflection setting of DISABLE-COMP-CODES to yes.

          STExport.  The Default option of the Floating command was  spelled
          incorrectly.

          When  converting  Double Integer fields to ASCII, spaces were left
          at the end of the record.

          If the input source had compound  date  fields,  the  Xeq  command
          would  produce  an error message about an invalid date type rather
          than just processing the date field correctly.

          SQL Access.  Suprtool would fail with strange errors if the  input
          source  was  a large SQL table.  This would occur with both Oracle
          and Allbase tables.
          Table Command.  The Table command now prints a  warning  when  the
          fieldname specified does not exist in the file.

          Verify  Command.  The  Verify All command no longer prints the SQL
          information twice.

          Verify Command.  The Verify command without parameters now  prints
          out Select command information.