INIMAINT CHANGE HISTORY ******************************* V1.0a ******************************* The items fixed in Version 1.0a are: 1. There was a potential problem in 1.0 if a new file was selected before the data for a key was written to the file. This turned out to not be a problem. 2. If INIMAINT was closed in a minimized condition, the correct window size and location were not stored. This has been fixed. 3. The SIZE calculation for All Groups was incorrect if a single Application was included in more than one Group. This has been fixed. 4. If the Help Instance could not be created because the INIHELP.HLP file was not found, the user only got a 5101 logic error. The Dump Dialog has been changed to add a line that gives the reason for any outstanding logic error. 5. The PM Error Text was not displayed when there was a PM Error. OS/2 1.3 with CSD WR5050 has a bug in this area and will not display the correct text. The text will now be displayed. 6. When an error was encountered during Help Instance Initialization, the help error code was not stored in the Help Error area. This has now been fixed. 7. INIMAINT would not run at all if there was a problem initializing the Help. It will now run, but no Help will be available. ******************************* V1.0b ******************************* The items fixed in Version 1.0b are: 1. More of the Help has been done, the missing Help is now that for the Dialog Boxes. 2. When run under OS/2 2.0 a Message Queue Full error was being encountered. This was fixed by increasing the Message Queue from the default 10 to 30. ******************************* V1.0c ******************************* The items fixed in Version 1.0c are: 1. A Dump message logging facility was added so that problems with message sequences could be logged and identified. 2. Because of a problem in OS/2 2.0 the return from setting the top index in a listbox is incorrect. The check for a valid return from this API call has been removed so that INIMAINT will run under OS/2 2.0. ******************************* V1.0d ******************************* The items fixed in Version 1.0d are: 1. When INIMAINT first comes up, the LOGO box does not have the Focus and the Enter Key will not close it, it can only be closed using the Mouse. The Focus is not forced to the LOGO Dialog during initial window processing. 2. The Dump Dialog will not fit on a 640x480 VGA Screen. To fix this the Dump dialog was made 20 pels shorter. 3. The filling of the Listboxes, the MLE and the Size calculation all have the capability to run for some time, especially under OS/2 2.0, and they block any processing of messages during this period. These functions have been moved to a separate thread. 4. Choosing Menu Items such as Size, Copy and Move cause a Dialog box to appear with the selections. The Selections are now a menu, not a dialog. 5. If there is a lot of data to be inserted into the MLE, the MLE blinks a lot. The window is now be disabled during the data insertion. 6. If Size is selected and then Cancelled, a Size of 20 bytes was displayed. This has been fixed. 7. The buttons in the New File Dialog were in uppercase, but now are lower case. 8. If a New File is selected on a diskette drive that has no diskette, a terminal error resulted. Now a Message Box will be presented and the old drive will remain the current drive. 9. Selecting an empty VDISK drive got a terminal error. This has been fixed. 10. You could not Cancel a Copy without selecting a target file. This has been fixed. 11. When the contents of the Dump Dialog were written to a file, the values of the various error indicators, which are displayed at the top of the Dialog, were not written. This has been fixed. 12. If a non-INI file is selected and it causes INIMAINT to terminate, then the program would not restart, because it attempted to use the same file and continued to get the same error. The user is now informed the file is invalid and given a chance to select a new file to edit. 13. When opening a new INI file to edit, the check for a valid INI file was not sufficient to identify the bad file during the file selection process. This has not been fixed and any file that gets through the file selection will be a valid INI file. 14. If a Drive was selected and the root directory was empty, INIMAINT would terminate attempting to fill the file Listbox. This has now been fixed. 15. When editing the any line of a multiline entry in the Key Value MLE while in overtype mode, as opposed to insert mode, the following line had the initial characters deleted. This has been fixed. 16. When the Focus was removed from the INIMAINT window, the Titlebars of both Listboxes stayed in a highlighted condition. This has been fixed and the colors of the Titlebars will now behave correctly. 17. Since no user input is accepted while the Listboxes are being filled, the MLE is being reset, a Size is being calculated or a Move or Copy are in progress, the Pointer should be changed to an hourglass pointer, this was not working, but has been fixed. 18. The Help has been finished. 19. There was a problem with seeing the pointer in the MLE under OS/2 2.0, so a call to WinSetOwner setting the Main Client window as the Owner of the MLE was added to fix the problem. ******************************* V1.0e ******************************* The items fixed in Version 1.0e are: 1. Copy an Entire File got a return of 10 from the Copy program. This has been fixed. 2. The MOVE/COPY in Progress Dialog did not display the word Move/Copy. This has been fixed. 3. The MOVE/COPY did not verify that the target file was a valid INI file. This will now be done and an Error Message box will be displayed if the COPY/MOVE cannot be done. 4. The smallest item that could be MOVEed or COPYed was an Application. It is now possible to COPY/MOVE an individual key. 5. Considerably more Help has been added. 6. Accelerator Keys have been implemented and added to the Help. 7. If a New File was selected and either the OS2.INI or OS2SYS.INI files were specified without the initial path information, INIMAINT did not recognize them as the User and System INI files and attempted to open them in an incorrect manner. This has been fixed. 8. If a COPY/MOVE was attempted and either the OS2.INI or OS2SYS.INI files were specified as the target without the initial path information, INIMAINT did not recognize them as the User and System INI files and attempted to open them in an incorrect manner. This has been fixed. 9. If an INI file was selected that had no Applications in it, the INIMAINT window would not appear. This has been fixed. 10. It was not possible to cancel the Add Application or Add Key without getting the Message Box saying that something had to be entered. The Cancel will now work correctly. 11. The Listboxes and MLE would flash excessively. This will no longer occur. 12. When in the Dump Dialog, it was not possible to change the name of the Dump File by simply typing in the Filename Entry Field. This will now work and the new filename will become the Dump File for future Dumps. 13. When the Help was open, the Title Bars of the smaller INIMAINT windows appeared to still have the focus because they were highlighted. This will no longer occur. 14. When in the Replace Key Dialog and the key value was longer than what could be displayed in the Listbox, any change to the value would cause the contents of the ASCII and Hex Entry Fields would shift to the very end of the value data. This has been fixed. 15. INIMAINT was not using the Logo Display Time that is set by the user in the Control Panel, but was using an internal 10 second display time. This has been changed so that the Control Panel value will now be used. Even with a value specified in the Control Panel, it is still possible to turn off the Initial Logo Display with the Options Dialog. ******************************* V1.0f ******************************* The items fixed in Version 1.0f are: 1. The Menus did not show the Accelerator Keys, this information has been added to the appropriate menu items. 2. Because of a bug in handling Timers, INIMAINT would get an error when run under OS/2 2.0 and the About Dialog was dismissed. This has been fixed by changing the Parent of the About box when it is invoked from the Menu. 3. The Help indicated that there was an Accelerator key that would directly pull down the COPY or MOVE menus. This was an error and has been removed from the Help file. 4. When a COPY/MOVE was attempted for the Selected Application or Selected Key and either of the Selected Names had an embedded blank, then the COPY?MOVE would terminate with an Error=5 from the INICOPY program. This has been fixed. 5. The Error Message Box displayed when an invalid INI file was selected did not include the error message, this has been fixed. 6. When an invalid INI file was selected, INIMAINT would not close the file, therefore, no other process could use the file. This has been fixed. ******************************* V1.0g ******************************* The items fixed in Version 1.0g are: 1. The Dump to a file could get a Trap D and could dump some garbage messages because it was going past the end of the Message table. This has been fixed. 2. A message sequence number has been added to the dump of messages. 3. When doing a MOVE/COPY the Wait Pointer was not set correctly when the pointer was over the Listboxes or MLE. This has been fixed. 4. If a Group was deleted, a hole was left in the menu items that include the Groups. This has been fixed. 5. When things were MOVEd from an INI file to another file, the Listboxes were not updated to reflect the fact that the MOVEd items were no longer in the Source INI file. This has been fixed and the Listboxes will be automatically updated after the MOVE. 6. The supplemental error text was not always complete if an error occurred during a MOVE/COPY operation. This has been fixed. 7. V1.0f displayed a Version number of 1.0e. V1.0g will show the correct version. 8. When the last Key for an Application was moved to another INI file, the Application entry was not deleted and an Application with no Keys was left in the file. INIMAINT will now check to see if a MOVE Key is being done for the last Key and promote it to a MOVE Application, so that the Application entry will be removed from the Source INI file. 9. The Groups Dialog did not redisplay the Group that was being displayed when the last Group Update was done. This has been fixed. ******************************* V1.1 ******************************* The items fixed in Version 1.1 are: 1. The System Default Accelerator keys did not work because the System Commands were not getting to the Main Window Frame. This has been fixed. 2. The Registration code was added. 3. When an input string was requested, the user was asked to 'Select' something. This has been changed to ask the user to 'Enter' the information. ******************************* V1.1a ******************************* The items fixed in Version 1.1a are: 1. The supplemental error text was not correctly filled in when there was an error during a COPY/MOVE. This has been fixed. 2. It was possible to get a Trap D when selecting a New INI File because dynamic memory was released prematurely. This has been fixed. ******************************* V1.1b ******************************* The items fixed in Version 1.1b are: 1. It was possible to get a Trap D while the MLE was formatting a long entry if an attempt was made to make a selection in one of the Listboxes or an attempt was made to change the MLE. Now any such attempt will cause an error tone and the action will be rejected until all updaing has been done. 2. There were some relatively rare situations where dynamic memory blocks were not being freed, theu that amount of memory used would slowly grow. This has been fixed. 3. In order to better track potential memory problems, a dump of the contents of the heap has been added to the Dump window and and more complete listing will be written to the Dump File. 4. Under certain circumstances, INIMAINT would put Keys in the OS2.INI file for the INI File Maintenance Application that had NULL Values. This will no longer occur, although it did not cause any problem other than put unneeded items in the INI file. 5. There are certain Applications and/or Keys that cannot be deleted from the OS2SYS.INI file. When an attempt was made to Delete or MOVE one of these entries, INIMAINT would terminate. Additional code has been inserted that will identify these conditions, inform the user and then continue. 6. Under OS/2 2.0 INIMAINT would terminate with an error 109 after the About INIMAINT Dialog box was displayed. This was caused by static variables that were not correctly initialized after the first use of the dialog. This has been fixed. 7. The Spooler, and perhaps other sections of OS/2 protect certain areas of the INI files, especially the System INI file, thus making it impossible to remove certain Keys from the files, even though the Keys are associated with things that are no longer on the Desktop. In order to facilitate these efforts, a new capability has been added to INIMAINT that allows the user to change the User and/or System INI files to a different file. The user can then edit the original file as he wishes and then switch back. This must be done with much care in order to avoid causing a system problem, but the capability can be extremely important when attempting to recover from conditions where the operating system has created conflicting or other conditions that can be corrected no other way. ******************************* V1.1c ******************************* The items fixed in Version 1.1c are: 1. The Main Window Menu Items for changing the User and System INI files have been moved from the Actions Menu to a new Menu, Recover. It is intended that additional capabilities will be added to give the user the ability to recover from corrupted INI files and those capabilities will be added to this menu. In addition, the Actions Menu was getting crowded. 2. Two new items have been added to the Action Menu. Rename Key will change the name of an existing Key and Duplicate Key will make a duplicate copy of a Key Value using a different Key Name. ******************************* V1.1d ******************************* The items fixed in Version 1.1d are: 1. The New File and Exit Menus have been combined into a single Menu called File. This was done for two reasons, first, the number of menu items was becoming too large and, second, a new file type function was added, see below. 2. Since there are a number of different conditions that could modify an INI file that is currently being viewed using INIMAINT, the ability to reload an INI file from disk has been added. It is the Refresh selection on the File Menu. 3. There was an error in Error Message 13 in the INICOPY program. 4. It was not possible to select a Application/Key pair when the Key Value was zero length ie., there was no Value, only the Application and Key Names. This has been fixed. 5. It was not possible to COPY/MOVE and INI file that had an Application/Key pair with a zero length Key Value. This has been fixed. 6. When Adding or Replacing a Key Value, the ability to specify that a zero termination character is to be added to the Key Value can now be indicated with a Checkbox. 7. The most common files that INIMAINT is asked to display are the User and System INI files. In order to make it easy to select these files, two new entries have been added to the File Menu that allow for direct selection of these two files without having to use the file selection dialog. 8. Some of the dialog procedures did not initialize static data causing a new use of the same dialog to behave in unexpected ways. This has been fixed. 9. A new item has been added to the Options that gives users the ability to have the Application and Key Listboxes loaded in the same sequence as the actual INI file as opposed to alpha sequence. ******************************* V1.1e ******************************* The items fixed in Version 1.1e are: 1. When the menu item was used to switch to the User or System INI files, the new file information was not saved. The effect of this was that the next time INIMAINT was run, it would go back to the previous INI file. This has been fixed. 2. INIMAINT can now be started with a Command Line parameter specifying the initial INI file for this execution of INIMAINT. This not only allows INIMAINT to be run with a parameter, but also allows for it to be run by double clicking on an INI file, if the association has been set up, and allows for running INIMAINT by dropping an INI file on the ICON on the Desktop. 3. For versions of OS/2 prior to 2.0, there is no provision for setting up file associations. Therefore a new item has been added to the FILE Menu that will set up an association between INIMAINT and all files whose file extensions are INI. This option will not appear on the menu if the version is 2.0 or higher. 4. There are some key values which are very long, therefore, they take a long time to load into the MLE. It is often the case that the user does not even want to see the key value and would prefer to switch to another key name. However, it was necessary to wait until the MLE was filled and then wait again until all of the lines were removed from the MLE. It is now possible to terminate the loading of the key value lines into the MLE by hitting the ESC key while the MLE is loading. The current Application and Key names will still be highlighted, but the MLE will be empty. 5. In order to keep the menu line from becoming too crowded, the Dump menu item has been moved to the File submenu. This was an item that is not frequently used anyway. This makes room for the item below. 6. A new menu item has been added to the main menu, Find. This submenu will allow searching of either of the listboxes, the key value MLE, all the key names in the current file, all of the key values for the current application or all of the key values in the current file for either an Ascii or Hex value. 7. It was possible to select a new item in the Application or Key Listboxes while the boxes were being filled. This would cause a Protection Violation and has now been fixed. 8. When certain errors were encountered during the loading of the Listboxes or the MLE, they were not reported, this has been fixed. 9. If the Value of a Key is larger than 65,500 characters, selecting that Key in the Key Listbox would cause a memory allocation error and the INI file with the Key Value could not be MOVEd, COPYed or used as the target of a FIND search. All of these have been fixed. However, only the first 60,000 characters of the Key Value will be displayed in the Key Value MLE. 10. If INIMAINT was started with an INI file where the first Key Value of the first Application was very large, it was not possible to terminate the loading of the Key Value MLE because the main window was not visible. This has been fixed by making the main window visible before the intial loading of the Key Value MLE. 11. A new feature, Compare, has been added to the File menu. This item will allow the user to compare two INI files on any one of three different levels, write or print a listing of the differences and write an INI file that contains only those Applications and/or Keys where there are differences. ******************************* V1.1f ******************************* The items fixed in Version 1.1f are: 1. When an attempt to set an association with the INI files was attempted under OS/2 1.3, the association was set up, but INIMAINT would then abend with a protection exception. This has been fixed. 2. When INIMAINT asked the user to enter any character string variable, there was no warning when the entered string was too long. This has been fixed and the user will hear a beep if they attempt to enter a string that exceeds the maximum length for the requested item. 3. It was possible to enter a Group Name that was longer than 30 characters, which is the maximum. This would appear to work correctly, but subsequent attempts to use INIMAINT on the INI file involved would cause a protection exception. 4. The filling of the window that holds the Key values, an OS/2 MLE, was very slow if the key value length exceeded 1,000 or so characters. If the value approached 64k, then time needed was several minutes, even on a fast machine. The loading has been changed and 64K can be loaded into the window in less than 10 seconds on the test machine, which is a 25mhz 486. However, there does not seem to be any way to clear a long key value from the window in less than approximately 45 seconds on the test machine. Several different approaches have been tried, but none of them resulted in a lower time. Therefore, it takes longer to clear the key value window than it takes to fill it. If the 45 seconds becomes a problem, hitting F3 will immediately terminate INIMAINT, which can then be restarted. However, it is hard to see how this could be done in less than 45 seconds on a regular basis. 5. A Repair feature is being worked on and is in the Online Help. However, there are still some problems with the code that compares the INI file entries to the actual contents of the desktop. This feature will be implemented in the next release. If the item is selected from the menu, the dialog box will appear and will be fully functional, except that the Execute Button will not work. Choosing Execute will result in a Message Box saying that the Execute has not been implemented in this release. 6. At least one user has a need to move a Key from one Application to another. The Duplicate Key item on the Action Menu has been modified so that the user will now be prompted for a New Application Name as well as a New Key Name. One of these names must be modified and the Key Value will be copied using the modified names. If just the Application Name is changed, then this has the effect of copying the Key Name and Value to the new Application. The information will remain using the old Application and Key Names unless specifically deleted by the user. where there are differences. ******************************* V1.1g ******************************* The items fixed in Version 1.1g are: 1. The clearing of the Key Value window could take a considerable amount of time when the key value was larger than a few thousand characters. This has been fixed by changing the code from sending a message to delete the contents of the window to simply destroying the window and recreating it. 2. Hitting F10 did not cause a refresh of the file, because the System uses F10 to hilight the first menu item. The Refresh was changed to F4. 3. The address and phone number for Carry Associates was changed in the documentation files, but was not changed in the About Dialog or in the online Help. This has been fixed. 4. A new item has been added to the Action Menu, Duplicate Application, which will make a duplicate copy of any Application in the same INI file using a different Application Name. 5. When a Key was Duplicated in an INI file and the copy was put in an Application that did not previously exist, the Application Listbox was not refreshed. This has been fixed. ******************************* V1.1h ******************************* The items fixed in Version 1.1h are: 1. A Rename Application item has been added to the Action Menu. This is the same as the Duplicate Application except that the old Application is deleted. ******************************* V1.1i ******************************* The items fixed in Version 1.1i are: 1. The Control Program Error indicator could be reset in an error situation before the Dump Dialog was displayed, thus losing this information. This has been fixed by saving the contents of this variable at the point that the initial error occurred. 2. The found flag was not always reset when multiple Find's were requested. The result of this was an indication that a target was found when it really was not. This has been fixed by resetting the found flag at the start of each find cycle. 3. A new item has been added to the Recover Menu, Repair INI file. Refer to the INIREP.TXT file for a detailed description of the currently available repair actions and the online help for how to use the facility. Initially, the only repair action that is available is to remove entries from any INI file that reference files which are not present on the desktop. 4. The Print function in the Compare and Repair Dialog boxes did not correctly print lines that were longer that the current page, the line would be truncated rather than carried over to the next line. This has been fixed. 5. When certain errors occurred, for example during a repair action or a file compare, the error was not reported via the Dump Dialog and INIMAINT would simply stop processing messages. This has been fixed by insuring that the various work threads correctly return any error indication to the controlling dialog and that the dialog procedure terminates the dialog when the error is seen. ******************************* V1.1j ******************************* The items fixed in Version 1.1j are: 1. A new item, Condense, has been added to the Repair Menu. This item will condense the empty space out of the Current, System, User or both System and User INI files with a single selection. INIMAINT has had this capability for some time, but it required a number of different selections to accomplish. 2. The menu item to change both the System and User INI files only changed the User INI file. This has been fixed. 3. An item has been added to the online help to describe what is meant be the System and User INI files. 4. The Size submenu has been expanded to add the ability to calculate a Size for the System INI File or User INI File without having to make one of these files the current INI file. 5. The Copy submenu has been expanded to add the ability to make a Copy of the System INI File, the User INI File or both the System and User INI files without having to make these files the current INI file. ******************************* V1.1k ******************************* The items fixed in Version 1.1k are: 1. A new submenu has been added to the Actions menu, Backup. This allows the user to make a backup copy of the System INI File, the User INI File or both the System and User INI Files. This item differs from the Copy item in two respects. First, in order for a Copy to be a true backup, the target file must not exist. With Copy, it was necessary for the user to insure that this was the case. The Backup menu item will automatically erase the file if it already exists. Second, each time a copy was done, it was necessary to specify the target INI file for the copy and, since INIMAINT only maintains a single target copy filename and does not save this filename from one execution of INIMAINT to the next, the names had to be reentered each time. INIMAINT will save the names of the System and User INI File backup target files and present them as the default target files each time a backup is requested. Finally, a new item has been added to the Options Dialog that allows the user to bypass being asked if they want to use the current backup target files. If this option is selected then INIMAINT will use the backup target files without asking the user for confirmation. 2. The Copying File Box would always be displayed during a copy, even if the Option was set to not display it. This has been fixed. 3. There were two potential heap corruption situations in the INICOPY program. In one case the wrong form of the free API was used. In the other case, it was possible to free the same memory block more than one time. Both of these have been fixed. 4. The Condense item on the Recover menu has been improved in two ways. First, INIMAINT will now automatically build a name for the temporary INI file and insure that it does not duplicate an existing file, this eliminates the need to ask the user for the temporary filename. Second, once the initial copy is done, INIMAINT will use the standard copy to make a second copy of the new file, erase the original file and then rename the second copy to the original name. This eliminates the need to do a second INI type of copy, which can take a relatively long time. The effect of this is to significantly reduce the amount of time that is required to do the Condense. 5. There was a serious bug in the Condense Both INI files code. The temporary file was not erase between the two copies, so the second file contained everything from both files. This has been fixed by erasing the temporary file immediately after the copy. ******************************* V1.1l ******************************* The items fixed in Version 1.1l are: 1. When attempting to do a Copy or Move with the System or User file as either the source or target file and lower case characters were user in either file name, the Copy could fail because INICOPY did not recognize the names as the names of these files, which must be opened differently. This has been fixed by forcing the names to upper case before checking them against the names of the standard files. 2. If an error was encountered setting the normal or wait pointers, it was not reported because the subroutines did not return an error return. This has been fixed. 3. If Cancel was chosen when the initial Condense Dialog was displayed a SYS3175 error would occur because a NULL pointer was passed to free(). This has been fixed by moving the free() to a point after the pointer has been validated. 4. it was possible for certain entries in some INI files to cause the INIMAINT Repair Dialog to terminate with a 1109 logic error and a DOS error of 123. This was caused by passing a name to DosLoadModule that it considered invalid, INIMAINT did not check for this return and would, therefore, post it as an error. This has been fixed by including this check in the list of returns that are considered valid returns by INIMAINT. 5. A logic error 1111 witha DosError of 15 was possible during a Repair because INIMAINT did not check for an Invalid Drive return from the DosOpen of a drive. This has been fixed by including this error in the normal set of checks. 6. When INIMAINT starts, it saves the current pointer from the Desktop so that it will know which pointer to restore after putting up the Wait pointer. It was possible, if some unusual pointer was displayed at the time that INIMAINT saved the current pointer, that the wrong pointer type would be saved and an attempt to restore to this incorrect pointer would cause a logic error 616. This has been fixed by saving the standard pointer rather than attempting to save the current pointer. 7. When the Condense of both the System and User INI files was selected. The desktop was reset two times for each file. This caused two problems, first, it takes a long time to reset the desktop and, second, on certain occasions it left the desktop in a condition where it was necessary to reboot before any work could be done. This has been fixed by, in this situation, copying both the System and User INI files before the first Reset. This way the desktop is only reset two times, which is the minimum possible. 8. Because of a conflict between the LOCKUP facility and Dialog boxes that have had their Parent switched to the Desktop Object Window, in order to make the dialog not visible, the Option that sets the display of the Copy Dialog will not work. The Copy Dialog will always be displayed, no matter what the setting of the Option. Once this problem is researched and something is done to remove the conflict, the Option will be reenabled. ******************************* V1.1m ******************************* The items fixed in Version 1.1m are: 1. When a Size was cancelled using the Esc key, the pointer did not return to the normal pointer and the thread was not terminated, thus INIMAINT would not do any work and had to be cancelled externally. This has been fixed. 2. The Options Dialog was becoming too high, so it has been broken into tow side by side lists. 3. A new Option, Fast Copy, has been added. If this Option is activated then INIMAINT will use special high speed methods to access the INI files when an entire file is being Copied, Moved, Backedup or Condensed. This greatly reduces the time necessary to process large INI files, such as the System and User INI files. ******************************* V2.0 ******************************* The items fixed in Version 2.0 are: 1. This version is a full 32 bit version. 2. A number of improvements have been made to the INSTALL procedure, including the ability to install all the files into a single subdirectory. 3. The Repair and Compare Dialogs had the Options box and the results Listbox too close together the Dialog was also too high to comfortably fit on a default 640x480 screen. Both of these have been fixed. 4. When an error was encountered in the Repair Process, the line from the INI file that caused the problem was not placed into the supplemental error text field. This has been fixed. 5. Because the 16 bit Prf API's were limited to 64K of data for any key Value, INIMAINT was limited to reading and displaying this amount of data. The restriction has been removed with this version because of the conversion to full 32 bit. 6. The Repair Function had attempted to see if *.PSF files that were in the INI files with no path information actually existed on the Desktop. DosLoadModule was used for this check, since the files should be in the LIBPATH. It turns out that DosLoadModule will not find anything other than DLL files, so this check was removed. 7. The Repair Function ignored files that had a pathname that indicated they were on a floppy drive, a disk drive with removable media, a tape drive, an unknown type of drive, an invalid drive and a drive that could not be accessed via DosOpen. Since it is very unlikely that any INI file entry that has a pathname that starts with any of these type of drive is one that should remain in the INI file, all of these conditions have been added to the list of situations that INIMAINT will recommend for removal. 8. If Help was requested while doing a Repair after a new Save INI File or Write File was selected, the Help would not work because the Repair Dialog was not reset as the active help window. This has been fixed. 9. If the Repair function encountered a path and filename combination that looked like it was valid, but it was not, the Repair would terminate with a 1109 Logic Error Code. This has been fixed by adding checks for an invalid filename at the appropriate points. ******************************* V2.0a ******************************* The items fixed in Version 2.0a are: 1. V2.0 forced and path and filenames to upper case in a number of places. The caused a number of problems with lower case characters in filenames and this code has been removed. 2. It was possible for the New File Dialog to go into a loop during the initialization phase. This has been fixed by checking if the code involved has already been executed, and causing an abend if it has. 3. Two of the SIZE Accelerator keys used Alt-F8 and Alt-F9, which are used by OS/2, so they are not available. The SIZE User INI File has been changed to Alt-R and the SIZE System INI File has been changed to Alt-M. 4. The New File Dialog was not wide enough, so it has been expanded. ******************************* V2.0b ******************************* The items fixed in Version 2.0b are: 1. Because of problems with the custom New File Dialog, this version has been modified to use the standard OS/2 New File Dialog. ******************************* V2.0c ******************************* The items fixed in Version 2.0c are: 1. When INICOPY was invoked by INIMAINT, the path and filename of the Input and Output files were not enclosed in quotes. This created a problem with parsing the parameter string. This has been fixed by enclosing these two parameters in quotes. 2. When the Condense was used the part of the initial message that said that the Desktop would be reset twice was confusing. The part of the message about resetting the Desktop twice has been removed so that the message now simply states that the Desktop will be reset. 3. During the Condense, some of the messages displayed in the right hand window were too long for the window. The window has been expanded so that it will now display the full message. 4. Because of the warning about reseting the Desktop, users have sometimes waited for some time after a Condense has completed, since they do not want to cause a problem with their environment. This is because there is no clear indication that the Condense is complete. This has been fixed by displaying an additional dialog that will tell the user that the Condense is finished and it is okay to resume normal operations. 5. When the Fast Copy Option was used, INICOPY did not validate the input file to insure that it was an INI file and one that the Fast Copy code understood. This has been fixed by adding two new checks to INICOPY and to the Copy Dialog in INIMAINT. One check will report an error if the input file is not a valid INI file. The other will change the Fast Copy to a normal copy if the INI file is not one that the Fast Copy Code understands, thus making the file not valid for Fast Copy. 6. The Condense routine has been updated to test the file to be Condensed to see if the Condense is really necessary. If the Condense will not reduce the size of the file, then the user will be informed of this via a Message Box. ******************************* V2.0d ******************************* The items fixed in Version 2.0d are: 1. There were a number of places where the return from a PM API call was converted to a 32 bit integer by using the SHORT1FROMMR macro and then casting the result to a 32 bit integer. Because the macro goes through an unsigned short variable, this did not work for negative numbers, such as LIT_END. The result of this was that some things did not work correctly, including selection of a new member of a group. All of these situations have been fixed by having the macro fill a 16 bit integer and then using the 16 bit integer to fill the 32 bit integer. 2. If INIMAINT could not open a file as a valid INI file and the current INI file could also not be opened, INIMAINT would just start and end with no error message. Users with this problem were very confused by this and did not know what was happening. This has been fixed by adding code that will insure that at least the error dialog will be displayed in any error situation. 3. If an error was encountered attempting to open the default INI file at the very start of the execution of INIMAINT, it was possible for the Error Dialog routine to get an access violation because some pointers were NULL and the NULL value was not tested. This has been fixed by adding code to test the pointer values for NULL and print None if they are not yet set. 4. When the initial file that INIMAINT attempted to open was a file with no applications or keys, an error was encountered because the determination of whether the file was in the new or old format would result in an invalid file setting. This has been fixed by specifically checking for an empty file. ******************************* V2.0e ******************************* The items fixed in Version 2.0e are: 1. Because of the large number of possible items in the Repair window, it was possible to exceed the maximum capacity of a Listbox. Therefore, the Repair window has been changed to a Text type Container. 2. An additional option has been added to the Repair selections. If the users chooses to simply have the items that would be Repaired displayed in the Window, it is now possible to select the items that they want repaired and then check the 'Repair Selected' Checkbox and then Execute and those items that are selected will be Repaired. 3. Because there will now be a number of different Repair actions, the selection of the type of Repair desired is now a Combobox rather than a Checkbox. 4. A new Repair items has been added, Removal of any Key with a Zero Length Key Value. These Keys cause a problem for the WPSBKUP program and have no value. 5. A new Repair capability has been added, the removal of any File/Directory Handles in the OS2SYS.INI file that point to Files or Directories that are no longer on the desktop. If a Drive or Directory is deleted using this facility, all subdirectories and files in the Directory and Subdirectories are also deleted. In addition, making any changes in this area requires that the Desktop be reset before the WPS will recognize the changes, so this will be done upon dismissal of the Repair dialog. 6. A new Repair capability has been added, the removal of any WPS entries in the OS2.INI file that point to objects that are no longer on the desktop. 7. A new Repair capability has been added, the removal of any Objects in the OS2.INI file that the user wants removed from the INI files. There is currently no known way to verify whether the Objects actually exist, therefore, INIMAINT cannot automatically delete invalid Objects. 8. The capability to display the contents of the File/Directory Handles, Objects and WPS entries has been added to the Repair. Although this is not strictly a Repair function, it allow the user to see, save in a file or print the expanded information. This allows the user to determine the actual meaning of all the random looking numbers seen in the OS2.INI and OS2SYS.INI files for both Key Names and Key Values. 9. It was not possible to always print the contents of the Repair Window because the print routine would not handle an empty line. This has been fixed. 10. It was possible to initially start INIMAINT in such a way that it would set the default window size at zero, even though the window was not minimized. When this occurred, the INIMAINT window would not be visible and it woud not be in the minimized folder. This has been fixed by adding checks to force the window to a minimum size if it is not minimized. 11. I the user of a registered copy of INIMAINT set the Logo Display Time to indefinite, INIMAINT would abend during its initialization because a negative number was passed to the WinStartTimer API. This has been fixed by adding code to check for a negative number and to not even start the timer in this case. 12. The word 'reason' was not spelled correctly in the message that informed the user that the Help was not available if the Help file could not be found. This has been fixed. 13. There was no user notification when INIMAINT was about to create a new INI file because the file the user selected did not already exist. This has been changed so that the user will now be informed that INIMAINT is about to create a new INI file and the user will have the option of creating the new file, choosing a different file or canceling INIMAINT. 14. The type of ICON displayed in some of the message boxes was not the appropriate ICON. These have been fixed. 15. It was not possible to add any Groups to an INI file because the response from the Prf API that deleted the old Groups was changed from TRUE to FALSE if the old Group information did not exist. This would cause a 704 logic error when the OK button was chosen on the Group Dialog. This has been fixed by checking for the Not in Index PM Error Code when a FALSE is returned by this API and accepting this as a valid response. ******************************* V2.0f ******************************* The items fixed in Version 2.0f are: 1. When Repairing Dir/File Handles and the drive letter is selected for deletion, all of the invalid directories and files on the drive should be deleted. It did not happen if the drive was a valid drive. This has been fixed by adding extra logic to check for this specific condition. 2. If the number of Dir/File handles becomes very large, it is possible that they will be stored in the OS2SYS.INI file in multiple pieces. 2.0e would ignore all but the first piece. This has been fixed by continuing to get the data until all of the pieces have been accessed. 3. There were a number of problems with the dumping of the Repair Variables. These have all been fixed. 4. If the Device Driver for a drive did not correctly handle the API used by INIMAINT to identify the drive type, it would cause INIMAINT to terminate with a Logic Error 1112. This was caused by a undocumented return code from the API. Typically, the device driver is an old driver and often is supporting a CD-ROM device. This problem has been fixed by adding code to handle the new return from the API and, when the error return is seen, INIMAINT will do a further check on the drive and, if it is write only, will identify it as a CD-ROM device. Otherwise, the drive will be identified and an invalid drive. 5. There were circumstances where a Repair to the WPS entries would get a logic error 1104 because of an attempt to allocate a zero length memory block. This has been fixed by initializing the Key Value Length field to a small value rather than zero, so that the allocation will work. 6. Invalid PM_Abstract:FldrContent entries that had an invalid Object ID were not deleted, even though the entry in the Repair Window would indicate it was deleted. The reason was the some of the value level items were valid, but the key name was not a valid Object. This caused the item to be deleted from the INI file and then reinserted. This has been fixed by insuring that all value level entries for an invalid key name are also marked as invalid because of the key name. 7. The Repair Save and Repair Write file were not saved from one run of INIMAINT to the next. Additional code has been inserted to save the current information and it will be presented as the default for future Repair activities. ******************************* V2.1 ******************************* The items fixed in Version 2.1 are: 1. When there was nothing to Repair for the Repair Dir/File Handles and Repair WPS Entries, the message box that told the user this was not displayed because the variable that the message box code tested was not set correctly. This has been fixed. 2. When displaying the Dir/File Handles the drive entries were displayed even if there were no Directory or File entries to display for the drive. This has been fixed by adding additional code to only add the drive information to the window when the first Directory or File is added. 3. The Help for the new Repair functions was not complete, but has now been completed. 4. Some object values in the 0x20000 range could be identified as invalid, when they were actually valid. This has been fixed by insuring that values in the 0x20000 range are correctly checked against the Objects entry in the OS2.INI file. 5. Some of the Repair functions take a considerable amount of time and often the INI files do not have any errors in them, so the only result is a message box telling the user that there is nothing to Repair. I was easy to miss the appearance of this box, so code has been added to cause a beep whenever the message box is displayed. ******************************* V2.1a ******************************* The items fixed in Version 2.1a are: 1. If a drive connected to the system via a switch was not switched onto the system when a Repair was requested, it was possible for a couple of the API's to return the General Failure Error code, which was not correctly handled by the Repair code. The code has been changed to look for this specific error condition and to treat the drive as an Inaccessable Drive. 2. When a Repair was requested, the Do Not Save Option was not turned on and the Save INI file had not been selected, INIMAINT would terminate with a logic error code of 1. This was caused by an incomplete check of the filename, specifically, it was checked for a NULL pointer, but not checked to see if it was an empty string. The additional check has now been added. 3. When Repairing the File/Directory Handles, the Ask Before Repair did not work because there was a drive level check placed in front of the code that asked the user and it should have been placed after the code that asked the user. The code has now been moved to the correct postion. 4. Alt-R was specified as an accelerator key for Size User INI File. However, this key was needed for the Recover Menu. Therefore the Size User INI File has been changed to Alt-E. 5. In order to facilitate the processing of both the WPS Entries and the File/Dir Handles, a new set of Repair types have been added that will List or Repair both sets of Entries at one time. 6. When Invalid Handles were being listed or the Handles were being Repaired. The actual drive entry for CD-ROM and Floppy drives was not displayed in the Window. Addtional code has been added to insure that these entries will always get put in the window when appropriate. 7. If the Ask First Repair Type was chosen, it was possible that the user could be forced to respond Yes or No to a very large number of items and there was no way to stop the questions until all of the approriate items had been presented to the user. The message box has now been modified so that there is also a Cancel entry that will terminate the questions and do the Repair actions that had been requested to that point. ******************************* V2.1b ******************************* The items fixed in Version 2.1b are: 1. When attempting to open a network drive, under some circumstances, INIMAINT would get a logic error 1111 with a dos error of 3. The dos error indicates that the path is not found and is not handled correctly. Code has been added to check for this return and to treat the drive as unavailable. 2. If INIMAINT is added to the WPS main menu, it is started with the Desktop subdirectory passed as a command line parameter. This would cause a dialog box to appear indicating that the directory was not a valid INI file and asking if the user wanted to create it. In order to prevent this from happening, code has been added to examine the startup filename and, if it is only a directory, to ignore it. 3. If INIMAINT was started with a current INI file that had been deleted, one of two things would occur. If the INI file could be created, it was created and used as the default. If the file could not be created, for example, if the subdirectory had also been removed, then INIMAINT would terminate. INIMAINT will now check to see if the default file exists and if it does not, ask the user if he wants to create it and, if he does not, then it will aks the user to enter a new filename. 4. When the Repair dialog was displayed and the current entry in the combobox that lists the type fo repair was selected by hitting the tab key. A request for help would cause INIMAINT to terminate. Code has been added to the combobox help routine to check for this condition and to insure that the correct help panel is displayed. ******************************* V2.1c ******************************* The items fixed in Version 2.1c are: 1. Some users found the use of the word 'List' in the for the type of Repairs to be misleading, so the word 'List' has been changed to 'Display'. 2. The message 'Doing Repair' would appear in the Repair Dialog even when no actual Repair was being performed, but the Display window was simply being loaded. Additional code has been added to change the message to 'Loading Display' when that is all that is being done. 3. The Handles structure for certain kinds of Network situations have a Drive entry that is not a normal drive letter followed by a colon. The Repair Function did not handle this situation correctly and would get a 1114 Logic Error. This has now been fixed and will be recognized as a Network situation. 4. The Repair Options dialog did not have an entry to allow the user to ignore or bypass Network drives and other Network entries. A set of Network options has now been added. 5. There were situations where IniMaint would indicate an INI file did not exist, when it was simply opened in such a wya that all other users were denied. This has been fixed by handling the check for whether the file exists in a different manner. 6. A number of additional error returns from the call to the DosOpen API that indicate a drive entry is a Network Drive have been identified and added into the code that determines what kind of drive the Repair function is dealing with. 7. The return from WinPostMsg was treated the same as the return from WinSendMsg and normally not checked. This could result in a message posting error that would not be detected by the error checking code. All calls to the WinPostMsg API have been changed so that the return code from the API is validated. 8. There are situations where it was not clear exactly where an error occurred when the Dump Dialog was invoked. The reason for this is that there are a number of error codes that are used by more than one subroutine. In order to address this problem, the error routine is not passed an additional parameter which identifies the subroutine that is reporting the error and the id of the routine that first reports an error that will cause the Dump Dialog to appear is saved by the error reporting routine. This information has also been added to the Dump Dialog Window. 9. The only way that the Repair function would ask the user about each Repair action was if the user wanted to be asked about every single item that needed to be repaired. It was not possible to select certain items and then have the Repair function only ask about those items. The Repair code has been modified so that it is now possible to check the Ask box with some of the items selected and the user will then only be asked it they want to Repair the selected items. 10. A number of the Accelerator Keys used the Alt Key in conjuction with a letter. This cause problems with menu selections and a number of other functions. All of these Accelerator Keys have now been replaced with Ctrl-Alt and a letter combinations. Refer to the Accelerator Key section of the Help for a detailed list. 11. When doing the Repair of the WPS entries or the File Directory Handles, selecting certain items to be Repaired also would cause other lower level items to be Repaired. For example, selecting a Drive entry would cause a Repair to all the items on that drive. This was not clear from the behavior of the highlighting in the window, since only the selected item was highlighted and not the other items that would also get Repaired. The highlighting code has been changed so that all of the items that are going to get Repaired will now be highlighted. 12. The initial version of the code to handle Extended Attributes has been added in this version. When the Extended Attribute feature is activated, IniMaint becomes SysMaint and a new set of menu items appear that provide editing, displaying, moving, copying and a number of other functions in the Extended Attribute area. The Extended Attribute functions are not Shareware, but are only activated when a fully registered copy is being used. Refer to the Help file under Registration for details. ******************************* V2.1d ******************************* The items fixed in Version 2.1d are: 1. The TEST function for the Extended Attributes has been implemented. ******************************* V2.1e ******************************* The items fixed in Version 2.1e are: 1. An additional option has been added to the Repair Options Dialog box. This item, Bypass Known Errors, will cause the Repair function to make some addtional checks for errors it knows about and should not be of concern to the user. A full list of the things bypassed are in the online help file. 2. During the updating of an INI file, OS/2 creates a file in the same directory with the same name except with an extension of ###. Thie ### entry gets added to the Handles structure in the OS2SYS.INI file. Since the ### file only exists for a short time, it will always be identified by the Repair function as an entry in the Handles that cannot be found. Additional code has been added so that when the ### file is not found and the user has asked to bypass known errors, a check is made for a file with the same name with an INI extension. If the INI file is found, then the Repair function will not identify the ### file as a file not found. 3. The EA Test Dialog has been added to the Help file. 4. The Help file has been updated to also describe SysMaint. 5. An additional item has been added to the Extended Attribute Defaults that allows the user to specify that they always want to continue when a sharing error is encountered while processing Extended Attributes. 6. Deskman/2 adds a zero value entry to the Abstracts:Icons entry in the OS2.INI file. This entry is not found in the list of Objects, therefore, this entry is reported as invalid. Since we know the entry is valid, additional code has been inserted to check for this condition and to identify the Icon as the Deskman Icon if the user wants IniMaint to bypass known errors. 7. The WPSBKUP program creates a temporary object with the name of NFD73 during the backup process. This causes an entry to be made in the Handles structure for this filename. Since the file is temporary, it will always be identified as a file not found. Code has been included in this version to not report this specific filename if the user wants IniMaint to bypass known errors. 8. When the EA Test function found entries to add to the Test Dialog, the processing EA's Dialog was left on the screen. The exact reason for this is not known, but I believe it is associated with loading two different modal dialogs with the same Parent and Owner and then destroying the second dialog before destroying the first one. It was not possible to debug this problem because it would not occur when the program was run under IPMD. The problem has been fixed by including code to destroy the Processing EA's dialog before the Testing dialog is created. 9. If some sort of terminal error was encountered before the main window was created, no error Dialog would appear because the error routine was posting a message to the main window in order to get the error Dialog to appear. The error routine has been changed to check to see if the main window handle is valid and, if it is not, the error routine will display the error Dialog directly. 10. If the OS2.INI file was corrupted to the point that the data needed by IniMaint or SysMaint could not be read from the file, it was not possible to run the application, since it would terminate during the initialization phase. In order to get around this problem, the application will now look for an Environment Variable INIMAINT= and, if this variable is found, it will assume this is the full pathname of a file than should be used to obtain the IniMaint or SysMaint default information. For example, if the user wanted to use an INI file with the name of: C:\OS2\APPS\INIMAINT.INI then you would add the following line to your CONFIG.SYS file or to a CMD file that runs IniMaint or SysMaint: SET INIMAINT=C:\OS2\APPS\INIMAINT.INI 11. If a terminal error occurred before the name of the current INI file was filled in, the error Dialog code would get a protection exception attempting to display this name. The code has been changed to test for a null value before attempting to print the name. ******************************* V2.1f ******************************* The items fixed in Version 2.1f are: 1. IniCopy has been upgraded to handle Extended Attribute files as well as INI files. 2. The Add New Key Name item on the Action Menu did not work because a return from one of the Prf API's was not tested correctly. The test has been fixed. 3. A new item has been added to the Files Menu, Recall. Selecting this menu item will cause a submenu to be displayed showing the a list of the INI or EA files that were the current file. If one of these files is selected, it will become the current INI or EA file. The number of files displayed is controlled by a new Option in the Options Dialog and has a default value of 10. ******************************* V2.1g ******************************* The items fixed in Version 2.1g are: 1. When Updating the Extended Attributes from an EA file and one of the Source Files or Directories has been deleted, SysMaint will get a 1317 Logic Error because the Set Path Info API will give a return code of 3, indicating that the file is not found. Additional code has been inserted to notify the user of this condition. 2. The Duplicate Key menu item has been updated to handle EA files. 3. The Rename Key menu item has been updated to handle EA files. 4. The Delete Key menu item has been updated to handle EA files. 5. Code has been added to deactivate the Add Application and Add Key menu items when an EA files is the current file. Adding Extended Attributes involves adding a number of different control items and will be implemented via an entry on the Extended Attribute Menu. 6. Code has been added to delete the Condense items from the Recover Menu if the version of OS/2 is 2.1 or later. This function makes no sense for these versions, since no empty space is ever left in the INI files. 7. After Editing an Extended Attribute file and switching back to an INI file, the EA flag would sometimes not get reset, causing SysMaint to think it was working with the wrong type of file. 8. Some of the Ctl-Alt Accelerator Keys did not work correctly because of the order in which they were defined in the resource file. The sequence of the definitions has been changed so that the Accelerator Keys will work correctly. 9. The Dialog that is responsible for getting new character string information from the user was not capable of handling a character string longer than 32 characters. This limit has been increased to 255 characters. ******************************* V2.1h ******************************* The items fixed in Version 2.1h are: 1. Popup menus have been added for the various windows. Clicking on the RMB while the pointer is in the Application, Key Name or Key Value windows will popup a menu with the items that are appropriate for that window. 2. A Desktop menu item has been added to the SysMaint menu bar. This menu will eventually have a number of different entries to allow users to do various maintenance functions for the Desktop. 3. A Reset Desktop item has been added to the Desktop menu. This item will simply reset WPS so that changes that have been made to the INI and EA files that require the Desktop to be restarted will become effective. 4. It was not possible to split the EAs from a Directory or to update the EAs for a Directory because a logic error 1346 would result. The reason was that the name of the Directory that was used for one of the API's still had the trailing slash on it causing a Path Not Found error to be returned. The code has been modified so that the Directory name is specified correctly. 5. After Repairing the WPS Entries and/or the Handles Entries, it can take a considerable amount of time to free the memory for the Container Records. In order to make sure the user knows what is happening, a message dialog will now be displayed telling the user what is going on. 6. It was possible for some of the WPS entries, such as PMWP_ASSOC_TYPE, to be incorrectly marked as invalid. The reason was that a case in a switch statement was missing a break, thus causing it to fall through to the next case. The break has been added to the code so that the entries will be reported correctly. 7. If the last item in the PMWP_ASSOC_TYPE Application was associated with nothing, the association was simply left blank because the check for any association entries in the structure did not work correctly for the last entry. The test has been changed so that it will work for all entries. 8. The titles for the Extended Attribute Submenu entries were confusing for most people. This Submenu has been completely reworked and will, hopefully, be more clear. ******************************* V2.1i ******************************* The items fixed in Version 2.1i are: 1. The Edit item on the Extended Attribute Menu bothered some users because Edit implies that things are going to be modified. When SysMaint 'edited' the Extended Attributes, it did not change anything unless the user asked for a specific update of the Extended Attributes. Therefore, this menu item has been changed to View. 2. Running IniMaint or SysMaint would leave a zero length file in the default directory, INIERR.TXT. This was caused by redirecting the stderr output. The code has been changed so that stderr will only get redirected when compiling the debugging version of the program. 3. The Extended Attribute Default option to delete temporary files would only delete the files used in the Compare. The temporary files created when the Extended Attributes are View'ed should also be deleted when the user is finished Viewing the information. The code has been changed to do the additional deletes. 4. Whenever the Control or Alt Keys were pressed and held, the Key Value window would flash. This was caused by the code that disabled and reenabled the window while a key was being processed. Additional code has been inserted to prevent these keystrokes from being passed to this window. 5. If the current INI file was deleted between runs of IniMaint, the user was informed of this the next time that IniMaint was run and was asked if they wanted a new file created. If the user replied NO, then the standard User INI file, OS2.INI, was opened as the current file. However, the IniMaint entry in the INI file for the current default INI file was not updated. Therefore, the user would be asked about the same file the next time IniMaint was run and this would continue until the user did something to cause the information in the INI file to get updated. Additional code has been added so that the information in the INI file will get updated when the User INI file is made the default. 6. A Defaults Dialog has been added to the Desktop menu to allow the user to set the various default values and flags for the Desktop Menu items. 7. It was not possible to use the Copy or Move entries on the Action menu to copy the Extended Attributes for a single file to another file if the target file did not already exist. The copy would terminate with a message that the files were not compatible. This was caused by code that opened the target file before the copy was started in order to verify that the target could be used as a valid INI or Extended Attribute file. This caused an empty file to be created, which had not control information. When this file was opened by the IniCopy program, IniCopy got an indication back from the open routine that the target was not a valid Extended Attribute hold file because of the lack of control information. The problem has been fixed by modifying the open code so that it will use the default file type that it was passed when it opens a file and the file does not even have the signature bytes written to it, in short, it is completely empty. 8. The Join would not work for certain combinations of source and target sets of Extended Attributes if the sets were not the same type, such as both the Extended Attributes for all the Directories in a specific Directory. The reason for this was because a flag in the structure used to control the Join was set from the wrong source. The code has been modified so that the flag is now set from the correct source. 9. I was not possible to Compare the Extended Attributes that were current for a file(s) and/or directory(s) to a set of Extended Attributes that had been saved in a file. A new menu item has been added to the Extended Attribute menu that will now allow for this type of Compare, Compare to Saved EAs. 10. Code has been added to automatically detect the condition where the OS2.INI and OS2SYS.INI files cannot be updated. When this occurs, the user will be informed of the situation and asked it they would like for the condition to be fixed. If the user replies YES, then IniMaint will go through a reset procedure that will fix this problem and pick up where it left off. 11. In line with the item above, a new item has been added to the IniMaint Repair menu that will allow the user to have IniMaint automatically fix the problem of INI files that cannot be written to. 12. A new item has been added to the Repair menu that will allow the user to run a test for INI files that cannot be written to. If the condition is found, it will be automatically fixed if the user wants it to be. This is for users who store the IniMaint or SysMaint information in an INI file other than the OS2.INI file, thus would not normally be automatically notified when the INI files cannot be updated. 13. A number of items have been added to the Desktop menu for SysMaint that allow for a Simple backup of the Desktop, including the ability to keep as many generations of backup as desired, a selection that will generate a backup CMD file that can be run at anytime and will maintain all the generations, the ability to generate a CMD file that will do a command line restore of the Desktop, and items that will restore the two major parts of the Desktop, the directory structure and the INI files, while WPS is operational. 14. This version introduces the 'safe' versions of the program, IniSafe and SysSafe. These two versions do the same kinds of things as IniMaint and SysMaint do, however, they will not update any files or do anything that can cause a problem with the Desktop. If there are users in an organization that you want to have access to the things that can be accessed via IniMaint and SysMaint, but these users should not be allowed to modify anything, then these users can be furnished IniSafe and SysSafe in place of the xxxMaint version and they will have this capability. 15. A number of new things have been added to the help files under the catagory General Help Information. Most, if not all, of these topics have also been inserted into the see also lists for the appropriate subject areas. This section contains a discussion of the environment that is required for IniMaint or SysMaint, a discussion of different kinds of Desktop Backups, a description of and how to address INI files that cannot be updated, notes on how the Extended Attributes from different files are matched for things like Compare, and a description of what IniSafe and SysSafe are. In addition, all of the *.TXT files that are normally distributed with IniMaint and SysMaint have been incorporated into the online help. 16. If the user was running an unregistered version of IniMaint, the message that the registration information was invalid wuould appear everytime the app was run. This was caused by the reuse of a variable before it was tested to see if there was no registration information. The problem has been fixed by using different variables. 17. The stack size for the secondary threads was not large enough, so it has been considerably increased. 18. There were a couple of places where the memory allocation was done using the wrong routine, which would cause a problem with switching back and forth between the normal memory allocation routines and the debug routines. All of the source modules have been modified to use the correct memory allocation API call. 19. There was a problem with how the menu selection worked when the main window menu was on more than one line. This seems to have been caused by the fact that the frame window was not notified when some of the menu changes were made. Code has been added to make sure that the proper notifications are sent. ******************************* V2.1j ******************************* The items fixed in Version 2.1j are: 1. If there was a Network Drive in the Handles0 or 1 structure in the OS2SYS.INI file that was not in the normal format and any of the handles were deleted. The resulting Handles structure would be invalid because the code that rebuilt the Handles structure assumed that the Drive entry had a two character name consisting of the Drive letter followed by a colon. This is not always true for network drives and the code has been modified to use the length of the drive information in place of a default value. 2. The code in the routine that restores the Desktop Directory does not remove the temporary CMD file after doing the restore because the lines that were commented out for testing were not restored before the 2.1i version was released. The comments have been removed and the file will not get deleted. The filename will be of the form TMMDDXXX.CMD where MM is the month, DD is the day of the month and XXX is a sequential number starting from 001, and will probably be 001. 3. Because of the way the default was built and since that is what was used during testing, none of the Desktop routines to build Backup or Restore CMD files would work correctly once a new directory was chosen. This is because the new directory would have a trailing backslash and the default one did not. The problem has been fixed by insuring that all directory names have a trailing backslash. 4. The Desktop Default Dialog would put the incorrect information into the window that displays the name of the Backup and Restore CMD files, if the user tried to change these entries. Actually, the Default Backup Directory would be placed in the field. ******************************* V2.1k ******************************* The items fixed in Version 2.1k are: 1. The Repair Objects entry in the Repair Dialog has been upgraded so that the display will include the folder that contains the Object and, when the Object is deleted, all references to the Object will be removed from the INI files and the Desktop will be reset. This will assure that the Object has been completely deleted, even if it cannot normally be shredded. 2. The SysMaint Desktop Backup still did not work because of an error in specifying one of the filenames. The first character of the filename was left off. The code has been changed to create a CMD file with the correct filename. 3. If the user chose the User INI File or System INI File options from the Files Menu as the file to view immediately after Viewing a set of file and/or directory Extended Attributes, the temporary file that contained the Extended Attributes was not deleted and a message would be seen indicating that the Current INI file could not be deleted. This was caused by a failure to save the temporary filename in the old INI file field when the two menu items above were selected. The code has been updated so that the old filename will be properly saved in both situations. 4. Some changes have been added to the Dump code so that the Version, Date and Time of the dump information will be included. 5. The Dump of certain control structures was limited to only 100 members of each structure. There were times when this limit was too small and critical dump information was in included. Therefore, the limit has been increased to 1000. 6. A new item has been added to the available types of INI File Repair. IniMaint will now check the OS2.INI file for leftover PM_ProgramListxxx entries and remove them at the user's option. These entries are no longer needed under OS/2 2.1 and can cause problems with deleting of Program type Objects that are contained in the entries. 7. A new item has been added to the available type of INI file Repair that will remove old Printer information from the OS2SYS.INI file. Whne Printers are removed from the Desktop, some of the old information is left in the INI file. While this information does not cause a problem with the Desktop, it can cause a problem with various programs, such as Word Processing programs, that look in the OS2SYS.INI file for printer information. Some of these programs will assume that the old printers can still be used. However, any attempt to print to the old printers will be unsuccessful. This item will examine the 10 or so entries in the OS2SYS.INI file that might have old printer data left and remove it at the user's option. ******************************* V2.1l ******************************* The items fixed in Version 2.1l are: 1. The SysMaint Restore process was not sufficiently robust, so a number of things have been done to address the problem. First, the Restore CMD file will no longer use OS/2 Commands to clean up the Desktop Directory, this will now be done via a new program, IniClean, that simply has the root as the input and will use the root information to remove whatever Desktop Directories and Files currently exist. In addition, the name of the programs that are executed are now fully qualified, so the the CMD file will work with any directory as the default directory. 2. In order to assure that the executable files and the source and target files for the various Backup and Restore actions will all be found correctly, all file, directory and program names are now fully qualified and enclosed in quotes. 3. The Desktop Restore Command file did not have lines that would erase the existing OS2.INI and OS2SYS.INI files before the UNZIP was done. Additional lines have been added to insure that this is done. 4. The Repair of the PM_ProgramListxxx entries did not remove all the references to the Application. It is possible for entries als be stored in the PM_Workplace:Location Application. Additional code has been added to insure that these entries are also deleted. 5. The Repair Printers Item did not recognize IBMNULL Printer entries, which should never be deleted, if they had lower case characters in the name. The type of compare has been changed so that upper and lower case characters will compare the same. 6. When an attempt to remove a Printer entry was not successful, the program would terminate with a Dump Dialog. Since the inability to remove a Printer entry is not really a terminal type of error, the code has been changed to simply notify the user when this situation has occcurred. 7. There were some areas in the Repair Printer and Repair PM_ProgramListxxx routines where memory could be left allocated. This memory would be freed once the program terminated, but should not be left allocated. The problem areas have been fixed. 8. A new Button has been added to the Dump Dialog, Continue. Previously, when a Dump occurred because of some sort of error condition, the user had no option but to terminate the program. The Continue Button gives the user the ability to continue processing even though an error has occurred. If the user chooses to Continue, they will be warned that an error condition could continue to exist. 9. If there was a problem removing a printer entry, the Dialog that indicated that the INI files could not be written to would appear. This was in error, since the problem was that a specific OS2SYS.INI file entry could not be removed, therefore, addtional code has been inserted to handle this condition. 10. If one of the threads other than the main thread got an error attempting to make a change to the OS2SYS.INI or OS2.INI files, the code that indicated that the INI files could not be updated would be entered. This code would abend with a logic error of 1201 because an attempt would be made to pop up a message box for a thread that did not have a message queue. Additional code has been inserted to insure that the check will only be made for the main thread. 11. In order that the user knows the limitations of the Sysmaint Restore process, a message box will be displayed anytime the users asks that the Restore CMD file be created that explains the limitations. ******************************* V2.1m ******************************* The items fixed in Version 2.1m are: 1. If the user selected Continue after a dump and the supplemental error text field had been allocated, the memory was not freed. Code has been added to free this memory. 2. There were possible combinations of user names and SysMaint registration codes that would not register correctly because a variable would evaluate to zero. Additional code has been added to check for this condition. 3. It was possible to get a protection exception when attempting to remove invalid registration information. The code has been changed so the INI file will get updated correctly. 4. If the IniClean program used to do the restore of the Desktop did not find the old Desktop, it would terminate with an error rather than simply allowing the restore process to continue. Additional code has been added so that the condition will no longer be treated as an error. ******************************* V3.0 ******************************* The items fixed in Version 3.0 are: 1. It was possible to get a logic error 1109 when attempting to do a Repair because of filenames in the Handles structure that contained *. This generated an Invalid Path DOS error that IniMaint was not handling correctly. Additional code has been inserted to handle this DOS error code. 2. During certin copy operations it was possible to get a 1201 logic error code because an attempt was made to pop up a dialog box for a thread that did not have a Message Queue. This problem has been fixed by insuring that every thread that creates an Anchor Block also creates a Message Queue. ******************************* V3.0a ******************************* The items fixed in Version 3.0a are: 1. Under certain circumstances the Application level compare of two INI files would go into a loop. The problem was caused by a pointer not getting incremented correctly and has been fixed. 2. An additional check has been added to the Repair File Handles routine that will look for Orphan Handles, Handles with no Parent in the structure. This condition would previously cause a 1115 Logic Error, but will now be added to the list of invalid handles with a error message that identifies it as an orphan handle. 3. If the INIMAINT= Environemnt Variable was invalid, the Dump Dialog would appear after the message box that informed the user. There was no reason to display the Dump Dialog and it will no longer appear. 4. Some users were confused by the All Groups display, which includes the Applications which are in any of the defined Groups. Therefore, additional text has been added to the Help entry that discusses the contents of the Groups Listbox. 5. A number of new users have mentioned that they were not sure how to get started with IniMaint and SysMaint, so a Getting Started section has been added to the Help file. ******************************* V3.0b ******************************* The items fixed in Version 3.0b are: 1. While getting the Extended Attributes for the Desktop of the MultiMaint Portable Backup, the memory for the EAs for each directory or file should have been freed after the information was recorded in the *.EA file. However, this was not done, causing the program to use very large amounts of memory. The appropriate areas are now freed correctly and the total memory requirement is much smaller. 2. If a Filename in the Handles structure contained invalid characters, it was not identified as having a invalid format and was, therefore, no placed in the window listing files that should be Repaired. This could result in a number of different problems ranging from a Desktop that would not boot to Orphan Handles in the File Handles structure. The code has been fixed by adding a new type of error that will identify these entries as being an invalid name. 3. Additional information will be captured by the MultiMaint Beta Code. This is the second of three steps in producing a workable version of the program. 4. The MultiMaint Beta did not release the memory as it obtained the Extended Attributes for each Directory or File. This has been fixed, so the Portable Backup code will no longer cause the Swap file to grow by several megabytes. 5. Additional error recovery has been added to the MultiMaint code so that recovery from an error condition will be reported correctly, all of the WPS pointers changed for the data collection will be restored to their original value and there will be no problems with WPS after the test. 6. The IniClean program would leave part of the Desktop when there were several levels of nesting of Folders because the Folders were done in the incorrect sequence and some of the chain information was lost. The sequencing has been corrected and all Desktop information will now be deleted. 7. If a generation other than generation 01 was used for the restore of the Desktop, an error was encountered because there was a space between GO and TO in the CMD file. The space has been eliminated, so the CMD file will not encounter the error. 8. There were a number of situations where a Dump Dialog would appear if the name of a file used by one of the dialogs was old and pointed to a directory that no longer existed. What should happen is that the user is informed that the file cannot be opened. All of the locations that would have generated a Dump Dialog have been changed to simply pop up a message box. 9. The accsswps.dll file is a dll that is only needed for the upgrade to SysMaint, which is in beta. However, V3.0a would not run without this file because there were some calls to the AccessWPS API's in the Dump Dialog code. These lines have been made conditional based on some compile options, so this dll is not longer required for IniMaint or SysMaint and can be erased. 10. Two items have been added to the popup menu for each of the windows. One of the items will write the contents of the window to a file and the other will print the contents of the window. 11. It was possible for IniMaint to run out of stack space in certain very unusual situations, so the primary stack size and the thread stack size have both been increased. 12. Although it is, in theory, impossible to have an Application with no Keys, some examples of this condition have been seen in some INI files. It was not possible to delete these Applications with IniMaint because IniMaint attempted to use a pointer that was NULL in this particular situation. Additional code has been added to handle this condition and these Applications can now be deleted. ******************************* V3.0c ******************************* The items fixed in Version 3.0c are: 1. The Write and Print Window contents items added to the popup menus in the previous version, did not identify the Application when the Key Name window was the source and did not identify both the Application and Key Name when the Key Value window was the source. This made it necessary to manually document this information on each printout or in each file. Additional line have been added to the heading information to output this information. 2. The name and location of the logging files for the Repair, Extended Attributes and Portable Backup functions were fixed and would always be in the default directory. Now, both the name of the logging file and its location can be selected by the user from a new entry in the Options or Defaults Dialog for the particular function. The selected file will be remembered from one run of IniMaint or SysMaint to the next. ******************************* V3.0d ******************************* The items fixed in Version 3.0d are: 1. The initial Portable Restore capability has been added to the MultiMaint version. 2. The application names of the Objects saved during the Portable Backup have been changed to eliminate the Desktop Directory. This was redundant information, since every Application started with the Desktop, since every Object is on the Desktop. 3. The INI File write routine will no longer cause the Dump Dialog to appear when it finds an error, it will simply pass the error back to the calling routine. It will be the responsibility of the calling routine to pop up the error dialog. The problem with having the write routine pop up the error dialog is that the id of the routine actually having the problem and the INI file that was casuing the problem would often be lost. 4. There were conditions where the Save or Write INI file for various functions could get the RO attribute left on even though the file was not actually opened. This would cause a 704 Logic Error the next time the file was used because the file would be considered to be Read Only by OS/2. Additional code has been inserted to insure that the RO attribute is not set for these files, so that they will always be usable. 5. When a error occurred during a Repair operation, there were situations where the error logging was not sufficient to easily and accurately determine the problem. Additional information will now be logged to improve this area. 6. If it was not possible to open the file currently set as the Save INI file for the Repair because the file had been chosen in a past run and the directory structure had been changed to make the path and file name combination invalid, an abend would occur with a generic Logic Error code of 1. Addtional coade has been added to insure that the Save INI file can be opened before any Repair is executed which will need to Save any of the INI file data. 7. The timeout for the execution of the WPS and SOM methods was set at 30 seconds, which turns out to be too short for some methods, such as wpPopulate. Therefore, the timeout has been increased to 3 minutes. 8. The Repair Uninstalled Printers code would sometimes incorrectly identify a Printer as not being installed because the key Value entry for a critical Application had an ending semicolon. The semicolon caused a compare to be unequal, thus causing the incorrect conclusion. The code has been modified to ignore the semicolon when doing the compare in question. 9. The physical sequence of many of the items in the Help file have been changed to make them more logical. This has no effect on the actual Help, however, there are programs that will transform the Help file into a text file that can be used in a word processor or printed. When this is done to the Help file, the physical sequence of the items determines the sequence of the items in the output file. The changes were made in order to make this process easier ******************************* V3.0e ******************************* The items fixed in Version 3.0e are: 1. The DEF file for the DLL that holds the API's supplied with the compiler had an incorrect DLL name because of the conversion from V1.0 of the compiler to V2.01 of the compiler. This meant that IniMaint and SysMaint would not run without the DDE4MBS.DLL file. The DEF file has been fixed and the C SET/2 DLL is no longer required. ******************************* V3.0f ******************************* The items fixed in Version 3.0f are: 1. There were situations where memory would not get freed when Continue was selected after the Dump Dialog was displayed. Code has been inserted to insure that everything is freed once the dialog has been dismissed. 2. If the Save INI file does not exist when an attempt is made to do a Repair, a logic error 634 will result because an attempt is made to remove the Read Only Attribute from a file that does not exist and the code does not test for this condition. The code now makes the appropriate tests and this error will no longer occur. 3. The initial Explain capability has been added to the popup menus for each of the three windows. This is a feature that will continue to evolve over time as more and more is learned about the various entries in the INI files and Extended Attributes. 4. The Repair File Handles did not correctly process Directory or File Names that had characters in them that are not considered printable Ascii characters. The names were immediately identified as invalid, even though no actual check was made. This turns out to be an incorrect approach because there are names in non-US versions of OS/2 that are valid and contain these characters. The code has been modified so it will check a name from the Handles structure, even if the name contains characters that are not printable Ascii characters. 5. The EA Test Dialog Write File name was not remembered from one run of the Dialog to the next. This forces the user to select this file from scratch every time they want to have the contents of the Listbox written to a file. The Filename will now be remembered and it will be displayed as the Default File whenever the Write button is selected. 6. There was still a problem with certain printers being identified as not being installed, when there were perfectly valid. Additional changes have been made to the code that validates the printers so that printers that are valid will not be treated as invalid. 7. The default selection on all three popup menus has been changed from the Refresh item to the Explain item. 8. The Help for the Popup Menu items: Write, Print and Explain have been added. 9. It was possible that the Desktop Restore CMD file would not create the new Desktop Directory structure correctly if the default drive was not the same as the drive that contains the Desktop. Therefore, two additional lines have been added to the Restore Command file to insure that the correct drive is the default drive. 10. The Popup Menus did not have the Accelerator Keys noted as part of the Menu lines. This information has been added to each line. 11. There were no Accelerator Keys for Write Window to File or Print Window, these have also been added and are the same for all three possible windows. An Accelerator Key for Explain has also been added. 12. It was possible to Exit from IniMaint or request a second window Print or Write while there was already a Print or Write in progress. In the case of the Exit or Write, several things could happen, but the most likely was a protection exception. In the case of the Print, a logic error 1504 would occur because an attempt was made to set a semaphore that was already set. All of these situations have now been fixed by the addition of code that will cause the routines involved to wait for the current activity to be completed. ******************************* V3.0g ******************************* The items fixed in Version 3.0g are: 1. A number of people have had problems with the Repair Objects item in the Repair Dialog. Most of the time, user have simply selected the Do Repair item and then Execute. The effect of this is to remove every object from the Desktop. In order to address this problem, two things have been done. First, the name of the item has been changed from Repair Objects to Destroy Objects and, second, the Do Repair button warning has been changed to make sure that the user understands that every Object Destroyed will be removed fro the Desktop. 2. Many, but not all, Objects have Location information in the PM_Abstract:Objects entry for the Object in the OS2.INI file. However, for some reason, not all of the Locations defined in the Objects are present in the PM_Workplace:Location entry in the OS2.INI file. This apparent inconsistancy does not seem to cause a problem in the vast majority of situations. However, it is an inconsistant situation, so an additional Repair Item has been added to the list, Restore Missing Location Entries, which will display any Objects with Location information that is not in the Location entry and give the user the ability to add the appropriate information. 3. The Variable dump did not identify the version of OS/2 being used, which has caused confusion in certain situations, therefore, this information is not included in the variable dump. 4. The Repair File Handles and Repair WPS Entries would not work with versions of OS/2 prior to V2.0 because of a change in the names of some of the Applications in the OS2SYS.INI file. Additional code has been added to handle either name format. 5. If a music CD was in the CDROM drive when a Repair of the File Handles was attempted, the Repair would abend with a 1109 Logic Error because Sector Not Found was returned from the Query Path Info API. Additional code has been added to handle this return and a couple of other similar return values. 6. Once a drive was identified as a Network Drive by the Repair Handles routine, all files and Directories on the drive were considered to be invalid, even without checking them and even if the Automatic Repair was set in the Defaults. The code has now been modified so that Network drives will be handled the same as CDROM and VDISK drives and in accordance with the Default settings. 7. There have been a couple of situations where the Repair Uninstalled Printers Repair function has caused a problem with the Desktop. In order to insure that this does not happen in the future, this item will not work unless the IBMNULL printer is installed, thus insuring that none of the critical Applications in the OS2SYS.INI file will have their last Key Name deleted, thus deleting the Application and causing a problem on the Desktop. If the IBMNULL printer is not found, then user will be informed of it via a Message Box and the structures that hold any Uninstalled Printer information will be cleared and the memory freed. 8. The Restore of the Desktop Directory from the Desktop Menu item could have worked incorrectly because the Desktop Directory could not be found, but the user was not informed that an error had occurred. This was caused by two problems, the first was a place in the code where a check for an empty Desktop directory was not made and this problem has been fixed. The second problem was that the IniClean program would revert to the default directory when it was run without any input parameters and this has also been fixed. 9. When the Restore Desktop Directory entry was selected from the Desktop Menu, the CMD file that was built attempted to also unzip a new copy of the INI files. The unzip was not successful, since the INI files already existed, but there should not have been an attempt to unzip them and the code to do this has been removed from the CMD file. 10. An attempt to reset the Desktop Directory using the Desktop Menu item would result in a SYS3175 error because of a difference in the size of a structure that was caused by changing a system wide size variable and not recompiling all modules. All of the modules have been recompiled, and this fixed the problem. 11. The reset of the Desktop Directory from the Desktop Menu left two zip file in the default directory. Additional code has been added to insure that these files are erased once the restore and reset are complete. 12. One additional situation was found where an attempt would be made to delete a printer that was actually installed on the Desktop. The problem occurs when a specific combination of Driver and Printer names were used by the installed Printer. Additional code has been added to identify the problem and prevent the printer from being reported as not installed. 13. There are three places where WM_TIMER messages are processed, but non of the code that handled these messages made a check to verify that the Timer that issued the message was the expected one. The effect of this was that the code would take some specific action based on the assumption that a specific Timer event had occurred, when it was possible that it had not occurred. The specific condition that identified this problem was a user who had the initial dialog turned on and had accidently erased the INIMAINT.HLP file. The user would get the message that the Help was not available and then, sometimes, would get a Logic Error 610 and sometimes would have no further problems. Which event occurred depended on whether there was a Timer message received from an unexpected Timer while the problem with the Help was being handled. Additional code has been added to insure that Timer messages are ignored excpet when they have been caused by the appropriate Timer. 14. There were a number of readability problems with the IniHelp.TXT file, so some changes have been made to improve the readability. Most of the changes in volve adding extra blank lines between paragraphs, indenting lists, makeing sure there are two spaces after the end of each sentence and a few other minor changes.