Sie sind auf Seite 1von 76

I.

INTRODUCTION

New Features

The major changes between DataFlex 3.0 and 3.01 are documented in
their own chapters in this update. Together with the manuals for
Revision 3.0, this update constitutes the documentation for DataFlex
3.01. Following is a summary of the changes:

• File maintenance functions have been moved from the File


Definition Utility (DFFILE) to their own File Maintenance
Utility, (DFMAINT). You may run the new utility from the
command line, or you may chain to it from File Definition,
where Maintenance remains as a single choice on the action
bar.

• An optional facility for the repair of corrupted headers in


database files has been introduced. It is applied to database
files on creation and may be activated for pre-existing files or
de-activated through File Definition.

• A critical error handler has been introduced for DOS versions


to allow user interaction with operating system errors.

• Character translation has been added to the Configuration


Utility. This allows you to alter the mapping of characters to
keys on your keyboard, and to change their characterizations
as letters, numbers, or punctuation. Using the Configuration
Utility, you may also provide translations or replacements for
the message displayed when DataFlex cannot find the correct
error text.

• The number of error messages allowed has been increased and


the error message maintenance program has been changed.

• Sequential I/O has been enhanced to allow the pagecount,


pageend, and pagefeed predefined variables to carry a
separate value for each channel they are set in, and to send
output to the nul: device on direct_output failures.
• The index_def command has received an additional, optional
argument to indicate the ordering and case sensitivity
attributes of each field of the referenced index.

• The maximum number of objects allowed in a single program


has been increased from 512 to 4,096. The number of user-
created messages in objects has been increased to 3,072, and
the number of property messages has been increased to 2,048
each for set and get.

• The following changes have been made to the UIMS:

Support for the sort_items procedure has been


added in the array class.

A new refresh message is used instead of the


clear, clear_set, clear_all, display, and
entry_display messages employed in 3.0.

The broadcast and broadcast_focus commands


have a new optional parameter, no_stop. This makes
a broadcast continue even if an object returns a non-
zero value.

A data_set no longer sends rebuild_constraints


during the object creation/initialization phase. It now
waits until some other data_set or DEO requires this
data_set to become active.

Two new messages, clear_main_file and


request_clear_file, have been added to the
data_set class. They are used to force a manually
related file to be cleared when the main file is being
cleared.

The text_window class understands the


update_dependent_items message as a null
procedure.

In virtual selection_lists, only the incremental


search-mode is fully supported.

2 DataFlex Update from Revision 3.0


The behavior of "add-mode" (adding new records) in
tables has been changed and the message protocol for
entering and exiting add-mode has been rewritten to
allow its behavior to be more easily controlled and
modified. A new property auto_regenerate_state
controls whether or not the display is regenerated
when exiting add-mode after the object’s display has
become unsorted. There have been many changes in
the data_list and table classes, mostly to support
this new behavior.

In entry, the function superfind_field was


added. The refresh message was also added to the
entry class and all subclasses.

Several changes and deletions were made to macro


support commands.

A new message, end_construct_object, was added


to the object class. It was also augmented in
data_set, entry_client, entry_form,
selection_list, text_window and wide_list.

In ui_object, the following messages now return a


value (but are still procedures): add_focus,
activate, release_focus, deactivate, and
process_key.

In action_bar_menu, the property


auto_pull_down_state has been added, and the
message key has been augmented.

In pull_down_menu, the messages pull_left,


pull_right and pull_menu have been augmented.

There are additions to the documentation for


Procedures and item_matching.

In order to be more CUA compliant, the default key


used for "add-mode" (kadd_mode) has been changed
from a+8 to s+0, and the keys used in the
trace object in the Atracer package have been changed
from s+0 and c+0 to a+3 and c+3
respectively.
• Source code and Compiler revision checking is now available.

Problems Fixed

A list of problems in earlier revisions, and now fixed, appears in a text


file on your distribution disk. In addition to those, the following area
has been addressed:

• A problem sometimes occurred in a multi-user environment


when one user was running a report which executed find gt
repeatedly, and another user modified a record key value in
the index used by the report and close to the value of the
record the report was on. This could cause duplicate or
skipped records in the report or even a lockup.

Essential Steps

If your programs use the UIMS (i.e. they include use ui), you must
recompile them with the new compiler and packages.

If you wish to use the database file header integrity checking facility
on any pre-existing database file, you must explicitly activate it in File
Definition, View, Parameters (one time only). The header integrity
checking feature is on by default for every database file created in
DataFlex 3.01, but it may be turned off explicitly in the same part of
File Definition. A .HDR ASCII file definition file will be created in the
same directory as the .DAT file for each such database file, and you
must not delete or edit it.

4 DataFlex Update from Revision 3.0


II. REVISION COMPATIBILITY
A new feature introduced in revision 3.01 is the ability of the runtime
and compiler to check compatibility between DataFlex data files,
source code, and compiled program files.

The runtime maintains separate values to determine both backward


and forward compatibility and if a valid error is generated due to an
incompatibility, the error is fatal.

The new compatibility checking is intended as a safeguard, not a time


saver, and it is strongly recommended that programs be compiled and
run under the same revision of DataFlex.

How It Works

Subsystems

Each subsystem in DataFlex has a unique value that identifies its


revision (not to be confused with a DataFlex revision). The subsystem
revision number determines whether executables and .FLX files are
compatible.

A subsystem is only checked when it is first used. Thus, even if a


runtime was incompatible with the UI subsystem of a particular .FLX,
if that .FLX didn’t use the UIMS, no error would be generated.

The subsystems in use currently are General Flex, UI and Data_Set.


More subsystems may be added in the future, and provisions for
doing so are already in place. There is currently no way for a
developer to obtain the subsystem information, but this will be
provided in a file shipped with the product. The current subsystem
values are shown below:

Revision Compatibility 5
Subsystem Subsystem# Version#

General Flex 0 1
UI 1 1
Data_Set 2 1

#CHKSUB

Not everything can be automatically checked by the compatibility


system. For example, the compiler might find old package source due
to an incorrect DFPATH. If you compile outdated code with a new
compiler, it will run with a new runtime even if the code itself is
obsolete. To help guard against this, there is a new compiler directive
you can use called #CHKSUB. The format of the directive is:

#CHKSUB Subsystem# Version#

If a #CHKSUB directive is encountered, the compiler verifies that the


version# is the same as the compiler’s own version for the specified
subsystem. If not, an error is generated, but compilation continues.

Data Files

Data files contain the DataFlex revision number under which they
were created, or to which they were updated with File Definition. A
runtime will only open data files from a revision that it knows about.
Trying to open data files containing any other revision number will
generate a fatal error.

Precompiled Headers and Packages

FMAC, packages, precompiled source, and the program itself must all
be in sync with the compiler. The #CHKSUB compiler directive works
toward this. In addition, any precompiled header or package compiled
with another revision of the compiler will be recompiled (even one
that came from a compatible revision). Compatibility information only
reflects the internals of the runtime, not the state of FMAC or of the
packages. Limiting the use of precompiled code to only the current
compiler helps to ensure that all code is valid.

6 DataFlex Update from Revision 3.0


III. HEADER INTEGRITY CHECKING
The DataFlex File Maintenance Utility now allows you to repair
corrupted data file headers. If you have enabled header integrity
checking, an .HDR file is automatically created and maintained (in the
same directory as the data file). The following paragraphs are taken
from the Utilities section of the new DataFlex 3.0 User’s Guide.

Use and Repair of Corrupted Files

Header Corruption

Usually because of hardware problems, a data file’s header may


become corrupted. Provided you have turned on "Header Integrity
Checking" in the file’s parameters, the DataFlex runtime and utilities
will not allow use of a corrupted file and you may use File
Maintenance to rebuild the header in all but the most obscure cases.
See File, New, Parameters and Maintenance, Database,
Repair below.

Data Corruption

Data may also become corrupted for various reasons, and File
Maintenance can usually detect this (during a reindex). You can
specify whether File Maintenance fixes bad data or writes it to a file.

Header Integrity Checking 7


File

New

Parameters

Header Integrity Checking. The DataFlex runtime and utilities will not
allow access to the data file if it has a corrupted header. However, if
header integrity checking is turned on, each time the data file is saved,
information is written to an .HDR file (in the same directory as the
.DAT file) which will enable header repair if it becomes necessary. If
header integrity checking is turned off, no .HDR file is written and
header repair will not be possible.

For new files, the default for header integrity checking is on (an X in
the check box) so if you want it turned off, clear the check box. For
existing files, header integrity checking is off until you turn it on.

Maintenance

Database

Repair. If the header of the file becomes corrupted, users will see an
error message and will not be able to access the file. Provided header
integrity checking is enabled in a data file’s parameters, and provided
the .HDR file in the same directory as the data file has not been edited
or deleted, you may use the Repair option on the Database pull-
down menu (located in the Filelist menu) to repair the header.

Selecting Filelist from the Maintenance menu causes the display


of the User Names of the files in your current FILELIST.CFG. You may
mark one or more files to be repaired (click on them or move the
cursor to them and press g), and choose Repair to commence
repair. Where possible, each file is repaired. If a file needs no repair,
you will see a message to that effect. If an .HDR file cannot be found,
or if header integrity checking is not enabled for a file, you will see a
message to that effect, and nothing is done to that file.

8 DataFlex Update from Revision 3.0


When you elect to repair a data file, its header is subjected to two
separate CRCs (Cyclic Redundancy Checks), and the results are
compared with CRC numbers maintained in the header. If one or both
checks fail, the repair process is started.

Header Integrity Checking 9


10 DataFlex Update from Revision 3.0
IV. ADDITIONS TO CONFIGURATION
UTILITY
Three new facilities have been introduced with DataFlex 3.01 that are
supported in the Configuration Utility: Character Translation, the
Critical Error Handler, and Default Error Text. All appear under the
Miscellaneous choice on the main action bar.

