===============================================================================
==========================                         ============================
==========================     VERSION HISTORY     ============================
==========================                         ============================
===============================================================================


     For easy reference, this history is presented in reverse order (most
     recent version first).  Remember:  if you have previously registered
     Parse-O-Matic, you can self-register any evaluation copies we create
     for two years (six years for deluxe registration).  Thus, your small
     investment in the  initial  registration  can provide you  with many
     free updates.  Since we do not  automatically  ship new versions, we
     invite you to visit our Web site (users.aol.com/psoftinfo) every few
     months, to see what's new.


+------------------------- WE ARE CUSTOMER-DRIVEN! ---------------------------+
|                                                                             |
|    Most of the enhancements to Parse-O-Matic are inspired by POM users.     |
|    We charge a nominal fee for custom work, but we will usually provide     |
|    a discount if the requirement seems to be beneficial to other users.     |
|                                                                             |
|    ******* PARSE-O-MATIC'S EVOLUTION IS GUIDED BY OUR CUSTOMERS *******     |
|                                                                             |
+-----------------------------------------------------------------------------+


------ ------------------------------------------------------------------------
 VER.  WHAT'S NEW IN THIS VERSION
------ ------------------------------------------------------------------------

3.95A  Corrected problem with rounding of negative real numbers

3.94B  Cosmetic changes only

3.94A  New commands
         PEEK lets you look ahead to the next line in a simple text file
         SETERROR sets program return code but does not terminate like HALT
       New comparators
         SAMEAS
           Compares two strings regardless of case and surrounding whitespace
             Example:  " Cheshire Cat " SAMEAS "CHESHIRE CAT"
         String-length comparators
           These save you an extra step (e.g. SETLEN then a comparison)
           You can now compare the length of a string against a number
             Example:  IF $FLINE LEN= "0" THEN NullLine = "YES" ELSE "NO"
       Enhancements
         The RANDOM command no longer generates the same random sequences
           Previously, different runs of a POM file obtained the same sequence
         The processing display is updated about once per second
           Previously, the display changed for each pass through the POM file
           This new approach slightly improves processing speed
       New utility
         WINUTIL lets you use certain Windows functions in a DOS window
           Its main purpose is to give you access to the Windows clipboard
       Processing log (POMLOG.TXT) now reports the number of files processed
         This is only done if more than one file is processed (i.e. wildcards)
       Changed START.BAT to INFO.BAT
         This avoids any confusion with the Windows START command

------ ------------------------------------------------------------------------
 VER.  ENHANCEMENTS IN PREVIOUS VERSIONS
------ ------------------------------------------------------------------------

3.93A  Applied a patch to the language (Turbo Pascal) underlying Parse-O-Matic
         An initialization error could affect the newer, faster processors
         This could cause a "Runtime Error 200" on machines of 200 Mhz or more
           This would happen immediately when the program started
             In other words, if you didn't see the error, it doesn't affect you
       Added negative indices to the COPY, DELETE and EXTRACT commands
         These allow you to reference from the right edge of a variable
           e.g. COPY x "ABCD" "-2" "-1" sets x to "CD"
         The old way to get "the last character" involved SETLEN and COPY

3.92A  Enhanced SET command
         Added trimming and default settings to SET command
         This turned out to be so useful that it alone warranted a new release!
       Minor changes to documentation
       Renamed several files to use proper .TXT extension
         This is in deference to Windows users

3.91A  New Features
         Job (POJ) files contain the parameters for a POM command
           Job files allow you to prompt for the input and output file names
             See "Parse-O-Matic Job (POJ) Files" in the manual
           Job files are a handy way to run POM from Windows
       New Command
         FILESIZE var value
           Returns size of file, or null if file does not exist
           See "The FILESIZE Command" in the manual
       Enhanced Commands
         OFILE can now deduce an output file name, based on the input file name
           See "The OFILE Command" in the manual
         TRIM now has "multiple" option
           TRIM $FLINE "M" " " removes multiple spaces, leaving only singles
           See "The TRIM Command" in the manual
       POM-File Encryption
         New SCRAMBLE utility discourages users from tampering with a POM file
           The POM file is rendered unreadable -- except to Parse-O-Matic
           See "Encrypted (Scrambled) POM Files" in the manual
       Other Enhancements
         The code for trimming has been rewritten for faster performance
           This improvement should be noticeable when converting large files
         The SHOWNUM utility now converts characters as well as numbers
           See "The SHOWNUM Utility" in the manual

