Help:Converters
From C64 Diskmag Wiki
(Difference between revisions)
Vargaviktor (Talk | contribs) |
Vargaviktor (Talk | contribs) (→Converter blocks in the exteranl converter) |
||
| (5 intermediate revisions by one user not shown) | |||
| Line 56: | Line 56: | ||
#writes the converted results | #writes the converted results | ||
| + | </pre> | ||
| + | |||
| + | '''Some examples for filename checking:'''<br/> | ||
| + | if filename[0:2] in ("T0", "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8") :<br/> | ||
| + | if filename[0] == "H" and filename[1] in string.digits :<br/> | ||
| + | if filename[0] in string.letters and filename[1] == "\xdd" :<br/> | ||
| + | <br/> | ||
| + | '''Skipping files:'''<br/> | ||
| + | this code skips the file if it is on the disk 09 and starts with O | ||
| + | <pre>if filename[0] in string.letters and filename[1] == "\xdd" : | ||
| + | if magpostfix == "09" and filename[0] == "O" : | ||
| + | continue</pre> | ||
| + | |||
| + | ===Converter blocks in the exteranl converter=== | ||
| + | You can define here the special conversion, like extracting, char changing, converting to web format. | ||
| + | |||
| + | <pre> | ||
| + | #!/usr/bin/python | ||
| + | # -*- coding: iso-8859-15 -*- | ||
| + | import binascii, struct, sys | ||
| + | |||
| + | table = "áabcdefghijklmnopqrstuvwxyz[é]íó" + \ | ||
| + | " !\"öő%&'()*+,-./0123456789:;úüű?" + \ | ||
| + | "_ABCDEFGHIJKLMNOPQRSTUVWXYZ_____" + \ | ||
| + | " !\"#$%&'()*+,-./0123456789:;<=>?" + \ | ||
| + | "ÁABCDEFGHIJKLMNOPQRSTUVWXYZ_É_ÍÓ"+ \ | ||
| + | " !\"ÖŐ%&'()*+,-./0123456789:;ÚÜŰ?" + \ | ||
| + | "_ABCDEFGHIJKLMNOPQRSTUVWXYZ_____" + \ | ||
| + | " !\"#$%&'()*+,-./0123456789:;<=>?" | ||
| + | |||
| + | #this is the replace table of the bytes. | ||
| + | #Following the guidelines | ||
| + | #normal text - lower case | ||
| + | #flasghing, animated - upper case | ||
| + | |||
| + | |||
| + | #this code block simply transaltes the data, with the help of the prevoiusly defined table. | ||
| + | def translate(data) : | ||
| + | outdata = "" | ||
| + | line = "" | ||
| + | for i in xrange(len(data)) : | ||
| + | char = ord(data[i]) | ||
| + | line += table[char] | ||
| + | |||
| + | if table[char] == "_" : | ||
| + | print line, hex(char) | ||
| + | |||
| + | if i % 40 == 39 : | ||
| + | outdata += line.rstrip() + "\n" | ||
| + | line = "" | ||
| + | |||
| + | return outdata + line.rstrip() + "\n" | ||
| + | |||
| + | #this block simply unpacks the data | ||
| + | #in this case, if $a0 found, the next byte tells how many spaces needed | ||
| + | #(this is a realy simple byte packing) | ||
| + | def unpack(data) : | ||
| + | outdata = "" | ||
| + | i = 0 | ||
| + | while i < len(data) : | ||
| + | if data[i] == "\xa0" : | ||
| + | count = ord(data[i + 1]) | ||
| + | if count == 0 : | ||
| + | print "count is zero!" | ||
| + | sys.exit() | ||
| + | outdata += (" " * count) | ||
| + | i += 2 | ||
| + | else : | ||
| + | outdata += data[i] | ||
| + | i += 1 | ||
| + | |||
| + | return outdata | ||
| + | |||
| + | #this fnction does the web fomrating | ||
| + | #replaces with escaped blocks the special chars used | ||
| + | #and adds the pre tag pair. | ||
| + | |||
| + | def webready(data) : | ||
| + | data = data.replace("&", "&amp;") | ||
| + | data = data.replace("<", "&lt;") | ||
| + | data = data.replace(">", "&gt;") | ||
| + | |||
| + | #convert lower accented chars | ||
| + | data = data.replace("á", "&aacute;") | ||
| + | data = data.replace("é", "&eacute;") | ||
| + | data = data.replace("í", "&iacute;") | ||
| + | data = data.replace("ó", "&oacute;") | ||
| + | data = data.replace("ö", "&ouml;") | ||
| + | data = data.replace("ő", "&#337;") | ||
| + | data = data.replace("ú", "&uacute;") | ||
| + | data = data.replace("ü", "&uuml;") | ||
| + | data = data.replace("ű", "&#369;") | ||
| + | |||
| + | #convert upper accented chars | ||
| + | data = data.replace("Á", "&Aacute;") | ||
| + | data = data.replace("É", "&Eacute;") | ||
| + | data = data.replace("Í", "&Iacute;") | ||
| + | data = data.replace("Ó", "&Oacute;") | ||
| + | data = data.replace("Ö", "&Ouml;") | ||
| + | data = data.replace("Ő", "&#336;") | ||
| + | data = data.replace("Ú", "&Uacute;") | ||
| + | data = data.replace("Ü", "&Uuml;") | ||
| + | data = data.replace("Ű", "&#368;") | ||
| + | |||
| + | data = "<pre>" + data + "</pre>" | ||
| + | return data | ||
| + | |||
</pre> | </pre> | ||
Latest revision as of 00:52, 24 June 2009
[edit] Converter main program
Here is the commented version of the conv_hirado_05-11.py converter.
import binascii, os, sys, string
#whic python library is needed
from convert import hirado05
#import the specific converter
from d64 import d64
#import the d64 manager codeblock
for magpostfix in [ "05", "06", "07", "08", "09", "10", "11"] :
magname = "hirado" + magpostfix
# the d64s whic are convetable with this are hirado05.d64, hirado06.d64...
print "Processing", magname
f = open(magname + ".d64", "rb")
disk = f.read()
f.close()
img = d64.D64image(disk)
dir = img.get_dir()
#reads the d64 in
for entry in dir :
filename = entry[0]
if filename[0] in string.digits and filename[1] in string.digits :
#the following block is started with that file, if the filename first and second char is a number
#of-course, if the coding or somethin changed through the evolution of disk mag, maybe the file names, or the
#char tabel conversions changed by the time, and you need different code blocks
print filename
data = img.get_file_by_name(filename)
#reads the specific prg file into data
data = data[4:]
#cuts the first 3 bytes from file, mainly enough 2 "[3:]" because of load address
data = hirado05.unpack(data)
#calls the specific unpack function
data = hirado05.translate(data)
#calls the char specific translation function
data = hirado05.webready(data)
#call the specific transformation function which is changing the special chars to a web displayable format
of = open(magname + "-" + filename[0:2] + ".txt", "wb")
of.write(data)
of.close()
#writes the converted results
Some examples for filename checking:
if filename[0:2] in ("T0", "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8") :
if filename[0] == "H" and filename[1] in string.digits :
if filename[0] in string.letters and filename[1] == "\xdd" :
Skipping files:
this code skips the file if it is on the disk 09 and starts with O
if filename[0] in string.letters and filename[1] == "\xdd" :
if magpostfix == "09" and filename[0] == "O" :
continue
[edit] Converter blocks in the exteranl converter
You can define here the special conversion, like extracting, char changing, converting to web format.
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import binascii, struct, sys
table = "áabcdefghijklmnopqrstuvwxyz[é]íó" + \
" !\"öő%&'()*+,-./0123456789:;úüű?" + \
"_ABCDEFGHIJKLMNOPQRSTUVWXYZ_____" + \
" !\"#$%&'()*+,-./0123456789:;<=>?" + \
"ÁABCDEFGHIJKLMNOPQRSTUVWXYZ_É_ÍÓ"+ \
" !\"ÖŐ%&'()*+,-./0123456789:;ÚÜŰ?" + \
"_ABCDEFGHIJKLMNOPQRSTUVWXYZ_____" + \
" !\"#$%&'()*+,-./0123456789:;<=>?"
#this is the replace table of the bytes.
#Following the guidelines
#normal text - lower case
#flasghing, animated - upper case
#this code block simply transaltes the data, with the help of the prevoiusly defined table.
def translate(data) :
outdata = ""
line = ""
for i in xrange(len(data)) :
char = ord(data[i])
line += table[char]
if table[char] == "_" :
print line, hex(char)
if i % 40 == 39 :
outdata += line.rstrip() + "\n"
line = ""
return outdata + line.rstrip() + "\n"
#this block simply unpacks the data
#in this case, if $a0 found, the next byte tells how many spaces needed
#(this is a realy simple byte packing)
def unpack(data) :
outdata = ""
i = 0
while i < len(data) :
if data[i] == "\xa0" :
count = ord(data[i + 1])
if count == 0 :
print "count is zero!"
sys.exit()
outdata += (" " * count)
i += 2
else :
outdata += data[i]
i += 1
return outdata
#this fnction does the web fomrating
#replaces with escaped blocks the special chars used
#and adds the pre tag pair.
def webready(data) :
data = data.replace("&", "&")
data = data.replace("<", "<")
data = data.replace(">", ">")
#convert lower accented chars
data = data.replace("á", "á")
data = data.replace("é", "é")
data = data.replace("í", "í")
data = data.replace("ó", "ó")
data = data.replace("ö", "ö")
data = data.replace("ő", "ő")
data = data.replace("ú", "ú")
data = data.replace("ü", "ü")
data = data.replace("ű", "ű")
#convert upper accented chars
data = data.replace("Á", "Á")
data = data.replace("É", "É")
data = data.replace("Í", "Í")
data = data.replace("Ó", "Ó")
data = data.replace("Ö", "Ö")
data = data.replace("Ő", "Ő")
data = data.replace("Ú", "Ú")
data = data.replace("Ü", "Ü")
data = data.replace("Ű", "Ű")
data = "<pre>" + data + "</pre>"
return data