If you have Win95 or 98, have a look at MSCDEX.EXE in a hex editor. You will find at the bottom of the file about 4K of asm source (not code -- source) complete with a note to the translator on how the source file (which contains error messages) is to be handled. Of course it doesn't matter. But I wish I owned 4K of disk multiplied by all those copies of Windows.
It's really weird, you can even change the texts in the source, so it actually uses it too. Strange... Thomas
It never occurred to me that the program might actually use this text, but so it does! The exe is packed, so I assumed the messages appeared inside the packed part. Surely to God even Microsoft doesn't expect people to translate their own error messages, and in an exe file to boot! And what happens if you edit the text in such a way that the file exceeds the exe-size field in the MZ header? I guess you are supposed to see "Unable to load translated messages". But that's the last message in the table, and will be the first one to fall off the end of the exe! Super-strange.
Larry, its probably appended data at the end of the EXE file. My guess is that it is done this way so that the file can be internationalised with its error messages. If you used a utility like EXEHDR to check the length of the EXE image, you could test if it is appended or not. Regards, email@example.com
The MZ header shows exe size equal to the file size, so this "source" does get loaded. Not only that, it gets used as text -- "db", "0dh", and all. Some messages appear three times in the EXE: once with ";", once immediately after that, and once amidst the code (uncompressed, even though EXEPACK was used). But it is the "source" messages that get used by the program -- not the copies amidst the code. There has been something quite irregular about the building of this program. Perhaps the program was ready before the translations were available, and the programmer therefore built it in such a way as to be customizable (for languages) after it was linked and packed. But my guess is that it was done by an outside contractor, without access to the many translators who would be needed. In any event the packed exe must contain code that parses asm "db" lines, constants such as 0Dh, and comments.