All pastes #61142 Raw Edit

Something

public python v1 · immutable
#61142 ·published 2006-06-02 19:18 UTC
rendered paste body
#!/usr/bin/pythonclass geodata:########################################################################################################## class for handling geodata# needs geodata file as param# new_geodata = geodata('filename-without-.dat')#########################################################################################################    def _writel(self,some_string):    ####################################################################################################    #    # writes some_string to the logfile    #    ####################################################################################################        self.log_file.write(str(some_string)+'\n')        return 0    def _write(self,some_string):    ####################################################################################################    #    # writes some_string to the logfile    #    ####################################################################################################        self.log_file.write(str(some_string))        return 0    def _convert_to_hex(self,some_string):    ####################################################################################################    #    # converts some_string to his hex values    #    ####################################################################################################        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):    ####################################################################################################    #    # block 0000 handler    # z1 min-z z2 max-z    # if z1 != z2 then its a water zone else its a floor    #    ####################################################################################################        self._write(" |- 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))        self._write(z1)        self._write(z2)        self._writel('')        # get the real z1        realz1 = int(z1,16)        if realz1 > 40000:realz1 = realz1 - 65336        realz1s = str(int(realz1))        #get the real z2        realz2 = int(z2,16)        if realz2 > 40000:realz2 = realz2 - 65336        realz2s = str(int(realz2))        # getting min z        if self.minz==None:            if realz1 < realz2:                self.minz = realz1            else:                self.minz = realz2        else:            if self.minz > realz1:                self.minz = realz1            if self.minz > realz2:                sel.fminz = realz2        # getting max z        if self.maxz==None:            if realz1 > realz2:                self.maxz = realz1            else:                self.maxz = realz2        else:            if self.maxz < realz1:                self.maxz = realz1            if self.maxz < realz2:                self.maxz = realz2               if z1!=z2:            self._writel(' |-- Water from ocean floor '+realz1s+' to surface '+realz2s)        return z1,z2    def _handle_block0040(self):    ####################################################################################################    #    # block 0040 handler    #    ####################################################################################################        self._write(" |- block0040 ")        for item in range(0,64):            z1_1 = self.conv_file.read(1)            z1_2 = self.conv_file.read(1)            self._write(self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))        self._writel('')        return 0    def _handle_block0041(self,header):    ####################################################################################################    #    # block 0041 handler    #    ####################################################################################################        self._write(" |- block00"+ header +" ")        z1 = self.conv_file.read(1)        z2 = self.conv_file.read(1)        for item in range(0,64):            #layer = 0            z1 = self.conv_file.read(1)            z2 = self.conv_file.read(1)            self._write(self._convert_to_hex(z1))            self._write(self._convert_to_hex(z2))            z1_1 = self.conv_file.read(1)            z1_2 = self.conv_file.read(1)            self._write(self._convert_to_hex(z1_1))            self._write(self._convert_to_hex(z1_2))        self._writel('')        return 0    def decode(self):    ####################################################################################################    #    # Decodes the geodata    #    ####################################################################################################        self.conv_file = open(self.filename+'.dat','r')        self.csv_file  = open(self.filename+'.csv','w')        self.log_file  = open(self.filename+'.log','w')        self.data_all = {}        self.conv_file.seek(18) # header dont need that currently        data=[]        for x in range(0,256):            #self._writel('x:'+str(x))            for y in range(0,256):                self._writel('x' + str(x) + ' y:' +str(y))                block1 = self.conv_file.read(1)                block2 = self.conv_file.read(1)                block1_hex = self._convert_to_hex(block1)                if block1_hex   == 'ff': self._writel("error")                elif block1_hex == '00':                    z1,z2 = self._handle_block0000()                    if z1==z2:                        data.append([x,y,int(z1,16),'F'])                    else:                        for item in range(int(z1,16),int(z2,16),32):                            data.append([x,y,int(item),'W'])                elif block1_hex == '40': self._handle_block0040()                else: self._handle_block0041(block1_hex)        self._writel(str(data))        self._writel(' |-- minz = '+str(int(minz)))        self._writel(' |-- maxz = '+str(int(maxz)))                self.conv_file.close()        self.csv_file.close()        self.log_file.close()        return 0    def __init__(self,filename):        self.filename=filename        self.minz=None        self.maxz=None########################################################################################################## Main Function##########################################################################################################field_of_silence = geodata('22_23_conv')#field_of_silence.decode()#giants_cave = geodata('25_19_conv')#giants_cave.decode()tower_of_insolence = geodata('22_22_conv')tower_of_insolence.decode()