[File] [PATCH] Magdir/msdos 4DOS help file; older versions are missed
Christos Zoulas
christos at zoulas.com
Sat Dec 2 13:47:05 UTC 2023
Committed, thanks!
christos
> On Nov 25, 2023, at 1:11 PM, Jörg Jenderek (GMX) <joerg.jen.der.ek at gmx.net> wrote:
>
> Hello,
>
> some days ago i handle file with suffix HLP. Unfortunately this is used
> by many programs for their own help documentation.
> Unfortunately on my systems some HLP files are not identified. So in
> this session i will handle HLP samples which are used by 4DOS commando
> interpreter.
>
> When running file command version 5.45 on such HLP examples i get an
> output like:
>
> 4DOS-7.HLP: 4DOS help file, version 701A
> 4DOS-750b130.HLP: 4DOS help file, version 701A
> 4DOS500f.HLP: data
> 4DOS552.HLP: 4DOS help file, version 552A
> 4DOS602.HLP: 4DOS help file, version 602A
> 4DOS602b.HLP: 4DOS help file, version 602A
> 4DOS7501-real.HLP: 4DOS help file, version 701A
> 4DOS7501.HLP: 4DOS help file, version 701A
> 4DOS777-maybe.HLP: 4DOS help file, version 701A
> 4DOS800-real.HLP: 4DOS help file, version 701A
> 4dos100.hlp: data
> 4dos402b.hlp: data
> 4dos551c_ge.hlp: data
> DOS221.HLP: ASCII text, with CRLF line terminators
> DOS330.HLP: data
>
> For the help samples with --extension option only ??? is displayed.
> Furthermore with -i option for samples only generic
> application/octet-stream or text/plain is shown.
>
> For comparison reason i also run the file format identification
> utility DROID ( See https://sourceforge.net/projects/droid/). Here these
> samples are not recognized.
>
> For comparison reason i run the file format identification utility
> TrID ( See https://mark0.net/soft-trid-e.html). All samples are here
> recognised. The newest examples recognized by file command are described
> as "4DOS Help" by hlp-4dos.trid.xml. as mime type application/x-4dos-hlp
> is shown. A little older version samples (like 4dos551c_ge.hlp and
> 4DOS500f.HLP) are also described in that way. Samples which are before
> that variants (like 4dos402b.hlp) are described as "4DOS Help (v4)" by
> hlp-4dos-v4.trid.xml. Samples before that (like DOS221.HLP) are
> described as "4DOS Help (v2)" by hlp-4dos-v2.trid.xml. Oldest samples
> (like DOS330.HLP 4dos100.hlp) are described "Turbo Pascal Help (v2)" by
> hlp-tp-2.trid.xml (See appended
> trid-v-hlp-4dos.txt.gz)
>
> TrID list the used file name extension and often with -v option the
> related URL pointing to used file format information. With the help of
> these tools i found 2 pages on Wikipedia. There the current homepage
> 4dos.info is listed. There i get most of my 4DOS packages with HLP
> samples. So these informations are now expressed inside Magdir/msdos by
> additional comment lines like:
>
> # URL: https://en.wikipedia.org/wiki/Turbo_Pascal
> # Reference: http://mark0.net/download/triddefs_xml.7z
> # defs/h/hlp-tp-2.trid.xml
> # URL: https://en.wikipedia.org/wiki/4DOS
> # Reference: https://4dos.info/4dsource/4helpsrc.zip/TPHELP.PAS
> # Reference: http://mark0.net/download/triddefs_xml.7z
> # defs/h/hlp-4dos.trid.xml
> # defs/h/hlp-4dos-v4.trid.xml
> # defs/h/hlp-4dos-v2.trid.xml
>
> In current Magdir/msdos the description happens by lines like:
> 0 ulelong 0x48443408 4DOS help file
> >4 string x \b, version %-4.4s
>
> TrID check only for 3 byte magic 4DH at offset 1. Luckily 4DOS now
> becomes open source since about version 8. So i found information inside
> Pascal TPHELP.PAS inside 4HELPSRC directory. I am no pascal programmer.
> So now i understand more of some basics. At the beginning pascal string
> HelpSystemID is stored ( with value like '4DH701AA'). Because of pascal
> nature at offset 0 1 byte string length is stored. For the samples
> recognized by file command this value is 8. For little older version
> (like in 4DOS500f.HLP 4dos551c_ge.hlp) the strength length is 6.
>
> The pascal string length of of HelpID can be verified by line like:
> >0 ubyte x PLENGHT=%x
>
> So now check for valid pascal string length (6 or 8) of HelpID, 4DH
> magic and valid major number (5 6 7 8). So this now starts like:
> 0 ubequad&0xF1ffFFffF0000000 0x0034444830000000 4DOS help file
> !:mime application/x-4dos-hlp
> !:ext hlp
>
> The help filename is hard coded as 4DOS.HLP and searching for that is
> done in some specific directories (like current or determinated by some
> environment variables). So file name suffix is HLP.
>
> If the help file does not exist the error message of 4HELP.EXE is
> like:
> 4DOS help error: help file not found or not accessible
> Press any key to exit ...
> If the wrong help is is used than you get an error message like:
> 4DOS help error: incorrect version of help file
>
> This is triggered inside TPHELP.PAS if current id at the beginning
> mismatches the hardcoded HelpSystemID like '701AA'. In all such
> samples the 3 byte 4DH is the shared start characteristic. The next
> digit in most cases apparently is the major version number. The next 1
> or 2 digits are the minor version number. This can be verified by
> running DOS VER command. More information is shown with /R option. This
> is also stored in 4DOS _4VER variable. That can be shown by echo
> command. So show this version information inside HLP in similar way like
> "x.yy zz" for samples with string length 8 and as "x.yy" for samples
> with string length 6. the x digit is the major version number and yy
> digits are the minor version number.
>
> In my 8 byte samples after 2 minor version digits comes 2 bytes
> string AA at offset 7. I first thought that this is the revision number,
> but that is not true. For sample 4DOS602b.HLP revision is B (as reported
> by VER /R). So i do not know what this AA means. Maybe this is a patch
> level. So i show this version string part after minor version digits.
> So now the version displaying part now becomes like:
> >4 string x \b, version %-1.1s
> >>0 ubyte 8 \b.
> >>>5 string x \b%-2.2s
> >>>7 string x %-.2s
> >>0 ubyte 6 \b.
> >>>5 string x \b%-2.2s
> #>>0 default x \b.
> #>>>5 string x %-2.2s
>
> What was confusing me for about some weeks is that is not always true.
> In a an ideal world this would be true. But as written on home page
> 4dos.info for 4DOS 5.51c German the commando interpreter 4DOS.COM
> version is 5.51 revision c, but the version of packaged 4HELP.EXE and
> 4DOS.HLP are 5.50. Or the newest 4dos samples (like 4DOS800-real.HLP
> 4DOS777-maybe.HLP 4DOS7501.HLP) uses help version 7.01.
>
> In newest versions (false for version 5.52 and older, but true for
> version 6.02 and newer) according to sources at offset 24 13 byte
> ExtHelpName is stored. In many samples (like 4DOS602.HLP and newer) this
> is 8 byte string HELP.COM. But also other names can occur here like
> DOSBOOK.EXE from DR-DOS as described in help text. Or you can specify
> the external help program name by DOS environment variable DOSHELP. This
> is stored in newest version as ExtHelpEnv at offset 38. For DOSBOOK.EXE
> this works but not for HELP.COM of dosbox-x. After version part comes
> first HighestTopic followed by NumTopics and so on. I show only
> interesting external help fields. So this done by lines like:
> >4 ubeshort >0x3535
> #>>9 uleshort x HighestTopic=%#4.4x
> #>>11 uleshort x NumTopics=%#4.4x
> >>24 pstring x \b, external help %s
> >>38 pstring x or specified by DOS environment variable %s
>
> My work with these above patterns are not in-vane, because in little
> older samples like 4dos402b.hlp the structure is a little bit other
> organized. There is not pascal string length at the beginning. It
> directly starts with 3 byte magic 4DH followed by digit 4 which
> apparently is the major version number four. So such samples are
> described by lines like:
> 0 string 4DH4 4DOS help file, version 4.x
> !:mime application/x-4dos-hlp
> !:ext hlp
>
> There are samples (like DOS221.HLP not the oldest and but before
> version 4) which are not recognized by current definitions. In the other
> newer HLP samples after the header, the topic/command names are stored
> as ASCII strings, but in last part the describing text is stored in a
> compressed way. So in this version there is one evolution step before of
> 4DOS. It is neither the "Pascal" nor the "4DH" help system. So
> apparently here all is stored as ASCII text. First come the
> topic/command names. Starting with ALIAS, ASSIGN and ending with VOL,
> XCOPY, Y sequence. Every name is stored on line of it's own. Afterwards
> comes the describing text. Every text section starts with a line which
> consist of the topic name surrounded by asteric character (*). Another
> difference is that the help program is here called HELP.EXE and the help
> file name is DOS.HLP. Apparently to avoid collision with help of
> Microsoft MS-DOS in later version these names become 4HELP.EXE and
> 4DOS.HLP. So such samples are described by lines like:
> 0 string ALIAS\r\nASSIGN\r\n
> >13 search/3016 4DOS 4DOS help file, version 2.x
> !:mime application/x-4dos-hlp
> !:ext hlp
>
> Interesting is what is written about the 4DOS help system. It is
> modified and based on TPHELP unit from TurboPower software Turbo
> Professional 5.0 Turbo Pascal toolkit. So apparently in first versions
> (like in samples 4dos100.hlp DOS330.HLP) that original help system was
> used. So the oldest samples are therefore described as "Turbo Pascal
> Help (v2)" by TrID definition hlp-tp-2.trid.xml. So these patterns
> expressed as magic lines now becomes like:
> 0 string TPH2 Turbo Pascal help, version 2
> !:mime application/x-pascal-hlp
> !:ext hlp
>
> After applying the above mentioned modifications by patch
> file-5.45-msdos-hlp-4dos.diff then now all 4DOS samples are recognized
> and i get output like:
>
> 4DOS-7.HLP: 4DOS help file, version 7.01 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS-750b130.HLP: 4DOS help file, version 7.01 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS500f.HLP: 4DOS help file, version 5.00
> 4DOS552.HLP: 4DOS help file, version 5.52 AA
> 4DOS602.HLP: 4DOS help file, version 6.02 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS602b.HLP: 4DOS help file, version 6.02 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS7501-real.HLP: 4DOS help file, version 7.01 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS7501.HLP: 4DOS help file, version 7.01 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS777-maybe.HLP: 4DOS help file, version 7.01 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4DOS800-real.HLP: 4DOS help file, version 7.01 AA
> , external help HELP.COM or
> specified by DOS environment variable DOSHELP
> 4dos100.hlp: Turbo Pascal help, version 2
> 4dos402b.hlp: 4DOS help file, version 4.x
> 4dos551c_ge.hlp: 4DOS help file, version 5.50
> DOS221.HLP: 4DOS help file, version 2.x
> DOS330.HLP: Turbo Pascal help, version 2
>
>
> I hope my diff file can be applied in future version of
> file utility.
>
> With best wishes
> Jörg Jenderek
> --
> Jörg Jenderek
> <trid-v-hlp-4dos.txt.gz><file-5_45-msdos-hlp-4dos_diff.DEFANGED-7><file-5_45-msdos-hlp-4dos_diff_sig.DEFANGED-8>--
> File mailing list
> File at astron.com
> https://mailman.astron.com/mailman/listinfo/file
> <sanitizer.log>
More information about the File
mailing list