All pastes #60427 Raw Edit

Mine

public text v1 · immutable
#60427 ·published 2006-05-31 22:14 UTC
rendered paste body
class geodata:

    def _writel(self,some_string):
        # writes to logfile
        self.log_file.write(str(some_string)+'\n')

    def _convert_to_hex(self,some_string):
        # converts string to hex value
        if len(some_string)==0:
            return '00'
        charval = ord(some_string)
        hexval = hex(charval)
        hexstrlen = len(hexval)
        startpos = hexstrlen - 2
        if hexval[startpos] == 'x':
            startpos += 1
            hexval = '0'+hexval[startpos]
        else:
            hexval = hexval[startpos:hexstrlen]
        return hexval

    def _handle_block0000(self):
        # perfectly clear now :)
        self._writel(" |- block0000")        
        z1_1 = self.conv_file.read(1)
        z1_2 = self.conv_file.read(1)
        z2_1 = self.conv_file.read(1)
        z2_2 = self.conv_file.read(1)
        z1 = str(self._convert_to_hex(z1_2) + self._convert_to_hex(z1_1))
        z2 = str(self._convert_to_hex(z2_2) + self._convert_to_hex(z2_1))
        if z1!=z2:
            self._writel(' |-- Water from floor '+str(int(z2,16))+' to surface '+str(int(z1,16)))
        return z1,z2

    def _handle_block0040(self):
        # block 4000 handler
        self._writel("block0040")
        for item in range(0,64):
            z1_1 = self.conv_file.read(1)
            z1_2 = self.conv_file.read(1)
            self._writel(self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))
        return 0

    def _handle_block0041(self):
        # block 41000 handler
        self._writel("block0041")
        for item in range(0,64):
            layer = 0
            z1 = self.conv_file.read(1)
            z2 = self.conv_file.read(1)
            layercounter  = int(self._convert_to_hex(z1)+self._convert_to_hex(z2),16)
            #self._writel("layercounter:" + str(int(self._convert_to_hex(layercounter),16)))
            for item2 in range(0,layercounter):
                self._writel("layer:" + str(layer))
                z1_1 = self.conv_file.read(1)
                z1_2 = self.conv_file.read(1)
                self._writel("--" + self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))
                layer+=1
        return 0

    def __init__(self,filename):
        # main function
        self.conv_file = open(filename+'.dat','r')
        self.filename=filename
        self.csv_file  = open(filename+'.csv','w')
        self.log_file  = open(filename+'.log','w')
        self.data_all = {}
        self.conv_file.seek(18) # header dont need that currently
        data=[]
        for x in range(0,128):
            self._writel('x:'+str(x))
            for y in range(0,128):
                self._writel('y:' +str(y))
                block1 = self.conv_file.read(1)
                block2 = self.conv_file.read(1)        
                block2_hex = self._convert_to_hex(block2)
                if block2_hex   == 'ff': self._writel("error")
                elif block2_hex == '00':
                    z1,z2 = self._handle_block0000()
                    if z1==z2:
                        data.append([x,y,int(z1,16),'F'])
                    else:
                        zrange=int(z2,16)-int(z1,16)
                        zrange=zrange/32
                        for item in range(int(z1,16),int(z2,16),32):
                            data.append([x,y,int(item),'W'])
                #elif block2_hex == '40': self._handle_block0040()
                #else: self._handle_block0041()
        self._writel(str(data))
        self.conv_file.close()
        self.csv_file.close()
        self.log_file.close()

#test  = geodata('25_19_conv')
#test2 = geodata('16_22_conv')
test2 = geodata('22_23_conv')