CHECKINI.TXT - Page 1 _________________ TABLE OF CONTENTS 1. DISCLAIMER...................................................1 2. IMPORTANT - READ THIS FIRST !................................2 3. DESCRIPTION..................................................3 3.1 GENERAL.....................................................3 3.2 PM_WORKPLACE:HANDLES........................................3 3.3 ORPHAN OBJECTS..............................................4 4. USING CHECKINI...............................................5 5. HOW THE PROGRAM WORKS........................................5 6. EXAMPLES OF OUTPUT:..........................................6 7. REVISION HISTORY.............................................8 CHECKINI.TXT - Page 2 1. DISCLAIMER I allow you to use and distribute CHECKINI freely under the condition that I am in no way responsible for any damage or loss you may suffer. Henk Kelder Dennenlaan 12 3843 BX Harderwijk 2. IMPORTANT - READ THIS FIRST ! You should take care when using this program on new version of OS/2 since this program interprets data from the ini-files. The internal structure of this data can change, and the program might fail or even corrupt information This was the case with the OS/2 2.00.1 (or 2.01) version. CHECKINI checks for, and optionally corrects, some problems in OS2.INI and OS2SYS.INI. CHECKINI only looks at information regarding the workplace shell. The make full use of CHECKINI read this document to require information about what CHECKINI does. CHECKINI.TXT - Page 3 3. DESCRIPTION 3.1 GENERAL The main reason for CHECKINI is the growth that the both .INI files tend to have if one uses the Workplace shell heavelly. Using CHECKINI in conjunction with COPYINI helps to reduce the INI files sizes, which in turn should increase the workplace shells performance. Also CHECKINI helps to determine some possible cause's for workplace shell failures like loosing workplace shell objects, or situations in which a program object looses the proper executable name or current directory. Obviously, the real cause for these problems must be in the workplace shell itself, CHECKINI however could help you to determine the degree of damage that has been done. 3.2 PM_Workplace:Handles A special note is in place about a specific piece of information in the INI-files called 'PM_Workplace:Handles'. The workplace shell uses some obscure entity called object-handles to refer to objects. Object handles are infact numbers. A object-handle can refer to a abstract object (a object NOT on your harddisk e.g. the color palette) and file-system objects (files & directories). Abstract objects reside in the ini-files. File-system objects reside on your harddisk. Whenever you add a program object to your desktop and specify a programfile the workplace shell determines if a handle was already assigned to the programfile and if so, it uses this handle. If no handle was assigned, the shell creates a handle and assignes it to the programfile. In the definition of the program object (self an abstract object) the handle for the programfile is stored. When you start the program by clicking on the object the wps must have a way to refer the stored handle back to the programfile. This is done by using the 'PM_Workplace:Handles' information. Unfortunately only handles are added to this information and they are not removed when a (program)file is removed from your harddisk. In theory the total amount of handle-to-file information could grow to big and than without any warning you will loose information. The workplace shell than shows nonsence or nothing at all in some of your program objects. CHECKINI.TXT - Page 4 CHECKINI allows you to remove handles for files or directories that are no longer present or inaccessable. If you have installed the october service pack (CSD Level XR06055) there has been a minor change in mechanisme described above. The workplace shell now keeps multiple versions of 'PM_Workplace:Handles' in the ini-files. Appearantly this is intended as a error-recovery mechanism. However, I've been unable to determine of the backup mechanism itself is implemented. 3.3 ORPHAN OBJECTS An wide spread way to remove undeleteable objects is to move them to a directory, and then, in a OS/2 or DOS session remove the directory. The Workplace shell than no longer shows the objects. They are infact NOT removed but they simply have no parent directory to they will show in. Also, sometimes it is possible that suddenly several objects are lost. A reason for this could be a unintentional removal of a desktop directory. CHECKINI detect these 'orphan objects' and queries to user (when /C specified) to move these objects to another (new) location. The moved objects will appear after the workplace shell has been restarted. If this question is answered with NO, another question is asked whether the objects should be removed from the ini-files. WARNING 1 if you are normally connected to a network and run CHECKINI when you are NOT connected to this network, or when you are not logged in, CHECKINI will report errors for references to network objects. In the situation mentioned above and with the /C swith given, take care when confirming deleting or correcting problems. WARNING 2 Whenever you run CHECKINI with the /C switch you must be prepared to shutdown immidiatly after you have run the program. This because the workplace shell has a lot of info in memory and it you keep on working some of the changes checkini has made will be overwritten by the desktop. CHECKINI.TXT - Page 5 4. USING CHECKINI From an OS/2 command prompt enter the command CHECKINI. Without any command line options CHECKINI doesn't change anything to your ini-files. COMMAND LINE OPTIONS /C - Write corrections to ini-files. The default is to diagnose only. If this option is specified the program will ask confirmations for all changes it may want to do in your ini-files. /Apath - Specify different location for ini-files to be checked. This option is usefull if you have a copy of you ini files and you would like these copies to be checked. NOTE: Do NOT use this option to check ini-files not belonging to the PC you run CHECKINI on. /Llogfilename- Specify name of logfile. The default is CHECKINI.LOG in the directory you start the program in. /W - Write all output to logfile. Normally only problems are written to the logfile. This option could help you to inspect a lot about your workplace shell objects (actually workplace shell objects instances). /S - 'Silent run', only write logfile. Normally found errors are reported directly. /R - Do not report errors on files on network drives or removable local drives like diskette's or CD-roms. /? - Show info. 5. HOW THE PROGRAM WORKS While running CHECKINI displays all found information on the screen. Whenever a problem is found, and the /S switch is not used the program reports the problem. The problem itself is visible in the bottom lines of the screen. Problems are always reported in CAPITALS. CHECKINI.TXT - Page 6 6. EXAMPLES of OUTPUT: ================================================= PM_Workplace:Handles:BLOCK1 ================================================= 3E2DA:CHECKINI.EXE =>E:\ICON\CHECKINI.EXE<-UNABLE TO ACCESS 395F8:COPYINI.EXE =>E:\ICON\COPYINI.EXE<-UNABLE TO ACCESS 39400:GETPROG.EXE =>E:\ICON\GETPROG.EXE<-UNABLE TO ACCESS ================================================= PM_Abstract:Objects & PM_Abstract:FldrContents ================================================= Object 13087, Class WPNetLink : A network folder Linked to: \\SERVER09\SYS3\DIRECTORY1<-UNABLE TO ACCESS! Object 140AD, Class WPNetLink : SYS3 Linked to: \\SERVER09\SYS3<-UNABLE TO ACCESS! Object 15185, Class WPNetLink : SYS1 Linked to: \\SERVER09\SYS1<-UNABLE TO ACCESS! Object 15956, Class WPNetLink : A network folder Linked to: \\SERVER09\SYS3\DIRECTORY1<-UNABLE TO ACCESS! ================================================= Checking AssocCheckSum ================================================= PMWP_ASSOC_CHECKSUM:252153 points to 3D8F9 - E:\ICON\GETBLOCK.EXE<-UNABLE TO ACCESS ================================================= Checking FolderPos ================================================= PM_Workplace:FolderPos:252223@10 points to 3D93F - OBJECT DOES NOT EXIST CHECKINI.TXT - Page 7 WHAT THE PROGRAM CHECKS The following ini-records (Application - Key) are checked: PM_Workplace:Handles - BLOCK1 (Checks consistency and existence of filesystem object-handles) PM_Workplace:Location - (all keys) (Checks existence of object where id-strings like point to) PM_Workplace:Folderpos - (all keys) (Checks for obsolete saved object positions) PM_PrintObject:JobCnrPos - (all keys) (Checks for obsolete saved print job container positions) PM_Workplace:PalettePos - (all keys) (Checks for obsolete saved palette positions) PM_Workplace:Templates - (all keys) (Checks for template-records that refer to non-existing objects) PM_Abstract:Objects - (all keys) (Mainly checks WPProgram objects for consistency, but also checks for 'lost-objects' - objects moved to non-existing locations. Also checks WPNetLink and WPShadow links.) PM_Abstract:FldrContent - (all keys) (Used for the check mentioned above for 'lost-objects') PM_Abstract:Icons - (all keys) (Checks for obsolete icons, icons for abstract objects that do not exist) PMWP_ASSOC_FILTER - (all keys) (Checks for associations with non-existing objects) PMWP_ASSOC_TYPE - (all keys) (Checks for associations with non-existing objects) PMWP_ASSOC_CHECKSUM - (all keys) (Checks for obsolete checksum record that point to non-existing objects) PM_Workplace:Location - (all keys) (Checks consistency of logical location names e.g. ) PM_Workplace:Startup - (all keys) (Checks if the referenced folders are infact startup folders) FolderWorkareaRunningObjects - (all keys) (Checks for a list of open objects for a workarea) CHECKINI.TXT - Page 8 7. REVISION HISTORY Notes on version 1.1: Some checks were added: - PM_Workplace:PalettePos - PM_Workplace:Startup - Some other checkings were extended. Notes on version 1.2: - The check for PM_Workplace:Handles was moved so that it would be the last test done. - The frase 'DOES NOT EXIST' for file objects (files & directories) has been changed to 'UNABLE TO ACCESS' since this is a beter description of what CHECKINI finds. Notes on version 1.3: - The only extra in this version is that it support OS/2 2.00.1 (beta version) since in this version the internal structure of various workplace shells object data has changed. Notes on version 1.4: - Not all of the data checkini appearantly needs to exist. If some data checkini checks does not exist, the test is skipped. Notes on version 1.5: Checkini now works properly after installing the servicepack dated october 1992. Notes on version 1.6: - Two additional tests were added. These test are for: - 'FolderWorkareaRunningObjects' and - 'PM_PrintObject:JobCnrPos' - When a conflict in OBJECTID's is detected (two or more objects having the same OBJECTID, CHECKINI /c can assign a new OBJECTID to the objects that claim to have an OBJECTID that is already in use by another object. - Updated the documentation files (this file) A simple test has been build in to see if OBJECTID's can be found in the ini-files, to determine if the internal data structure of the ini-files might have been changed and CHECKINI will fail completely. This is however no guarantee that CHECKINI will function properly on new versions of OS/2. CHECKINI.TXT - Page 9 Notes on version 1.7: - The 'simple test' mentioned above might block someone using CheckIni if the ini-file itself is corrupt. Now the test is only performed when /C (correct) switch is specified. Notes on version 1.8: - When checking 'PM_Workplace:Handles' a test has been put in that checks the accessibility on a volume in one strike. If the user okays the removal of all references to a non-locateable volume, all handles on that volume are removed without further checking. Notes on version 1.81: - Apparently CheckIni went bananas whenever an alternate ini directory was specified and no ini's were found. This has been corrected. - Some minor enhancements were made to the text that is being shown on the screen. These changes mainly have to do with signalling problems with OBJECTID's. - CheckIni refused to Change/Correct anything if the Desktop's Extended attributes have been damaged. CheckIni now offers a try-to-repair option. This option comes down to CheckIni re- assigning objectid to the desktop when CheckIni is unable to locate this ObjectId inside the Desktop Extended Attributes. If this corrective action has been taken CheckIni terminates and one should wait a view moments so the WPS has time to update the physical extended attribute on disk. Notes on version 1.90: - This version now supports all known versions of OS/2 2.0 and OS/2 2.1 Beta versions up till release level 6.498 (March '93) Notes on version 1.91: - The try-to-repair option will be called also now when the desktop folder doesn't contain the .CLASSINFO extended attribute at all. - When /C was specified, and lost objects were found and the user choose for 'discard object', the OBJECTID was still checked and when an error was found the program asked if a new OBJECTID should be assigned. This has been corrected. Notes on version 1.92: - Several small (non-functional) errors were corrected. - Verified that CHECKINI works with OS/2 2.1 GA (rev. 6.514) CHECKINI.TXT - Page 10 Notes on version 1.93: - Corrected a problem were CheckIni reported a problem with 'Not enough memory' in GetAllProfileNames. - When a directory containing objects is missing, CHECKINI now first tries to recreate this directory before trying to move the objects. (Only on local drives) Notes on version 1.94: - Due to a bug in the Workplace shell, whenever Checkini (re)assigned an OBJECTID to a Scheme Palette, all scheme's went to 'New Scheme'. - The same problem could occur on OS/2 2.1 installations that were installed on top of OS/2 2.0. The problem would even then occur when the /C option was not specified. These problems have been corrected. Notes on version 1.95: - When the workplace shell had more then 64 Kb of object-handle- to-file data (PM_Workplace:HandlesX) CHECKINI would mess up. Now CHECKINI can handle multiple BLOCK records and will only write as much of these records as needed back to OS2SYS.INI (and discard any others) - Objects of class WPTransient were not recognized and therefore whenever and OBJECTID of such an object existed CHECKINI would give an error message. This has been corrected. Notes on version 1.96: 1. Checkini with abort when very long file names had to be presented on the screen. This has been corrected. Notes on version 1.97: - This version works with OS/2 3.0 (Warp version) - Some minor bugs where corrected. Notes on version 1.98: - In version 1.95 I added logic to handle more then 64 Kb of object-handle-to-file data. I implicitally assumed then that I would always read the multiple BLOCK records in the proper order. As it turns out this assumption is not always correct. I've changed it so I will always read the proper order. Notes on version 1.99: CHECKINI.TXT - Page 11 I've found that some OBJECTID's can be *extreme* long. I've increased the internal buffer from 50 to 150 chars. Notes on version 1.991 - Corrected some problems with corrupted objectdata where checkini would trap on. - Implemented the /R switch that makes Checkini to ignore errors on non-locateable drives. - Added tests for object classes, PM_Workplace:StatusPos, and PM_PrintObjects. Also checkini now tests all abstract objects for existing classes and checks if startup folders are present in PM_Workplace:Startup. - CHECKINI now offers to remove objects that contain errors (/C option only). Notes on version 2.000 For a long time I did not release new versions. This had to do with a burglary at my house where, amongst other things, I lost my PC and thus my fidonet connection. - Changed the way object classes are checked. Before trying to load a Dynamic link library containing a specific class I first check if the dll has already been loaded. Also some specific classes are not checked since they always gave troubles. - Increased several internal buffers to accomodate the changes in Warp 3.0, FP 17 and above and the current gamma version of merlin. I did not make any specific functional changes for merlin. - Changed the way the /R parameter works. Now /R means: Only check for files on local, non-removable disks. This implies that local diskette or CD-rom drives are not checked when this option is specified.