Character Translation

Warning: Character translations affect the most central workings of


the DataFlex runtime. Do not make changes to character translations,
particularly those below ASCII 80h, under circumstances where
important work could be disrupted until you have acquired a very
clear understanding of the Character Translation function, which
character translations you need, and why. Since character translations
can disable the entire runtime, you should at all times retain a
backup version of your configuration file that you know works so as
to be able to reinstall it to get the runtime working again if you
encounter difficulties. If you do not do this, your only choice then
will be to erase your configuration file and redefine the whole thing
from the start.

Do not use this feature unless you know you have a serious need to
do so.

Character translation has been added to the Configuration Utility


under the Miscellaneous choice on the main action bar.

Character translation establishes the relationships between the upper-


and lowercase versions of each letter, characterizes certain characters
as numbers, punctuation, unprintable, or as delimiters of words.
Invalid combinations of attributes (e.g., the upper case of 5 is z) are
highly possible, but are not trapped by Configuration. Character
Translation is completely unregulated so as to accommodate the
widest possible range of existing and future keyboards and character
sets. This puts the responsibility on the user to make sure any

Additions to Configuration Utility 11


translations used are implemented correctly, as indicated in the
warning above.

The Character Translation dialog box is illustrated below for DOS


Code Page 437, the one used in development of DataFlex. If you are
using a different code page, some or even all of the characters on the
left (particularly the Extended ASCII) are likely to look different on
your screen. Consult the documentation for your operating system and
its code pages to determine how to change your code pages if you
wish to do so.

The character being addressed at each particular moment is


highlighted in the character display on the left and its number in
hexadecimal is shown in the Current Char at the top of the window
section on the right. Moving the highlight with the accelerator keys
shown on the right, or entering a new number into the Current
Char window, will change the character being addressed and also
either move the highlight or change the display in Current Char,
whichever was not done by the user. The highlight can be moved by
the accelerator keys only when the selection cursor is in the Current
Char window.

If a change has been made, but not OKed, a prompt will query
whether the user wishes to abandon the change made. OKed changes

12 DataFlex Update from Revision 3.0


will be retained for use in the next save of the configuration file.
Changes to each character must be OKed before you can proceed to
the next character you wish to change.

The Maps To window displays the hexadecimal value by which


DataFlex represents the character internally. You may change this
value by entering the desired hexadecimal value or by using the
mouse to place the cursor on the desired character and clicking it. You
can use the mouse to point to the desired character in the list to the
left to make an entry to any window on the right that calls for a
character.

The Key Sequence window identifies the key or keys on your


keyboard which are to be used to produce this character. You cannot
make entries to this window.

Lowercases To identifies the character to which the current character


is changed by lowercasing functions of DataFlex. Uppercases To
identified the character to which the current character is changed by
uppercasing functions of DataFlex. Where the character is not
uppercase or lowercase (is not alphabetic), these windows should
contain the same value as the Current Char window.

On the left side below the aforementioned windows is a Boolean


window, Alphabetic. In this window, the current character is
characterized as being alphabetic or non-aplhabetic (digits or
punctuation). Below this are two Boolean (yes/no) windows,
Lowercase and Uppercase. These should be marked consistently
with usage of the two windows discussed immediately above. The
program will not enforce such consistency.

To the right of these windows, are three more windows in which


display and parsing treatments are specified for the current character.
Printable signifies that the character can be dislayed visually on
monitors, printers, and output devices generally. Punctuation
signifies that the character is used as punctuation in text. White
Space indicates that the character (typically space, tab, linefeed,
formfeed) divides surrounding characters into separate words.

Below these six windows is another column of three in which


eligibility of the character to be part of, or begin, various terms in
DataFlex programs is specified. Allowed in a variable name

Additions to Configuration Utility 13


indicates that the character may be one of those making up the name
of any kind of symbol (imagename, filename, fieldname, variable,
windowname or constant) in DataFlex programs. Allowed in a
file/field name qualifies the character to be part of the name of a
DataFlex file.field name. Allowed as the first character means
the character may be the first character in a symbol.

After you have revised the settings for a character, you must press the
<F2=OK> button to accept the new settings before going on to another
character or returning to the main program. If you attempt to move to
another character after having entered changes to a character, you will
receive a prompt asking whether you wish to save or abandon the
changes you have made to the current character. If, on the other hand,
you press q, your work in progress on the current character will be
abandoned with no warning or report.

The DOS Critical Error Handler

DOS critical errors are those in which the operating system reports to
the screen describing the error and then offering choices such as
(A)bort, (R)etry, (F)ail. Earlier revisions of DataFlex did not trap the
screen reports to maintain the screen display of the application, nor
did it support responses allowing the application to recover and
continue running.

For DOS versions of DataFlex only, user responses to these error


reports can be controlled, as well as system responses to the user
responses. Also, the reports themselves can be controlled to the extent
of their format and content. Their content can even be translated to
natural languages other than that in which they are supplied (typically
English). All the features of this function are supported through the
DataFlex Configuration Utility.

At the configurer’s option, users may be allowed any or all of the


responses offered by the operating sytem (abort, retry, and/or fail),
and the function may in fact be programmed to provide a specified
automatic response a specified number of times at a specified time
interval, followed by one further specified (terminating) response.

14 DataFlex Update from Revision 3.0


Available Responses and Their Effects

The three responses available in the critical error handler have varying
effects on the DataFlex program that was running at the time of the
error.

A successful Retry merely continues execution of the program as


though there had been no error. Unsuccessful Retries merely cycle
back to a repetition of the original error.

An Abort operates the same as execution of the DataFlex abort


command would. Execution of the program ends and returns to the
other DataFlex program (such as a menu), if any, that called the
program that was running.

Depending on the particular error, a Fail response usually continues


execution of the running DataFlex program, but with one or more
DataFlex errors being generated. If an error does occur, the number of
the operating system error will be placed in Predefined Integer
last_crit_err and the extended error code will be placed in
ext_crit_err. Operating system documentation identifies these
numbers to the particular error being reported, and DataFlex execution
in the calling program can be made conditional on the values in these
variables.

If ultimately no error occurs, last_crit_err and ext_crit_err


will not be updated. Where a direct_input command, for example,
addresses a diskette drive with no diskette in it, a Fail will permit
program execution to resume with no error report, since a Fail
essentially cancels the attempt to access the empty drive. Subsequent
read commands, however, will read from the nul: device without
any error report unless their action is made subject to the state of
Predefined Indicator seqeof.

Additions to Configuration Utility 15


Critical Error Text Translation

Critical error text translation functions are reached from the


Miscellaneous choice from the main action bar of Configuration.
The syntax of an error report through the critical error handler is:

Error on drive|device name: diagnostic option(s)

Except for name, which is supplied by the operating system, each


element in the report can be replaced with translated terminology
(including none at all) as follows:

The phrases Error on, drive, and device can each be substituted by static
words and phrases of your own by entering the desired strings into
the windows in the Shows as column.

The option(s) are, in English, Abort, Retry, and Fail. Your own
preferred strings may be entered for each of these options in the
Shows as column, together with the lists of characters eligible for use
by users as responses (as single characters) in the Keys column. For
example, for Retry, the initial letter (R) would typically listed as
eligible. Where Retry is replaced with a different string, the initial or
other mnemonic character from the replacement string would
presumably be preferable.

Diagnostic is the explanatory text of the operating system error report.


These are displayed under the a+1 key sequence. You may enter
your desired translation for any or all of these.

16 DataFlex Update from Revision 3.0


Critical Error Handling

Critical error handling functions are reached from the


Miscellaneous choice from the main action bar of Configuration.

The options available to users can be restricted through the list shown
on the first line of the Critical Error Handling dialog box. Any or all of
Abort, Retry, or Fail can be enabled for users. If you wish the error
report to display with no response allowed, deselect the Allow user
response check box. Where the operating system itself suppresses
one of the options, however, display and access to the option will
likewise be suppressed in the critical error handler. These govern both
the display of the option and the reaction to user keystrokes.
Regardless of which responses are enabled for users, error reports are
still made (see below), and the system can still make automatic
responses.

A repeating automatic response can be configured on the next line of


the dialog box, along with the number of seconds to wait before
generating the automatic response. If users are enabled to enter their
own responses, any entry made before the time an automatic response
is generated will prevail. An entry of zero seconds will suppress all
display and deliver the automatic response you select.

If the automatic response is Retry, a terminating automatic response


can be configured on the next line of the dialog box after the number
of retries indicated in the window on that line of the dialog box. If the
number of retries entered here is zero, no terminating automatic
response will ever be triggered. The repeating automatic response (if
any) will continue indefinitely until either it succeeds or the user
enters a terminating response. As with the repeating automatic
response, the terminating automatic response can be overridden by
user input provided the user input occurs first.

To set critical error behavior to an exact match of that in DataFlex 3.0


(not the default values supplied with the current revision of DataFlex),

Additions to Configuration Utility 17


deselect the Allow user response checkbox, choose automatic
response after zero seconds, and select Fail as the automatic response.

Default Error Text

Certain conditions can prevent the DataFlex error reporting system


(see page 21) from functioning properly. A set of three messages has
been provided to report the nature of the problem. A facility for
modification of the error report for each of the three situations is
provided in the Configuration Utility. These reports occur only for
errors whose text is not provided within the error command line,
causing a search for error text in a database file. Each of these reports
is followed by the number of the error generated (normally taken from
the error command, except for errors in the utilities and those
embedded in the runtime). The DataFlex Error Utility is described in
another section of this chapter.

No error text: Can’t open filename is provided to cover the


situation in which the runtime cannot locate the database file
containing a definition for the error generated. A missing
DFERR???.DAT file can be the problem, or a bad value in the DFPATH
environment variable. The name of the specific file sought is shown in
filename.

No error text available This report indicates that an error text


file contains a record for the error generated, but that the error is not
defined.

Error number out of range This report occurs when your


