fileutil::magic::rt - Runtime core for file type recognition
engines written in pure Tcl
package require Tcl 8.5
package require fileutil::magic::rt ?2.0?
::fileutil::magic::rt::>
::fileutil::magic::rt::<
::fileutil::magic::rt::new chan named
analyze
::fileutil::magic::rt::file_start name
::fileutil::magic::rt::emit msg
::fileutil::magic::rt::O where
::fileutil::magic::rt::R where
::fileutil::magic::rt::Nv type offset
compinvert comp expected
::fileutil::magic::rt::N type offset
testinvert compinvert mod mand comp
expected
::fileutil::magic::rt::S type offset
testinvert mod mand comp val
::fileutil::magic::rt::L newlevel
::fileutil::magic::rt::I offset it ioi
ioo iir io
::fileutil::magic::rt::R offset
::fileutil::magic::rt::U fileindex name
This package provides the runtime core for file type recognition
engines written in pure Tcl and is thus used by all other packages in this
module such as fileutil::magic::filetype and the two compiler
packages fileutil::magic::cgen and
fileutil::magic::cfront.
- ::fileutil::magic::rt::>
- Increment the level and perform related housekeeping
- ::fileutil::magic::rt::<
- Decrement the level and perform related housekeeping
- ::fileutil::magic::rt::new chan named
analyze
- Create a new command which returns one description of the file each time
it is called, and a code of break when there are no more
descriptions. chan is the channel containing the data to describe.
The channel configuration is then managed as needed. named is a
dictionary of named tests, as generated by
fileutil::magic::cfront::compile. test is a command prefix
for a routine composed of the list of commands as returned by
fileutil::magic::cfront::compile.
- ::fileutil::magic::rt::file_start name
- This command marks the start of a magic file when debugging. It returns
the empty string as its result.
- ::fileutil::magic::rt::emit msg
- This command adds the text msg to the result buffer. The message
may contain the following special character sequences. They will be
replaced with buffered values before the message is added to the result.
The command returns the empty string as its result.
- \b
- This sequence is removed
- %s
- Replaced with the last buffered string value.
- %ld
- Replaced with the last buffered numeric value.
- %d
- See above.
- ${x:...?...}
- Substitute one string if the file is executable, and another string
otherwise.
- ::fileutil::magic::rt::O where
- Produce an offset from where, relative to the cursor one level up.
Produce an offset from where, relative to the offset one level
up.
- ::fileutil::magic::rt::Nv type offset
compinvert comp expected
- A limited form of ::fileutile::magic::rt::N that only checks for
equality and can't be told to invert the test.
- ::fileutil::magic::rt::N type offset
testinvert compinvert mod mand comp
expected
- Fetch the numeric value with type from the absolute location
offset, compare it with expected using comp as the
comparision operator, and returns the result.
The argument comp must be one of Tcl's comparison
operators.
<comp> <fetched-and-masked-value> <comp> <expected>
The special comparison operator x signals that no
comparison should be done, or, in other words, that the fetched value will
always match val.
- ::fileutil::magic::rt::S type offset
testinvert mod mand comp val
- Like ::fileutil::magic::rt::N except that it fetches and compares
string types , not numeric data.
- ::fileutil::magic::rt::L newlevel
- Sets the current level in the calling context to newlevel. The
command returns the empty string as its result.
- ::fileutil::magic::rt::I offset it ioi
ioo iir io
- Calculates an offset based on an initial offset and the provided
modifiers.
- ::fileutil::magic::rt::R offset
- Given an initial offset, calculates an offset relative to the cursor at
the next level up. The cursor is the position in the data one character
after the data extracted from the file one level up.
- ::fileutil::magic::rt::U fileindex name
- Add a level and use a named test script.
- byte
- 8-bit integer
- short
- 16-bit integer, stored in native endianess
- beshort
- see above, stored in big endian
- leshort
- see above, stored in small/little endian
- long
- 32-bit integer, stored in native endianess
- belong
- see above, stored in big endian
- lelong
- see above, stored in small/little endian
All of the types above exit in an unsigned form as well. The type
names are the same, with the character "u" added as prefix.
- date
- 32-bit integer timestamp, stored in native endianess
- bedate
- see above, stored in big endian
- ledate
- see above, stored in small/little endian
- ldate
- 32-bit integer timestamp, stored in native endianess
- beldate
- see above, stored in big endian
- leldate
- see above, stored in small/little endian
This document, and the package it describes, will undoubtedly
contain bugs and other problems. Please report such in the category
fileutil :: magic of the Tcllib Trackers
[http://core.tcl.tk/tcllib/reportlist]. Please also report any ideas for
enhancements you may have for either package and/or documentation.
When proposing code changes, please provide unified diffs,
i.e the output of diff -u.
Note further that attachments are strongly preferred over
inlined patches. Attachments can be made by going to the Edit form of
the ticket immediately after its creation, and then using the left-most
button in the secondary navigation bar.
file(1), fileutil, magic(5)
file recognition, file type, file utilities, mime, type