Release notes - filePro Plus 6.0 - 03/28/2025
    fP 6.0.XX.23

The filePro Plus software and the documentation provided with it
are protected under United States Copyright Laws and is provided
subject to the terms and conditions of the filePro License Agreement.

PLEASE NOTE the support and fax phone numbers listed in this
readme file. Open new support incidents on our website.

*****************************************************************

WWW        http://www.fptech.com
Support    support@fptech.com
Sales      sales@fptech.com
Management filepro@fptech.com

*******************************

To submit bug reports
--------------------------------
1. Login to your account portal on our website
   http://www.fptech.com/fptech/login.php and then
   go to the Support Incident Menu and submit an
   incident request.
2. EMail them to support@fptech.com including the text
   "Bug Report" with the version # and your filePro
   License # in the subject line
3. FAX them to (813) 354-2722 clearly marking them as bug reports
   and be sure to reference your filPro License #
4. Call the customer support number (800) 847-4740

*******************************

A special thank you to Jim Asman for his contribution
to the functionality of our printer tables.   Jim was
a good friend to filePro and is dearly missed.

*******************************

Contact Information

Surface Mail
    fP Technologies, Inc.
    432 W. Gypsy Lane Road
    Bowling Green, OH 43402

Phones
    Support   (800) 847-4740
    Sales     (800) 847-4740
    Fax       (813) 354-2722

Email
    Support    support@fptech.com
    Sales      sales@fptech.com
    Management filepro@fptech.com

It's important that you clearly describe a suspected bug and
include the filePro version number. If the programmer has trouble 
figuring out what you meant, you might as well not have reported 
the bug. Be very specific. For example, if you are reporting a 
bug concerning a Browse, identify if it is a lookup browse or 
browse created by using the [F6] key. A screen shot is very 
helpful and sometimes better than more than 1000 words.

Describe exactly how to duplicate the bug. Although it's 
sometimes difficult to create a working sample to demonstrate the 
problem, make every effort to trim down your code and provide a 
working sample application with test data. You may even discover 
that what you thought to be a bug is due to a coding error or the 
bug may only occur with lots of data or large processing tables.

Take good notes as to any error messages and under what 
circumstances the error message is presented. It never hurts to 
provide more information rather than not enough. This is 
particularly true when the programmer asks for additional 
information. Rather than responding with a single sentence, be
verbose since this may shed some light on the bug or what you may 
be doing wrong in your code.

Read what you wrote. Closely read your bug report before submitting 
to make sure it's clear and complete. If you have listed steps for 
duplicating the bug in a sample, exercise the sample with the 
listed steps to make sure you haven't missed a step.
    
***************************************
filePro and filePro Plus are registered 
  trademarks of fP Technologies, Inc.
***************************************
===================================
Bug fixes are below the New Items.
===================================
====================================
Version 6.0.VV.18 New Items
====================================
Updated all programs to no longer require unixODBC by default. unixODBC will now
    only be required when an ODBC related function is used. If unixODBC is not 
    found when an ODBC function is required, a filePro error will be returned.

Added PFPDFAUTOBREAK=ON (default OFF) to allow PDFs to automatically break pages
    based off of selected paper type.

Added menu letter to menu script editor.

====================================
Version 6.0.VV.RR New USP Only Items
====================================
Task #1782    <LINK text="click here" uri="http://fptech.com">
    Optional: underline="off"
    Optional: color="#0000FF"
    There is a problem with the concept of "destination" for in-document 
    links e.g. dest="page4". This would require pre-initializing all 
    required pages before processing the FPML. Therefore that 
    functionality is not included. Only HTTP links are known to work.

Task #1832    You can now use: @wlf<letter>*
    ex. @wlfT*
    This will apply to any dummy/associated field that begins with 'T'
    Overrides any other @wlf*

Task #1833    Added logging to ddefine.
    ddefine can now optionally track changes made to filePro file 
    layouts. This includes the name of the file, who changed it, 
    and what fields were changed.  Requires a logging configuration 
    file to be added under the ./fp/logs directory named 'ddefine.cfg'. 
    Format of the config file is the same as the servlog.cfg file that 
    comes shipped with filePro.
    Example ddefine.cfg:
        ROLLING,DEBUG,ddefine.log,60000
    
Task #1851    xx=FORMERROR
    syntax: xx=FORMERROR()
    returns: errno from last FORM or FORMM command.
    e.g. 2=file not found, 13=permission error

Task #1852    Validate menu script before prompting for removal

Task #1853    CABEBACKUP setting to only save changed PRC

Task #1859    Added new option 'C' to F8 Extended Functions for dmoedef 
    to show a list of all print codes on an output format. Selecting 
    an item from the list will jump the editor to it.

Trim #1875    TRIM command to remove spaces
    aa=ltrim(fld)
        left trim
    aa=rtrim(fld)
        right trim
    aa=trim(fld)
        trim both left and right    

Task #1879    PFIXGT can now be set in dxmaint F8 options.
    This is backwards compatible, so if PFIXGT is still set in config, 
    then it is honored by clerk *if true*. If false, the index header 
    is checked for the flag.

Task #1887    Added additional checks and field verification for ODBC 
    mirroring. This now attempts to handle invalid data in fields.

Task #1888    Added prelim support for MSSQL for ODBC mirroring.
        PFDODBCMSSQL=on (default off).
    Setting the variable to on changes the internal handling of the 
    SQL connection.

Task #1668    Windows fPTransfer now will accept wildcards.

Task #1883 A compress-filePro routine                                  
    FPPACK

    Function:
     Remove deleted records from a filePro file, and then
     (optionally) rebuild all automatic indexes.

     Syntax:
      FPPACK [ filename | - ] [ -H heading ] [ -E ] [ -R ] [ -X ] [ -EX ] [ -C ]
      [ -M name | -MD | -MQ mesg | -MA ] [ -BG ] [ -BS ]

       -H "heading" custom title to display in box.
       -E           don't actually pack the records, just
                       give statistics.
       -R           rebuild the automatic indexes even if
                       no records were deleted.
       -EX          skip statistics
       -C           skip continue and finished prompts

       -X           skip rebuilding the auto indexes.
       -M name      qualifier file name to use.
       -MD          ask for qualifier with default prompt.
       -MQ "mesg"   ask for qualifier with "mesg" as the prompt.
       -MA          use all qualified files & main file.
      UNIX/XENIX only:
       -BG          work in the background.
       -BS          suppress "completed in background" message.