program generates an error with a number outside the range available
for use for (programmer) user errors.

18 DataFlex Update from Revision 3.0


V. FILE MAINTENANCE UTILITY
It is recognized that DataFlex developers need a means of maintaining
their customers’ files in the field, and the functions for doing so have
been moved from the File Definition Utility to the new File
Maintenance Utility. The functions moved are those with which you
can convert, delete, erase, recompress, repair, reindex and cleanup
files; together with the filelist maintenance functions.

You may run File Maintenance direct from the command line, or you
may chain to it from File Definition. If you want to start File
Maintenance alone, without accessing it through File Definition, you
may enter one of the following commands:

DFMAINT Starts the File Maintenance Utility

DFMAINT -c xxx Converts the file with the number xxx in the
current filelist from 2.3b format to 3.0
format.

DFMAINT -c -a Converts all files in the current filelist


from 2.3b format to 3.0 format.

-i The addition of this parameter causes the conversion to


be "in place" - otherwise a temporary file is used.

Converting Files to 3.0 format

If you make any changes to the structure of files using File Definition,
those files will automatically be restructured and converted to 3.0
format when you exit the utility. You can also convert files to 3.0
format without making any changes. To do so, select Maintenance
from the File Definition menu bar, and Maintenance again from the
pull-down. From the action bar of the chained-to File Maintenance
Utility, select Maintenance, then Filelist. Tag the file(s) you want
to convert by moving the cursor to them and pressing g, then
select Database from the action bar (a+D), then Convert. Answer

File Maintenance Utility 19


the question about a temporary file or restructure in place, and press
2 or the OK button to start the process.

A log file will be written with the name dfmaint.log. This file will
contain information concerning the conversion process. If you press
q while conversion is in progress, the conversion of the current file
will abort, and the conversion of the next file (if any) will begin. An
entry in the log file will record this fact.

Other Functions Moved

Previously, File Definition contained three choices on the


Maintenance pull-down: Filelist, Reindex and Cleanup. The
Filelist choice placed you into the filelist editor, whose subsidiary
action bar contained the choices Filelist, Database nad Help.
Database contained the choices Delete, Erase, Recompress,
Tag Bad Entries and, more recently, Repair. All these functions
have been moved to File Maintenance, which you can access directly
from the command line with DFMAINT, or via the Maintenance pull-
down in File Definition.

See the chapter "Header Integrity Checking" in this update guide for
details of file repair, and the File Definition chapter in the User’s Guide
for details of the other functions mentioned.

20 DataFlex Update from Revision 3.0


VI. ERROR UTILITY
The Error Utility (FLEXERRS.FLX) has been changed to accommodate
the new error file structure. This now contains several error files,
instead of the single file FLEXERRS.DAT as previously. You may edit
the descriptions and notes fields of any records in any of the files, but
you cannot delete the first 100 records in FLEXERRS.DAT, nor can you
add or delete any records in the other files.

Error Message Maintenance

DataFlex is supplied with several database files of error messages to


provide a consistent core of messages for situations potentially
common to all DataFlex programs. These files are named as follows:

Name Error Types of Error


Numbers

FLEXERRS.DAT 1-4095 User Errors

DFERR001.DAT 4097-8191 System Errors

DFERR002.DAT 8193-12287 Utility Errors

DFERR003.DAT 12289-16383 Reserved

DFERR004.DAT 16385-20469 Reserved

DFERR005.DAT 20471-24575 Reserved

DFERR006.DAT 24577-28671 Reserved

DFERR007.DAT 28673-32767 Reserved

With the Error Utility (FLEXERRS.FLX), you can modify the message
descriptions in the databases and add new messages of your own in
FLEXERRS.DAT. These facilities are provided for the consistent
interpretation of errors from utilities, the runtime, and error
commands in your programs that do not have their own message text.
When errors occur in the use of the DataFlex error system, default

Error Utility 21
error messages are reported. The texts of these messages can be
modified through a facility provided in the Configuration Utility.

The error numbers already defined in FLEXERRS.DAT are reserved for


use by the DataFlex runtime. These errors (or statuses, since not every
situation represents an actual error on anyone’s part) are generated by
the runtime; may not be deleted, and should not be materially changed
in meaning. Many of these errors cannot be trapped with the on
error command. The Error Utility provides control over these
messages for two main purposes: to allow for their translation into
languages other than English, and to allow for handling conditions
specific to the site at which DataFlex is being used.

A prime example of this second situation concerns Error 16, which


reports the entry of ineligible data to a Date type window. When a
date format has been chosen for the site in the Configuration Utility,
the text for Error 16 should be modified to reflect the chosen format.
For example, if the USA date format was chosen, the text of Error 16
might be extended to read, Please enter a valid date
(mm/dd/yy). If the site used the Military date format, and always
used four-digit years, the text might be changed to read Please
enter a valid date (yyyy.mm.dd).

You can add new error numbers to FLEXERRS.DAT using the Error
Utility, but new numbers may only be added incrementally to those
that already exist. That is, you may not add any number to the file
other than the one which ordinally follows the highest number already
in the file.

Such user-added errors can be triggered only by the error command


as described in the explanation of the error command in the
"Features of the DataFlex Language" chapter of the User’s Guide, in the
section entitled "Controlling the Sequence of Command Execution".
Errors in the reserved range can also be triggered the same way, if you
desire. Bear in mind that all programs using a particular error message
file will display the text from the database for the error number in
question.

In the event an error is triggered in an application, and the file which


contains that error number cannot be found, or if the record containing
it contains no text, the user will see an appropriate warning. Bear in

22 DataFlex Update from Revision 3.0


mind, however, that although the warning will contain the error
number (status), it may not make too much sense to the user.

To run the Error Utility, enter DFRUN FLEXERRS from the command
line. You will see a simple data entry screen, with an action bar
containing the standard File, Record and Help pull-downs. The
File pull-down has choices for each of the error message files in use
(at the time of writing these are User Errors, System Errors and
Utility Errors) together with Exit. You may pick whichever error
message file you want to edit from this list. Provided the file you pick
can be found, a table of errors and notes will be displayed. In the case
of FLEXERRS.DAT, the Error Number is the record number
(recnum), and in the other files it is the record number plus an
appropriate offset. Error Description is an ASCII field of 40
characters, and Notes is an ASCII field of 24 characters.

When the cursor is in a Description or Notes field, you may zoom to


that record by pressing a+9, and you may edit the record either in
the zoom form or in the table.

You may find and save records in all the files in the normal way, and
you may delete records in FLEXERRS.DAT in the normal way, except
that you may not delete the first 100 records. For safety, if you want to
delete a record or save an edited record, you must first answer a
confirmation message. If you receive error messages about trying to
create or delete in a protected file, you are either trying to delete
records which must not be deleted, or you are in an area where you
do not have appropriate rights.

Be sure not to change the file length or field structure or to restructure


the data files in any other way, or the error messaging process may
not work properly.

Error Utility 23
24 DataFlex Update from Revision 3.0
VII. SEQUENTIAL I/O

Nul: Input/Output Device

If a direct_output command fails (is executed for a value not


allowed as a file name, or to a drive is non-existent, is full, that
contains a write-protected diskette, no diskette, or whose door is not
closed, or if the user does not have open or create rights in the
directory in question), no error is declared, and Predefined Indicator
seqeof is set true. This is as in previous revisions. New with this
revision is that, if a write or writeln command is then executed, the
output device is set to the nul: device, a device new with this
revision that discards the output, and Status 32 Can’t open output
file is reported. Subsequent writes will proceed to the nul: output
device without further error report. Writes do not trigger error reports
when the output device is set to nul: explicitly (through a
direct_output "nul:" or append_output "nul:" command).

If nul: is addressed by a direct_input command, seqeof is not


set true, but it is set true after the first read, readln, or
read_block command, and no error is reported.

Output Control Variables Channelized

The pagecount, pageend and pagefeed predefined variables now


carry a separate value for each channel they are set in. This feature is
the same as a feature of the linecount predefined variable
introduced in DataFlex 3.0.

Sequential I/O 25
26 DataFlex Update from Revision 3.0
VIII. NEW COMMANDS

Index_def Command Extended

A new optional argument has been added to the end of the syntax for
index_def. As it does with the existing last two arguments,
index_def outputs to this argument, so it must be a variable, field or
window. It must be of Type String, and at least 16 bytes long.

The new argument contains up to sixteen digits, one for each field in
the index addressed by the index_def command, in the range 0
through 3, to represent the attributes of the field as included in the
index. The attributes of Index 1 are indicated in the first digit in the
value of the variable, Index 2 in the second, and so on.

A value of 3 means the field for the position in question is included


case-insensitively and descending, 2 means the field is included case-
insensitively, 1 means it is included descending, and 0 means neither
attribute is used.

string field_nums 16 field_attrs 16


integer num_segs
index_def vizonary index.2 to field_nums num_segs field_attrs
showln field_attrs

In this example, the definition of Index 2 of Database File vizonary is


output to Variables field_nums, num_segs, and field_attrs. If
field_attrs had a value of 00201, that would indicate that Index 2
was based on five fields, of which the first two were included with no
attributes, the third was included case-insensitively, the fourth with
none, and the fifth, descending.

Get, in Procedural Code

In the Encyclopedia, it is implied that Get is an exclusively UIMS


command, but Get can be used in procedural programs to call a user-
defined function, provided that a use ui command has first been
executed. The advantage of using get instead of gosub is that you

New Commands 27
may use local variables in the function. This example shows the use of
get in a procedural program:

use ui
number net gross
function add_tax returns number
local number tax
move (net *1.05) to tax
function_return tax
end_function
input "enter number " net
get add_tax to gross
showln gross

28 DataFlex Update from Revision 3.0


