Changeset 1568

Show
Ignore:
Timestamp:
06/25/04 11:50:28 (20 years ago)
Author:
jalet
Message:

More debug info in PCLXL parser

Location:
pykota/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/NEWS

    r1566 r1568  
    2828        - Fixed number of copies handling in PCL5 parser : the number 
    2929          of copies could vary from page to page. 
     30           
     31        - Added more debug information to PCLXL parser.   
    3032         
    3133    - 1.19alpha25 : 
  • pykota/trunk/pykota/pdlanalyzer.py

    r1567 r1568  
    2222# 
    2323# $Log$ 
     24# Revision 1.14  2004/06/25 09:50:28  jalet 
     25# More debug info in PCLXL parser 
     26# 
    2427# Revision 1.13  2004/06/25 08:10:08  jalet 
    2528# Another fix for PCL5 parser 
     
    283286            raise PDLAnalyzerError, "This file doesn't seem to be PCLXL (aka PCL6)" 
    284287        else :     
    285             self.tags = [lambda: None] * 256     
     288            self.tags = [ self.skipped ] * 256     
    286289            self.tags[0x28] = self.bigendian    # big endian 
    287290            self.tags[0x29] = self.littleendian # big endian 
     
    289292            self.tags[0x44] = self.endPage      # EndPage 
    290293             
    291             self.tags[0xc0] = lambda: 1 # ubyte 
    292             self.tags[0xc1] = lambda: 2 # uint16 
    293             self.tags[0xc2] = lambda: 4 # uint32 
    294             self.tags[0xc3] = lambda: 2 # sint16 
    295             self.tags[0xc4] = lambda: 4 # sint32 
    296             self.tags[0xc5] = lambda: 4 # real32 
     294            self.tags[0xc0] = lambda: self.debug("%08x : ubyte" % self.infile.tell()) or 1 # ubyte 
     295            self.tags[0xc1] = lambda: self.debug("%08x : uint16" % self.infile.tell()) or 2 # uint16 
     296            self.tags[0xc2] = lambda: self.debug("%08x : uint32" % self.infile.tell()) or 4 # uint32 
     297            self.tags[0xc3] = lambda: self.debug("%08x : sint16" % self.infile.tell()) or 2 # sint16 
     298            self.tags[0xc4] = lambda: self.debug("%08x : sint32" % self.infile.tell()) or 4 # sint32 
     299            self.tags[0xc5] = lambda: self.debug("%08x : real32" % self.infile.tell()) or 4 # real32 
    297300             
    298301            self.tags[0xc8] = self.array_8  # ubyte_array 
     
    303306            self.tags[0xcd] = self.array_32 # real32_array 
    304307             
    305             self.tags[0xd0] = lambda: 2 # ubyte_xy 
    306             self.tags[0xd1] = lambda: 4 # uint16_xy 
    307             self.tags[0xd2] = lambda: 8 # uint32_xy 
    308             self.tags[0xd3] = lambda: 4 # sint16_xy 
    309             self.tags[0xd4] = lambda: 8 # sint32_xy 
    310             self.tags[0xd5] = lambda: 8 # real32_xy 
    311              
    312             self.tags[0xd0] = lambda: 4  # ubyte_box 
    313             self.tags[0xd1] = lambda: 8  # uint16_box 
    314             self.tags[0xd2] = lambda: 16 # uint32_box 
    315             self.tags[0xd3] = lambda: 8  # sint16_box 
    316             self.tags[0xd4] = lambda: 16 # sint32_box 
    317             self.tags[0xd5] = lambda: 16 # real32_box 
    318              
    319             self.tags[0xf8] = lambda: 1 # attr_ubyte 
    320             self.tags[0xf9] = lambda: 2 # attr_uint16 
     308            self.tags[0xd0] = lambda: self.debug("%08x : ubyte_xy" % self.infile.tell()) or 2 # ubyte_xy 
     309            self.tags[0xd1] = lambda: self.debug("%08x : uint16_xy" % self.infile.tell()) or 4 # uint16_xy 
     310            self.tags[0xd2] = lambda: self.debug("%08x : uint32_xy" % self.infile.tell()) or 8 # uint32_xy 
     311            self.tags[0xd3] = lambda: self.debug("%08x : sint16_xy" % self.infile.tell()) or 4 # sint16_xy 
     312            self.tags[0xd4] = lambda: self.debug("%08x : sint32_xy" % self.infile.tell()) or 8 # sint32_xy 
     313            self.tags[0xd5] = lambda: self.debug("%08x : real32_xy" % self.infile.tell()) or 8 # real32_xy 
     314             
     315            self.tags[0xd0] = lambda: self.debug("%08x : ubyte_box" % self.infile.tell()) or 4  # ubyte_box 
     316            self.tags[0xd1] = lambda: self.debug("%08x : uint16_box" % self.infile.tell()) or 8  # uint16_box 
     317            self.tags[0xd2] = lambda: self.debug("%08x : uint32_box" % self.infile.tell()) or 16 # uint32_box 
     318            self.tags[0xd3] = lambda: self.debug("%08x : sint16_box" % self.infile.tell()) or 8  # sint16_box 
     319            self.tags[0xd4] = lambda: self.debug("%08x : sint32_box" % self.infile.tell()) or 16 # sint32_box 
     320            self.tags[0xd5] = lambda: self.debug("%08x : real32_box" % self.infile.tell()) or 16 # real32_box 
     321             
     322            self.tags[0xf8] = lambda: self.debug("%08x : attr_ubyte" % self.infile.tell()) or 1 # attr_ubyte 
     323            self.tags[0xf9] = lambda: self.debug("%08x : attr_uint16" % self.infile.tell()) or 2 # attr_uint16 
    321324             
    322325            self.tags[0xfa] = self.embeddedData      # dataLength 
     
    328331        sys.stderr.flush() 
    329332         
     333    def skipped(self) :     
     334        """Skips a byte.""" 
     335        self.debug("%08x : skip" % self.infile.tell()) 
     336         
    330337    def beginPage(self) : 
    331338        """Indicates the beginning of a new page.""" 
    332339        self.pagecount += 1 
    333         self.debug("Begin page %i at %s" % (self.pagecount, self.infile.tell())) 
     340        self.debug("%08x : beginPage (%i)" % (self.infile.tell(), self.pagecount)) 
    334341         
    335342    def endPage(self) : 
    336343        """Indicates the end of a page.""" 
    337         self.debug("End page %i at %s" % (self.pagecount, self.infile.tell())) 
     344        self.debug("%08x : endPage (%i)" % (self.infile.tell(), self.pagecount)) 
    338345         
    339346    def handleArray(self, itemsize) :         
     
    341348        pos = self.infile.tell() 
    342349        datatype = self.infile.read(1) 
     350        self.debug("%08x : Array of datatype 0x%02x" % (pos, ord(datatype))) 
    343351        length = self.tags[ord(datatype)]() 
    344352        if length is None : 
     
    359367                raise PDLAnalyzerError, "Error on array size at %s" % self.infile.tell() 
    360368            arraysize = struct.unpack(fmt, sarraysize)[0] 
    361             self.debug("Array at %s, itemsize %s, datatype 0x%02x, size %s" % (pos, itemsize, ord(datatype), arraysize)) 
     369            self.debug("itemsize %s * size %s = %s" % (itemsize, arraysize, itemsize*arraysize)) 
    362370            return arraysize * itemsize 
    363371         
    364372    def array_8(self) :     
    365373        """Handles byte arrays.""" 
     374        self.debug("%08x : array_8" % self.infile.tell()) 
    366375        return self.handleArray(1) 
    367376         
    368377    def array_16(self) :     
    369378        """Handles byte arrays.""" 
     379        self.debug("%08x : array_16" % self.infile.tell()) 
    370380        return self.handleArray(2) 
    371381         
    372382    def array_32(self) :     
    373383        """Handles byte arrays.""" 
     384        self.debug("%08x : array_32" % self.infile.tell()) 
    374385        return self.handleArray(4) 
    375386         
    376387    def embeddedDataSmall(self) : 
    377388        """Handle small amounts of data.""" 
     389        self.debug("%08x : small_datablock" % self.infile.tell()) 
    378390        pos = self.infile.tell() 
    379391        val = ord(self.infile.read(1)) 
    380         self.debug("smalldatablock at %s (0x%02x)" % (pos, val)) 
     392        self.debug("%08x : Small datablock length : 0x%02x" % (self.infile.tell()-1, val)) 
    381393        return val 
    382394         
    383395    def embeddedData(self) : 
    384396        """Handle normal amounts of data.""" 
     397        self.debug("%08x : large_datablock" % self.infile.tell()) 
    385398        if self.islittleendian : 
    386399            fmt = "<I" 
     
    389402        pos = self.infile.tell() 
    390403        val = struct.unpack(fmt, self.infile.read(4))[0] 
    391         self.debug("datablock at %s (0x%08x)" % (pos, val)) 
     404        self.debug("%08x : Large datablock length : 0x%04x" % (self.infile.tell()-4, val)) 
    392405        return val 
    393406         
    394407    def littleendian(self) :         
    395408        """Toggles to little endianness.""" 
     409        self.debug("%08x : littleendian" % self.infile.tell()) 
    396410        self.islittleendian = 1 # little endian 
    397411         
    398412    def bigendian(self) :     
    399413        """Toggles to big endianness.""" 
     414        self.debug("%08x : bigendian" % self.infile.tell()) 
    400415        self.islittleendian = 0 # big endian 
    401416