3.90A  New Features
         Deduced, array and eponymous variables
           This is an extremely powerful feature of Parse-O-Matic
           Supports 1, 2 and 3 dimensional arrays
           Supports eponymous variables
             You can name a variable after a piece of input data
             You can not do this kind of thing in most standard languages
         User-specified command-line parameters
           /X /Y /Z set $CMDLINEX $CMDLINEY $CMDLINEZ
         New SCANPOSN command compares a string against a list of items
         New RANDOM command generates a random number
       Enhancements
         POM now runs in protected mode for improved performance
           POM will no longer run on 8088 and 8086-class machines
           A custom 8088/8086 copy of 3.90 can be made for you, if necessary
         Improved capacity for variables and literals
           Increased maximum number of variables and literals from 1000 to 2000
             This can get used up quickly by arrays (each entry is a variable)
         Optimized storage of literals
           Identical literals only take up one variable/literal slot
         Vastly improved file viewer (SEE.EXE)
           No limits to file length; views lines up to 255 chars wide
           Many helpful search commands; built-in help and customization
           This version is to support POM -- not for distribution
       Problems Fixed
         Corrected unexpected page eject when using OFILE then PAGELEN
           This only mattered if PAGELEN was set for the previous file
         Corrected occasional spurious character "found" at end of SPLIT files

       ----------------
       UPGRADE ADVISORY
       ----------------

       Any variable names that contain parentheses "(" or ")" should be renamed
       Any variable names that contain commas should be renamed
         In general, use only A to Z, 1 to 9 and underscore in variable names

       Debugging notice
         The OUT and OUTEND commands work slightly differently
           They no longer report if they encounter a non-existent variable
           If they can't find a variable, they simply put nothing at that spot
             This is closer to the general theory of variables of POM
             This also allows for simpler code with scattered array variables

3.81C  Corrected leap-year interaction between DATE, MAKEDATA and MAKETEXT
         This occured when converting both date serials and text dates

3.81B  Corrected typographical error in the user manual

3.81A  New commands
         OVERLAY  lets you extend or overwrite portions of a variable
         REWIND   lets you back up in a SPLIT or CHOPped file
         ROUNDING controls rounding by CALCREAL (see Upgrade Advisory)
         SHOWNOTE displays a short progress message on the processing screen
       Enhancements
         The GET command
           GET can now be used in SPLIT files, not just CHOPped files
           GET x "EOF" returns "Y" or "N" for End-of-File condition
           LOOSE parameter (STRICT is default)
             Permits processing to continue despite unexpected end-of-file
         Manual reading (CHOP 0) now runs slightly faster
       Problems fixed
         ERASE did not work if the file name had a plus ("append") in front
         Quiet Mode (/Q) is better behaved when POM is called by a DOS program
           Minor changes sometimes appeared on the screen if it was not redrawn

       ----------------
       UPGRADE ADVISORY
       ----------------

       This notice concerns you if you use the CALCREAL command.

       Due to the way that real numbers (as opposed to integers) are
       calculated in binary, CALCREAL would sometimes return unexpected
       results.  For example:

       CALCREAL x = "400.00" "-" "390.60" "2"

       produces the answer "9.39" rather than the expected answer of "9.40".

       This is because, in real-mode binary calculations, the answer ends up as
       9.3999999, which is very close indeed to the correct answer.  However,
       when you specify "two digits of precision" (the "2" in the command), the
       answer is simply truncated after two digits, yielding the answer "9.39".

       This issue is now resolved.  When appropriate, answers are rounded up,
       if you have explicitly specified a fixed number of digits of precision.
       Floating calculations are not rounded.

       This means that existing POM files may work slightly differently than
       before.  To make your existing POM files continue to work the way they
       used to (i.e. simply truncating answers when you specify the number of
       digits of precision), place the following command at the beginning of
       your POM file (typically in the PROLOGUE):

       ROUNDING "N"

       This will disable the rounding feature, which is, by default, enabled.

       See "The ROUNDING Command" (in the user manual) for full details.

