mirror of
https://github.com/ksherlock/profuse.git
synced 2024-06-10 17:29:32 +00:00
clean up sdk code.
git-svn-id: https://profuse.googlecode.com/svn/branches/profuse_interim@375 aa027e90-d47c-11dd-86d7-074df07e0730
This commit is contained in:
parent
87d6070dcf
commit
c6165e16d2
|
@ -63,8 +63,8 @@ struct record_thread
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* callback function to
|
* callback function to scan contents.
|
||||||
*
|
* (not used).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static NuResult ContentFunction(NuArchive *archive, void *vp)
|
static NuResult ContentFunction(NuArchive *archive, void *vp)
|
||||||
|
@ -105,22 +105,56 @@ static NuResult ContentFunction(NuArchive *archive, void *vp)
|
||||||
return kNuOK;
|
return kNuOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NuThreadIdx FindDiskThread(const NuRecord *record)
|
static record_thread FindDiskImageThread(NuArchive *archive)
|
||||||
{
|
{
|
||||||
#undef __METHOD__
|
#undef __METHOD__
|
||||||
#define __METHOD__ "SDKImage::FindDiskThread"
|
#define __METHOD__ "SDKImage::FindThread"
|
||||||
|
|
||||||
for (unsigned i = 0; i < NuRecordGetNumThreads(record); ++i)
|
record_thread rt;
|
||||||
|
NuError e;
|
||||||
|
NuAttr recordCount;
|
||||||
|
|
||||||
|
e = NuGetAttr(archive, kNuAttrNumRecords, &recordCount);
|
||||||
|
if (e)
|
||||||
{
|
{
|
||||||
const NuThread *thread = NuGetThread(record, i);
|
throw NuFXException(__METHOD__ ": NuGetAttr", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned position = 0; position < recordCount; ++position)
|
||||||
|
{
|
||||||
|
NuRecordIdx rIndex;
|
||||||
|
const NuRecord *record;
|
||||||
|
|
||||||
if (NuGetThreadID(thread) == kNuThreadIDDiskImage)
|
e = NuGetRecordIdxByPosition(archive, position, &rIndex);
|
||||||
return thread->threadIdx;
|
if (e)
|
||||||
}
|
{
|
||||||
|
throw NuFXException(__METHOD__ ": NuGetRecordIdxByPosition", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
e = NuGetRecord(archive, rIndex, &record);
|
||||||
|
if (e)
|
||||||
|
{
|
||||||
|
throw NuFXException(__METHOD__ ": NuGetRecord", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < NuRecordGetNumThreads(record); ++i)
|
||||||
|
{
|
||||||
|
const NuThread *thread = NuGetThread(record, i);
|
||||||
|
|
||||||
|
if (NuGetThreadID(thread) == kNuThreadIDDiskImage)
|
||||||
|
{
|
||||||
|
rt.thread_index = thread->threadIdx;
|
||||||
|
rt.record_index = record->recordIdx;
|
||||||
|
return rt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
throw Exception(__METHOD__ ": not a disk image");
|
throw Exception(__METHOD__ ": not a disk image");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper function to extract SDK image to /tmp and return a
|
* helper function to extract SDK image to /tmp and return a
|
||||||
* ProDOSDiskImage of the /tmp file.
|
* ProDOSDiskImage of the /tmp file.
|
||||||
|
@ -138,10 +172,10 @@ BlockDevicePointer SDKImage::Open(const char *name)
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
NuArchive *archive = NULL;
|
NuArchive *archive = NULL;
|
||||||
//const NuThread *thread = NULL;
|
//const NuThread *thread = NULL;
|
||||||
const NuRecord *record = NULL;
|
//const NuRecord *record = NULL;
|
||||||
NuDataSink *sink = NULL;
|
NuDataSink *sink = NULL;
|
||||||
NuRecordIdx rIndex;
|
//NuRecordIdx rIndex;
|
||||||
NuThreadIdx tIndex;
|
//NuThreadIdx tIndex;
|
||||||
|
|
||||||
NuError e;
|
NuError e;
|
||||||
|
|
||||||
|
@ -156,50 +190,8 @@ BlockDevicePointer SDKImage::Open(const char *name)
|
||||||
{
|
{
|
||||||
throw NuFXException(__METHOD__ ": NuOpenRO", e);
|
throw NuFXException(__METHOD__ ": NuOpenRO", e);
|
||||||
}
|
}
|
||||||
NuSetExtraData(archive, (void *)&rt);
|
|
||||||
|
|
||||||
// NuContents screws everything up???
|
|
||||||
/*
|
|
||||||
e = NuContents(archive, ContentFunction);
|
|
||||||
if (e == kNuErrAborted)
|
|
||||||
{
|
|
||||||
// ok!
|
|
||||||
}
|
|
||||||
else if (e == kNuErrNone)
|
|
||||||
{
|
|
||||||
throw Exception(__METHOD__ ": NuContents: not a disk image");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw NuFXException(__METHOD__ ": NuContents", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
printf("%ld, %ld\n", (long)rt.record_index, (long)rt.thread_index);
|
|
||||||
*/
|
|
||||||
|
|
||||||
e = NuGetRecordIdxByPosition(archive, 0, &rIndex);
|
|
||||||
if (e)
|
|
||||||
{
|
|
||||||
throw NuFXException(__METHOD__ ": NuGetRecordIdxByPosition", e);
|
|
||||||
}
|
|
||||||
printf("%ld\n", rIndex);
|
|
||||||
|
|
||||||
/* load up the record.
|
|
||||||
* I assume this is necessary since thread ids are only unique
|
|
||||||
* within a record, not across the entire archive
|
|
||||||
*/
|
|
||||||
|
|
||||||
e = NuGetRecord(archive, rIndex, &record);
|
|
||||||
if (e)
|
|
||||||
{
|
|
||||||
|
|
||||||
throw NuFXException(__METHOD__ ": NuGetRecord", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
tIndex = FindDiskThread(record); // throws on error.
|
|
||||||
printf("%ld\n", tIndex);
|
|
||||||
|
|
||||||
|
rt = FindDiskImageThread(archive);
|
||||||
|
|
||||||
fd = mkstemp(tmp);
|
fd = mkstemp(tmp);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
@ -221,12 +213,13 @@ BlockDevicePointer SDKImage::Open(const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
e = NuExtractThread(archive, tIndex, sink);
|
e = NuExtractThread(archive, rt.thread_index, sink);
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
throw NuFXException(__METHOD__ ": NuExtractThread", e);
|
throw NuFXException(__METHOD__ ": NuExtractThread", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "Extracted disk image to %s\n", tmp);
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
NuClose(archive);
|
NuClose(archive);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user