1. Version 3.01a Initial release. 2. Version 3.01b Fixed bug that caused some text in the prompts for READ or INKEY commands to print smiley face characters. 3. Version 3.02a * Fixed bug if a "call" to a second batch file was made using the command "BAT SHELL BAT /R Second.BAT" and external functions were ALSO used. The bug caused a system hang. * Changed the algorithm that looked up the keywords to improve execution speed. * Fixed bug so that pressing break will properly reset the CALL-RETURN pointer for batch file subroutines when terminated. * Protected the functions 72,7A,7B,7C,7D so that they cannot be used by user extensions if the transient EBL is not in memory. All will return AX=-1 if EBL is not in memory. If OK, it will always return AH=0. * The IF,THEN,ELSE commands can have CALL-RETURN commands between them and the status of the IF be saved and restored properly. * If a CLS command is followed immediately by a READ command with a prompt, the cursor position will now be correct. * Changed spacing of parameter line within SHELL command to exactly match what DOS creates. Some programs may be sensitive to this and failed previously. 4. Version 3.03a * Fixed all READ and PARSE commands so that contents read will not be altered by any external function packages that are loaded. * External function names must now be from 3 to 15 letters long. EBL will not call external functions with names too short or long. Exceptions are functions (like the extended variables) with names starting with "&" (ampersand). * The PARSE command will now allow an empty token to Page 1 History of changes for Extended Batch Language Version 3 be parsed. No error will be reported and the resulting variables will be made empty. * Quoted string mode will be effectively disabled (/Q- option) during any READ or PARSE command. This will allow entry of strings contain quotes, even partial ones. * Further optimized command recognition to make EBL even faster. 5. Version 3.04a * Fixed bug that caused some standard ASCII text strings to be recognized as color attributes within a BEGTYPE menu. * Added "RESUME x" command. This can be put within an -on.error- handler to resume at a specific line number, resume at the line in error, or resume at the line after the error (the default). As an example of each, respectively: - RESUME 49 (goes to line 50 (always n+1)) - RESUME ( %L - 1 ) (goes to the line having the error) - RESUME (goes to the line after the one in error) This command actually does a SKIP %L from the front of the batch file in order to implement the default RESUME command. Since %L will contain the line number in error when the error occurs, this will always go to the line after the error. * The STATEOF command correctly find file names that include paths to sub-directories. However note, the [drive.list] option will be ignored if paths are provided within the file name. * Additional commands with BATFUNC1 now include MKDIR and RMDIR as well as the original CHDIR. * Using SKIP to go past other GOTO commands will now always count lines properly. Bug only occurred if the GOTO was executed at least twice before and the destination label was 3 characters long! (very rare) * Ending a BEGTYPE or BEGSTACK command without an END will not cause this command to spill into raw Page 2 History of changes for Extended Batch Language Version 3 memory. 6. Version 3.05a * If a CALL with parameters was immediately followed by a BEGSTACK command, the data was put into the stack backwards. This bug has been fixed. * INKEY command always returns letters A to Z in upper case as in previous versions of EBL and as specified in the current Version 3 EBL manual. * The differences between the IBM standard BIOS interface and the unique QuadRAM BIOS interface for the QuadRam EGA Plus have been identified. EBL has accommodated the unique non-standard requirements of QuadRam and should now work with their EGA plus display adapter. * Unary minus within a greater or less than comparison did not always yield the proper results. This bug has been fixed. * The contents of data being accepted by READ or PARSE commands will no longer be affected if it happens to match the name of an external variable. Likewise, if the contents of a DOS or Global variable contains data that happens to be the name of an external variable, it will also no longer be altered. * The PARSE command's initial token value can now also be an external variable, not just a constant or DOS or Global variable. * If a line was printed with a single semicolon at the end, no carriage return is added. This is correct. If two semicolons are at the end however, both are printed. This is incorrect and has been changed so that only one semicolon is printed without any trailing carriage return. * Within BATXV, in the case where a variable was set equal to itself like &VAR = &VAR, then the contents was converted to upper case. This bug has been fixed. The contents will remain unchanged in this instance now. * Error #19 "Out of memory for DOS variables" did not not stop batch file execution nor return the proper error code in the %R variable. This bug has been fixed. * Removed fix #1 on 3.03a release. READ and PARSE Page 3 History of changes for Extended Batch Language Version 3 commands WILL use external functions now if referred to directly within the batch file itself. If a variable contains data identical to an external function name, then the external function WILL NOT be used. * Within BATXV, the single character "&" was recognized as a variable name. As a result, if a prompt after the READ or INKEY commands contained just a "&", then an error could result. This has been fixed. * Within BATXV, this program can now be loaded (made resident) before Extended Batch Language without error. * Within all external functions, added the version number to the program ID so that the WHATFUNC() function can not only tell which programs are loaded, but it can be used to identify the version that is running. * Added SEEK() command as an internal function. Refer to description in the README file or else where. * Fixed the READ and READ.PARSED commands so that the '|' (vertical bar) character can be read correctly. * Fixed an occasional GOTO error. If a variable label was used like GOTO -%0 and the text contained a partially quoted string like "text, then a mismatched quote error occasionally occurred during the GOTO. * Fixed an occasional CALL error. If a label was three characters and was immediately followed by the interstatement delimiter '|', then the remainder of the line was used as an operand to the CALL and was put on the stack. If the line had be executed previously, this (improper) operand would cause the keyboard to hang for a short period because of the special flags inserted into lines to speed up GOTO and CALL commands. * Updated rules for calling external functions during expression evaluation for improved performance. Arithmetic operators are now not allowed to be substituted by any external function. Furthermore, external functions must start with a letter ("A" or higher), and external variables must start with a special character (less than "A"). * The variable lookup algorithm within BATXV has been improved. Performance may be up to 4 times Page 4 History of changes for Extended Batch Language Version 3 better! * Comments did not ignore the entire line if an interstatement separator was used "|". This has been corrected. 7. Version 3.06a * Simple tokens of the form "%%" will be properly reduced into the result "%". Formerly, an attempt was made to look for a (null) variable in the environment area which caused EBL to hang. * Environment variables with a "%" in the middle of the name will be treated as compound EBL variables instead of DOS environment variables. That is, %name% is a DOS environment variable while %name%% and %n%ame% are compound EBL variables. The difference is that if a DOS environment variable is not found, it will always return a null result. The EBL version will concatenate simple EBL variables %n, %a, %% with other constants like a, m, e. * Internal string to numeric conversion has been optimized. A 20% performance improvement on arithmetic operations can be seen. * If text entered from a READ request matched a DOS environment variable name, then the contents of the DOS variable was returned instead of the actual text entered. This has been corrected so only the actual exact text entered will be read without alteration. * Line parsing has been further optimized in the areas of blank, tab, and delimiter recognition. An overall 30% performance improvement may be seen. * For variable usage within BEGTYPE or BEGSTACK, it is now possible to have a variable contain a hex digit and follow it immediately by a semi-colon ';'. For example if %A contained 03, then after a BEGSTACK command \%A; would stack a Ctrl-C (hex 03) without a carriage return (the ";"). Formerly, a blank was required after the variable like "\%A ;". * The internal code has been reorganized so that more internal variables are dynamically allocated rather than built into static storage. As a result, the static storage space is no longer needed and the .COM file is more compact. * If a file was in use then closed just before a Page 5 History of changes for Extended Batch Language Version 3 SHELL command, and the system command used this same file, and the network SHARE support is in use, then a "sharing violation" occurred. This bug has been fixed by forcing closed the file just before any SHELL command in EBL. Note, this fix causes the reopen directive "<<" to not be allowed after any SHELL command. All other times will still be OK. * The paging algorithm for loading portions of huge batch files from disk has been improved. Performance has been improved by several times. However note, huge batch files should still be avoided. This improvement only makes typical batch files only change from 'impossible' to 'dreadfully slow'. * A bug has been fixed in the way batch files are changed if a /R directive is contained in the middle of another batch file. * We have added the capability to call a second batch file directly. Simply do a 'CALL filename'. The lack of a '-' in front of the name indicates that it is the name of another batch file, rather than a label internal to the current batch file. CALL {batch file name} Note, since this actually emulates the command "BAT SHELL BAT /R filename", there are a few things to keep in mind about the second batch file. Refer to page 242 regarding the run (/r) directive that this uses. Also note, any text after the 'filename' will be ignored. When the second batch file ends, processing will resume on the line following the CALL command. * Added the recently announced IBM standard for chaining interrupts. EBL, and BATXV is now "chain link/unlink" compatible. This allows other resident extensions to be installed/removed in any order. Note, this flexibility is only available if extensions loaded after EBL also abide by this standard. Refer to XT/286 technical reference for details about this new standard (long overdue). * Internal case conversion has been optimized further. A small overall performance improvement can be seen. * By popular request we have added a structured BEGIN...END. There is always an IF statement somewhere before the BEGIN statement. This will determine if the statements between the BEGIN and END keywords will be executed. An ELSE statement Page 6 History of changes for Extended Batch Language Version 3 can also be used to determine if an alternate block structure will be executed. For proper nesting, the BEGIN and END keywords must be the first keywords on the line. An example of a structured condition would be: IF %a = %b THEN BEGIN TYPE This message is displayed TYPE if the values are equal. END ELSE BEGIN TYPE This message is displayed TYPE if the values are NOT equal. END Or you may use the common ELSE IF sequence like: If %A = 0 Then BEGIN Type A Was 0 END Else if %a = 1 Then BEGIN Type A Was 1 END Else BEGIN Type A wasn't 0, or 1. END There is no restrictions about how to nest these structures as long as both keywords BEGIN and END are present to mark the blocks. The indentation shown is suggested only to improve readability. A new error message #20 is possible if the BEGIN..END keywords are not grouped together. This message is "Mismatched BEGIN/END group." If this block structure is nested too deep, error message #21 could result which is "BEGIN/END is nested too deep. Limit is 8". Also, caution should be practiced so that a GOTO is not used to enter or leave a BEGIN/END block. Doing so can cause the block to be nested too deep to EBL. * Fixed the way an error code was saved inside %R when an error occurred in the batch file. This problem is only apparent when an error is returned from a resident extension to EBL. * DOS commands can be executed within an EBL statement. For instance after a THEN or ELSE command. For example "IF %A = doit THEN COPY file1 Page 7 History of changes for Extended Batch Language Version 3 file2" is a mixture of the IF command in EBL and the COPY command in DOS. Please note that you MUST either use the "/s" directive or the SHELL command before the DOS statement. Otherwise EBL will not know what to do with the non-EBL part (ie. the DOS part) and will normally give an error. 8. Version 3.06b * Changed character output during a TYPE or BEGTYPE command to expand tabs only when the character is going to the display. It will not expand tabs when sending characters to a file. In this way, special escape codes using the value 09 will not be altered when sent to a file or device. 9. Version 3.06c * Changed interface between external functions and EBL so that additional registers were saved, then initialized again. This will help fix some rare problems users have had in using some external function packages in certain environments. * Changed CALL.PURGE so that there are no restrictions to when it can be used. That is, it may now be used within a batch file as well as from the DOS command line. 10. Version 3.07a This new release of EBL affects the following files: a. BAT.COM to version 3.07a b. BATXV.COM to version 1.03 c. BATXV.ASM to version 1.03 The following is a description of all changes made. * A correction was left out of this history list for version 3.06a. The last item listed in 3.06a is new. * Initialized area after %9 variable so DOS won't pick up garbage after a SHIFT command once EBL has run. This only occurs if %9 contained data just before the shift. * Changed code for interrupt 1B so that the chaining Page 8 History of changes for Extended Batch Language Version 3 process is more optimized. * When either a SHELL command or /S is used, the stack space for EBL is now larger. This larger work area is needed by more complex extended functions such as CENTER(). Formerly, it was possible for the stack to overflow when CENTER() was used which changed the value of %9. * BATXV version 1.03 now correctly reports 0 bytes free when all bytes are used. Previously, there was a boundary condition when 256 bytes were shown free but were not actually available. * Adjusted storage arangement within the keyboard stack for faster execution. * Fixed arithmetic parser so a nested substring operator can work without requiring both position and length parameters. Now, only position is required. For example, "%A = ( ABCDEF $ 4 )" is now allowable in addition the the previous method "%A = ABCDEF $ 4". * When an error occurs which transfers control to -ON.ERROR-, the line number calculation which is put into %L has been improved. The new method allows for extremely large files (which are paged from disk) to also have a line number indication. In addition, a bug in the previous technique did not always assign the proper line number in some very rare instances. * When trace.on is used, a flag is set so GOTO optimizations are halted. This flag will remain active even if trace.off is later used. This makes sure that trace text dumped from memory during the first or later traces is readable. (The optimizing process normally alters the in-memory copy of the batch file) * Added a new option ANSI to force the creation of ANSI.SYS compatible escape sequences for screen IO. Sequences are created for the CLS, COLOR, BEGTYPE, and LOCATE commands. Colors are "rounded" to the closest ANSI compatible color. Other plain text for the screen will be sent to DOS. Although this mode is slower than the BIOS or RAM options, it allows EBL to operate with ANSI.SYS enhancers like FANSI. * Modified the COLOR command to accept all possible color combinations listed in appendix F of the manual in english form. For example "COLOR yellow on red", or "COLOR high-intensity underline", etc. Page 9 History of changes for Extended Batch Language Version 3 * Added a "COLOR( value )" function which converts the english color value into the proper hex attribute. For example you can set "%B = COLOR( blue )" then use "\%B" within a BEGTYPE menu where ever the blue color is wanted. The possible color phrases are listed in appendix F. * Modified message 13 to match new sources of errors in COLOR and COLOR() commands. New message reads "Syntax error in Escape or Color value.". * Fixed bug in READSCRN in which line was read from the screen immediately after a SHELL command (or command started using /s directive). If the default LEAVE (or /l directive) is used, no problem is seen. * The LOCATE command is now internal within BAT.COM rather than within BATFUNC1.COM so that it can selectively use either BIOS or ANSI controls depending on the associated display directive. 11. External functions: This new release of external functions affects the following files: a. BATFUNC1 is now version 1.3 b. BATFUNC2 is now version 1.1 c. BATMATH3 is now version 1.1 d. BMATH87 is now version 1.1 e. BATALLF is now version 1.3. * BATFUNC1 is now version 1.3 - The bug in the leap year calculation has been corrected. - The LOCATE command has been removed here because it is built in now within the BAT.COM file. - Using '/K' on the DOS command line will kill this extention and remove it from memory. * BATFUNC2 is now version 1.1 - Using '/K' on the DOS command line will kill this extention and remove it from memory. Page 10 History of changes for Extended Batch Language Version 3 * BATMATH3 is now version 1.1 and BMATH87 is now version 1.1 - Unary minus will now be recognized if not the first number. For example, the following will be correctly evaluated now (5 + -2) and (5+(-2+1)). - Using '/K' on the DOS command line will kill this extention and remove it from memory. * BATALLF is now version 1.3. All the just mentioned function changes are incorporated here. 12. EBL Version 3.08a * In some very rare cases when an environment variable was used within EBL, the contents from a different variable was referenced. This bug should no longer occur. * A VERSION() function has been added. This function returns five words seperated by blanks. The first word describes the language. The first three letters will always be "EBL" and might be extended in the future to identify particular implementations. The second word is the version number, for example "3.07b". The final words are the release date, for example "19 May 1987". This date is the same format as the default DATE() function format. * Now allow Ctrl-Break while loading itself into memory and logo screen is printing without causing problems. * Combinations with the color "underline" in the COLOR() function or COLOR command did not always work. This has been fixed * Sometimes, the use of the ANSI option was delayed and did not immediately go to DOS. This bug has been corrected. * All unused DOS handles are now closed before doing a TSR exit. This will allow more space for programs which use lots of file handles like data base applications. * A bug in initialization when running in DOS 3.3 is fixed. * Some internal functions should run slightly faster. Page 11 History of changes for Extended Batch Language Version 3 13. VIEW version 1.1 (Library of EBL examples) * Bug corrected to make sure batch files examples that have trailing semicolons are properly converted into a file for use. * Bug corrected in utility option 2 (append new file to library) to reflect the change in the file open command in EBL version 3.06a * Fixed PAGE216.BAT example spacing to match manual. Page 12