3.80A  New KEEP command performs a conditional page eject to keep text together
       New CODE and CALL commands allow you to define subroutines
       New predefined value $LINECOUNTER
       Color control for menus (see Upgrade Advisory)
       Changes to user manual
         Reformatted for easier reference
         Manual file has been renamed from POM.DOC to MANUAL.DOC
       Please note that our phone numbers for credit card orders has changed
         See the text file ORDER.FRM for the new numbers

       ----------------
       UPGRADE ADVISORY
       ----------------

       This notice concerns you if:

       - You use the old menu program MENU.EXE in your own batch files, or...
       - You placed the old DEVELOP.BAT file in another directory, or..
       - You are using a modified copy of the old DEVELOP.BAT

       The old menu program (MENU.EXE) has been replaced by a slightly improved
       version, named PSMENU_D.EXE.  The name was changed to avoid confusion
       with the numerous menu programs that are also called MENU.EXE.  (Some
       users experienced problems when using the DEVELOP.BAT batch file because
       they had more than one MENU.EXE on their system.)

       Please do not rename PSMENU_D.EXE to something else; we will be
       upgrading our multi-platform support soon, and the menuing system will
       expect the DOS menu program to have that name.

       PSMENU_D lets you control the color of the menus.  For details, print or
       view the comments in the file POM.MNU.

       You may use PSMENU_D in your other applications.  Enter  PSMENU_D  at the
       DOS prompt for an explanation of the distribution (legal) conditions.

3.71A  Fixed: Some data might be lost if OUT generated exactly 254 characters
       and then additional data was added with another OUT or OUTEND command

