PRODUCT:  R:BASE             VERSION :  4.0
     R:BASE 4.0 provides a host of new features (all features are also 
     included in the 16-bit version of R:BASE 3.1D). In addition to the 
     features highlighted in this issue of the Exchange, you'll want to 
     review the Guide to Software Installation and New Features, where all 
     the new features are discussed. 
     Increased Number of Tables and Columns
     R:BASE 4.0 now lets you go beyond the 80-table, 800-column limit. 
     Before connecting to a database, SET EXTENDED ON. The EXTENDED setting 
     tells R:BASE that you want more than 80 tables or 800 columns and also 
     sets a database mode. All users who connect to the database must also 
     have EXTENDED set ON or they'll get the message "Unable to connect data-
     Only users who are running R:BASE 4.0 or R:BASE 3.1D can concurrently 
     access a database that is open in extended mode. Once that database is 
     disconnected, it will revert to being compatible with earlier versions 
     of R:BASE unless you have gone beyond the 80/800 limits. Once you have 
     created more than 80 tables or 800 columns in a database, only R:BASE 
     4.0 and R:BASE 3.1D can connect to that database and must have EXTENDED 
     set to ON to do so. Earlier versions of R:BASE  (2.11, 3.1, 3.1A, 3.1B, 
     and 3.1C) will no longer be able to access the database at all. 
     SET EXTENDED ON automatically sets COMPATIBILITY OFF. Setting EXTENDED 
     OFF does not set COMPATIBILITY back ON. You must explicitly set COMPAT-
     IBILITY ON. Compatibility is another data-base mode that requires all 
     users who concurrently connect to a particular database to be in the 
     same mode. COMPATIBILITY tells R:BASE that you want to share this data-
     base with 2.11 (R:BASE for DOS).
     The EXTENDED setting also provides access to row locking. You do not 
     need to add additional tables or columns to use rowlocking, but you 
     must set EXTENDED ON. The above restrictions on concurrent usage will 
     apply even if you don't exceed the 80-table, 800-column limits. 
     Modify Large Tables through the Menus
     Info Create/modify (RBDEFINE) is no longer limited to 80 columns per 
     table. Even though R:BASE would allow you to create tables of up to 400 
     columns, you had to use R> commands to create and modify tables with 
     more than 80 columns. In R:BASE 4.0, menu-driven table creation and 
     modification can now handle up to 400 columns per table. 
     Count Tables and Columns
     The LIST command in R:BASE 4.0 now displays the total number of tables 
     and columns in a database. The numbers display at the top of the table 
     list and include numbers for these hidden R:BASE system tables:
     syscomp -  (6 columns; holds expressions used in computed columns)
     syspass -  (7 columns; used for the SQL password security system)
     You'll have these hidden tables only if you are using the features 
     The new LIST command capability lets you see at a glance whether you 
     are approaching the 800-column/80-table limit. If you are, you'll want 
     to consider using the new EXTENDED setting to go beyond these limits. 
     Expanded Use of Wildcards
     The LIST COLUMN command now allows use of wildcards when listing 
     columns to see only certain columns. For example, 
        LIST COLUMN cust%
     lists columns beginning with the letters "cust" only.
        LIST COLUMN %id% 
     lists columns containing the letters "id" only.
     The wildcards used must correspond to the current settings for your 
     SINGLE and MANY characters. Note that if your column name contains a 
     character that matches a wildcard character R:BASE will consider it as 
     a wildcard.  For example, with the default SINGLE and MANY settings of 
     _ and %, LIST COLUMN cust_% will list columns beginning with "cust", 
     not columns beginning with "cust_".  The underscore is assumed to be a 
     wildcard character, not part of the column name.
     The SHOW VARIABLE and CLEAR VARIABLE commands also support wildcards 
     for displaying and clearing variables. For example, 
        SHOW VAR vcust%
     displays only those variables beginning with the letters "vcust".
        SHOW VAR var_ 
     displays only those variables whose name is four characters long and 
     begins with "var" (var1, var2 etc.).
        SHOW VAR  v_custname
     displays those variables starting with "v", anything for the second  
     letter and ending with "custname". It does not show the individual 
     variable "v_cust-name", the underscore is assumed to be a wildcard, 
     not part of the variable name. To show the value of the variable 
     "v_custname" only, set the SINGLE character to ?, or use the WRITE 
     CLEAR VARIABLE uses wild cards in the same way as SHOW VARIABLE and 
     For example, 
        CLEAR VAR v____cust 
     clears all nine character variables that start with the letter "v" and 
     end with the letters "cust" no matter what characters are in between. 
        CLEAR VAR v_c% 
     clears all variables that begin with "v", have anything for the second 
     character, a "c" for the third character and end with anything. It does 
     not clear just variables that begin with "v_c", the underscore is 
     assumed to be a wildcard character, not part of the variable name. 
        CLEAR ALL VAR EXCEPT vcust% 
     clears all variables except those that start with the letters "vcust".
     Center Menus Automatically
     The CHOOSE command now includes a keyword that allows you to easily 
     center a menu on the screen. You can replace either the row and/or 
     column number in the AT clause with the word CENTER. If you replace 
     both the row number and the column number with CENTER, the menu is 
     centered in the middle of the screen. If you replace only one, the 
     menu is centered horizontally with respect to the specified row or 
     vertically with respect to the specified column. 
     The following centers the menu horizontally on row 10:
        CHOOSE vcustomer FROM #VALUES FOR company FROM customer AT 10,CENTER 
     This example centers the menu vertically with the left side of the menu 
     at column 10:
        CHOOSE vcustomer FROM #VALUES FOR company FROM customer +
         AT CENTER,10
     And this example centers the menu both vertically and horizontally:
        CHOOSE vcustomer FROM #VALUES FOR company FROM customer +
     Create a Dynamic Menu of File Names
     A new keyword, #LFILES, has been added to the CHOOSE command, which 
     lets you create a menu listing files from a specified directory. The 
     #LFILES keyword supports the use of wildcards and drive and directory 
     For example,
        CHOOSE vfilename FOR #LFILES IN *.DAT 
     builds a menu of all files in the current directory with the file 
     extension .DAT;
        CHOOSE vfilename FOR #LFILES IN f:\dbfiles\*.* 
     builds a menu of all files in the dbfiles directory on drive f:. 
     #LFILES uses the standard DOS convention for wild cards.
     The Layout Setting Now Works on Views
     Within R:BASE Browse/edit, the Layout menu option lets you change the 
     appearance of the screen by hiding columns, moving and resizing columns, 
     changing colors, and so forth. When LAYOUT is set ON, the changed format 
     is saved so that the next time you choose the table from the Info menu 
     it has your previously defined format. In previous versions of R:BASE, 
     saved layouts worked only on tables; in R:BASE 4.0, you can now save 
     defined layouts on views as well. In addition, you can now reset your 
     layout back to the original by pressing Shift-F5.
     Reports Now Support up to 84 Lines per Page
     The reports generator in R:BASE 4.0 now lets you define reports longer 
     than 66 lines - you can define up to 84 unique lines. Now you can easily 
     create reports to print on legal-sized paper or forms.  When the maximum 
     number of lines has been reached, Reports displays the word FULL in the 
     status bar. 
     Lookups Added to Views
     Lookup expressions in Reports and Forms are no longer limited to tables. 
     R:BASE 4.0 has extended the lookup capability to views. 
     Deletion Rules Now Definable
     R:BASE 4.0 now allows you to define a rule restricting deletion of rows 
     rather than addition of rows to a table. That is, you can define a 
     condition that must be met before a row can be deleted from a table. 
     This provides a further guarantee against having "orphan" rows in your 
     database. An orphan row is a row in a detail or dependent table for 
     which no master record exists.  For example, you might want to define a 
     rule on the customer table that won't allow you to delete a record if 
     outstanding invoices exist for that customer. 
     The "Delete" quick rule is like the "Verify a Value" rule. It says you 
     cannot delete a row as long as a matching row exists in the other table. 
     You can define custom delete rules for other conditions.  Global 
     deletions in forms work differently if you have delete rules defined. 
     Normally, global deletions in forms start by deleting the row from the 
     master table and then prompt for deleting the rows in the dependent 
     tables. If you have a delete rule that won't allow deleting a row from 
     the master table if dependent rows exist in a form, you need to delete 
     records from the dependent tables first. Then you can delete the record 
     from the master table without violating the delete rule.