{
  "disks": {
    "1": {
      "dirs": [
        {
          "path": "/",
          "files": [
            {
              "name": "FLEXFILE EXE",
              "size": 248434,
              "date": "1991-09-19",
              "time": "1:07"
            },
            {
              "name": "INSTALL  TXT",
              "size": 2320,
              "date": "1991-09-19",
              "time": "1:07"
            },
            {
              "name": "README   TXT",
              "size": 10374,
              "date": "1991-09-19",
              "time": "1:07"
            }
          ]
        }
      ]
    }
  },
  "desc_file": "README.TXT",
  "desc_text": "                              FlexFile\r\n                            Version 1.07\r\n                        Ganahl Software, Inc.\r\n                         Copyright (c) 1991\r\n\r\n\r\n    Please read the contents of this file.  It represents changes to\r\n    the documentation which occurred after printing and in some cases\r\n    represents information critical to the use of FlexFile.\r\n\r\n    In all cases, the Norton Guides database (FlexFile.ng) and the\r\n    (FlexFile.doc) supercede the printed manual. In addition, all\r\n    elements discussed in this readme file are incorporated into the\r\n    Guides and FlexFile.doc.\r\n\r\n    Note: FlexFile is a commercial product.  Do not make any copies\r\n    except for archival purposes.\r\n\r\n\r\nGanahl Software, Inc.\r\nP.O. Box 4275\r\nDeerfield Beach\r\nTel: (305) 566-1796\r\nFAX: (305) 566-3517\r\n\r\n*************************************************************************\r\nGeneral Notes (Ver 1.07)\r\n\r\nThis readme file is updated in reverse chronological order.  Therefore,\r\nif you already own FlexFile and receive this as an update, you will only\r\nhave to read down to your previous version.\r\n\r\nThe only change in Ver 1.07 is the addition of the encryption and\r\ndecryption functions V_ENCRYPT(), V_DECRYPT() and V_SETKEY().  See the\r\nNorton Guides Database (included in self extracting arcive FlexFile.exe).\r\n\r\n*************************************************************************\r\nGeneral Notes  (Ver 1.06)\r\n\r\nVersion 1.06 is a minor upgrade addressing a few minor bugs and adding a\r\ncouple of new functions.\r\n\r\nThe main feature, however, is internal error checking for programmer\r\nerrors.  There were several instances in previous versions where, if the\r\nprogram went awry, the DBV file would get corrupted.  Error checking has\r\nbeen introduced to thwart corruption (even by code that behaves poorly).\r\n\r\n*************************************************************************\r\nGeneral Notes  (Ver 1.03, 1.04, 1.05)\r\n\r\nMinor bug fixes.\r\n\r\n*************************************************************************\r\nGeneral Notes  (Ver 1.02)\r\n\r\nVersion 1.02 of FlexFile is primarily a maintenance release.  However, the\r\nsystem which saves and restores Clipper arrays has been completely\r\nrewritten.  This should only affect you if ALL of the following three\r\nconditions apply to you.\r\n\r\n   1. You have an application written in Clipper 5.0x that is sharing a\r\n   FlexFile DBV file with an application written in S87.\r\n\r\n   2. You had saved a Clipper S87 array to this FlexFile DBV using the\r\n   FLEX_87.LIB version 1.01 or less (version 1.01 was dated 2/18/91).\r\n\r\n   3. You want to retrieve that array with a program linked with\r\n   FLEXFILE.LIB version 1.02 or greater (version 1.02 is dated 7/27/91).\r\n\r\nThe only change you must make is to use V_FILLEN() in place of V_LEN() when\r\nDECLAREing the array.  To get a full description of this process, read the\r\ndocumentation on V_FILLEN() and V_FILLARR() in the Norton Guides data base\r\nor the FlexFile.doc documentation.\r\n\r\nThe good news is that any array saved with this *new* FLEX_87.LIB (version\r\n1.02) are totally compatible with single dimentional arrays saved or\r\nrestored with the *new* FLEXFILE.LIB (version 1.02).  That means that you\r\ndo not have to use the V_FILLARR() functions in your 5.0 code to read\r\narrays that are created with S87 code version 1.02.  Read the documentation\r\non V_ARETRIEVE() and V_FILLARR() to understand how to implement these\r\nfunctions for Clipper 5.0x code and for Summer 87 code, respectively.\r\n\r\nThe reason for all these array changes is a vast improvement in speed and a\r\nsubstantial reduction in size of the *new* stored arrays.\r\n\r\n*************************************************************************\r\n\r\nThe following functions were omitted from the manual because they are new\r\nsince the time of printing. They are fully documented in the Guides and the\r\ntext documentation \"FlexFile.doc\".\r\n\r\nV_ARETRIEVE() - Retrieve an array from a field (Clipper 5.0 only)\r\nV_AREPLACE()  - Replace old data with an array (Clipper 5.0 only)\r\nV_COMMIT()    - Commit DOS buffers to disk. (DOS 3.3 or greater)\r\nV_DECRYPT()   - Decrypt a variable previously encrypted with V_ENCRYPT().\r\nV_ENCRYPT()   - Encrypt a Clipper string to an unreadable form.\r\nV_FILLEN()    - Get length of array saved by FLEX_87.lib (ver 1.01 or less).\r\nV_HANDLE()    - Return the DOS file handle for a DBV file.\r\nV_ISOPEN()    - Determine if a file is open in a DBV work area.\r\nV_RANDOM()    - Return or seed a psuedo random number.\r\nV_SET_COMMIT()- Set DBV/DOS buffer flushing automatically on/off.\r\nV_SETKEY()    - Set a password key to be used with V_ENCRYPT() and V_DECRYPT()\r\nV_TOPPTR()    - Read/Replace FlexFile data without a DBF file (advanced).\r\nV_WALK_DBV()  - Step from field to field in a DBV file without a DBF.\r\nV_WNDCREATE() - Create a Proclip window from one previously V_REPLACE()d\r\n\r\n******************************************************************************\r\nDisaster Recovery\r\n\r\nRead the documentation on Disaster Recovery in the Norton Guides data base\r\nor the FlexFile.doc file.  This outlines probable causes of corrupted DBV\r\nfiles, methods for recovery of corrupted DBV files, and how to manage a DBV\r\nfile when its related DBF file is lost or dammaged.  Read the documentation\r\non V_WALK_DBV() if you have lost the controlling DBF for a DBV.\r\n\r\n******************************************************************************\r\nFlexFile Strongly Typed Arrays\r\n\r\nFlexFile's Strongly Typed Arrays were designed primarily to allow\r\nmulti-dimensional arrays in far less memory.  However, because of the new\r\nVMM system in Clipper, flexfile's \"S\"tring type arrays SHOULD NOT BE USED\r\nwith Clipper 5.0x.  They will actually use more conventional memory than\r\ntheir Clipper counterparts.  However, all other types of FlexFile arrays\r\nare handled properly by the VMM system and will be smaller and more\r\nefficient than their Clipper counterparts.\r\n\r\nThe Clipper 5.0 A_ADD() and A_SIZE() had some problems in the version 1.01\r\nand version 1.00.  These functions have been fixed in version 1.02.\r\n\r\n******************************************************************************\r\nVersion 1.01\r\n*************************************************************************\r\n\r\nThe manual (pg. 10) states that V_USE will fail (returning -1) if\r\nyou are V_USE()ing a file in shared mode and are working on a\r\nlocal drive that does not have SHARE.EXE loaded.  This was\r\nchanged in order to be compatable with Clipper's USE and locking\r\nfunctions.\r\n\r\nThe new implementation allows a file to be opened in shared mode\r\non a local drive (even if SHARE.EXE is not loaded).  No actual\r\nlocking is provided, of course, until SHARE.EXE is loaded or\r\nuntil a network shell such as NET4 is introduced into the\r\nenvironment.\r\n\r\n*************************************************************************\r\n\r\nA_DECLARE() has a main syntax and an optional syntax.  The\r\nprinted documentation has a misprint in the optional sytax for\r\nthe function (bottom of page 77).\r\n\r\nThe printed documentation reads (incorrectly):\r\n\r\n    aLargeArr = A_DECLARE(@<aLargeArr>,\r\n                           <cType>,\r\n                           <nElement>,\r\n                           [<nElements>...] )\r\n\r\nThe following syntax is what was intended:\r\n\r\n    // Do not use the return value from A_DECLARE when passing\r\n    // the array by reference.  Also, note the order of parameters\r\n    // one and two.\r\n     A_DECLARE( <cType>,\r\n               @<aLargeArr>,\r\n                <nElement>,\r\n                [<nElements>...] )\r\n\r\n*************************************************************************\r\n\r\nBinary (logical) arrays are not supported by many of the FlexFile\r\narray functions.  For example, you cannot A_SORT() a binary array. The\r\nFlexFile array functions which operate on binary arrays are:\r\n\r\n             A_STORE()\r\n             A_SCAN()\r\n             A_RETRIEVE()\r\n             A_LEN()\r\n             A_TYPE()\r\n\r\nThe printed manual failed to recognize this fact in several of the\r\narray functions.\r\n\r\nNote also, that the previous \"Readme.txt\" file specifically stated that\r\nA_SCAN() did not support binary arrays.  A_SCAN() does support binary\r\narrays; the readme file was in error.\r\n\r\n\r\n*************************************************************************\r\n\r\nMany of the array functions are described in the manual as having a\r\ndefault scope of \"to the end of the row in the current dimension\".\r\nThis was changed in every case to be \"to the end of the array\".\r\n\r\nSo, for example, if you are copying one array into another and do not\r\npass a parameter indicating how many elements to copy, FlexFile will\r\ncopy all elements to the end of the array.  This is true for multi-\r\ndimensional arrays as well. See the section on ARRAYS in the manual\r\nto understand the \"wrapping\" behavior of functions like these that span\r\nseveral dimensions.\r\n\r\n*************************************************************************\r\nThe following functions have had minor changes in the written\r\ndocumentation.  The Norton Guides and the \"FlexFile.doc\" file have\r\nthe most up to date documentation on these functions.\r\n\r\n   A_AVERAGE()\r\n      if nCount is not specified, the average will continue until\r\n      the end of the array, not the end of the current row.\r\n   A_ADD()\r\n      <aTarget> _must_ be passed by reference.\r\n      return is .t. or .f. not value.\r\n      value is no longer a parameter.\r\n   A_SIZE()\r\n      <aTarget> _must_ be passed by reference.\r\n   V_REPLACE()\r\n      returns a (.F.) on error\r\n   A_RETRIEVE()\r\n      returns a '' on error\r\n   V_POKE()\r\n      optional parameter  #3 was not originally optional\r\n**************************************************************************\r\n\r\n   The error codes in Appendix B have be defined explicitly in\r\n   the Guides and in FlexFile.doc\r\n\r\n**************************************************************************\r\n\r\n   The manual states that a V_REPLACE( \"\", old_fld ) is not the same\r\n   as a V_DELETE().  This has been changed so that the two have the\r\n   same affect.  The above stated V_REPLACE will return six spaces\r\n   which is a \"null pointer\" to FlexFile. All space that was associated\r\n   with old_fld will become available for use by other data.\r\n\r\n**************************************************************************"
}