All pastes #61207 Raw Edit

Something

public python v1 · immutable
#61207 ·published 2006-06-02 22:04 UTC
rendered paste body
#!/usr/bin/pythonfrom decimal import Decimal########################################################################################################## class for handling geodata# needs geodata file as param# new_geodata = geodata('filename-without-.dat')#########################################################################################################class geodata:    ####################################################################################################    #    # writes some_string to the logfile and then a linebreak \n    #    ####################################################################################################    def _writel(self,some_string):        self.log_file.write(str(some_string)+'\n')        return 0    ####################################################################################################    #    # writes some_string to the logfile    #    ####################################################################################################    def _write(self,some_string):        self.log_file.write(str(some_string))        return 0    ####################################################################################################    #    # converts bytes hex values    #    ####################################################################################################    def _convert_to_hex(self,some_byte):        if len(some_byte)==0:            return '00'        charval = ord(some_byte)        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 _setmaxz(self,z):        # getting max z        if z!=0:            if self.maxz == None:                self.maxz = z            else:                if self.maxz < z:                    self.maxz = z    def _setminz(self,z):        # getting max z        if self.minz == None:            self.minz = z        else:            if self.minz > z:                self.minz = z                    def _getz(self):        z_2 = self._convert_to_hex(self.conv_file.read(1))        z_1 = self._convert_to_hex(self.conv_file.read(1))                                                                                z = int(z_1+z_2,16)        # get the real z1        if z > 55000:            z = z - 65336        # checking min/max z        self._setminz(z)        self._setmaxz(z)        return z            ####################################################################################################    #    # block 0000 handler    # z1 min-z z2 max-z    # if z1 != z2 then its a water zone else its a floor    #    ####################################################################################################    def _handle_block0000(self):        # getting the bytes for z1/z2        z1 = self._getz()        z2 = self._getz()        # checking min/max z        self._setminz(z1)        self._setmaxz(z2)        # returning realz1,realz2        if z1!=z2:            self._writel(' |- block0000 - Water from ocean floor ' + str(z1) + ' to surface ' + str(z2))        else:            self._writel(' |- block0000 - Floor %s ' %(str(z1)))        return z1,z2    ####################################################################################################    #    # block 0040 handler    #    ####################################################################################################    def _handle_block0040(self):        self._write(" |- block0040 ")        # loop 64 times        for item in range(0,64):            z = self._getz() / 2             # debug output            self._write( str(z)+ ' ')        self._writel('')        return 0    ####################################################################################################    #    # block 0041 handler    #    ####################################################################################################    def _handle_block0041(self,header):        self._writel(" |- block00"+ header +" ")        z1 = self.conv_file.read(1)        z2 = self.conv_file.read(1)        for item in range(0,64):            layercount = self._getz()            self._write(' |-- layercount ' + str(layercount) + ' -- ')                        for i in range(0,layercount):                z = self._getz() / 2                self._write(z)                self._write(' ')            self._writel('')        return 0    ####################################################################################################    #    # Decodes the geodata    #    ####################################################################################################    def decode(self):        self.conv_file = open(self.filename+'.dat','rb')        self.csv_file  = open(self.filename+'.csv','w')        self.log_file  = open(self.filename+'.log','wb')        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,z1,'F'])                    else:                        for item in range(z1,z2,32):                            data.append([x,y,item,'W'])                elif block1_hex == '40':                    self._handle_block0040()                elif int(block1_hex,16)>=64 and int(block1_hex,16)<=121:                    self._handle_block0041(block1_hex)                else: self._writel('block00' + block1_hex + ' ???')#        self._writel(str(data))        self._writel(' |-- minz = %s' %(str(self.minz)))        self._writel(' |-- maxz = %s' %(str(self.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()#field_of_silence = geodata('16_22_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()