TotalDepth.LIS.core.TifMarker (TIF Marker Handling)

TIF Markers

These are 3x32bit little-endian integers at the beginning of each Physical Record.

Word[0]

This is the TIF set type, 0 for a normal TIF set. 1 for an EOF set.

Word[1]

This is the physical file location of the start of the previous set.

Word[2]

This is the physical file location of the start of the next set.

A dump looks like this:

           0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00000000: 00 00 00 00 00 00 00 00 4A 00 00 00 00 3E 00 00
00000010: 80 00 32 30 30 30 39 39 2E 44 41 54 20 20 20 20
00000020: 20 20 20 20 20 20 20 20 20 20 20 20 39 39 2F 30
00000030: 34 2F 32 39 20 20 31 30 32 34 20 20 20 20 20 20
00000040: 20 20 20 20 20 20 2E 20 20 20 00 00 00 00 00 00
00000050: 00 00 56 04 00 00 04 00 00 01 40 00 01 01 42 00
00000060: 02 01 42 00 03 04 49 00 00 02 34 04 01 42 01 05
...
00000450: 20 20 44 45 47 20 00 00 00 00 4A 00 00 00 62 08
00000460: 00 00 04 00 00 03 00 00 00 00 00 00 00 04 20 20
00000470: 00 01 44 20 20 20 20 20 31 30 41 20 20 20 20 20
...
00000860: 46 4E 00 00 00 00 56 04 00 00 6E 0C 00 00 04 00
00000870: 00 03 4F 52 20 20 20 20 20 20 20 20 20 20 20 20
...
...
...
0016E770: 18 00 BA 83 18 00 00 00 00 00 30 E5 16 00 C0 E7
0016E780: 16 00 00 3E 00 00 81 00 32 30 30 30 39 39 2E 44
...
0016E7B0: 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 20 20
0016E7C0: 01 00 00 00 76 E7 16 00 CC E7 16 00 01 00 00 00
0016E7D0: C0 E7 16 00 D8 E7 16 00                        

Or:

tell()       TIF type           TIF back           TIF next
00000000:    00 00 00 00        00 00 00 00        00 00 00 4A
0000004A:    00 00 00 00        00 00 00 00        00 00 04 56
00000456:    00 00 00 00        00 00 00 4A        00 00 08 62
00000862:    00 00 00 00        00 00 04 56        00 00 0C 6E
...
0016E776:    00 00 00 00        00 16 E5 30        00 16 E7 C0
0016E7C0:    00 00 00 01        00 16 E7 76        00 16 E7 CC
0016E7CC:    00 00 00 01        00 16 E7 C0        00 16 E7 D8
0016E7D8: EOF
exception TotalDepth.LIS.core.TifMarker.ExceptionTifMarker

Specialisation of exception for Physical Records.

TotalDepth.LIS.core.TifMarker.TIF_WORD_BYTES = 4

Number of bytes in a TIF word

TotalDepth.LIS.core.TifMarker.TIF_NUM_WORDS = 3

Number of words in a TIF marker

TotalDepth.LIS.core.TifMarker.TIF_TOTAL_BYTES = 12

Number of bytes in a TIF marker

TotalDepth.LIS.core.TifMarker.TIF_WORD_FORMAT = <Struct object>

struct.Struct() format for a TIF word

TotalDepth.LIS.core.TifMarker.TIF_WORD_FORMAT_WRONG_SEX = <Struct object>

struct.Struct() format for a TIF word written wrongly as little-endian

TotalDepth.LIS.core.TifMarker.TIF_WORD_ALL_FORMAT_WRONG_SEX = <Struct object>

struct.Struct() format for a TIF marker written wrongly as little-endian

TotalDepth.LIS.core.TifMarker.TIF_FIRST_WORD_LIMIT = 65547

The maximum possible size of the first ‘next’ word. If larger than this then the words are written wrongly as little-endian and need to be reversed This is calculated as the maximum PR length + TIF bytes.

class TotalDepth.LIS.core.TifMarker.TifMarkerBase(raiseOnError=True)

Base class for TIF markers.

__init__(raiseOnError=True)

Constructor, initialises internals.

strHeader()

Header string for an ASCII dump.

__str__()

String representation.

markers()

Current values of markers as a tuple of three integers.

eof

True if I have encountered a EOF marker.

reset()

Resets the TIF markers to all zero, this means hasPrevious is False.

reportError(theMsg)

Reports the error. I constructed with raiseOnError as True this will raise a ExceptionTifMarker otherwise it will write the error to the log.

__weakref__

list of weak references to the object (if defined)

class TotalDepth.LIS.core.TifMarker.TifMarkerRead(theStream, allowPrPadding=False)

Class for reading TIF markers. This will automatically determine if TIF markers are present and automatically correct ill-formed little-endian TIF markers.

theStream - the file stream.

allowPrPadding - If True this will consume spurious padding bytes after the Physical Record tail i.e. the TIF markers determine the Physical Record structure rather than the Physical Record Headers.

__init__(theStream, allowPrPadding=False)

Constructor, initialises internals. allowPrPadding - If true this allows padding bytes after the PRT.

hasPrevious

True if a Physical Record has been read, cleared on reset().

reset()

Calling reset() means that the caller is probably randomly accessing the file so we can not error check the previous marker in the same way that we can if we are reading the file linearly.

read(theStream)

Read TIF markers from a RawStream object. Returns the stream tell() or None of the start of the TIF marker. This is not necessarily the same as the stream tell() seen by the caller as we might consume PR padding.

class TotalDepth.LIS.core.TifMarker.TifMarkerWrite

Class for writing TIF markers.

__init__()

Constructor, initialises internals.

write(theStream, theLen)

Write TIF markers to a RawStream object. theLen must be the length of the Physical Record including the PRH and PRT.

close(theStream)

Write TIF EOF markers.