Writing a bytecode interpreter (for TeX dvi files)

Andreas Lobinger andreas.lobinger at netsurf.de
Fri May 27 04:59:26 EDT 2005


Aloha,

Jonathan Fine wrote:
> I'm writing some routines for handling dvi files.
> In case you didn't know, these are TeX's typeset output.
> These are binary files containing opcodes.
> I wish to write one or more dvi opcode interpreters.
> Are there any tools or good examples to follow for
> writing a bytecode interpreter?

As far as i know, dvi is a very straight forward format, commands
followed by parameters, no conditionals, no loops.
For similar designs i used something like the following approach:

s = file('a.dvi','r').read() # read complete file to string

while s:
	command = ord(s[0])

         if command < 128:
            #typeset command
            s = s[1:]
         elif command = 139:
            #bop command
            param = s[:40]
            #interpret param
	   c = struct.unpack('D',param[:3])
            #consume s
            s = s[41:]
         else:
            #undefined command
            s = s[1:]

You can work directly on strings, or convert to a list. If you don't
want long if/elif lists, you can use a dict as a dispatcher (python
cookbook has an example?). For most of the commands you can use
a lookup table for the parameter list length.
TeX §591 claims, that dvi is stricly interpretable from front to end.
The description in Tex§585++ can be transcripted to struct definitions
easily.

Wishing a happy day
		LOBI




More information about the Python-list mailing list