Removed prompts. Place rudimentary if/else for first eight bytes of driver. Attempted function, but it's not working.

This commit is contained in:
ultramagnus_tcv 2015-09-07 12:24:01 -05:00
parent 3bfd8ab0b1
commit 14bf6bdae1
2 changed files with 31 additions and 26 deletions

View File

@ -1,33 +1,24 @@
from struct import unpack
import os
def tup2int(offset):
offset = unpack ('< H', SOS)
return offset
#Clear SCREEN
print("\033c");
# Ask for the DSK filename then open it
dskname = raw_input("Welcome to the Apple /// SOS.Driver.Slurper.\nAppleCommander _must_ exist in the same directory as this script.\n\nYou must have JAVA on your system. \n\nEnter CaSe-SeNsItIvE DSK filename: ")
if len(dskname) < 1 :
print '\nSorry, you must enter a disk name.'
exit()
else:
try:
dskopen = open(dskname) #Checks to see if DSK exists.
sosdrivername = raw_input('\nEnter the name of the SOS driver file you wish exported [SOS.DRIVER]: ')
if len(sosdrivername) < 1 :
sosdrivername = 'SOS.DRIVER'
print "DEBUG: Taking the default IF. sosdrivername is: " + sosdrivername
os.popen("java -jar AppleCommander-1.3.5.13-ac.jar -g %s %s >%s.SOS.DRIVER" % (dskname, sosdrivername,dskname))
else:
print 'DEBUG: Taking the else...'
os.popen("java -jar AppleCommander-1.3.5.13-ac.jar -g %s %s >%s.SOS.DRIVER" % (dskname, sosdrivername,dskname))
except:
print '\n\nI cannot find that disk file. Check path and/or name.\n\n'
exit()
#Is File a SOS DRIVER file?
SOSfile = open('SOSCFFA.DRIVER', 'rb')
SOS = SOSfile.read(10)
filetype, offset = unpack('< 8s H', SOS)
print "Filetype is: %s. Offset is: %04x" % (filetype, offset)
if 'SOS DRVR' in filetype:
print "This is a proper SOS file."
print "Filetype is: %s. First offset is: %04x" % (filetype, offset)
else:
print "This is not a proper SOS file"
#Seek to first driver
SOSfile.seek(offset,1)

View File

@ -1,9 +1,9 @@
# Python-III-Git
A Python Script to open Apple III DSK files, export SOS.DRIVER, and catalog what drivers are installed.
A Python Script to open Apple III DSK files, export SOS.DRIVER, and catalog what drivers are installed.
Work History
8/1/2015 -- Approx.
8/1/2015 -- Approx.
Initial Commit
8/26/2015
@ -12,7 +12,7 @@ Goals Defined:
1. Obtain the name of the .dsk image from the command-line (like: python my_script.py my_disk_image.dsk)
2. For each driver:
a. File offset
a. File offset
b. List the name of the driver
c. Whether it's char or block device
d. Manufacturer id
@ -20,7 +20,7 @@ Goals Defined:
3. Print it all on one line in a file, delimited with commas
Example:
Example:
$ python sos.extract.py -disk "my_disk_image.dsk" -driver [SOS.DRIVER] -output [diskname.csv]
@ -43,8 +43,22 @@ Problems to solve (in no particular order):
1. How to write to a file.
2. How to seek to an offset. Can that be done in HEX?
2. How to seek to an offset. Can that be done in HEX?
3. How best to approach? Should we run through the file multiple times, marking names and offsets then returning to grab data? Or is one-time best?
4. Can anything be turned into functions?
4. Can anything be turned into functions?
9/7/2015
Completely removed the prompts as they were a pain during troubleshooting.
Attempted to create a function that will:
1. Take the 2-byte offset found in the file and unpack it then,
2. Convert the resultant tuple into an integer.
I am having trouble with the return portion. I don't really know how to do it. Will continue to play.
Implemented a (very) rudimentary IF/ELSE that checks the first eight bytes of the driver file to see if "SOS DRVR" exist. If not, the script ends. If so, we will continue. This entailed unpacking the data as string-data, converting the resultant tuple into an str, then checking what's there. I did verify via HEX edit that if the string is not "SOS DRVR," the else will be taken.
Is there a way to run the IF/ELSE against the contents of the tuple? It would save my having to convert from tuple to str.