3.70A  New commands
         CVTCASE converts a variable to uppercase or lowercase
         GETENV  obtains a system environment variable (e.g. PATH)
         MSGWAIT controls the behaviour of error messages
         REMAP   transforms sub-strings into other strings
         MAPFILE reads a file containing data transformations for REMAP
       Enhancements to PARSE, PEEL and FINDPOSN
         Search strings (e.g. "2*,") are now known as decapsulators
         Overlapping decapsulators now behave more gracefully
           PARSE and PEEL return an empty string; FINDPOSN returns "0"
             This situation used to generate an error message
               i.e. "From" value exceeds "To" value
               Most users found this unhelpful or confusing
               For details, see "Overlapping Decapsulators" in the manual
         New search parameter looks for "last occurence" or "first occurence"
           Example of  "last occurence":  PARSE xyz $FLINE ">*$" ">*.00"
           Example of "first occurence":  PARSE xyz $FLINE "<*$" "<*.00"
       Documentation
         Improved quick-reference section
           The "importable" version has moved from EXAMPL04.POM to QUICKREF.POM

       ----------------
       UPGRADE ADVISORY
       ----------------

       This notice concerns you if:

       - You have created POM applications that are run unattended
       - You use the HALT command

       (See "Unattended Operation" and "The HALT Command" in the manual)

       Since version 3.20, error messages would "time out" after sixty seconds
       (or when a key was pressed), whereupon Parse-O-Matic would terminate.

       Parse-O-Matic now waits for permission to continue if an error occurs.
       You can control this behaviour with the new MSGWAIT command (see "The
       MSGWAIT Command" in the manual).

       To make Parse-O-Matic behave as it did before (i.e. timing out sixty
       seconds), add this line to your POM file:  MSGWAIT "60"

       If you simply want to make your HALT commands work the same way (i.e.
       allowing them to time out after about a minute), insert MSGWAIT "60"
       prior to each HALT command.

3.61A  Added inline decrement (e.g. SET y = x-)
       LOG command now allows two additional (optional) values
       Rationalized null specs and empty fields in Parse, Peel and FindPosn
         Customers were using these in creative ways that we had not foreseen
         We have taken these into account and fully documented the behaviour
         See "The Null Decapsulator", "Left-Peeling" and "Insoluble Searches"
       Minor improvements to the processing display

3.60A  New commands
         MAKEDATA converts text data to binary
         MAKETEXT converts binary data to text
         ZERODATE initializes the date for serialized date format
         GET      reads variable-length records and delimiter-terminated data
         GETTEXT  combines functions of GET and MAKETEXT commands
         AGAIN    allows you to return to an earlier BEGIN comparison
       Enhancements
         CHOP now allows manually-controlled reading (via the GET command)
         Read-only files are opened as such, avoiding sharing problems on LANs
         Improved appearance of trace logs
         Hexadecimal literals (e.g. $39$34 means "94")
       Utilities
         SHOWNUM.EXE: reference tool converts decimal to hex and vice-versa
         DEVELOP.BAT: simple interactive development environment (IDE)
       Documentation
         New material added for the READNEXT and LOOKUP commands
         Several new sections about techniques and operational planning
         Additional material about running Parse-O-Matic under Windows
       Improved file-handling
         OFILE now adds the default extension, if necessary
           In 3.50, OFILE "XYZ" would not automatically add the .TXT extension
         The default extension routine is no longer "fooled" by ..\ or .\
           Earlier, a file name like ..\XYZ would not get the default extension
       Problems fixed
         Fixed "FRAME-UUI" problem affecting Quiet mode
         Fixed routine to search through DOS PATH for "missing" files

3.50A  Corrected a bug in the LOOKCOLS command (affected Parse-O-Matic v3.4x)
         It would set the "Key-End" value to the last number listed in LOOKCOLS
         It would set the "Data-Start" and "Data-End" to defaults (12 and 255)
       New commands
         ERASE   deletes a file
         OUTPAGE sends a page eject to the output file (or device)
         PAUSE   delays the specified number of milliseconds
         OFILE   switches between output files
           You can overwrite a file or append (add to the end)
             See "How Parse-O-Matic Opens an Output File" in the manual
             The append feature is also available at the command-line level
       Enhancements
         Processing display now shows input and output in appropriate units
           Input units  (Bytes or Records)
           Output units (Bytes or Lines)
         Additional information in "processing completed" line in POMLOG.TXT
           It now specifies the amount of output (in bytes or lines)
         Output can now be sent to a generic device (e.g. COMx or LPTx)
           See "Sending Output to a Device" in the manual
       Documentation
         New "File Handling" section in the manual

       ----------------
       UPGRADE ADVISORY
       ----------------

       POM now creates the output file ONLY when it first receives output
       See "How Parse-O-Matic Opens an Output File" in the manual for details
       If the output file does not receive any output...
         If it did not previously exist, it will not be created
         If it already existed, it will contain the old data
           To ensure old data is gone...
             Delete the output file before running Parse-O-Matic, or ...
             Use the ERASE command in the PROLOGUE

3.41B  PEEL reports precise nature of certain impossible parsing situations
3.41A  Fixed trimming problem affecting PEEL when using "null" delimiter

3.40   New commands
         DATE and TODAY provide date formatting, in any language
         MONTHNUM converts text month to numeric month, in any language
         COPY copies a variable from one character position to another
         DELETE removes selected characters positions from a variable
         EXTRACT moves selected characters from one variable to another
         FINDPOSN locates the position of a string in another
       Enhancements
         All control files (including POM) are searched for, if necessary
           If a directory is explicitly specified, POM looks there only
           Otherwise, POM searches logged dir, POM's dir, then the DOS PATH
           This makes it easier to build a library of standard files
         INSERT now allows "insert to left" and "insert to right"
         Automatic numeric comparators
           The old method used text comparisons, which required pre-padding
           Comparisons automatically determine if number is real or integer
         CALC and CALCREAL now explicitly report "divide by zero" attempts
         User manual reformatted for easier reference
           Explanations of commands are preceded by an improved overview
       Problems fixed
         There were no problems reported in the last release

3.31A  Numeric command parameters are now more forgiving
         Spaces, tabs and commas are removed

3.30A  New commands
         LOG command writes a message to the log file POMLOG.TXT
         HALT command allows termination with a DOS errorlevel
         CALC command performs integer arithmetic functions
         CALCREAL command performs decimal arithmetic functions
         EPILOGUE command defines code to be run before input is processed
         PROLOGUE command defines code to be run after  input is processed
       Enhancements
         Optional MINLEN setting controls the READNEXT command
         Tracing no longer shows code inside skipped BEGIN/ELSE/END blocks
         Increased variable name length from 8 to 12
         Increased number of DBF fields from 50 to 100
         Increased maximum line length in look-up files from 80 to 255
         Increased maximum number of POM lines from 500 to 750
           This does not include comment lines
         Lookup file (LOOKFILE) is now searched for in various directories
           If a directory is explicitly specified, POM looks there only
           Otherwise, POM searches logged dir, POM's dir, then the DOS PATH
         Restructured tutorial for easier reference
         New deluxe registration provides 6 years of new version registration
           Three times the standard benefit, but only twice the price
       Problems fixed
         Clustered ACCEPTs inside "false" code blocks were sometimes executed
         Some error reporting caused problems on extremely large POM files
         Ran out of file handles if you had a large number of input files
         Incomplete trimming of multiple character delimiters in PEEL

3.21A  Custom version; not released to public

3.20A  Parsing of multiple input files into one output file
         DOS wildcards are now permitted in POM command for input file name
           For example:  POM XYZ.POM *.TXT OUTPUT.TXT
         New NEXTFILE command skips to next input file
         New predefined variable $COMMAND, showing current POM command
       New PEEL command
         Works like PARSE, but removes parsed text from source variable
       New SOUND command
         Sets error-message sound or generates a sound
       The DONE and READNEXT commands now have optional comparisons
         For example:  DONE x = y
       Restructured example files as an interactive tutorial
       Enhancements for unattended operation
         Log file (POMLOG.TXT) records processing, and any errors
         Error and warning messages pause for a minute, then the program ends
       Fixed problem with ELSE statements nested two deep

3.11A  DBF file enhancements
         Improved reporting of DbF fields when tracing
         Corrected data alignment error that affected some DbF files

3.10A  New ELSE command
         Allows BEGIN/ELSE/END blocks
       New READNEXT command
         Reads next line from input file, maintaining current place in POM file
       New SETLEN command
         Sets a variable to the length of a value (e.g. "XYZ" is length "3")
       New DONE command (useful only in BEGIN/ELSE/END blocks)
         Jumps to the end of the POM file; equivalent to IGNORE "X" = "Y"
       New ~ comparator ("does not contain")
       PARSE returns a null value if given impossible parsing task
         Example: PARSE x "FRED/MARY" "1*/" "2*/" (problem: no second slash)
       Maximum number of variables and literals increased to 1000 (was 225)

3.00A  New PARSE command
         You can now parse free-form data (including comma-delimited files)
       New APPEND command
         Allows you to concatenate up to four values
       Data in output buffer (via OUT) is now flushed at end of input file
         You can now use POM to create binary and fixed-record-length files
       Varied comparators (equals, not equals, less than, contains, etc.)
         Affects the commands IF, IGNORE, ACCEPT, BEGIN, OUT[END]
         For example:  IF x > y THEN z = "YES"

       -------------------------------------------
       CHANGES REQUIRED IN YOUR EXISTING POM FILES
       -------------------------------------------

       This notice involves a change in the behaviour of IGNORE and ACCEPT.

       With the addition of varied comparators, you may have to change some of
       your old POM files.  The IGNORE and ACCEPT commands were considered
       "true if the string contains the specified text".  In other words, they
       performed a "contains" comparison rather than an "equals" comparison.
       (IF, BEGIN and OUT[END] used an "equals" comparison.)  IGNORE and ACCEPT
       now default to an "equals" comparison.

       There are two situations in which you must modify an IGNORE or ACCEPT:

       (1)  If you padded the line with "=" (for clarity or aesthetics), yet
            you meant "contains", the line should be changed.  For example:

            IGNORE $FLINE[1 10] = "YES"    (old style, using "=" for clarity)
            IGNORE $FLINE[1 10] ^ "YES"    (new style, using "contains" symbol)

       (2)  If you omitted the "=" character, and you want to do a "contains"
            comparison, you must insert the "contains" symbol:

            IGNORE $FLINE[1 10] "YES"      (old style, stated tersely)
            IGNORE $FLINE[1 10] ^ "YES"    (new style, using "contains" symbol)

       If you are comparing two strings of equal length, there is no need to
       modify an IGNORE or ACCEPT.  For example:  IGNORE $FLINE[1 3] "YES"
       will continue to work properly, since either a "contains" or "equals"
       comparison will produce the same result.

2.71B  Fixed SPLIT bug
         POM quit early if file length was an exact multiple of 32767

2.71A  Added PROPER command
       Updated manual to explain licensing options

2.70C  Minor fix to unregistered (trial copy) reminder

2.70A  POM can now read DBF (DBase) files directly
       New ASCII literals (using the # character)
       New TRACE, OUTHDG and PAGELEN commands
       Documented the /Q command-line switch
       User manual expanded to 30 pages; new examples (walk-throughs) provided

2.60   New BEGIN and END commands (blocked "IF" operations)
         Command lines may now be indented for clarity
       New predefined variable $SPLIT
         This indicates which CHOP or SPLIT segment you are on (1, 2, 3 etc.)
       New look-up processing
         New LOOKUP, LOOKSPEC, LOOKCOLS, LOOKFILE commands
         New /L start-up option
       Improved error detection and reporting
       Comparison operation is now optional for OUT and OUTEND

2.52   Added new symbol $TAB; fixed operation of $BRR and $BRL
       New provisions for international registration

2.51   Fixed Program Error MV-P-2 caused by padding with tabs instead of spaces

2.50   CHOP command breaks up fixed-length (non-text) files
       User manual restructured and partially rewritten

2.40   SPLIT command breaks up long (over 255 characters) input lines

2.33   New /Q (quiet) function:  type POM /? for explanation
       Fixed bug: long output lines (>255) occasionally would lose some text

2.32   Fix to CHANGE to correct lock-up when matching single-character string
       Added registration via credit card
       Added new version of SEE to allow full browsing of wide documents
       While tracing, processing display now shows precise line number

2.31   MINLEN now supports zero-length lines
         Default MINLEN is, however, still "1"

2.30   Output (via OUT and OUTEND) can now be more than 255 characters
         However, no individual OUT or OUTEND can output a line longer than 255
       New commands:  PAD, INSERT
       Ease-of-use changes
         More informative processing display
         Variable names are no longer case sensitive
         Improved error checking
         Added another example to documentation

2.20   Provided 2-year self-registration for registered users
       Increased number of variables and literals from 100 to 225
       Allowed "=", "THEN" and "ELSE" to improve readability
       New commands:  SET, ACCEPT
       Now possible to trace variables by name (SET POM=var/var/var...)
         SET POM=T (older versions) is now specified as SET POM=ALL
       Improved documentation (more examples)

2.10   First public release

2.00   Custom version; not released to public

1.00   Custom version; not released to public