IX. UIMS ID CAPACITIES INCREASED
The number of objects and messages permitted within any single
program has been increased. The number of objects has been increased
from 512 to 4,096 and the number of user-created messages has been
increased to 3,072. Property messages (used only in class definitions)
each consume two messages, one for set and one for get, of this
limit, while the number of messages permitted at the desktop (global)
level is 32K (where K = 1,024). In non-virtual operating systems such
as DOS, memory limitations are likely to cause problems before the
limits on objects or any particular type of message are reached.

What Consumes ID Capacities

Every time you create an object, one object ID is consumed, whether


the object’s name matches that of another or not. Certain class
definitions (such as edit) create multiple objects, so in the case of
instances of such classes, each object created will create one or more
additional objects.

Message IDs, however, are consumed only when you create the first
object of a particular class, or when you explicitly define messages
whose name does not match that of a message that already exists.
When you create the second or later instance of a particular class, you
consume no more message IDs until the point at which you add your
own (uniquely-named) message(s) to the object. You can conserve
message ID capacity by giving your own messages the same names in
different objects.

When you create an object of a class of whose superclass you also


happen to have created an object, only those messages that did not
exist in the superclass count against the message ID capacities of the
UIMS — the other messages, including those augmented or replaced
— are already accounted for, and do not cause further consumption of
the message ID capacity.

Using predefined classes causes no consumption of message ID


capacity. Only using package classes causes consumption of message
ID capacity, and it consumes both the set and get property message

UIMS ID Capacities Increased 29


capacity and the user-created message capacity, as well as the global
capacity in some cases. The number of messages in package objects can
be discerned by inspecting the source code for the class in the .PKG
file.

The capacities are all consumed by object creation, rather than by the
actual sending (getting, setting) of messages at runtime. Messages that
are never explicitly used in the program do consume these capacities
just from use of package classes.

30 DataFlex Update from Revision 3.0


X. UIMS CHANGES

Sort_items Message Added to Array

A public procedure used in the list class has been added to those
available in the array class and its subclasses as well. The syntax and
functionality of the procedure is identical in the array class to those
of the message in the list class.

Sort_items should not be sent to an array-class object whose items


are of more than one data type. If it is, the order of the items may be
random, and no error will be reported.

Refresh Mechanism

When a find is performed by a data_set, other data_sets may be


required to perform a find or possibly a clear. As a result, we often
need to display items from some files at the same time as clearing
items from other files. The new refresh message (a protected
message) implements such a generalized view of displaying and
clearing and is used instead of the clear, clear_set,
clear_all, display, and entry_display messages employed in
3.0. In all cases, refresh will be sent instead of these messages in
response to a find, clear, clear_all, save, or delete. In
general, refresh is defined as a procedure with one argument, the
mode, which signifies the event or operation which generated this
refresh message, of which the definition is:

procedure refresh integer mode

The modes, numbered 1 through 5, are:

1 - mode_clear

This mode is used only for data-entry objects (DEOs) attached


to the data_set which was the "origin" of a clear operation,
i.e. the data_set which received the original clear request
or message as a result of the user pressing kclear. All other

UIMS Changes 31
data_sets send their DEOs the refresh message passing
mode_find_or_clear_set.

2 - mode_find_or_clear_set

This mode is used for DEOs attached to data_sets which


have found and/or cleared records in response to a user’s
find-request (kfind, kfind_next, ksuperfind, et al.) or in
response to another data_set’s find or clear.

3 - mode_clear_all

This mode is used for DEOs attached to any data_set which


participated in a clear_all operation.

4 - mode_delete

This mode is used for DEOs attached to any data_set which


performed a successful deletion. Data_sets that were merely
updated as the result of a deletion use
mode_find_or_clear_set.

5 - mode_save

This mode is used for DEOs attached to any data_set


involved in a successful save operation.

The action of refresh is equivalent to sending entry_clear 1


followed by entry_display 0 0 (i.e. refresh performs a simultaneous
clear and display operation).

The refresh message is implemented in the base class entry, and


also in the classes data_list and text_window. In some cases, the
actions of refresh depend on the (old) messages clear,
clear_set, clear_all, and display.

The refresh mechanism is used by the data_set class to ensure


that each DEO receives only one refresh message per data_set
operation (e.g. find, clear, save, delete, superfind),
regardless of the number of data_sets each DEO is attached to.

32 DataFlex Update from Revision 3.0


Broadcast and Broadcast_focus

A new optional keyword, no_stop, was added to both commands:

broadcast {recursive |recursive_up} {no_stop} [get |set |send]


message ...

broadcast_focus {recursive |recursive_up} {no_stop} [get |set |send]


message ...

In the UIMS Reference, in the "UIMS Commands" section, the following


paragraph has been inserted before the paragraph that starts "As an
alternative..." for both commands:

If the no_stop option is used, and the broadcast is using the get
syntax, the broadcast will continue even if an object returns a non-zero
value. With this option, the return value will be that of the last object
to receive the message. This is useful when a function or procedure
with a return value must be broadcast to all descendant or focus-
children objects (usually ignoring the return value).

Data_Sets

Data_sets no longer send rebuild_constraints during the object


creation or initialization phase (mark_as_component messages).
Instead, they wait until the data_set becomes "in-use" (i.e. until
another data_set or DEO requires this data_set to become active).

Setting the changed_state of a data_set no longer directly sets the


changed_state properties of the DEOs of the data_set.

In the data_set, entry_form, text_window, and table classes,


sends of request_superfind to a data_set require Predefined
Indicator err to be set to false beforehand, in case an error other
than "find past end of file" or "find prior to beginning of file" is
generated by the superfind.

A function can_delete has been added. It returns true if the


data_set has an active record and is not read-only or

UIMS Changes 33
no-delete, and it returns false otherwise. This function is used by
DEOs to determine if a delete of the current record is permitted.

If a save or delete operation is unsuccessful, no automatic redisplay is


performed afterward.

When a data_set first becomes in-use, either through the attachment


of a DEO or of another data_set, it attempts to latch on to the
records currently in the buffers, if any, provided that they satisfy the
constraints of the data_set. If the records in the buffers do not
satisfy the data_set’s constraints, the (offending) buffers are cleared
before the data_set becomes in-use.

Request_assign now causes the refresh message to be sent to all


DEOs for that data_set and its client and server data_sets as
appropriate. This is to ensure that all DEOs properly display the
record for the current record buffer.

Text_window

The text_window class understands the update_dependent_items


message as a null procedure. Text_windows cannot participate in the
dependent-items mechanism, so the message doesn’t need to do
anything, but since all DEOs send update_dependent_items upon
activation, the text_window class must understand it.

A procedure named refresh has been added to conform to DEO


display and clear protocols.

Selection_list

In virtual selection_lists, only the incremental search mode is


fully supported. First letter searching is partially supported in that
repeatedly pressing the same letter will find the same record each time
(i.e., it will not advance to the next item with the same first letter).
Capital letter searching is supported only within the currently
displayed list page.

34 DataFlex Update from Revision 3.0


DEO Classes

Update_dependent_items is sent as the last action of


attach_deo_to_server for all DEOs.

Delete is now guarded with the can_delete function of data_set.

Data_sets send refresh to DEOs instead of clear, clear_set,


clear_all, and display.

Data_list

The procedures insert_new_row and append_new_row have been


removed and the procedures display_row and empty_list have
been added. Display_row displays the contents of the record buffers
to the specified row, and its definition is:

procedure display_row integer row#

Empty_list deletes the data in the list and in the selected_items


array. It is used instead of delete_data by list initialization, and it
takes no arguments.

Two other procedures, auto_reorder_list and reorder_list


have also been added to permit automatic and manual re-ordering of
the contents of the data_list. Auto_reorder_list is intended to
be used as an ientry message on an indexed field, to cause the list to
reorder using that field whenever the cursor lands on that item.
Reorder_list is intended to be used externally (e.g. by an
accelerator key) to force the list to re-order based on the item number
passed (or on the current item if no item number was passed).

These changes will be inherited by subclasses selection_list and


table.

The properties just_reordered_state and reordering_state


have been added. The value of just_reordered_state is true if
the list changed its order as a result of the last item_change (item-
navigation) operation, otherwise it is false. The value of
reordering_state is true if the list is currently engaged in
changing its ordering, otherwise it is false.

UIMS Changes 35
The incremental search mechanism has been altered to permit
incremental searching on parent files of the main file of the list.

A first character search mechanism has been added for virtual lists,
with one exception: pressing the key for the same character repeatedly
does not advance to the next item with the same first character for
virtual lists (it does for non-virtual lists). This is a known limitation.

Capital letter search is not supported for virtual lists except within the
current display page.

New Features of Data_list Class

The following are new features of the data_list class (some of these
features were moved to this class from the Table class):

New Properties

Protected
advancing_state integer false true | false data_list

This property indicates that the object is in the middle of advancing


current_item. This usually indicates the user has pressed the
next_item or enter key. This property is used when
auto_save_state is true to determine if the object should continue
"add-mode" by adding a new (cleared) row when advancing past the
last item in a row after a new record is created. It is reset to false
after the current_item is reset or the focus moves off the object.

Public
auto_regenerate_state integer true true | false data_list

This property controls the behavior of the object when add-mode is


exited, or when the object is initialized as it takes the focus. With the
default setting (true), if the table has become unsorted (because new
records were added in no particular order), the table will automatically
regenerate the display for the object by sending the
find_top_record message, then sending the regenerate message.

36 DataFlex Update from Revision 3.0


These combination of these two messages causes the current row’s
record to become the first displayed row and fill the remaining rows
with the appropriate records (in their proper order, of course). If this
property is set to false, the table will not automatically regenerate
when the table is unsorted. In this case, the object may display the
same record more than once. However, this does not indicate the
database is corrupt; only the display is incorrect.

Public
no_create_state integer true true | false data_list

This property controls whether or not this object can create records. If
true, any attempt to initiate a clear operation or save operation on
a new record will be ignored. However, clear and save operations
in other objects that result in a clear or save in this object’s server
will not be inhibited. As an example, selection_list objects
typically set this true as they are not designed for editing records (just
selecting them), while table objects typically set this property to false
to allow full data entry.

