to make long things short: #include standard_disclaimer Welcome! This is the 6th public beta-release of ReadObject&Library - ROL.EXE version 0.92. PLEASE READ THIS ENTIRE DOCUMENT BEFORE USING ROL! At this time, there are many features accessible only via undocumented hotkeys. I'm still waiting for some menuing routines and will add a real SAA style menu in one of the future version. ROL was written in FORCE 2.4c using the XSVFORCE library v1.3 (and some of my own libs). If you stumble over a bug, or if you are missing a certain feature, just let me know! You can reach me at one of the following adresses: 100120,461 on Compu$erve or 100120.461@compuserve.com on the net timh@gismo.rhein-ruhr.de " itimh@ukon.gun.de " AFAIK, ROL now does read any .OBJ or .LIB file correctly, as long as it sticks to the rules set forth in the 2 documents mentioned further below. IF you have a LIB or OBJ which ROL for some reason refuses to process, just extract that specific OBJ (via F3) and mail it to one of the above adresses. There is no still documentation to ROL. For one, I really don't have the time for this, and two, I think ROL is pretty much self-documenting. This document also holds quite a lot information on how ROL works. Please read it completely! Press to get to the menu. Here are (almost) all the possible options and their hotkeys listed. Press to see a list of all the possible hotkeys. Press or or - if your using ROL in Windoze - to exit ROL. For more information on the 'Relocatable Object Module Format' refer to SS0288.EXE in the Microsoft Library on Compu$erve (GO MSL) or download PF11H.ZIP (Portable Formats Specification v1.1) from the 'Intel Architecture Labs' forum (GO INTELARCH). These documents will explain to you all the different records and their meaning in detail. YOU MAY DISTRIBUTE THIS COPY OF ReadObject&Library! You MAY upload it to any bulletin boards or any other online services, in fact, I even ask you to distribute ROL while it's still in beta. Have fun (and REPORT!)! -Tim ----------------------------------------------------------------------------- ROL - history - indicates removed items or features + indicates new items or features * indicates modified items or features v0.9 beta 02/24/95 + initial public release as a freeware beta version v0.901 beta 03/09/95 * changed name from 'ReadObject' to 'ReadObject&Library' - RO.EXE to ROL.EXE * complete re-write of the reading engine: * overall reading & processing speed enhanced (I think ) + now checks for an extended library dictionary (LIB versions 3.09+) and reads it (99% faster than the method used in v0.9) - due to this new method, the size column doesn't display the exact size of an object anymore and ROL can't figure out whether it is a 'main programm module' or not. But this only relates to LIB files with an extended dictionary created with LIB.EXE. + local public (LPUBDEF) & local external (LEXTDEF) records are now inserted in the public or external symbol list and marked with a "L" in the second last column + internally resolved (local) external symbols ((L)EXTDEF with a matching (L)PUBDEF) are now marked with a "û" in the last column + inserted a 1 second delay to check for repeated keystrokes while browsing through the main module list + added 'library information' window (ALT-i) + added 'video setup' (ALT-v) to switch to either 25, 28 (VGA) or 43/50 (EGA/VGA) screen lines - removed LNAMES/SEGDEF-browser (ALT-l), it displayed nonsense, but... + added 'defined segments' viewer (ALT-g), which now correctly displays the setup of the defined segments + added 'OBJ management' (F2): (LIB files only) + needs one of the following 3 library managers either in your PATH, in the directory where ROL.EXE resides or in the current directory and uses the 1st match: 1) LIB.EXE (MS) 2) TLIB.EXE (Borland) 3) FLIB.EXE (Funcky) ! WARNING: after deleting the last module in a library ROL will still attempt to re-read it and then it will crash! + added 'dictionary dump' (ALT-d - not listed in menu), which lists all entries in the LIB's standard (not extended) dictionary; this 'feature' probably is of no use to anyone (but me ) + added 'quick scan all records' (ALT-q), which just displays every single object module record by its number, name and size. (if you encounter an entry like '???????' -> report!!) + a couple of strings, mostly OMF descriptions, have been exported to a file called ROL.MSG. Don't mess with this file! If you rename ROL.EXE to something different, rename the .MSG-file too! Keep it in the directory where ROL.EXE resides. v0.902 beta 03/28/95 * turned off the screen effects while running under Windows. They don't work correctly in that environment (entirely removed in v0.92) * trying to extract a module with a name longer than 8 chars, ROL would pop up a message, but then re-read the whole library, which is not neccessary. fixed + now uses 'Norton-style' boxes throughout the UI. I also played around with some of the EGA palette registers ... tell me, if you don't like it. (removed in v0.92) * some minor glitches have been fixed * ROL.EXE is now compressed. v0.903 beta 03/29/95 * ooops! I forgot to turn off blinking in v0.902. fixed (all my testing machines just don't blink by default ...) + ROL does not switch to 28 lines anymore if it detects a display size other than 25 rows. If you switch to a different # of rows via the video setup menu (ALT-v), ROL will switch to 25 rows on exit. * calling ROL from a graphical DOS Box in Windoze messed up the box characters. fixed * using ROL with libraries that don't have an extended dictionary displayed the wrong records due to a incorrect offset counter. fixed + pressing RETURN in the main modules list will pop up the main menu - just like F10 v0.91 beta 04/03/95 * (hopefully) fixed an error which prevented ROL from reading libraries created with TLIB.EXE and the /e switch. Borland's extended dictionary format is unknown to me. If you have any documentation on Borland's extended dictionary format, please forward it to me. ROL will process the TLIB'd libs on a module by module basis, the slow way. You can find out, whether your lib was created with TLIB by checking the 'library information' window (ALT-i). It will say, that an extended dictionary is there, but its size is 0 bytes. * fixed a bug in the 'defined segments' browser. A very special type of the SEGDEF record wasn't read correctly and ROL crashed. + added the F3 hotkey to extract the current module with an internal routine. This is useful, if you don't have a library manager. It seems to be a little quicker than calling a lib manager, too. If present, a comment record indicating the modules name in a library will be removed. + added the SHIFT-F3 hotkey, which is an interface to a tool called OBJASM.EXE. If this file is not found in the current directory or in your path, this feature does not work, of course. In case of a library file, the internal routine for extracting a module is called first. The output of OBJASM.EXE is piped to a file with the name of the current module + ".ASM". + added a record hex dump to the 'quick scan all records' (ALT-q) menu item. Pressing ENTER on any item in the list will pop up the hex-dump of that specific record. + added an option to save the hex-dump of the complete .OBJ to a file. Pressing ALT-d in the hex-dump window (ALT-h) will save the entire hex-dump of that module to a file. The output is sent to a file with the name of the current module + ".HEX". (Note: the screen doesn't seem to be restored correctly after exiting the hex-dump window only when dumping a large module, eg. the BROWSE.OBJ in FORCE.LIB. This doesn't seem to harm the further operation of ROL, though.) + added a command line parameter: -? or -h. ROL won't tell you much, though. ;-) v0.92 beta 04/14/95 + added a browser for LEDATA records (ALT-j). This is where most of the interesting stuff in an object module is stored. Opcodes and text, for example. If there are no LEDATA records in a module, ROL will show a message, that no defined segments could be found, because it reads the segments first. If there are no defined segments, there are no LEDATA records, basically there shouldn't be any records, but a comment. + added a browser for LIDATA records (ALT-k). There's a pretty bad recursion routine in this one. If ROL suddenly hangs or quits with a message saying 'stack space exhausted' (or something like that), the recursion level in a LIDATA record is too deep. Please, do me a favour, and send that specific module to one of the above mentioned addresses! I will then fix ROL to be able to correctly read modules with a higher recursion level, too. The highest recursion level I could find is only 5 level deep. + added the type index field to the 'external symbols' browser. This field is an index to a TYPEDEF record, which, if present, contains information about the type of data declared in a PUBDEF or EXTDEF. TYPEDEF records are currently not processed by ROL. + added a little 'defined short cut keys' screen, accessible via F1, because the main menu will not be updated anymore. * ROL now opens the .OBJ or .LIB file in shared mode. * fixed both the 'search symbols' and 'search all public symbols' routines. They should now work ok. * fixed the hex-dump browser so that it won't crash with an exception error (eg. QEMM) when trying to dump it's contents to a file. * fixed the interface to OBJASM, so that the object file is not erased anymore, if it's not part of a library. (sorry 'bout that) * fixed both interfaces to a library manager and OBJASM.EXE so that the output will be stored in the directory where the library/object file resides (and not just anywhere ). * changed the 'public symbols' browser by leaving out some of the info presented. Pressing ENTER on any item in the 'public symbols' list will now pop up a small window with all the information available on this one symbol. * removed wrapping in the comments browser (e.g. pressing up arrow on the first item used to take you to the last in the list). Also corrected the displaying of wrong 'purge' and 'list' flags on multi- line comments. * cleaned up ROL.MSG and added descriptions for all available record types. This results in more descriptive names in the 3 hex-dumps and slightly longer processing time. * erased the screen fading stuff and set the DOS color on exit to the value found when ROL was called. Also removed the palette redefinition stuff (most of it ). + when ROL crashes for some reason (), it now creates a file ROL.ERR in the current directory. ROL.ERR contains some information on the error, which I need. Please take the time, and fill out the missing information and send this file to 1 of my Email adresses. ----------------------------------------------------------------------------- ROL - known bugs & limitations - the number of modules in the main list is limited to 900 per library. According to my docs, a library may contain up to 9287 modules, but to keep memory requirements low, I had to set a reasonable limit. ROL simply won't read past the 900th module. - the maximum number of COMENT records (ALT-c) is limited to 199. So far, I haven't seen an object module that contains this many comments. - extracting modules (F2) with a name more than 8 characters in size is not possible. These kind of modules seem to occur in libraries created with the IMPLIB utility. Extracting this kind of modules doesn't make sense, since they only contain a reference to a symbol in a .DLL. Check the comments (ALT-c) for more details on the IMPLIB implementation. ----------------------------------------------------------------------------- ROL - the future - as of version 0.91, the menu will not be updated with the new functions & record browsers anymore, because I'm currently waiting for some menuing routines, to add a true SAA style menu to ROL. That's why for example the LE- and LIDATA records have such 'intuitive' short-cut keys for the time being. - printing module lists, cross reference lists ('I-need' and 'need-me'). I still need some more info and feedback from you how the output should look like! - the above mentioned feature will come in different .EXE files bundled with ROL v1.0 (hopefully ) - will add a feature to tag modules in the main modul list for the interface with a library manager and OBJASM. - (you tell me!) ----------------------------------------------------------------------------- Again, if you find any bugs or if you are missing a certain feature ... gimme details!