Task #1902    Added various enhancements to PDF engine.
    See on-line or ~/fp/docs PDF documentation.

Task #1906    Added optional error message suppression and basic password 
    auditing to filePro.

        PFERRSUPPRESS=ON, default OFF
        PFPWAUDIT=ON, default OFF

    Password auditing also requires a ./fp/logs/pwaudit.cfg file. Same 
    structure as servlog.cfg.
    Any error that would be sent to mail will still be mailed on 
    unix/linux based systems.
    Errors reported in the background will still be suppressed. 
    Including the program name.
    Invalid password and license errors will still be reported. Password errors omit the filename.
        dcabe and rcabe are exempt from the error suppression.
    
Task #565 READLINE using "-1" for length to force read to EOL

Task #888 show=pkeep retain position if brw format changes
    In a browse lookup with "show=pkeep", the browse was
    enhanced to allow the position to be retained, even if the
    browse format has changed.

Task #1000 -fp *report flag would not report an error if the prc to use 
    did not exist.
    
Task #1227 A new function to lock or unlock nbyte bytes of the file 
    specified by handle.
    
Task #1303 ddefine will now create new screens the same as dscreen does 
    instead of just mono.
    
Task #1306 NEW arguments for OPENDIR
    format length
    extension length
    fullname length
    
Task #1340 *cabe lookup wizard will now honor PFQUAL and show qualified 
    indexes
    
Task #1359 Added new FPML commands to control the appearance of underlines.

Task #1534 new RINSTR, and INSTR now allows negative positions for working 
    backwards.
    
Task #1421 New GIadmin that will count GUI (GI or Web) sessions, ease of system
    and user configuration files and additional security.
    
Task #1504 Added PDF syntax as an option for printer maintenance (pmaint)
    Windows only
    
Task #1564 Remote Licensing for GIserver and fileProWeb. Hardware tie-in no 
    longer required with internet access
    
Task #1574 Lookup Wizard in cabe now allows long vars as key

Task #1583 Added alias and arrays to F6-D-L display in *cabe

Task #1584 Added SHOWPROGRESS

Task #1592 updated color with new routines and corrected the shell escape
    codes.
    
Task #1613 New variables
    CABEBACKUP ON|OFF (on by default)
    CABEBACKUPMINS n (minutes between backups)
    CABEBACKUPCT n (backup files per process)
    
Task #1637 Menu maintenance (makemenu) now asks if you wish to remove
    an unused menu script if the menu item is not used.
    
Task #1676 *report now allows one to use .outs from a pathed directory library

Task #1678 SCREEN command can switch fields in a POPUP UPDATE -, provided no screen name is passed to the SCREEN command.

Task #1447 MEMO EDIT now accept maxsize to limit the number of
    characters that can be intered into a memo field.
    memo NNN edit (row,col,lines,width,startLine,startcol,maxSize)
    (Text mode only)
    
Task #1609 (All)
    Added option 7 to dxmaint to clear qualifier
    
Task #1610 (All)
    New -SE *report flag to allow report to edit/save a selection set.
    
Task #1601 (All)
    Added @EXIT label to *clerk processing. This is executed whenever 
    a record is exited or broken out of. Events that trigger this are 
    'X' while not in update mode, 'BRKY' while not in update mode, and 
    'exit' in processing. It is the opposite of @entsel, and is the last 
    thing executed when leaving a record. Assignment of real fields is 
    not allowed, this is similar to @once in that the processing that is 
    executed is NOT sitting on a record, but rather record '0'.
    
Task #1606 (All)
    Partial lookup flag added to *cabe lookup wizard.
    -O on an exact lookup now does partial key matching. This kills a 
    lookup once the begining of the key value no longer matches the lookup 
    key value.
    
Task #1546 (All)
    BUSYBOX
        BUSYBOX "my message"
        BUSYBOX("10","10")
        BUSYBOX("10","10") "my message"

Task #1723 Added PFPPFULLPATH as an ehancement to PDFPOSTPRINT
    and added an PFNEWPOSTPRINT alias to name to PDFPOSTPRINT
    Added PFPPFULLPATH to augment the filename passed to the post print 
    handler, default ON, this causes the filename passed to the postprint 
    script to contain the full path to the file, not just the file name. 
    Set to OFF to revert to old behaviour.  PFPOSTPRINTnnn will now work 
    with normal file destinations. Same rules as the old global PFPOSTPRINT 
    but also supports PDF files.

Task #1639 Added new conditions for searching used for 
    associated fields only.
    
Task #1662 PDF printing should now honor the page length set in dmoedef

Task #1691 clerk will now allow a full path to a form when using
    the FORM and FORMM command in processing.