Protected
unsorted_state integer false true | false data_list

This property indicates whether or not the display of the object is


known to be properly sorted. In general, if a record is saved during
add-mode, the record may not be displayed in its sorted position. The
exit_add_mode message uses this property to determine if display
regeneration when exiting add-mode. Note: entering add-mode does
not initially cause unsorted_state to become true; only the act of
saving a new record (in a table) causes this property to become true.
This prevents the object from redisplaying if add-mode is entered, then
immediately exited. The procedure set and function messages for this
property can be augmented to tell users the current state of the object’s
display.

Protected
was_new_row_state integer false true | false data_list

This property is used in subclasses during row movement to indicate


that, although the current record is active (it’s record number is non-

UIMS Changes 37
zero), the current record was just saved, and the object should
continue add-mode if appropriate.

New Messages

Private
assign_current_record procedure

This message sets the record_number for the current "base" row
(according to base_item, not current_item) to the record number
currently in the recnum field of the main_file.

Private
clear_data integer all_flag procedure

This message clears the current row if the main_file of this object
was cleared by its server, or if line_display_state is true. It
sends entry_clear or entry_clear_all, depending on the value
of all_flag. As part of this operation, it exits add-mode if
necessary, and (re-)enters add-mode.

Protected
enter_add_mode integer insert_flag procedure

This message is sent to indicate that the object is entering add-mode. If


insert_flag is true, this message sends insert_clear_row to
insert a blank row into the object for data entry of a new record;
otherwise, no action occurs. This message can be augmented or
overridden to change the behavior of initiating data entry for new
records.

Protected
exit_add_mode integer remove_flag integer regen_flag function
integer item# returns integer

This function is sent to indicate that the object is exiting add-mode. If


