mirror of
https://github.com/fadden/ciderpress.git
synced 2024-12-21 14:30:02 +00:00
CP/M: added support for Microsoft Softcard "data only" disks.
CP/M: correctly identify 3.x disks Updated some copyright notices.
This commit is contained in:
parent
5fdc2513f3
commit
732cd85ce5
@ -5,9 +5,9 @@ http://www.faddensoft.com/
|
||||
CiderPress
|
||||
http://ciderpress.sourceforge.net/
|
||||
3.0.1
|
||||
39815
|
||||
39816
|
||||
C:\DATA\faddenSoft\fs.ico
|
||||
Copyright © 2009 faddenSoft, LLC. All rights reserved.
|
||||
Copyright © 2009 CiderPress project authors. All rights reserved.
|
||||
C:\Src\CiderPress\DIST\ReadMe.txt
|
||||
C:\Src\CiderPress\DIST\License.txt
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2007, FaddenSoft, LLC
|
||||
Copyright (c) 2009, CiderPress project authors
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -217,27 +217,27 @@ END
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_ABOUTDLG DIALOGEX 0, 0, 212, 154
|
||||
IDD_ABOUTDLG DIALOGEX 0, 0, 237, 154
|
||||
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "About CiderPress"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,7,132,50,14
|
||||
PUSHBUTTON "Credits",IDC_ABOUT_CREDITS,63,132,50,14,0,0,
|
||||
PUSHBUTTON "Credits",IDC_ABOUT_CREDITS,77,132,50,14,0,0,
|
||||
HIDC_ABOUT_CREDITS
|
||||
PUSHBUTTON "Enter registration code",IDC_ABOUT_ENTER_REG,119,132,86,
|
||||
PUSHBUTTON "Enter registration code",IDC_ABOUT_ENTER_REG,144,132,86,
|
||||
14
|
||||
CONTROL 106,IDC_STATIC,"Static",SS_BITMAP,7,6,64,59
|
||||
LTEXT "CiderPress v%d.%d.%d%s%s",IDC_CIDERPRESS_VERS_TEXT,77,7,
|
||||
128,9
|
||||
LTEXT "Copyright © 2009 by FaddenSoft, LLC.\rAll Rights Reserved.",
|
||||
IDC_STATIC,77,20,128,19
|
||||
ICON IDR_MAINFRAME,IDC_STATIC,77,45,20,20
|
||||
ICON IDI_FILE_NUFX,IDC_STATIC,106,45,20,20
|
||||
ICON IDI_FILE_BINARY2,IDC_STATIC,136,45,20,20
|
||||
ICON IDI_FILE_DISKIMAGE,IDC_STATIC,166,45,20,20
|
||||
GROUPBOX "Libraries",IDC_STATIC,7,71,198,56
|
||||
153,9
|
||||
LTEXT "Copyright © 2009 by CiderPress project authors\rAll Rights Reserved.",
|
||||
IDC_STATIC,77,20,153,19
|
||||
ICON IDR_MAINFRAME,IDC_STATIC,77,45,21,20
|
||||
ICON IDI_FILE_NUFX,IDC_STATIC,106,45,21,20
|
||||
ICON IDI_FILE_BINARY2,IDC_STATIC,136,45,21,20
|
||||
ICON IDI_FILE_DISKIMAGE,IDC_STATIC,166,45,21,20
|
||||
GROUPBOX "Libraries",IDC_STATIC,7,71,223,56
|
||||
LTEXT "Using NufxLib DLL v%d.%d.%d",IDC_NUFXLIB_VERS_TEXT,16,
|
||||
82,170,10
|
||||
LTEXT "Using DiskImg DLL v%d.%d.%d",IDC_DISKIMG_VERS_TEXT,16,
|
||||
@ -1577,16 +1577,16 @@ BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "Comments", "The end is nigh.\0"
|
||||
VALUE "CompanyName", "FaddenSoft, LLC\0"
|
||||
VALUE "CompanyName", "CiderPress Project\0"
|
||||
VALUE "FileDescription", "CiderPress\0"
|
||||
VALUE "FileVersion", "2, 4, 6, 0\0"
|
||||
VALUE "FileVersion", "3, 0, 1, 0\0"
|
||||
VALUE "InternalName", "CiderPress\0"
|
||||
VALUE "LegalCopyright", "Copyright © 2007 FaddenSoft, LLC\0"
|
||||
VALUE "LegalCopyright", "Copyright © 2009 CiderPress project authors\0"
|
||||
VALUE "LegalTrademarks", "\0"
|
||||
VALUE "OriginalFilename", "CiderPress.exe\0"
|
||||
VALUE "PrivateBuild", "\0"
|
||||
VALUE "ProductName", "CiderPress\0"
|
||||
VALUE "ProductVersion", "2, 4, 6, 0\0"
|
||||
VALUE "ProductVersion", "3, 0, 1, 0\0"
|
||||
VALUE "SpecialBuild", "\0"
|
||||
END
|
||||
END
|
||||
@ -1609,7 +1609,7 @@ GUIDELINES DESIGNINFO DISCARDABLE
|
||||
BEGIN
|
||||
IDD_ABOUTDLG, DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 205
|
||||
RIGHTMARGIN, 230
|
||||
VERTGUIDE, 7
|
||||
VERTGUIDE, 16
|
||||
VERTGUIDE, 77
|
||||
|
Binary file not shown.
Binary file not shown.
@ -20,7 +20,7 @@
|
||||
#define kAppMajorVersion 3
|
||||
#define kAppMinorVersion 0
|
||||
#define kAppBugVersion 1
|
||||
#define kAppDevString "a1"
|
||||
#define kAppDevString "a2"
|
||||
|
||||
/*
|
||||
* Windows application object.
|
||||
|
@ -12,6 +12,8 @@
|
||||
* - Rumor has it that "sparse" files are possible. Not handled.
|
||||
* - I'm currently treating the directory as fixed-length. This may
|
||||
* not be correct.
|
||||
* - Not handling special entries (volume label, date stamps,
|
||||
* password control).
|
||||
*
|
||||
* As I have no practical experience with CP/M, this is the weakest of the
|
||||
* filesystem implementations.
|
||||
@ -31,6 +33,7 @@ const int kVolDirBlock = 24; // track 3 sector 0
|
||||
const int kVolDirCount = 4; // 4 prodos blocks
|
||||
const int kNoDataByte = 0xe5;
|
||||
const int kMaxUserNumber = 31; // 0-15 on some systems, 0-31 on others
|
||||
const int kMaxSpecialUserNumber = 0x21; // 0x20 and 0x21 have special meanings
|
||||
const int kMaxExtent = 31; // extent counter, 0-31
|
||||
|
||||
/*
|
||||
@ -59,8 +62,12 @@ TestImage(DiskImg* pImg, DiskImg::SectorOrder imageOrder)
|
||||
for (i = 0; i < DiskFSCPM::kFullDirSize/DiskFSCPM::kDirectoryEntryLen; i++)
|
||||
{
|
||||
if (*dptr != kNoDataByte) {
|
||||
/* usually userNumber == 0, but sometimes not; must be <= 31 */
|
||||
if (*dptr > kMaxUserNumber) {
|
||||
/*
|
||||
* Usually userNumber is 0, but sometimes not. It's expected to
|
||||
* be < 0x20 for a normal file, may be 0x21 or 0x22 for special
|
||||
* entries (volume label, date stamps).
|
||||
*/
|
||||
if (*dptr > kMaxSpecialUserNumber) {
|
||||
dierr = kDIErrFilesystemNotFound;
|
||||
break;
|
||||
}
|
||||
@ -70,11 +77,6 @@ TestImage(DiskImg* pImg, DiskImg::SectorOrder imageOrder)
|
||||
dierr = kDIErrFilesystemNotFound;
|
||||
break;
|
||||
}
|
||||
/* value in S1 must be zero */
|
||||
if (dptr[13] != 0) {
|
||||
dierr = kDIErrFilesystemNotFound;
|
||||
break;
|
||||
}
|
||||
|
||||
/* check for a valid filename here; high bit may be set on some bytes */
|
||||
unsigned char firstLet = *(dptr+1) & 0x7f;
|
||||
@ -214,6 +216,11 @@ DiskFSCPM::ReadCatalog(void)
|
||||
|
||||
if (fDirEntry[i].userNumber == kNoDataByte || fDirEntry[i].extent != 0)
|
||||
continue;
|
||||
if (fDirEntry[i].userNumber > kMaxUserNumber) {
|
||||
/* skip over volume label, date stamps, etc */
|
||||
WMSG1("Skipping entry with userNumber=0x%02x\n",
|
||||
fDirEntry[i].userNumber);
|
||||
}
|
||||
|
||||
pFile = new A2FileCPM(this, fDirEntry);
|
||||
FormatName(pFile->fFileName, (char*)fDirEntry[i].fileName);
|
||||
@ -620,8 +627,13 @@ A2FDCPM::Read(void* buf, size_t len, size_t* pActual)
|
||||
/*
|
||||
* Read one CP/M block (two ProDOS blocks) and pull out the
|
||||
* set of data that the user wants.
|
||||
*
|
||||
* On some Microsoft Softcard disks, the first three tracks hold
|
||||
* file data rather than the system image.
|
||||
*/
|
||||
prodosBlock = DiskFSCPM::CPMToProDOSBlock(fBlockList[blkIndex]);
|
||||
if (prodosBlock >= 280)
|
||||
prodosBlock -= 280;
|
||||
|
||||
dierr = fpFile->GetDiskFS()->GetDiskImg()->ReadBlock(prodosBlock,
|
||||
blkBuf);
|
||||
|
@ -42,8 +42,8 @@ namespace DiskImgLib {
|
||||
|
||||
/* compiled-against versions; call DiskImg::GetVersion for linked-against */
|
||||
#define kDiskImgVersionMajor 4
|
||||
#define kDiskImgVersionMinor 5
|
||||
#define kDiskImgVersionBug 2
|
||||
#define kDiskImgVersionMinor 6
|
||||
#define kDiskImgVersionBug 0
|
||||
|
||||
|
||||
/*
|
||||
|
@ -2217,7 +2217,7 @@ public:
|
||||
};
|
||||
// Contents of the raw 32-byte directory entry.
|
||||
//
|
||||
// From http://www.seasip.demon.co.uk/Cpm/format22.html
|
||||
// From http://www.seasip.demon.co.uk/Cpm/format31.html
|
||||
//
|
||||
// UU F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 EX S1 S2 RC .FILENAMETYP....
|
||||
// AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL ................
|
||||
@ -2225,13 +2225,16 @@ public:
|
||||
// If the high bit of T1 is set, the file is read-only. If the high
|
||||
// bit of T2 is set, the file is a "system" file.
|
||||
//
|
||||
// An entry with UU=0x20 indicates a CP/M 3.1 disk label entry.
|
||||
// An entry with UU=0x21 indicates a time stamp entry (2.x or 3.x).
|
||||
//
|
||||
// Files larger than (1024 * 16) have multiple "extent" entries, i.e.
|
||||
// entries with the same user number and file name.
|
||||
typedef struct DirEntry {
|
||||
unsigned char userNumber; // 0-15 or 0-31 (usually 0), e5=unused
|
||||
unsigned char fileName[kDirFileNameLen+1];
|
||||
unsigned short extent; // extent (EX + S2 * 32)
|
||||
unsigned char S1; // reserved, should be zero
|
||||
unsigned char S1; // Last Record Byte Count (app-specific)
|
||||
unsigned char records; // #of 128-byte records in this extent
|
||||
unsigned char blocks[kDirEntryBlockCount];
|
||||
bool readOnly;
|
||||
|
@ -11,10 +11,10 @@ LastPage=0
|
||||
ClassCount=2
|
||||
|
||||
ResourceCount=4
|
||||
Resource1=IDC_MDC
|
||||
Resource1=IDD_ABOUTBOX
|
||||
Class1=AboutDlg
|
||||
Resource2="IDD_CHOOSE_FILES"
|
||||
Resource3=IDD_ABOUTBOX
|
||||
Resource3=IDC_MDC
|
||||
Class2=ProgressDlg
|
||||
Resource4=IDD_PROGRESS
|
||||
|
||||
|
14
mdc/mdc.rc
14
mdc/mdc.rc
@ -70,19 +70,19 @@ END
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 133, 111
|
||||
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 156, 111
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "About"
|
||||
FONT 10, "MS Sans Serif"
|
||||
BEGIN
|
||||
ICON IDI_MDC,IDC_MYICON,7,7,20,20
|
||||
LTEXT "MDC version %d.%d.%d",IDC_ABOUT_VERS,33,7,93,8,
|
||||
LTEXT "MDC version %d.%d.%d",IDC_ABOUT_VERS,33,7,116,8,
|
||||
SS_NOPREFIX
|
||||
LTEXT "Copyright © 2007 by FaddenSoft, LLC.\rAll Rights Reserved.",
|
||||
IDC_STATIC,7,31,119,19
|
||||
DEFPUSHBUTTON "OK",IDOK,41,90,50,14
|
||||
LTEXT "Copyright © 2009 by CiderPress project authors.\rAll Rights Reserved.",
|
||||
IDC_STATIC,7,31,142,19
|
||||
DEFPUSHBUTTON "OK",IDOK,53,90,50,14
|
||||
LTEXT "This utility scans Apple II disk images and creates formatted listings of the files in them.",
|
||||
IDC_STATIC,7,58,119,26
|
||||
IDC_STATIC,7,58,142,26
|
||||
LTEXT "Multi-Disk Catalog",IDC_STATIC,33,15,55,8
|
||||
END
|
||||
|
||||
@ -148,7 +148,7 @@ BEGIN
|
||||
IDD_ABOUTBOX, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 126
|
||||
RIGHTMARGIN, 149
|
||||
VERTGUIDE, 33
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 104
|
||||
|
Loading…
Reference in New Issue
Block a user