Task #1757 User defined functions - Forward declare functions to be used:
    (function|func) [file.]name([dim|var] var1, [dim|var] var2, ...)

    e.g.
         function fplib.showlock(var pid)
         function fplib.log(file, line, what)
         function somefunc(dim myarray)

    Call a function:
         [x=][file.]name(var1, var2, ...)

    Return a value from a function:
         return(value)

    Can pass fields: real, dummy, longvar
    Can pass arrays: Alias and system arrays are copied to a non-aliased 
    array. Non-aliased arrays are passed by reference.

    Function names must be at least 3 characters in length.
    Functions cannot modify values outside of its scope.
    Functions do not call automatic processing.
    Functions cannot modify real fields.
    Functions cannot be called unless it they are declared.
    Functions can pass values by reference (changes made to the value will 
    carry back out of the function, only to arrays).
    Functions can optionally return a value.

    Parameter names must be at least 3 characters in length.
    Parameters will be passed to the function using the name they were defined 
    with in the declaration statement.

    Environment variables:
        PFFUNCDBG=(ON|OFF), default OFF. 
            If ON the debugger will be allowed to continue into the function 
            call. If OFF the debugger will skip over user defined functions. 
            NOTE: Debug statements inside of functions will still be able to 
            be activated. If debug is set inside of a function, it will 
            continue even after the function is left.
            
    Example:
    Processing table for fibonacci:
        If:                     ' Declare for future use
        Then: function fibonacci(nval)
          If:                     ' Get the parameter
        Then: declare extern nval
          If: nval le "1"         ' Return the result
        Then: return(nval)
          If:                     ' Return the result
        Then: return(fibonacci(nval-"1")+fibonacci(nval-"2"))
    Usage:
        If:                     ' Declare for future use
        Then: function fibonacci(nval)
        If:                     ' Call the function
        Then: n=fibonacci("9")
        If:                     ' Display the result
        Then: msgbox ""{n         ' Prints "34"


Task #1756    EXTERN and GLOBAL arrays
    DIM GLOBAL name(size)
    DIM EXTERN name

    Only non-aliased arrays can be declared GLOBAL/EXTERN.  
    Functions similar to GLOBAL/EXTERN longvars.

Task #1639    New compare condition for Associated Fields
    Added new selection set relational operators:
        AEQ - Associated field, all equal
        ANE - Associated field, all not equal
        ACO - Associated field, all contain
    These require ALL components of an associated field to match the 
    comparison being done, rather than just one of its component fields.

Task #1667    Extended and Short selection will now check edits when leaving the 
    field, provided that the relationship code is not CO. If the code is CO, 
    the field will be treated as NOEDIT instead of its defined type.

Task #1721    Print spool initialization move beyond a large chunk of processing 
    which should remedy most if not all problems with the spool timeout.
        
Task #1733 NEW XLSX Mark-up language for creating XLSX files. 
    (see ~\fp\docs\xlsx_docs.pdf or on our website)
     https://www.fptech.com/fptech/pdf/xlsx_doc.pdf

Task #1749    Rebuild All Indexes on a file.  item '8' on the dialog. Note: this 
    is in the "extended" dialog which shows when a filename is not specified 
    from the command line. Indexes can be selected individually, 
    or all (with F7).     Press SAVE, and rebuild begins

Task #1751    Ability to EXPLODE or SPLIT import data
    Usage:
    sz=SPLIT(array, string, delimiter)
        array is the array that the data will be placed into
        string is the data to split
        delimiter is the sequence of characters to split on

    NOTE: The array being used must have the size defined for its elements and 
    cannot be an alias.

        
Task #1754    Added the ability to show record locks from *clerk. Can also be 
    used to terminate sessions directly.  New option !L added to *clerk. Using
    !L will activate the new locked records list. Enter on a selected entry 
    will give additional options to the user, including the ability to Kill 
    or Terminate a locked process without having to go to the command line.  
    Note: This option is only available on Unix/Linux/BSD

Task #1761    Added UID mapping to filePro, ddir/dprodir option F5.
    This allows for UIDs (User IDs) to be aliased to specific 
    usernames. In the event that a login account is removed from 
    your system, this can be used to maintain the link between the 
    removed login's UID and those stored in filePro, effectivly 
    allowing system variables such as @CB and @UB to be mainained.

    Windows Only:
        This also has the added benefit of allowing @CB and @UB to 
        function on Windows by linking a "pseudo" UID to a given 
        username. These UIDs are automatically generated but can 
        also be manually added. When a user opens filePro and their
        username does not exist in the UID map file, a UID will 
        be generated for that user. filePro will find the next 
        available UID in the list, starting from 2000, and assign 
        it to that username.

        On all platforms, UIDs stored in this program must be unique 
        and in the range 0-65535. Usernames can be duplicated on Unix 
        and Linux platforms, but must be unique on Windows.

        Usernames are case-sensitive on Unix and Linux platforms and 
        are case-insensitive on Windows platforms.

        Environmental Variables:
        PFUIDMAP = /path
        Alternate filePro UID map file. (Use full path)
            Note: Must be set in the environment.

        PFUSEUIDMAP = ON 
        Allows filePro to do UID mapping. Also expands the maximum 
        username length returned by @CB, @UB, and @ID to 32.
        Default: ON
                    
Task #1762    All functions that take a position default to the first character 
    in a field if not specified.
            
    All "is" functions return "1" for true and "0" for false.

    x=isalpha(fld [, pos])
        Is the character at the position given a letter?

    x=isdigit(fld [, pos])
        Is the character at the position given a number?

    x=isalnum(fld [, pos])
        Is the character at the position given a letter or number?
                 
    x=isspace(fld [, pos])
        Is the character at the position given a whitespace character?
        ' ', '\t', '\n', '\r', '\v', '\f' 

    x=islower(fld [, pos])
        Is the character at the position given lowercase?

    x=isupper(fld [, pos])
        Is the character at the position given uppercase?

    x=isxdigit(fld [, pos])
        Is the character at the position given a hexadecimal character?
        '0'-'9', 'A'-'F'

    x=iscntrl(fld [, pos])
        Is the character at the position given a control character?
        ASCII codes 0x00 (nul) - 0x1f (US), and 0x7f (del)

    x=isprint(fld [, pos])
        Is the character at the position given a printable character?
        ASCII codes greater than 0x1f (US) not including 0x7f (del)

    x=ispunct(fld [, pos])
        Is the character at the position given a punctuation character?

    x=isgraph(fld [, pos])
        Is the character at the position given a character with a 
        graphical representation?  The characters with graphical 
        representation are all those characters than can be printed 
        (as determined by isprint) except for space.

    x=tolower(fld [, pos])
        Return the character at the position given as a lowercase 
        character.

    x=toupper(fld [, pos])
        Return the character at the position given as an uppercase 
        character.

    str=strtolower(fld)
        Return the entire string converted to lowercase.

    str=strtoupper(fld)
        Return the entire string converted to uppercase.

Task #1767  Corrected a bug caused by #1691. FORM/FORMM should now corectly produce 
    output when not fully pathing to an output format.

Task #1773    Added new array size function to get the size of an array. Can be 
    used with GLOBAL, EXTERN, LOCAL, and SYSTEM arrays.

    x=ARRAYSIZE(array)
    Where array is the name of the array.
    Where x is the returned size of the passed array.

Tsk #1774    Added new DECLARED function to check if an array or longvar is 
    defined, meaning it is either declared LOCAL or GLOBAL or is declared 
    EXTERN but has a matcing GLOBAL definition.

    x=DECLARED(var)
        Where var is either a longvar or an array.
        Where x is the return value.
    Returns 0 if the variable is not fully defined.
    Returns 1 if the variable is fully defined.

Task #1784    Increased ACTION length in debugger from 60 characters to full 128. 
    Should now be the same as *cabe.

Task #1818    Corrected an issue where a duplicate field warning could display 
    while defining a lookup. Warning is now suppressed until saving the 
    processing table.
            
Task #1829    Added new flag -DM to [dr]clerk to disable the Index Mode prompt 
    from @ENTSEL.  Only works when not in update mode.
        
Task #1835 Added flag -RH to report to disable the automatic record number 
    reporting in the middle of the screen.  This enables placing text on the 
    center of the screen without it being overwritten when the display updates.

Task #1836 
    x=@GUI.PAUSE()
    Pauses automatic screen updating while in GI/Web.

    x=@GUI.RESUME()
    Resumes automatic screen updating while in GI/Web.
    
Task #1936 REPLACE() enhancement - allow null characters               
    Enhanced REPLACE() to accept null characters
    
Task #1938 New flags -EX and -C for fppack                             
    New flags -EX and -C for fppack.
    -EX : skip statistics
    -C  : skip continue and finished prompts
    
Task #1880 FORM WITHPROC                                               
    FORM WITHPROC "formname"
    FORMM WITHPROC "formname"

    Added additional command switch to FORM and FORMM commands to allow
    the associated processing table to run while in input processing.

    Note: You cannot call the WITHPROC variant from within another form
    UNLESS the calling form is a processing only form.
    
Task #1882 Addqual Program                                             
    Addqual allows you to easily add qualifiers to your files either
    interactively or through the command line.

    This runs interactively:
    addqual [filename]

    This runs automatically:
    addqual filename -q <qualname>
    as does this:
    addqual filename -q <qualname> -x <qual-to-copy-from>

    The automatic commands will display graphics on errors. You can keep
    graphics off with "-s" and errors will be printed on the command line
    if they occur.
    example:
    addqual filename -q <qualname> -s

    List of switches:
    -q qualifier to create
    -x qualifier to copy indexes from
    -s silent, no graphics
    -h --help syntax help
    
Task #1777 XFER - encrypted transfers server-peer

Task #1732 CABE F6 list files from F8 L-Load   
    
====================================
END OF NEW USP ITEMS
====================================
===================================
6.0.XX.23 Bug Fixes
===================================
Corrected an issue where an ODBC table wouldn't report as existing.

Corrected an issue with Find and Replace in dcabe/rcabe where control codes
    were incorrectly being interpreted as character and color codes.

Corrected an issue in dreport/rreport where exiting with an EXIT action in
    @DONE would not use the supplied exit value if zero records were selected.

Updated F6-D-L listing in dcabe/rcabe to restore typedown behaviour.

Fixed an issue in rcabe, dcabe, and dclerk where a syntax error could cause a
    crash upon saving or continuing.

Fixed a show map (F6 - View Fields) regression in dcabe/rcabe where button 
    labels were missing valid options.

Fixed an issue with the bottom screen display on Windows in dscreen.

Reworked the SPLIT() command to work with all standard array types. 

Fixed SPLIT() return value. There was an issue where the number of elements
    returned could have been more than the returned type allowed.

SPLIT() now clears the array before updating values and will now honor the edit 
    type(s) of the array, rather than always treating the data as a string.
    
Fixed a crash when using READOUTPUT() in processing.

Corrected a memory leak in LISTBOX() and SELECTBOX().

Corrected an issue with the "!L" escape in dclerk/rclerk. Previously, the
    calculation to determine the locked record number was incorrect.

Added an additional check when saving a record in dclerk/rclerk so that a zero
    length must-fill field will be treated as filled.

Corrected an issue with fields resetting when using user defined browses in
    clerk when a screen contains scrolling fields.

===================================
Version 6.0.XX.22 bug fixes
===================================
Fixed UID import feature in ddir where it wasn't finding any files.

User can now save a blank UID map in ddir.

Corrected a lock issue with UID maps.

Added additional error messages when importing files for UID mapping.

Fixed an issue with VARCHAR fields not working when using some ODBC drivers.

Corrected an issue with script cleanup causing a crash in dmakemenu.

Fixed a crash when adding an index to an existing empty file in ddefine.

Fixed a crash in fppack when rebuilding an index containing system controlled
    fields.
	
Corrected an issue in fpsql where viewing a file's layout would not retain the
    previous seleciton.

Fixed an issue in all runtime programs where aliased real fields in an array
    would not explicitly write on end.

Corrected a potential crash when adding a duplicate key to an index.

Fixed a crash caused by inserting a new unique key after a very long chain of
    duplicate keys to an index.

Fixed a break key issue in cabe F6 label lookup in F9 search. filePro was
    requiring twice as many break key presses than was actually required.

===================================
Version 6.0.XX.21 bug fixes
===================================
Corrected an issue on Linux/BSD where fuzzy search could cause a crash.

Fixed array handling in user defined functions that could cause a crash.

Updated fuzzy search to better handle long fields.

Fixed a crash in find and replace in cabe.

Fixed a crash when copying lines that don't exist in the file in cabe.

Corrected various files not being copied correctly in fpcopy.

Fixed indexes on qualified files in fpcopy.

Added sanity check to locked records check in clerk.

SPLIT() - Removed restriction on delimiter size. Size of array elements still 
    need to be defined for destination.

Fixed syntax error line reporting in cabe when jumping to a different place in 
    a prc file. Cabe now shows the line number in the editor correctly.

Corrected an issue loading tokenized global arrays in rclerk and rreport.

===================================
Version 6.0.XX.20 bug fixes
===================================
Corrected an issue when using the Rebuild Indexes option in dxmaint where
    options were not toggling correctly.

Fixed a regression where scrollable fields in a popup weren't displaying 
    correctly.
    
Fixed message boxes to better handle filePro escape codes.

Fixed -pv flag and print to screen to no longer corrupt the output.

Fixed alternate automatic processing loading in cabe, preventing variables from
    resolving correctly during syntax check.

Fixed a too many open files bug in fpcopy when working on a file with many
    qualifiers and indexes.

Corrected fppack to correctly handle encrypted files.

Changed index rebuild message location on the screen to no longer be hidden
    behind the progress updates.

===================================
Version 6.0.XX.19 bug fixes
===================================
Fixed an issue where libodbc would not correctly be found when initializing
    features that use ODBC.

Corrected an issue with RINSTR() where the starting position wasn't honored
    correctly.
    
Option 'C' to clear selection set in [dr]clerk will no longer cause an infinite
    loop when going back into index selection.

Updated PNG support for PDF outputs. Previously, some PNG files would appear
    corrupted when imported.

Corrected a potential crash when moving/reordering blob fields inside of
    dmoedef.

Added PFOLDCHAIN to allow CHAIN to return to the top of processing when a record
    is saved and the chain was performed inside of an event.

Updated listbox and selectbox code to no longer go outside of screen bounds.

Fixed date handling in XLSX generation when not using the datetime functions.

Fixed an issue where blobs/memos could become corrupted if assigning to the
    field more than once without writing the record.
    
===================================
Version 6.0.XX.18 bug fixes
===================================
Corrected Memory fault in FPSQL

Corrected licinfo to read license fallback file.

Corrected memory leaks in [dr]clerk and [dr]report.

Corrected issue where a select or list box would not clear correctly from the 
    screen.

Fixed positioning and moving objects (memo) on a form.

Corrected button text in F6 cabe.

Fixed an early error exit condition in ddir to report an error rather than 
    exiting.

Corrected "stair step" issue in cabe when using the -C flag on Linux/Unix.

Corrected a crash in clerk when using F5 to duplicate fields between records.

Updated F5 duplicate key in clerk to work with scrolling fields.

Added PFREUSEADDR=ON (default ON) to enable a port to be rebound more quickly 
    when using sockets.

Added code to prevent a dummy field from being used as a foreign key when 
    performing a fuzzy search.

Corrected and reverted wildcard behaviour during selection in clerk.

Corrected type checking for associated fields in selection sets.

Added buttons to clerk fuzzy search for scrolling the file map.

Increased the number of fields shown in fuzzy search in clerk.

Fixed some button shifting for F6 key in cabe.

===================================
Version 6.0.XX.17 bug fixes
===================================
Task #1948 Autosave not honoring config flags                                 
    Corrected an issue where Autosave was not correctly reading
    config variables. Addded initial change backup.

Task #1950 Scrolling fields in popups break placement                                
    Corrected an issue when drawing a popup that contains a scrolling field.
    
Task #1951 Enhanced runtime format for WHEN flags                                
    Enhanced runtime format to support extended WHEN flags.

    Added support for @WUKx* @WHPx* and @WBLx*. New WHEN values will be ignored
    in older versions of filePro.
    
===================================
Version 6.0.XX.16 bug fixes
===================================
Task #1928 XFER too many open files                                    
    Corrected prc_backups handling in xfer.
    
Task #1939 fppack BG/BS flag fix                                       
    Corrected the run in background feature for fppack.
    
===================================
Version 6.0.XX.15 bug fixes
===================================
Task #1918    PDF print MAP not working

Task #1916    SCO cabe not loading file List properly

Task #1917    Font Size issue with Windows 11 terminal.

Task #1914    Spellcheck crash when using personal list.

Task #1913    Corrected an issue where merge labels (IMPORT/EXPORT) 
    were not correctly indicating that the merge was closed.

Task #1891    Enhanced [dr]clerk to honor a passed index flag for browse 
    when @ONCE or @MENU is used in processing.
        PFNEWIXS=on (default off)
        
Task #1871 Updated dxmaint to keep the user in the index list when 
    working on automatic indexes, saving the position in the list 
    between operations.
    
Task #1844    Corrected an issue where non-text data could show up 
    as NULL in an ODBC mirror. Requires mirror to be resynchronized 
    to update missing field information.

Task #1845    Corrected an issue in an ODBC mirror where non-concise 
    data types were being used for synchronizing data.  This fix 
    prevents TIME and DATE fields from resolving to the non-concise 
    data type of DATETIME.
    
Task #1849    Checksum error not being reported in outputs

Task #1857    dprodir crashed on non-filePro file when deleting key/data

Task #1865    (rcabe) Corrected an issue where processing tables 
    containing user defined functions would fail to tokenize properly.

Task #1866    Limit outfiles.xml to only hidden outputs

Task #1870    Fixed a potential crash when providing an invalid field 
    number to a lookup expression in the debugger.

Task #1873    SPLIT function not working with leading spaces

Task #1892    Corrected -D flag handling in [dr]clerk to suppress the 
    correct bottom of screen messages.

Task #1901    dmoedef @b4, @c4, @t4, @u4 are now allowed in sort 
    selection.
    
Task #1864    Corrected an issue on Windows where an alternate auto 
    table set in cabe could not start with the word "auto"

Task #1869    Moved the auto cursor path options in dscreen to the 
    normal cursor path screen under a new F8 option.

Task #1893    Corrected an issue with user defined function argument 
    name parsing. Names that begin with the same sequence of 
    characters will now correctly be allowed, i.e. "col" and "color".
    
Task #1908    Corrected an issue where the field position wasn't being 
    kept between the header and data sections when editing browse 
    formats.

Task #1911    Corrected a missing initializer value related to index 
    searching that prevented the index search from being performed.
    
Task #1872 (Linux) Show Locked Records crash                                   
    From IUA prompt !L to show locked records.
    Tested 25 locked records. They were correctly sorted by
    record number. Terminated all records one-by-one without
    incident.
    
===================================
Version 6.0.XX.14 bug fixes
===================================
Task #1839 Was not previously documented for 6.0.XX.13
    Corrected an issue from a previous bugfix to prevent oversized
    scrollable fields from being dropped from the end of the screen
    if the field definition was too long to fit on the screen.
    
Task #1841 
    Fixed a crash in dmakemenu when a menu option name started with
    "BLOB" or "MEMO".
    
Task #1842
    Corrected a bug due to task #1579. Reverted the task to allow
    correct expression parsing in the processing engine. Restores the
    use of cm, cw, cx, cy, and cz in expressions.
    
===================================
Version 6.0.XX.13 bug fixes
===================================
Task #1763
    Fixed an issue where switching between menus in dmakemenu on a bad password 
    could cause a crash.

Task #1764
    Fixed an issue where switching between menus in dmakemenu on a bad password 
    could cause a crash.
    
Task #1765
    Changed [dr]cabe to not exit if an edit used in automatic processing and used in 
    input processing was not found.

Task #1768
        Corrected an issue with the lookup wizard in [dr]cabe when defining a fuzzy lookup. 
        The browse line would not be generated correctly when leaving the wizard.

Task #1769
        Fixed an issue where using '[' instead of '(' in parameter lists could cause an 
        invalid syntax error.
            e.g. x=listbox[array] vs x=listbox(array)

Task #1785
        Increased ACTION length in debugger from 60 characters to full 128. Should now be 
        the same as *cabe.

Task #1786
    Changes caused by a duplicate task #1691 broke the pathed version 
    of the FORM command added by #1722. Reverted changes.

Task #1779
    CLEARB now correctly ignored in drop processing
    
Task #1781
    Fixed an issue with SIGPIPE and user commands. SIGPIPE is now 
    handled like in 5.8 unless PFCATCHSIGPIPE is set to ON in the 
    environment.

Task #1784
    Increased ACTION length in debugger from 60 characters to full 128. Should now be the 
    same as *cabe.

Task #1790
    Corrected an issue where 'killing' a file using dprodir wouldn't remove the diretory 
    and its children on Windows.

Task #1791
    Corrected an issue with fpcopy that would prevent the prc_backups folder from 
    being properly handled.
            
Task #1793
    fpcopy will now correctly handle all extents on a file and will now mirror 
    them correctly.
    
Task #1794
    Fixed an issue where @GUI.xxx commands could run multiple times (once per break level) 
    in reports.
    
Task #1795
    Updated mirroring to correctly handle multiple extents on a file.

Task #1796
    Corrected an issue where upon turning on mirroring for a file and re-executing the 
    dialog option could cause ddefine to crash.
    
Task #1797
    Fixed an issue in GIserver where connecting with an unsupported client (version 
    7.12.1.6 or earlier) could cause the server to deadlock and stop accepting 
    connections (SCO).
    
Task #1798
    Corrected an issue where all files, when first mirrored, would be created as empty 
    blob files (blob binary data and structures in the file). All files are now correctly 
    created of the right type.

Task #1799
    Corrected and issue in ddefine where a broken mirror would not be displayed as such 
    (missing splash screen and 'B' flag in options).

Task #1800
    Fixed an issue where when switching a mirror from a broken state 'B' flag in options 
    in ddefine to a 'Y' would not re-create and update missing files.
    
Task #1801
    Corrected an issue in ddefine when trying to create qualifiers. The list would not 
    display unless also creating an index, it now correctly displays without having 
    other options flagged.

Task #1802
    Fixed a file handle leak in GIserver that could result in a Too Many Open files 
    error, hanging or crashing the server.

Task #1803
    Mirroring disabled warning will now correctly keep its own state between files. 
    Previously, switching between two "broken" mirrors would cause the splash screen 
    to show again.

Task #1804
    Corrected an issue in dprodir where filePro could crash if there were a large number 
    of files in the directory to be deleted.

Task #1805
    Corrected index scanning in *clerk when both a selection set and index are specified 
    on the command line. The scan will now also accept system variables in the selection 
    set, such as @PM, to be used in conjuntion with the index from the command line.

    Note: Using both flags implies PFIXS.

Task #1806
    Fixed an issue in cabe when the screen was redrawn by scrolling the page. If the 
    previoius field allowed for a lookup to be created and the destination field did 
    not, the prompt would still be displayed.
    
Task #1807
    Corrected the "Remove Script" feature when redefining a menu. Previously, if the 
    option had a flag such as '@', it would be included in the path of the file to be 
    removed.
    Note: Raw output is still not displayed.

Task #1808 (Web only)
    Corrected the wait flag on a menu option in web to display a message rather than 
    a blank screen. 

Task #1809
    fpcopy will now copy all files under a filePro file's directory structure.

Task #1816
    Corrected and added a syntax error to commands that parse screen names as literals, 
    i.e. SCREEN, SWITCHTO, etc. The command would not throw an error on screen names 
    over 1 character if it was not quoted and would parse them incorrectly.

Task #1817
    Corrected an issue with field switching in GUI under report. Fields will now 
    correctly switch when clicked on.

Task #1818
    Corrected an issue where a duplicate field warning could display while defining a 
    lookup. Warning is now suppressed until saving the processing table.

Task #1820
    Corrected an issue with ddefine where having PFQUAL set could cause issues if 
    the qualifer does not yet exist in the file while defining indexes.

Task #1824
    Corrected a crash in rclerk when using a POPUP due to a stack underflow. Issue 
    introduced in 6.0.01.06.
        
Task #1828
    Corrected an issue where screens created with ddefine sometimes would have incorrect 
    colors added to the bottom of the screen.

    Also updated the screens generated by ddefine from 3.0 to 4.0+.

    Added environmental variable:
        PFDDEFCOLOR=ON|OFF (default ON)

    When on, ddefine will create color screens, when off, monochrome.

Task #1830
    Corrected the free space checks on all operating systems for ddefine and dexpand. 
    Drive free space is now correctly accounted for. Some space is still reserved in 
    the check for the operating system.
    
Task #1831
    Corrected an issue where drives set in PFDSK in the format of PFDSK=C;D;E;F on 
    Windows would not correctly be parsed, leading to some programs failing to find 
    other drives.

Task #1835 Added flag -RH to report to disable the automatic record number 
    reporting in the middle of the screen.  This enables placing text on the 
    center of the screen without it being overwritten when the display updates.

Task #1836 
    x=@GUI.PAUSE()
   Pauses automatic screen updating while in GI/Web.

    x=@GUI.RESUME()
   Resumes automatic screen updating while in GI/Web.

Task #1838
    Corrected an issue when entering an invalid printer type in pmaint. Break key 
    will now correctly be honored when answering 'N' or breaking out of the question 
    asking if you want to pick a valid print code table from a list.

Task #1838
    Corrected an issue when entering an invalid printer type in pmaint. Break key 
    will now correctly be honored when answering 'N' or breaking out of the question 
    asking if you want to pick a valid print code table from a list.
    
Task #1840
    Corrected an issue where reports and forms generated in [dr]report were 
    initialized twice, causing two init print codes to be inserted into the output.
    
===================================
Version 6.0.XX.12 bug fixes
===================================

Task #1008 (All) **NEW**
    New xcabe program to allow Run-time quick start compiles.  There is
    no user interface except to press ENTER if an error is encountered.
    
Task # 1699 (All)
    Fixed MEMO text to ignore spaces after an ENTER
    
Task #1712 (Nix)
    Updated "finish" script to honor PFLICFILE.
    
Task #1723 (All)
    Added an alias to PDFPOSTPRINT (PFNEWPOSTPRINT), default OFF. Added 
    PFPPFULLPATH to augment the filename passed to the post print handler, 
    default ON, this causes the filename passed to the postprint script to 
    contain the full path to the file, not just the file name. Set to OFF 
    to revert to old behaviour.  PFPOSTPRINTnnn will now work with normal 
    file destinations. Same rules as the old global PFPOSTPRINT but also 
    supports PDF files. 
    
Task #1728 (GI)
    Reworded "Server Serial Number" prompt when adding a new server entry 
    to GIadmin to "filePro Serial Number" to avoid confusion.
    
Task #1750 (All)
    XFER was not properly copying 'backup' prc files.
    
Task #1758 (All)
    NEW command OPENDIR2 to handle long-named files and paths.
    e.x.
        N = OPENDIR2(mask, path, fmt_sz, ext_sz, nam_sz)
    All arguments are optional.

Task #1776 (All)
    If you had an environment or config variable named XXSOMEVAR 
    it would still qualify as PFSOMEVAR.

Task #1764
    Fixed an issue where CO in a selection set would not properly check if the value 
    was contained in a field.    
    
Task #1766 (Windows) XFER: sending files on Windows is very slow                 
    Speed improvements for XFER on Windows

Task #1770 Readline EOL not removing CR   

===================================
Version 6.0.XX.11 bug fixes
===================================

Task #1738 (All)
    Reversed task 1737 and added new @DV for the distribution release
    number.
    
Task #1740 (All)
    PFCHECKLOCK was causing an improper error on read-only MEMO Show

Task #1741 (All)
    MEMO CLEAR was not working with a lookup memo when reference by the 
    lookup handle

Task #1742 (All)
    MEMO functions were causing sporadic memory leaks.
    
Task #1743 (All)
    Modifying a lookup that has an Auto-Index selection set would cause
    a DKNF error in certain cases.

Task #1748 (Windows)
    Uppercase FP in menu command causes comspec error

Task #1611 (All)
    Change in behavior for COntains in Long and Short Selection.
    Any COntains no longer worries about length or edit in its search.
    IMPORTANT:  Any indexes previous built with selection criteria in
    prior version MUST BE REBUILT!!!
    
Task #1647 (All)
    *clerk index selection was missing the correct record in some
    cases when the index had a selection set.
    
Task #1739 (Windows)
    GIadmin shortcut was not always created during install.

Task #1752 (All)
    Fixed a bug in ODBC Mirroring.

Task #1753 (All)
    Added PFCALLDBG, default ON, that can be used to have the debugger 
    ignore calls when turned OFF.
    Note: DEBUG ON will still enable the debugger in a call.
    
Task #1744 Cabe autosave not checking if prc_backups is a directory.   
    Fixed an issue where cabe wouldn't check to make sure that
    prc_backups was a directory. It now correctly checks and removes the
    file if it's invalid.

Task #1747 (Windows) pmaint crashes on F6 in printer selection list on Windows.  
    Corrected a bug where pressing F6 twice in pmaint to select a printer
    would cause a crash.

===================================
Version 6.0.XX.10 bug fixes
===================================

Task #1721 (All)
    Improved Spooler timiout handling in order to avoid 
    spooler shutdown during large printing operations.

Task #1722 (All)
    Fixed the ability to use path and filename on FORM
    
Task #1729 (Web)
    Fixed the sequence in which @VR was being cleared.
    
Task #1730 (All)
    Fixed a bug in pkeep by reverting Task #888 which will
    be readdressed in a future update
    
Task #1731 (All)
    Enhanced transfer speed of fPTransfer
    
Task #1734 (All)
    Fixed a bug where assigning to a real field from a mid statement
    could blank the field if the field passed to mid was the same.
    
Task #1735 (All)
    A truncated field on a screen was not allowed in cursor pathing
    in some situations.

Task #1736 (All)
    Fixed and enhanced the @VR system variable

Task #1737 (All)
    Added PFZEROLENWARN=OFF (default ON) to disable cannot assign to
        zero length field message when saving a processing table.

Task #1778 (All)
    ddefine was not creating qualified indexes
    
===================================
Version 6.0.XX.09 bug fixes
===================================

Task #1706 (All) 
    Setting PFQUAL in *cabe broke the lookup wizard
    
Task #1710 (All)
    runmenu could crash loading some older menus
    
Task #1711 (NIX)
    Some OS errors were bypassing the signal hander
    
Task #1713 (All)
    *cabe was ignoring the new -Cxx flags
    
Task #1715 (SCO)
    'BREAK' in dscreen was crashing
    
Task #1718 (All)
    POPUP was not display the full screen
    
Task #1719 (All)
    POPUP UPDATE was crashing when r,c was used
    
Task #1720 (All)
    Added Error Message if browse lookup closed in
    DROP processing
    
Task #1726 (All)
    Some commands were seGving on long or invalid
    filenames
    
Task #1727 (NIX)
    Removed the need for libfpodbc.so by statically
    linking it the executables.

Task #1727 (NIX) Remove libfpodbc.so requirement                             
    Removed the need for libfpodbc.so on all *nix platforms.
    
===================================
Version 6.0.XX.08 bug fixes
===================================

Task #908 (All)
    A repeat fix of a previous bug in prc=
    checking of a browse lookup
    
Task #1058 (Nix)
    Adjusted finish script for a bug in handling
    PFLICFILE value
    
Task #1693 (All)
    String parsing on chmod, mkdir, etc. caused syntax
    errors/warnings. This was caused do a preprocessor running the
    same syntax routines as the actual syntax checker/tokenizer.

Task #1694 (All)
    Corrected a case where some bitwise operators (~^ ~| ~& ~> ~<)
    would cause a buffer overrun or return a signed value incorrectly.
    
Task #1695 (All)
    PUSHKEY is now correctly ignored when running processing in
    debugging mode.

Task #1696 (All)
    FLUSHKEY does not clear keystrokes added by PUSHKEY.

Task #1375 (All)
    Updated errmsg file with latest error codes

Task #1675 (All)
    F5 would not properly fill a truncated field
    
Task #1705 (All)
    WORDWRAP broke when correcting another MEMO issue.  It
    now properly breaks.

Task #1704 (All)
    Cursor path editing would not properly ignore protected fields.
    
===================================
Version 6.0.XX.06 bug fixes
===================================

Task #1673 (OpenSuSE)
    GIserver install was failing to create service

Task #1674 (All)
    Added AUTO to clarify description in dmoedef
    
Task #1681 (All)
    Syntax check pointed to wrong line on a 
    duplicate long variable declarartion
    
Task #1682 (All)
    ftp message show/hide flags were reversed
    
Task #1667 (All)
    Modified Extended Selection so that edit does not allows
    apply.  i.e.   Using COtains for a part of a phone number.
    
Task #1679 (All)
    Modified record selection to accept only numbers.
    Allowing other input selected incorrect records.
    
Task #1672 (All)
    The changes were to IXSEL (new optional 3rd parameter) 
    and IXSORT (new optional 4th parameter). The parameter must be 
    a path representing an alternate PFDIR to use temporarily for 
    the function.
    IXSORT and IXSEL were failing on qualified indexes
    
Task #1117 (All)
    Improved license related shared memory error reporting.
    
Task #1687 (All)
    Fixed a bug where having a field defined at the end of a row
    would not resolve properly if the following line started with
    text instead of a space.

Task #1631 (All)
    Memo text edit window was not scrolling in certain circumstances

===================================
Version 6.0.00.05 bug fixes
===================================

Task #1624 (Windows)
    Added Desktop Shortcut for GIadmin 6.0
    
Task #1656 (All)
    Archive did not handle lookup to lookup
    
Task #1657 (All)
    Creating a new scree required two Saves to
    save and exit
    
Task #1658 (All)
    Cursor positionin was wrong after using
    search in the config editor
    
Task #1659 (All)
    Search & Replace in cabe caused a line
    truncation when answering NOT

Task #1661 (All)
    Index in *clerk is going to the incorrect record
    when built off of multiple fields. Related to a 
    bad fix from #1503
    
Task #1663 (All)
    Improper key buffer management when using
    certain combinations of PUSHKY
    
Task #1664 (All)
    Memo memory fault when using certain sequences
    of Page Up and Page Down in memo editor

===================================
Version 6.0.00.04 bug fixes
===================================

Task #1652 (All)
    When editing a defined lookup in processing, the highlight
    was on the wrong index.

Task #1653 (All)
    Define processing was not reporting a correct line number
    on a syntax error.
    
Task #1654 (All)
    Define processing was crashing on Search & Replace on a new
    table that had not yet been saved.

Task #1655 (All)
    JSFILE was passing syntax when a function had not been
    sepcified

Task #1656 (All)
    Enhanced ARCHIVE command to work with 2 lookups
        ARCHIVE lu1 TO lu2

===================================
Version 6.0.00.03 bug fixes
===================================

Task #1651 (All)
    Corrected a change introduced into ddefine that caused the map
    file to be truncated on the last section of the header. This
    caused ddefine and other developer programs to treat the file as
    if it had a creation password.
    
===================================
Version 6.0.00.02 bug fixes
===================================

Task #1626 (All)
    Using a merge field from import fails on condition line would fail.

Task #1628 (All)
    Bug occurred in an index when a record was added or deleted from an
    automatic index using a selection set through a lookup.

Task #1629 (All)
    In certain situations the screen text would scroll a screens
    content and message to wrap in F6 Browse function.
    
Task #1633 (All)
    Added an error message to cabe if code assigns a value to an invalid field.
    
Task #1636 (GI)
    A previous fix for CRON functions broke MSGBOX in GI.

Task #1625 (All)
    SORTARRAY now puts any blank fields at the end of the sort.

Task #1634 (All)
    Corrected text on setting selection set passwords

Task #1635 (SCO)
    Help display was improperly wrapping.
    
Task #1638 (All)
    Field length for description was extended from 80 to 255

Task #1640 (All)
    Under certain conditions clearing the BUSYBOX display
    would not properly redisplay the screen contents.
    
Task #1641 (All)
    Enhanced fPTransfer to properly xfer the auto index
    selection criteria

Task #1642 (All)
    ddefine create screen 0 caused a *clerk invalid screen
    error
    
Task #1643 (All)
    Removed debug display of field numbers from IUA index
    selection
    
Task #1644 (All)
    dmoedef was not displaying all print codes
    
Task #1632 (All)
    32bit Installs had the wrong 'rename' program.
    
Task #1645 (All)
    fPCopy was not properly copying the Auto Index Selection Sets
    
Task #1646 (Linux)
    Certain colors and highlights were not being shown properly.
    
Task #1648 (Linux)
    Under some situations a *clerk screen would shift improperly
    
Task #1649 (All)
    ddefine did not properly make an index with a selecton set
    
Task #1650 (All)
    fPCopy would crash or give an error message when copying a
    mirrored file.

===================================
Version 6.0.00.01 bug fixes
===================================

Task #1607 (All)
    Removed double F7 label
    
Task #1608 (All)
    dosetforms - replace toggle with select all / select none

Task #1386 (All)
    Display when index is built on selection set.
    
Task #1619 (All)
    Fixed changing Broken mirror status to Yes mirrored status
    in define files.
    
Task #1620 (NIX)
    Correct error to redirected stdin
    
===================================
Version 6.0.00.00 bug fixes
===================================

Task #1128 (GI)
    F6 was not working from pmaint to select Windows printers.
    
Task #1165 (All)
    Better error handling when indexes are in a known need to 
    rebuild state.

Task #1239 (All)
    MySQL/ODBC was returning a -1 error on longblobs.  The problem was caused 
    by the precision being reported as -1.
    
Task #1255 (GI)
    GI now traps no password in user.cfg file
    
Task #1310 (GI)
    GIserver now handles HD Serial Number with or without dashes
    
Task #1407 (All)
    xx = @odbcexception.clear crashes filePro
    
Task #1571 (GI)
    Occasional broken lines were drawn

Task #1569 (GI)
    GIserver was missing some shutdown messages    

===================================
End End End End End End End End End
===================================