remove_flag is true, the remove_hole message is sent to remove
the current row from the display (this usually indicates the current

38 DataFlex Update from Revision 3.0


row was blank and unchanged. If the regen_flag is passed true
and unsorted_state is true, the regenerate message is sent to
regenerate the display. Regen_flag is usually only passed as false
when an operation that causes add-mode to exit has or will regenerate
the display itself. For example, end_of_data passes regen_flag as
false when exiting add-mode. The item# argument contains the
number of the new current_item for the object. Because removing
the blank row and/or regenerating the page may result in that item
being moved, the exit_add_mode message must determine the new
position of the original item, and return that item number. This
message can be augmented or overridden to change the behavior of
terminating data entry of new records.

Protected
find_top_record integer item# returns integer function

This message is called during page regeneration to find the record


that is to be displayed on the first row. The item# argument contains
the item# of the new current_item for the object. This message finds
the record whose record number is stored in the record_number
property for that item’s row. If that record cannot be found, the first
(valid) record in the file is found. The record number of the newly
found record is returned by this function. This function can be
overridden to change which record will be used as the start of the
display. Note: changing this functions behavior would usually imply a
change was made to the regenerate message behavior as well.

Private
insert_clear_row procedure

This message inserts a blank row before the current row and displays
the data in related files by sending entry_display. Also,
current_item is set the first item in the new row.

Protected
regenerate integer item# integer force_regen returns integer function

If auto_regenerate_state is true, this message regenerates the


display by moving the row for item# to the first row on the display
and filling the remaining rows with the appropriately sorted records.

UIMS Changes 39
This message is called when add-mode is exited, or when the object is
entered and unsorted_state is true. If force_regen is true,
the display is regenerated even if auto_regenerate_state is
false. This message can be augmented or overridden to change how
the table is displayed and which item will become the new
current_item.

Protected
remove_hole integer item# returns integer function

This message removes the current row. The item# argument is passed
to indicate the new current_item, and this function must return to
new position of that item. If the deletion of the row changes the
position of item#, the adjusted position should be returned. If item#’s
position does not change, item# should be returned.

Private
start_new_row integer item# procedure

This message causes the object to enter add-mode, clearing the record
buffer for the main_file in preparation for data entry of a new
record.

Augmented Messages

Protected, defined in: entrylist


exiting integer to_object returns integer procedure

This message is sent when the focus is attempting to move away from
this object. It is augmented in this class to reset the
advancing_state property to false (indicating current_item is
no longer advancing).

Protected, defined in: wide_list


next_entry_ok returns integer function

This message is sent when the focus is attempting to move to the next
entry_item in this object. It is augmented in this class to reset the

40 DataFlex Update from Revision 3.0


advancing_state property to true (indicating current_item is
advancing).

Changed Messages

Public, (new parameter)


beginning_of_data integer no_save procedure

This message finds the first record in the main_file of this object,
and fills the display, starting with that record if the find operation
was successful. If the find was not successful, the display is cleared
of all records. The no_save argument is ignored in this class, but
subclasses may use this flag to inhibit an unintentional save operation
when the object is initialized.

Table

The navigation rules have been altered, whereby:

1. Any navigation, forward or backward, off a changed


row will cause an attempt to save the changes before
moving.

2. Any navigation, forward or backward, off an


unchanged, blank row will remove the blank row and
then move relative to the row that becomes the current
row after the blank row is removed.

Auto-save, Auto-clear and Add-mode

The operation of auto_save_state has been changed so that any


movement off a changed row will cause that row to be saved. Save
confirmation is performed if verify_save_msg is set. If
auto_save_state is false, the changes to the row will be abandoned.

The setting of auto_clear_deo_state is now respected in tables,


but only for new records created via auto-save. This means that it

UIMS Changes 41
determines whether add-mode will continue after saving a new row
via auto-save past the end of a row.

The behavior of "add-mode" (adding new records) in tables has been


changed to be more consistent. Furthermore, the message protocol for
add-mode has been rewritten to allow its behavior to be more easily
controlled and modified.

The kclear key and request_clear message have been changed to


behave in a manner consistent with other DEOs: If you are on an
active record, a new row is created before the current row; if you are
already in add-mode, the current row is cleared, losing any changes
you may have entered (verify_data_loss is sent for confirmation).

A previously unused accelerator key, kadd_mode (now defined as


s+0), is now being used in tables to toggle in and out of add-
mode (this was the original behavior of the clear key). This key
definition also required moving the atracer toggle key definition to
a+3, and the atracer move key definition was moved to c+3.

The act of exiting add-mode has also been changed. If users navigate
off a row while in add-mode, and have previously saved some new
records, or have changed data on the current (new) row, the table may
be displaying records out of sequence. A property, unsorted_state,
is set to indicate this. The auto_regenerate_state determines
whether or not the table will regenerate the display when you exit
add-mode. By default, this property is true, which causes the row of
the newly chosen item to move to the top of the display and fill with
the appropriate records after it, and sets current_item to the new
position of the chosen item on the top row. Furthermore, if the table is
not the focus when new records are added into it (via save operations
initiated in other DEOs) the table’s display may also be unsorted. In
this instance, when the table becomes the focus, (and
auto_regenerate_state is true), the display is regenerated in the
same manner. If auto_regenerate_state is false, no redisplay
occurs. However, if the Beginning/End of Data (c+h or
c+z) and Scroll Forward/Backward (p and o) keys are
pressed, or the table redisplays due to a find operation, the display is
regenerated as part of that operation, independent of the
auto_regenerate_state.

42 DataFlex Update from Revision 3.0


Finally, if you wish to alter the behavior of add-mode and
auto_regenerate_state, you can augment or overrride the
enter_add_mode, exit_add_mode, find_top_record, and
regenerate messages.

New Features of Table Class

Deleted Properties

Protected, moved to data_list since Beta II


advancing_state integer

Deleted Messages

Public, behavior moved to data_list


clear procedure

New Keys

Private
kadd_mode add_or_remove_row table

New Properties

Public
no_create_state integer false true | false data_list

This property controls whether or not this object can create records. If
true, any attempt to initiate a clear operation or save operation on a
new record will be ignored. However, clear and save operations in
other objects that result in a clear or save in this object’s server will
not be inhibited. This property is reset to false in the table class to
allow full data entry.

UIMS Changes 43
Changed Messages

Public
request_clear procedure

This message inserts a blank row if not already on a blank row, then
clears the current row with the entry_clear message. If this object
has a server, the clear message is sent to it. This message is sent by the
clear key (kclear).

Beginning_of_data in this class now accepts an optional integer


argument; other class definitions do NOT accept this argument and
should NOT be changed.

Public
beginning_of_data integer no_save procedure

This message causes the object to find the first record for the
main_file and fills the display, starting with that record. If the data
for the current row is changed, and auto_save_state is true, the
object will save those changes before moving to the first page. In some
cases, the current row may be unintentionally saved. If the no_save
parameter is passed and is non-zero, the save operation will not
occur. The no_save argument is passed as true during the
initialization of this object when it first becomes active.

Advancing_state

A boolean property named advancing_state has been added.


Advancing_state is true only if the table is currently involved in a
forward navigation triggered by knext or kenter, otherwise it is
false. This property is used to govern when a new, blank row is
inserted into the table (e.g. after a successful save of a new row).

44 DataFlex Update from Revision 3.0


Entry

A function named superfind_field has been added. It has the


following definition:

function superfind_field integer mainfile# integer item# ;


returns integer

The function returns the field# in the specified mainfile which will be
used to perform superfinds from item#, or it returns -1 if no field is
suitable.

Dependent Items Mechanism

A private message prototype_object has been added to the menu


class, and overridden in the data_list class. The function
prototype_object returns the prototype-row object id, if any,
otherwise it returns its own object id. The syntax of the function is:

function PROTOTYPE_OBJECT returns integer

Macro Support Commands

The following macro support commands were altered:

Macro command Class(es) Notes

bind_static selection_list Moved to data_list

bind_main_file data_list Renamed


bind_index bind_datalist_
main_file and
bind_datalist_
index to avoid conflict
with commands in
data_set

UIMS Changes 45
dsend data_set Eliminated; not
previously documented

dlstart directory_list Renamed to drstart to


avoid name conflict
with dlstart in
data_list class

srvrend entry_client, Eliminated; not


entry_form, previously documented
text_window

liststart, pick_list, Eliminated; not


listend selection_list previously used

navstart, entry_client, Eliminated; not


deoend entry_form, previously used
text_window,
wide_list

plend pick_list Eliminated; not


previously documented

slend selection_list Eliminated

deoend widelist Eliminated

New Message for OBJECT class

Public, defined in: object


end_construct_object procedure

This message is sent during the end_object command for each object
to allow initialization to be performed based on the initial settings of
properties and/or items. This message is normally only defined in
class definitions. In object definitions, the same results can be achieved
by performing the same initialization immediately before the
end_object statement (outside a procedure).

46 DataFlex Update from Revision 3.0


Note: Initialization based on the settings/definition of properties/items
in this message may need to be performed again if or when the
appropriate properties/items are changed. It may, instead, be assumed
that the appropriate properties/items will not change after the
end_object command is executed (in which case this restriction
should be documented).

New/Augmented Messages for Data_set

Public, defined in: data_set


clear_main_file procedure

This message performs the clear command on the main_file of the


data_set and is sent whenever the main_file of a data_set must be
cleared. It is intended to be overridden or augmented. For example, to
force a manually related file (see the relate_main_file message) to
be cleared when the main file is being cleared. Typically, the
request_clear_file message should be used for this purpose to
insure the refresh of DEOs occurs properly (see
request_clear_file).

procedure clear_main_file
forward send clear_main_file
send request_clear_file manual1.file_number
send request_clear_file manual2.file_number
end_procedure

Public, defined in: entry_client


end_construct_object procedure

This message is augmented to set the focus_mode of the object to


nonfocusable if the object contains no children. This prevents a
data_set object with no children from unintentionally taking the
focus.

Public, defined in: data_set


request_clear_file integer file procedure

UIMS Changes 47
This message performs the clear command on the specified file of the
data_set. It is intended to be used to clear a file and notify the
data_set that the file is actually cleared. This ensures that the refresh
of data entry objects that may occur afterwards will properly clear
entry_items for the specified file. (If the clear command alone is
used, the refresh will not clear the entry_items for the specified file).
It is intended to be used in an augmentation of the
clear_main_file procedure to force a manually related file (see the
relate_main_file message) to be cleared when the main file is
being cleared.

procedure clear_main_file
// clear_main_file normally
forward send clear_main_file
// also clear "manually" related files
send request_clear_file manual1.file_number
send request_clear_file manual2.file_number
end_procedure

New/Augmented Messages for Entry_client

Public, defined in: object


end_construct_object procedure

This message is augmented to set certain properties to indicate each


object’s parentage. It also defines accelerator keys for the action bar
used by this object, if any.

New/Augmented Messages for Entry_form

Public, defined in: object


end_construct_object procedure

This message is augmented to set certain properties to indicate each


object’s parentage. It also defines accelerator keys for the action bar
used by this object, if any.

48 DataFlex Update from Revision 3.0


New/Augmented Messages for Selection_list

Public, defined in: wide_list


end_construct_object procedure

This message is augmented to set the checkbox and radio oriented


properties of each item according to the setting of the radio_state
property.

New/Augmented Messages for Text_window

Public, defined in: object


end_construct_object procedure

This message is augmented to set certain properties to indicate each


object’s parentage. It also defines accelerator keys for the action bar
used by this object, if any.

New/Augmented Messages for Wide_list

Public, defined in: object


end_construct_object procedure

This message is augmented to set certain properties to indicate each


object’s parentage. It also defines accelerator keys for the action bar
used by this object, if any.

Changed Messages for Ui_object

The following messages now return a value (but are still procedures):
add_focus, activate, release_focus, deactivate, and
process_key.

UIMS Changes 49
Public, defined in: ui_object
add_focus integer root_object returns integer procedure

This message adds the object into the focus tree at the next_level of
the root_object in the focus tree. If the root_object is not active,
the message is terminated and returns a non-zero value (see below).
This message is used to construct the focus tree in a predefined
structure. The activate message uses this message to either add the
object to the next level of the current focus or the next level of the
parent of the object, depending on the value of the
attach_parent_state property.

send add_focus to my_menu customer_entry_form

If the object cannot be added to the focus tree, a non-zero value is


returned according to the following error conditions:

Return value Condition

error_activating Msg_activating returned a


non-zero value.

error_cant_accept_focus The focus_mode of the object is


no_activate.

error_cant_create_tree The object cannot be added to


focus tree (probably due to
lack of available memory).

error_add_to_inactive_object The root_object is not


active.

error_no_focusable_children If the object being added to the


focus tree has its
client_area_state set to
true, and none of its child
objects could be added to the
focus tree.

Public, defined in: ui_object

activate returns integer procedure

50 DataFlex Update from Revision 3.0


This message adds the object into the focus tree (by sending
add_focus), and gives the object the focus. If the object is already
active, then the focus is changed, and add_focus is not sent. If the
message is received by an object that has its client_area_state
property set to true, the message is "translated" to the activate group
message.

send activate to amenu

If the object cannot be activated, a non-zero value is returned


according to the following error conditions:

Return value Condition

error_entering Msg_entering returned a


non-zero value.

error_exiting Msg_exiting (of the current


focus) returned a non-zero
value.

error_activating Msg_activating returned a


non-zero value.

error_cant_accept_focus The focus_mode of the object


is no_activate or, if the object
being activated to the focus
tree has its
client_area_state set to
true, and none of its child
objects are focusable.

error_cant_create_tree The object cannot be added to


focus tree (probably due to
lack of available memory).

error_add_to_inactive_object The object was not yet active,


and the root_object for its
add_focus is not active.

UIMS Changes 51
error_no_focusable_children If the object being added to the
focus tree has its
client_area_state set to
true, and none of its child
objects could be added to the
focus tree.

Public, defined in: ui_object


release_focus returns integer procedure

This message removes the object from the focus tree with focus change
notification. It sends exiting, exiting_scope,
entering_scope, and exiting message if necessary, and if
successful, send remove_object. This is a low-level message and is
not typically sent by application programs. The net effect is to change
an active object into one that is just "paged", but not "active".

send release_focus to current_object

If the release_focus operation is not successful, a non-zero value is


returned according to the following error conditions:

Return value Condition

error_entering Msg_entering (of new focus)


returned a non-zero value.

error_exiting Msg_exiting returned a


non-zero value or one the
objects in the next_level of
the object refused to deactivate.

Public, defined in: ui_object


deactivate integer search_mode returns integer procedure

This message removes the object from the focus tree by sending the
release_focus message, and if successful, send the deactivation
message. If received by an object that has its client_area_state
property set to true, the message is "translated" to the
deactivate_group message. If the receiver has objects in its

52 DataFlex Update from Revision 3.0


next_level in the focus tree, those objects are deactivated before the
current object.

The search_mode parameter determines what object will actually be


deactivated. If this parameter is omitted, or equals zero (0), the
receiver of the message is deactivated. However, if the search_mode
is non-zero, the focus tree is searched "upward" (through
prior_levels) for an object to deactivate based on the following
table:

Search mode value Searches for object with...

popup_type popup_state set to true


scope_type scope_state set to true
area_type scope_state or
popup_state set to true

send deactivate to amenu


send deactivate to current_object area_type

If the deactivate operation is not successful, a non-zero value is


returned according to the following error conditions:

Return value Condition

error_entering Msg_entering (of new focus)


returned a non-zero value.

error_exiting Msg_exiting returned a


non-zero value or one the
objects in the next_level of
the object refused to deactivate.

error_deactivating Msg_deactivating returned


a non-zero value.

Public, defined in: ui_object


process_key integer key_val returns integer procedure

UIMS Changes 53
Add the following to the end of the text:

The integer returned to this message is the value returned by the


message sent when the key is processed. This is normally zero unless
the processing message is terminating the current level of user input.

New/Augmented Messages/Properties for


Action_bar_menu

Protected
auto_pull_down_state integer false true | false action_bar_menu

This property determines whether or not moving left or right from the
current_item should cause the pull-down menu for the new action
bar item to be activated. It is used to allow action bar items without
pull-down menu objects to be used. This property is set true (via
delegation) by pull-down menu objects when kleftarrow and
krightarrow are used to perform the "pull-left" and "pull-right"
operations.

Protected, defined in: menu


key integer key_val returns integer procedure

This message is augmented to cause the kleftarrow and


krightarrow keys to automatically send the new item’s message only
if the message is activate_pull_down and the
auto_pull_down_state is true.

New/Augmented Messages for Pull_down_menu

Protected, defined in: menu


pull_left procedure

This message is augmented in this class to only execute the parent


object’s item message if it is the activate_pull_down message. This
message actually sends pull_menu, passing krightarrow.

54 DataFlex Update from Revision 3.0


Protected, defined in: menu
pull_right procedure

This message is augmented in this class to only execute the parent


object’s item message if it is the activate_pull_down message. This
message actually sends pull_menu, passing krightarrow.

Private, defined in: pull_down_menu


pull_menu integer key_val procedure

This message is sent by pull_right and pull_left to allow action


bars items to perform actions other than activating a pull-down menu
to avoid having a pull_down_menu with a single item. It also sets the
auto_pull_down_state of the current action bar to true (via
delegation) to cause the action bar to activate the next pull-down menu
automatically.

Protected, defined in pull_down_menu


auto_pull_down_state procedure set

This procedure is defined to allow cascaded pull-down menus to


delegate the setting of the auto_pull_down_state property to the
action bar.

Procedure Documentation

The documentation concerning procedures that return a value (page 11


in UIMS Ref.) should be changed to use a different (more typical)
example:

UIMS Changes 55
Procedure with Return Value

Syntax description

add_focus integer root_object returns integer

Declaration
procedure add_focus integer root_object returns integer

Usage

Ignoring return value:

send add_focus to popup_menu current_object

Receiving return value:

get msg_add_focus of popup_menu current_object to error_code

Note the use of the get command to call this procedure by its
message_id, msg_add_focus. The get command and the
msg_ prefix are required to receive the return value from a
procedure that returns a value. This technique should always
be used when augmenting a procedure of this nature:

procedure add_focus integer root_object returns integer


local integer ret_val
forward get msg_add_focus root_object to ret_val
...
procedure_return ret_val
end_procedure

Item_matching Documentation

The documentation for item_matching in the menu class should be


edited to include the following information (after the current example):

Because the number of the item that matches is returned to the


item_number parameter that is passed, the item_number must be a

56 DataFlex Update from Revision 3.0


variable. For example, to augment this message, the following
technique should be used:
function item_matching string match_string integer item_number
local integer match_item
move item_number to match_item
get item_matching match_string to match_item
...
function_return match_item
end_function

The documentation already states "the return value is placed in the


search parameter", but it should really say "the item_number
parameter".

Default Key Actions

In order to be more CUA compliant, the default key used for the Add
Mode key (kadd_mode) (now used in the Table class) has been
changed from a+8 to s+0.

To avoid a conflict with the new default for the Add Mode key, the
keys used in the trace object in the Atracer package have been changed
from s+0 and c+0 to a+3 and c+3, respectively.

UIMS Changes 57
58 DataFlex Update from Revision 3.0
XI. DATAFLEX FOR WINDOWS

Phase I Overview

The initial phase of the Windows project has been implemented as a


character-based DataFlex runtime system under Windows. This
runtime-only product allows DataFlex users to migrate their existing
projects to the Windows environment.

Purpose

The purpose of the Phase I DataFlex Windows product is to modify


DataFlex to be more compatible with the facilities provided by
Windows. Although it does not provide DataFlex with a true graphical
look and feel, it does allow your character-based applications to
operate efficiently and elegantly within the Windows domain.

Target User

The user of the DataFlex Windows runtime is similar to the current


user of DataFlex. Users of DataFlex who require a graphical user
interface in a multi-tasking environment will feel most comfortable
with the DataFlex Windows product.

New Runtime Features

Incorporates 3.01 Revision Changes

The 3.01 release of DataFlex 3.0 includes many new features, bug fixes,
optimizations and enhancements. These modifications have been
incorporated in the Windows version. A complete list of the update
changes can be found in the other parts of this document.

DataFlex for Windows 59


Windows Co-existence

DataFlex applications will now have the capability to be run in a


window and may be run as a background task more easily. DataFlex
for Windows will directly intercept Windows messages; thus
providing this product with better Windows awareness.

More Memory

DataFlex applications will have more memory under the Windows


virtual memory manager. The DOS protected mode, provided by
Windows, eliminates the limitations of the 640k memory ceiling. The
VROOM memory manager was removed from the runtime. A
favorable by-product of this is that the Windows memory manager is
faster than VROOM so modest speed gains will be realized here.

Large Model Compiler

A new Windows version of the DataFlex compiler is now included


with the Windows runtime version. This character-mode compiler
utilizes the increased memory pool provided by Windows, and allows
larger programs to be compiled. It provides no additional functionality
other than large memory model compilations.

Windows Mouse Support

DataFlex applications running under Windows will now have TRUE


DataFlex compatible mouse support. Mouse messages generated by
DataFlex applications are hooked into the comparable Windows mouse
messages. This was not previously possible running the standard
version of DataFlex in a window.

60 DataFlex Update from Revision 3.0


Integrated Text and Graphics

DataFlex graphics, which previously made calls to the Halo graphics


library, have been re-coded to now make calls to the Windows GDI
(Graphics Device Interface). Using Windows GDI, users will now be
able to combine standard text and graphics on the same screen. The
standard DataFlex graphics functions continue to be implemented in
the Windows version and should be used for compatibility. The
concept of graphics modes does not apply to Windows on an
application basis, so DataFlex commands that use graphics modes and
drivers are ignored in Windows. The user is still required to issue the
Graphic_ON command in their source code prior to issuing other
graphics commands. Halo cut files will no longer be supported in
favor of Windows bitmaps. The ability to rotate text will be contained
in the next phase of this project.

Larger Screen Sizes

Larger screen sizes - The default Windows font used in the DataFlex
runtime is OEM_FIXED_FONT. A side effect of this font is to condense
window output thus increasing the physical area of a screen window.
Screen fonts are not changeable in this Phase I release.

Printing

Screen printing, report printing and sequential device output is now


attached and routed to the Windows printing facilities. It should be
noted that not all screen fonts in Windows have a comparable printer
font. If certain characters sent to the printer are not supported by the
printer font, they are substituted by the GDI with a default character.
A new output driver has been added to the sequential output driver
table. (For a complete list of devices and drivers refer to Page 184 of
the DataFlex Encyclopedia, and also on page 210 of the DataFlex 3.0
User’s Guide). The new driver name is "WINLST:". The WINLST
driver becomes the default output device in the Windows runtime
replacing LST:.

The syntax of the WINLST device is:

DataFlex for Windows 61


WINLST: {font: fontname:} {points: #:} {win_device_name}

Where font is the name of the font supported by the printer, points is
the character or point size desired and contained in the font, and
win_device_name is the name of the Windows printer driver to use for
output. The only requirement regarding the sequence of the command
line, is that win_device_name is always last. If the font or points
arguments are omitted from the command line, the default for font will
be COURIER, the default points size will be 10, and the default
character style will be FIXED pitch.

When WINLST is specified as the output device driver, output will be


directed to the device in your system whose name is in the
DFPRINTER system variable. Output to WINLST also occurs when a
command is issued with no device name or filename argument.

A valid win_device_name may be any valid printer driver file, with a


.DRV extension, properly installed both in the Windows system
directory and the WIN.INI configuration file. If win_device_name
specifies the textual name of a device, WIN.INI will be searched for
device and port information and that information will be used to route
the output.

When win_device_name is specified with a driver, but the driver could


not be found, an ERROR 32 , "Can’t Open output file", will be
generated at runtime. If the program that generated the error continues
to print, disregarding the error, all output will be lost.

If win_device_name is set to PRN:, output will be directed to the


Windows print manager. If the win_device_name is set to LST:, output
will go directly to the printer using the standard DataFlex print device
and bypass Windows altogether.

Following are examples of device output in the DataFlex for Windows


Runtime.

set dfprinter = lpt2


OUTFILE "LST:"

In this example, all output to is directed to the LPT2 printer port using
the standard DataFlex output device.

62 DataFlex Update from Revision 3.0


OUTFILE "WINLST:"

In this example, all output to WINLST is directed to the default printer


and printer port as found in the WIN.INI configuration file, using the
Courier font (default) and a point size of 10, (default).
WINLST:FONT:HELV:POINTS:48:PSCRIPT

In this example, all output to WINLST is directed to the port


associated with the PSCRIPT device in the Windows WIN.INI
configuration file using the Helv font with a point size of 48 using the
Windows Postscript driver.

WINLST:POINTS:8

In this example, all output to WINLST is directed to the default PRN:


device using the default Courier font with a point size of 8.

Anomalies and Incompatibilities

There are certain anomalies & incompatibilities between DataFlex and


the Windows environment. These are described below.

Escape Sequences

The practice used in certain 2.3b applications of outputting escape


sequences to the screen to change screen attributes will not function in
the Windows runtime. The built-in screen optimizer used in DataFlex,
which prohibits the use of escape sequences, is always in use in the
Windows version

Graphics Repainting

Graphics screens in DataFlex are not automatically re-painted due to


the fact that the graphics are not temporarily stored in a buffer and
repainted when a paint message is received. We have augmented the
DataFlex paint message sent to the desktop by intercepting the
Windows paint message and forwarding it thus allowing graphics
repainting. The programmer may override the paint message at the
Desktop level. It is up to the application programmer to respond to the

DataFlex for Windows 63


paint message by creating a procedure to manually re-draw the
graphics that were previously output to the screen, then forwarding
the paint message to the Desktop. Standard text output is
automatically re-painted by DataFlex when the Desktop receives a
paint message.

Double Mouse Click

The mouse double click time setting in DFINI will be ignored. The
setting in WIN.INI will be used instead.

Desktop

When the desktop is re-sized, the background image will be resized.


When a window is shrunk, characters outside of the window will be
clipped.

Windows 3.1

Compatibility with latest 3.1 Windows release has not been tested at
this time.

Screen Colors

Screen colors above 127 do not blink in Windows and will not be
supported.

Printing

The new ’WINLST:’ print device cannot interpret line-drawing


characters. This is a function of the Windows device support. If a
suitable printer font is supplied to Windows with a full IBM Graphics
Character set, line drawing characters will be printed correctly.

64 DataFlex Update from Revision 3.0


DataFlex for Windows - Phase II

The next release of the Windows project will include the following:

• Text Rotation.

• Conversion from DataFlex character-based classes to Windows.


• GUI classes using base controls. By this is meant that a
running DataFlex program will display a true Windows menu
bar, list boxes, buttons, dialog boxes, etc.

• Windows color support.

• Dynamic Data Exchange (DDE).

• Windows Clipboard support.

• Simultaneous Graphics and Text Window repainting.

• A Windows Panel designer will be designed and implemented


to aid in user screen creation.

DataFlex for Windows - Phase III

• AutoCreate to be re-designed to generate true Windows


applications.

• An Object class designer will be designed and implemented.


AutoCreate will be changed from a character based application
to a Windows GUI application.

DataFlex for Windows - Phase IV

• DataFlex utility programs DFFILE, DFQUERY, and DFSORT


will by ported to the Windows GUI standard thus creating a
complete, seamless, Graphical Application Development
System.

DataFlex for Windows 65


DATAFLEX®

UPDATE FROM REVISION 3.0

Revision 3.01

Copyright © 1992 Data Access Corporation

DATA ACCESS CORPORATION


Miami, Florida
USA

Revision Date: June 2, 1992

66 DataFlex Update from Revision 3.0


COPYRIGHT NOTICE

Copyright © 1992 DATA ACCESS CORPORATION. All rights


reserved.

No part of this publication may be copied or distributed, transmitted,


transcribed, stored in a retrieval system, or translated into any human
or computer language, in any form or by any means, electronic,
mechanical, magnetic, manual, or otherwise, or disclosed to third
parties without the express written permission of Data Access
Corporation, Miami, Florida, USA.

DISCLAIMER

Data Access Corporation makes no representation or warranties,


express or implied, with respect to this publication, or any Data Access
Corporation product, including but not limited to warranties of
merchantability or fitness for any particular purpose.

Data Access Corporation reserves to itself the right to make changes,


enhancements, revisions and alterations of any kind to this publication
or the product(s) it covers without obligation to notify any person,
institution or organization of such changes, enhancements, revisions
and alterations.

TRADEMARKS

DataFlex is a registered trademark and Flex-Keys is a trademark of


Data Access Corporation. All other brand and product names are
trademarks or registered trademarks of their respective companies.
68 DataFlex Update from Revision 3.0
CONTENTS

I. INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
New Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Problems Fixed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Essential Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

II. REVISION COMPATIBILITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5


How It Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Subsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
#CHKSUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Data Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Precompiled Headers and Packages . . . . . . . . . . . . 6

III. HEADER INTEGRITY CHECKING . . . . . . . . . . . . . . . . . . . . . . . . . 7


Use and Repair of Corrupted Files . . . . . . . . . . . . . . . . . . . 7
Header Corruption . . . . . . . . . . . . . . . . . . . . . . . . . 7
Data Corruption . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

IV. ADDITIONS TO CONFIGURATION UTILITY . . . . . . . . . . . . . . . . . . 11


Character Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
The DOS Critical Error Handler . . . . . . . . . . . . . . . . . . . . . 14
Available Responses and Their Effects . . . . . . . . . . 15
Critical Error Text Translation . . . . . . . . . . . . . . . . 16
Critical Error Handling . . . . . . . . . . . . . . . . . . . . . . 17
Default Error Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

V. FILE MAINTENANCE UTILITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19


Converting Files to 3.0 format . . . . . . . . . . . . . . . . . . . . . . . 19
Other Functions Moved . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

VI. ERROR UTILITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21


Error Message Maintenance . . . . . . . . . . . . . . . . . . . . . . . . 21

VII. SEQUENTIAL I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25


Nul: Input/Output Device . . . . . . . . . . . . . . . . . . . . . . . . . 25
Output Control Variables Channelized . . . . . . . . . . . . . . . . 25

Table of Contents i
VIII. NEW COMMANDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Index_def Command Extended . . . . . . . . . . . . . . . . . . . . . . 27
Get, in Procedural Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

IX. UIMS ID CAPACITIES INCREASED . . . . . . . . . . . . . . . . . . . . . . . 29


What Consumes ID Capacities . . . . . . . . . . . . . . . . . . . . . . 29

X. UIMS CHANGES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Sort_items Message Added to Array . . . . . . . . . . . . . . . . . . 31
Refresh Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Broadcast and Broadcast_focus . . . . . . . . . . . . . . . . . . . . . . 33
Data_Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Text_window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Selection_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
DEO Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Data_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
New Features of Data_list Class . . . . . . . . . . . . . . . 36
Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Auto-save, Auto-clear and Add-mode . . . . . . . . . . . 41
New Features of Table Class . . . . . . . . . . . . . . . . . . 43
Advancing_state . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Dependent Items Mechanism . . . . . . . . . . . . . . . . . . . . . . . 45
Macro Support Commands . . . . . . . . . . . . . . . . . . . . . . . . . 45
New Message for OBJECT class . . . . . . . . . . . . . . . . . . . . . 46
New/Augmented Messages for Data_set . . . . . . . . . . . . . . 47
New/Augmented Messages for Entry_client . . . . . . . . . . . . 48
New/Augmented Messages for Entry_form . . . . . . . . . . . . 48
New/Augmented Messages for Selection_list . . . . . . . . . . . 49
New/Augmented Messages for Text_window . . . . . . . . . . 49
New/Augmented Messages for Wide_list . . . . . . . . . . . . . . 49
Changed Messages for Ui_object . . . . . . . . . . . . . . . . . . . . . 49
New/Augmented Messages/Properties for
Action_bar_menu . . . . . . . . . . . . . . . . . . . . . . . . . . 54
New/Augmented Messages for Pull_down_menu . . . . . . . 54
Procedure Documentation . . . . . . . . . . . . . . . . . . . . . . . . . 55
Procedure with Return Value . . . . . . . . . . . . . . . . . 56
Item_matching Documentation . . . . . . . . . . . . . . . . . . . . . . 56
Default Key Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

XI. DATAFLEX FOR WINDOWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59


Phase I Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

ii DataFlex Update from Revision 3.0


Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Target User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
New Runtime Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Incorporates 3.01 Revision Changes . . . . . . . . . . . . 59
Windows Co-existence . . . . . . . . . . . . . . . . . . . . . . 60
More Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Large Model Compiler . . . . . . . . . . . . . . . . . . . . . . 60
Windows Mouse Support . . . . . . . . . . . . . . . . . . . . 60
Integrated Text and Graphics . . . . . . . . . . . . . . . . . 61
Larger Screen Sizes . . . . . . . . . . . . . . . . . . . . . . . . . 61
Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Anomalies and Incompatibilities . . . . . . . . . . . . . . . . . . . . . 63
Escape Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Graphics Repainting . . . . . . . . . . . . . . . . . . . . . . . . 63
Double Mouse Click . . . . . . . . . . . . . . . . . . . . . . . . 64
Desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Windows 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Screen Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
DataFlex for Windows - Phase II . . . . . . . . . . . . . . . . . . . . . 65
DataFlex for Windows - Phase III . . . . . . . . . . . . . . . . . . . . 65
DataFlex for Windows - Phase IV . . . . . . . . . . . . . . . . . . . . 65

XII. INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Table of Contents iii


iv DataFlex Update from Revision 3.0
XII. INDEX

3.0 format, converting files to 19 text translation 16


3.01, new features in 1 Data_list, new features 36
Abort, error report response 15 Data_list, procedures added 35
Action_bar_menu, new messages Data_set, new messages 47
54 Data_sets
Add-mode in Table 41 Rebuild_constraints, sending of
Add-mode, default key 57 33
Array object class Default error text 18
sort_items message added to Default Key Actions 57
31 Dependent_items, messages added
Attributes 45
field, in indexes 27 DFMAINT, File Maintenance
Auto-clear mode in Table 41 Utility 19
Auto-save mode in Table 41 DOS
Broadcast and Broadcast_focus, character mapping in 11
no_stop option 33 DOS critical error handler 17
Bugs fixed 4 Entry, superfind_field function
Channel, input/output 25 added 45
Character translation 11 Entry_client, new messages 48
Characters Entry_form, new messages 48
hexadecimal values 11 Error
Characters, keyboard utility 21
mapping 11 Error handling, operating system
Code pages, DOS 11 17
Command Error messages
index_def 27 Editing 21
Compatibility Error text, default 18
revisions of DataFlex 5 Error Utility 21
Configuration Utility Errors
character translation 11 critical, text translation of 16
critical error handler 14 operating system 14
Converting files to 3.0 format 19 Ext_crit_err, predefined variable
Corrupted files 15
use and repair of 7 Fail, error report response 15
Corrupted header in data file Field attributes
repair of 8 in indexes 27
Critical error handler 14 File definition
Critical errors utility 8

Index v
Utility, Parameters 8 No_stop option in Broadcast and
File Definition Utility Broadcast_focus 33
Repair, menu selection 8 Null:, input/output device 25
File Maintenance Utility 19 Object class, new messages 46
Filelist, maintenance 8 Operating system
Files handling errors from 17
database, header integrity Operating system errors 14
checking 8 Pagecount, predefined variable 25
FLEXERRS.* 21 Pageend, predefined variable 25
Files, database Pagefeed, predefined variable 25
opening from File Definition 8 Predefined indicator
Fixed bugs 4 seqeof 25
FLEXERRS.* Predefined variable
files 21 ext_crit_err 15
FLEXERRS.FLX 21 last_crit_err 15
Header corruption pagecount 25
repair of 8 pageend 25
Header integrity checking 7 pagefeed 25
in File Definition Utility 8 Procedure documentation, changes
Index 55
attributes of fields in 27 Pull_down_menu, new messages
Index_def, command 27 54
Input/output Rebuild_constraints
sequential 25 sending of by data_sets 33
Input/output channel 25 Refresh, new procedure 31
Input/output device Repair
null: 25 corrupted header in data files
Item_matching documentation, 8
changes 56 Retry, error report response 15
Keyboard character mapping 11 Revision Compatibility 5
Last_crit_err, predefined variable Selection_list, new messages 49
15 Selection_lists and the incremental
Letters search mode 34
lowercase 11 Seqeof, predefined indicator 25
uppercase 11 Sequential i/o 25
Lowercase letters 11 Sort_items message
Macro support commands, changes added to array class 31
45 Table
Mapping Auto-save, Auto-clear and
keyboard characters 11 Add-mode 41
New features in 3.01 1 Table class, new features 43
Table, properties added 41

vi DataFlex Update from Revision 3.0


Text_window, new messages 49
Text_windows and
update_dependent_items
34
Trace object, default key 57
Ui-object
Changed messages 49
Uppercase letters 11
Utilities
Error 21
opening files from 8
Wide_list, new messages 49

Index vii

Das könnte Ihnen auch gefallen