diff --git a/Disk.cpp b/Disk.cpp index 6e99fbb..6f55a6c 100644 --- a/Disk.cpp +++ b/Disk.cpp @@ -7,6 +7,9 @@ */ #include "Disk.h" +#include "DiskCopy42.h" +#include "UniversalDiskImage.h" + #include "common.h" #include @@ -78,13 +81,8 @@ Disk *Disk::OpenFile(const char *file) offset = 0; } else { - // check for disk copy 4.2: - // 800k disk, but there's a 84-byte header - // and possible tag data (???) - // +80 = 0x01 (800K Disk) - // +81 = 0x24 (800K ProDOS disk) - // +82 = 0x01 - // +83 = 0x00 + + // check for disk copy4.2 / universal disk image. uint8_t buffer[1024]; if (read(fd, buffer, 1024) != 1024) @@ -92,31 +90,39 @@ Disk *Disk::OpenFile(const char *file) close(fd); return NULL; } + + bool ok = false; + for(;;) + { + + DiskCopy42 dc; + + if (dc.Load(buffer) + && size == 84 + dc.data_size + dc.tag_size + && (dc.data_size & 0x1ff) == 0) + { + offset = 84; + blocks = dc.data_size >> 9; + ok = true; + break; + } + + UniversalDiskImage udi; + + if (udi.Load(buffer) + && udi.version == 1 + && udi.image_format == UDI_FORMAT_PRODOS_ORDER) + { + + blocks = udi.data_blocks; + offset = udi.data_offset; + ok = true; + break; + } + + } - if (size == 819284 - && buffer[80] == 0x01 - && buffer[81] == 0x24 - && buffer[82] == 0x01 - && buffer[83] == 0x00) - { - // Disk Copy. - // currently ignoring the checksum. - blocks = 819284 >> 9; - offset = 84; - } - // check 2mg. - else if (buffer[0] == '2' - && buffer[1] == 'I' - && buffer[2] == 'M' - && buffer[3] == 'G' - && buffer[0x0c] == 0x01 // ProDOS order - ) - { - // - blocks = load32(&buffer[0x14]); - offset = load32(&buffer[0x18]); - } - else + if (!ok) { close(fd); return NULL; diff --git a/DiskCopy42.cpp b/DiskCopy42.cpp new file mode 100644 index 0000000..50115ae --- /dev/null +++ b/DiskCopy42.cpp @@ -0,0 +1,39 @@ +/* + * DiskCopy42.cpp + * profuse + * + * Created by Kelvin Sherlock on 1/4/09. + * + */ + +#include "DiskCopy42.h" +#include "common.h" +#include + + + +bool DiskCopy42::Load(const uint8_t *buffer) +{ + unsigned i; + + i = buffer[0]; + if (i >= 64) return false; + + memcpy(disk_name, &buffer[1], i); + disk_name[i] = 0; + + + data_size = load32_be(&buffer[64]); + tag_size = load32_be(&buffer[68]); + + data_checksum = load32_be(&buffer[72]); + tag_checksum = load32_be(&buffer[76]); + + disk_format = buffer[80]; + format_byte = buffer[81]; + private_word = load16_be(&buffer[82]); + + if (private_word != 0x100) return false; + + return true; +} \ No newline at end of file diff --git a/DiskCopy42.h b/DiskCopy42.h new file mode 100644 index 0000000..a412c67 --- /dev/null +++ b/DiskCopy42.h @@ -0,0 +1,30 @@ +/* + * DiskCopy42.h + * profuse + * + * Created by Kelvin Sherlock on 1/4/09. + * + */ + +#ifndef __DISKCOPY42__ +#define __DISKCOPY42__ + + +#include + +struct DiskCopy42 +{ + bool Load(const uint8_t *buffer); + + char disk_name[64]; + uint32_t data_size; + uint32_t tag_size; + uint32_t data_checksum; + uint32_t tag_checksum; + unsigned disk_format; + unsigned format_byte; + unsigned private_word; +}; + +#endif + diff --git a/UniversalDiskImage.cpp b/UniversalDiskImage.cpp new file mode 100644 index 0000000..bc43f16 --- /dev/null +++ b/UniversalDiskImage.cpp @@ -0,0 +1,50 @@ +/* + * UniversalDiskImage.cpp + * profuse + * + * Created by Kelvin Sherlock on 1/6/09. + * + */ + +#include "UniversalDiskImage.h" + +#include "common.h" +#include + +bool UniversalDiskImage::Load(const uint8_t *buffer) +{ + if (strncmp((const char *)buffer, "2IMG", 4) != 0) return false; + + // all numbers little-endian. + + magic_word = load32(&buffer[0]); + + creator = load32(&buffer[0x04]); + + header_size = load16(&buffer[0x08]); + + version = load16(&buffer[0x0a]); + + image_format = load32(&buffer[0x0c]); + + flags = load32(&buffer[0x10]); + + data_blocks = load32(&buffer[0x14]); + + data_offset = load32(&buffer[0x18]); + data_size = load32(&buffer[0x1c]); + + + comment_offset = load32(&buffer[0x20]); + comment_size = load32(&buffer[0x24]); + + + + creator_data_offset = load32(&buffer[0x28]); + creator_data_size = load32(&buffer[0x2c]); + + // 16 bytes reserved. + + + return true; +} \ No newline at end of file diff --git a/UniversalDiskImage.h b/UniversalDiskImage.h new file mode 100644 index 0000000..2dc583d --- /dev/null +++ b/UniversalDiskImage.h @@ -0,0 +1,39 @@ +/* + * UniversalDiskImage.h + * profuse + * + * Created by Kelvin Sherlock on 1/6/09. + * + */ + +#ifndef __UNIVERSAL_DISK_IMAGE_H__ +#define __UNIVERSAL_DISK_IMAGE_H__ + +#include + + +#define UDI_FORMAT_DOS_ORDER 0 +#define UDI_FORMAT_PRODOS_ORDER 1 +#define UDI_FORMAT_NIBBLIZED 2 + +struct UniversalDiskImage +{ + bool Load(const uint8_t * buffer); + + uint32_t magic_word; + uint32_t creator; + unsigned header_size; + unsigned version; + unsigned image_format; + uint32_t flags; + unsigned data_blocks; + unsigned data_offset; + unsigned data_size; + unsigned comment_offset; + unsigned comment_size; + unsigned creator_data_offset; + unsigned creator_data_size; +}; + + +#endif diff --git a/common.h b/common.h index 5f0ecb3..39774f2 100644 --- a/common.h +++ b/common.h @@ -13,6 +13,8 @@ #define BLOCK_SIZE 512 +// little endian. + inline unsigned load16(const uint8_t *cp) { return (cp[1] << 8 ) | cp[0]; @@ -29,6 +31,18 @@ inline unsigned load32(const uint8_t *cp) } +// big endian format. +inline unsigned load16_be(const uint8_t *cp) +{ + return (cp[0] << 8) | (cp[1]); +} + +inline unsigned load32_be(const uint8_t *cp) +{ + return (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | (cp[3]); +} + + #endif diff --git a/profuse.xcodeproj/kelvin.mode1v3 b/profuse.xcodeproj/kelvin.mode1v3 index 4b6e066..0331acf 100644 --- a/profuse.xcodeproj/kelvin.mode1v3 +++ b/profuse.xcodeproj/kelvin.mode1v3 @@ -282,8 +282,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 11 - 10 + 6 + 1 0 @@ -309,7 +309,7 @@ 224 RubberWindowFrame - 292 331 1212 568 0 0 1920 1178 + 405 460 1212 568 0 0 1920 1178 Module PBXSmartGroupTreeModule @@ -325,7 +325,7 @@ PBXProjectModuleGUID 1CE0B20306471E060097A5F4 PBXProjectModuleLabel - fuse_common.h + common.h PBXSplitModuleInNavigatorKey Split0 @@ -333,21 +333,22 @@ PBXProjectModuleGUID 1CE0B20406471E060097A5F4 PBXProjectModuleLabel - fuse_common.h + common.h _historyCapacity 0 bookmark - B6B17F490F1027CE0060F7AA + B642F15A0F133632001F7696 history B6614B050EFF5F280073C4E7 - B679E4A20F02E77700FB3F0C B679E4B60F02EFA200FB3F0C - B6643BF00F0708B400630102 - B634B4FA0F09BFB100D9D93E B6DBB4F10F0C6CD800F385F2 B6B767C80F0FFA3900D819C9 - B6B767F00F0FFEE300D819C9 + B6B17F940F1136550060F7AA + B642F1530F133632001F7696 + B642F1540F133632001F7696 + B642F1550F133632001F7696 + B642F1560F133632001F7696 prevStack @@ -358,6 +359,11 @@ B60E929C0EFDA500000E4348 B679E4BB0F02EFA200FB3F0C B6B767CB0F0FFA3900D819C9 + B6B17F950F1136550060F7AA + B6B17FA80F1140160060F7AA + B642F1570F133632001F7696 + B642F1580F133632001F7696 + B642F1590F133632001F7696 SplitCount @@ -371,7 +377,7 @@ Frame {{0, 0}, {944, 349}} RubberWindowFrame - 292 331 1212 568 0 0 1920 1178 + 405 460 1212 568 0 0 1920 1178 Module PBXNavigatorGroup @@ -391,7 +397,7 @@ Frame {{0, 354}, {944, 173}} RubberWindowFrame - 292 331 1212 568 0 0 1920 1178 + 405 460 1212 568 0 0 1920 1178 Module XCDetailModule @@ -415,9 +421,9 @@ TableOfContents - B6B17F360F1024010060F7AA + B642F15B0F133632001F7696 1CE0B1FE06471DED0097A5F4 - B6B17F370F1024010060F7AA + B642F15C0F133632001F7696 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -551,13 +557,12 @@ 5 WindowOrderList - 1C78EAAD065D492600B07095 - 1CD10A99069EF8BA00B06720 B60E918C0EFD7E1E000E4348 + 1CD10A99069EF8BA00B06720 /Users/kelvin/Projects/profuse/profuse.xcodeproj WindowString - 292 331 1212 568 0 0 1920 1178 + 405 460 1212 568 0 0 1920 1178 WindowToolsV3 @@ -573,32 +578,34 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - + Disk.cpp StatusBarVisibility GeometryConfiguration Frame - {{0, 0}, {857, 240}} + {{0, 0}, {857, 500}} RubberWindowFrame 352 195 857 922 0 0 1920 1178 Module PBXNavigatorGroup Proportion - 240pt + 500pt ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey - {{0, 187}, {857, 449}} + {{0, 5}, {857, 371}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel @@ -611,14 +618,14 @@ GeometryConfiguration Frame - {{0, 245}, {857, 636}} + {{0, 505}, {857, 376}} RubberWindowFrame 352 195 857 922 0 0 1920 1178 Module PBXBuildResultsModule Proportion - 636pt + 376pt Proportion @@ -636,7 +643,7 @@ TableOfContents B60E918C0EFD7E1E000E4348 - B6B17F380F1024010060F7AA + B642F1460F1334BC001F7696 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -756,13 +763,13 @@ TableOfContents 1CD10A99069EF8BA00B06720 - B6B17F390F1024010060F7AA + B642F1470F1334BC001F7696 1C162984064C10D400B95A72 - B6B17F3A0F1024010060F7AA - B6B17F3B0F1024010060F7AA - B6B17F3C0F1024010060F7AA - B6B17F3D0F1024010060F7AA - B6B17F3E0F1024010060F7AA + B642F1480F1334BC001F7696 + B642F1490F1334BC001F7696 + B642F14A0F1334BC001F7696 + B642F14B0F1334BC001F7696 + B642F14C0F1334BC001F7696 ToolbarConfiguration xcode.toolbar.config.debugV3 @@ -1065,7 +1072,7 @@ TableOfContents B60E929F0EFDA500000E4348 - B6B767EC0F0FFE9500D819C9 + B6B17F530F1029FF0060F7AA 1C78EAB2065D492600B07095 1CD052920623707200166675 diff --git a/profuse.xcodeproj/kelvin.pbxuser b/profuse.xcodeproj/kelvin.pbxuser index 776089c..de949ef 100644 --- a/profuse.xcodeproj/kelvin.pbxuser +++ b/profuse.xcodeproj/kelvin.pbxuser @@ -87,8 +87,8 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 252715947; - PBXWorkspaceStateSaveDate = 252715947; + PBXPerProjectTemplateStateSaveDate = 252915151; + PBXWorkspaceStateSaveDate = 252915151; }; perUserProjectItems = { B60E917F0EFD7E1E000E4348 = B60E917F0EFD7E1E000E4348 /* PBXTextBookmark */; @@ -96,18 +96,36 @@ B60E91810EFD7E1E000E4348 = B60E91810EFD7E1E000E4348 /* PBXTextBookmark */; B60E922B0EFD94CA000E4348 = B60E922B0EFD94CA000E4348 /* PBXTextBookmark */; B60E929C0EFDA500000E4348 = B60E929C0EFDA500000E4348 /* PBXTextBookmark */; - B634B4FA0F09BFB100D9D93E = B634B4FA0F09BFB100D9D93E /* PBXTextBookmark */; + B642F1420F1334BC001F7696 /* PBXTextBookmark */ = B642F1420F1334BC001F7696 /* PBXTextBookmark */; + B642F1430F1334BC001F7696 /* PBXTextBookmark */ = B642F1430F1334BC001F7696 /* PBXTextBookmark */; + B642F1440F1334BC001F7696 /* PBXTextBookmark */ = B642F1440F1334BC001F7696 /* PBXTextBookmark */; + B642F1450F1334BC001F7696 /* PBXTextBookmark */ = B642F1450F1334BC001F7696 /* PBXTextBookmark */; + B642F14F0F133629001F7696 /* PBXTextBookmark */ = B642F14F0F133629001F7696 /* PBXTextBookmark */; + B642F1500F133629001F7696 /* PBXTextBookmark */ = B642F1500F133629001F7696 /* PBXTextBookmark */; + B642F1510F133629001F7696 /* PBXTextBookmark */ = B642F1510F133629001F7696 /* PBXTextBookmark */; + B642F1520F133629001F7696 /* PBXTextBookmark */ = B642F1520F133629001F7696 /* PBXTextBookmark */; + B642F1530F133632001F7696 /* PBXTextBookmark */ = B642F1530F133632001F7696 /* PBXTextBookmark */; + B642F1540F133632001F7696 /* PBXTextBookmark */ = B642F1540F133632001F7696 /* PBXTextBookmark */; + B642F1550F133632001F7696 /* PBXTextBookmark */ = B642F1550F133632001F7696 /* PBXTextBookmark */; + B642F1560F133632001F7696 /* PBXTextBookmark */ = B642F1560F133632001F7696 /* PBXTextBookmark */; + B642F1570F133632001F7696 /* PBXTextBookmark */ = B642F1570F133632001F7696 /* PBXTextBookmark */; + B642F1580F133632001F7696 /* PBXTextBookmark */ = B642F1580F133632001F7696 /* PBXTextBookmark */; + B642F1590F133632001F7696 /* PBXTextBookmark */ = B642F1590F133632001F7696 /* PBXTextBookmark */; + B642F15A0F133632001F7696 /* PBXTextBookmark */ = B642F15A0F133632001F7696 /* PBXTextBookmark */; B6614B050EFF5F280073C4E7 = B6614B050EFF5F280073C4E7 /* PBXTextBookmark */; B6643BF00F0708B400630102 = B6643BF00F0708B400630102 /* PBXTextBookmark */; B679E4A20F02E77700FB3F0C = B679E4A20F02E77700FB3F0C /* PBXTextBookmark */; B679E4B60F02EFA200FB3F0C = B679E4B60F02EFA200FB3F0C /* PBXTextBookmark */; B679E4BB0F02EFA200FB3F0C = B679E4BB0F02EFA200FB3F0C /* PBXTextBookmark */; - B6B17F350F1024010060F7AA /* PBXTextBookmark */ = B6B17F350F1024010060F7AA /* PBXTextBookmark */; - B6B17F490F1027CE0060F7AA /* PBXTextBookmark */ = B6B17F490F1027CE0060F7AA /* PBXTextBookmark */; + B6B17F940F1136550060F7AA = B6B17F940F1136550060F7AA /* PBXTextBookmark */; + B6B17F950F1136550060F7AA = B6B17F950F1136550060F7AA /* PBXTextBookmark */; + B6B17FA50F1140160060F7AA = B6B17FA50F1140160060F7AA /* PBXTextBookmark */; + B6B17FA60F1140160060F7AA = B6B17FA60F1140160060F7AA /* PBXTextBookmark */; + B6B17FA70F1140160060F7AA = B6B17FA70F1140160060F7AA /* PBXTextBookmark */; + B6B17FA80F1140160060F7AA = B6B17FA80F1140160060F7AA /* PBXTextBookmark */; + B6B17FB90F1140DC0060F7AA = B6B17FB90F1140DC0060F7AA /* PBXTextBookmark */; B6B767C80F0FFA3900D819C9 = B6B767C80F0FFA3900D819C9 /* PBXTextBookmark */; - B6B767C90F0FFA3900D819C9 = B6B767C90F0FFA3900D819C9 /* PBXTextBookmark */; B6B767CB0F0FFA3900D819C9 = B6B767CB0F0FFA3900D819C9 /* PBXTextBookmark */; - B6B767F00F0FFEE300D819C9 = B6B767F00F0FFEE300D819C9 /* PBXTextBookmark */; B6DBB4F10F0C6CD800F385F2 = B6DBB4F10F0C6CD800F385F2 /* PBXTextBookmark */; }; sourceControlManager = B60E91500EFB3628000E4348 /* Source Control */; @@ -161,17 +179,17 @@ }; B60E914D0EFB3627000E4348 /* File.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {496, 2072}}"; + sepNavIntBoundsRect = "{{0, 0}, {496, 2030}}"; sepNavSelRange = "{25, 0}"; - sepNavVisRange = "{0, 1187}"; + sepNavVisRange = "{1119, 1284}"; sepNavWindowFrame = "{{95, -86}, {555, 1173}}"; }; }; B60E914E0EFB3628000E4348 /* File.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {496, 3892}}"; - sepNavSelRange = "{27, 0}"; - sepNavVisRange = "{0, 1472}"; + sepNavIntBoundsRect = "{{0, 0}, {883, 3822}}"; + sepNavSelRange = "{3668, 0}"; + sepNavVisRange = "{1287, 532}"; sepNavWindowFrame = "{{667, -9}, {555, 1173}}"; }; }; @@ -197,17 +215,17 @@ }; B60E91540EFB51FE000E4348 /* Disk.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {633, 7910}}"; - sepNavSelRange = "{27, 0}"; - sepNavVisRange = "{0, 1149}"; + sepNavIntBoundsRect = "{{0, 0}, {796, 7896}}"; + sepNavSelRange = "{157, 0}"; + sepNavVisRange = "{1318, 1181}"; sepNavWindowFrame = "{{511, 7}, {692, 1171}}"; }; }; B60E91580EFD77E3000E4348 /* common.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {633, 1043}}"; - sepNavSelRange = "{27, 0}"; - sepNavVisRange = "{0, 474}"; + sepNavIntBoundsRect = "{{0, 0}, {883, 686}}"; + sepNavSelRange = "{627, 0}"; + sepNavVisRange = "{0, 313}"; sepNavWindowFrame = "{{15, 2}, {692, 1171}}"; }; }; @@ -295,14 +313,173 @@ vrLen = 345; vrLoc = 1359; }; - B634B4FA0F09BFB100D9D93E /* PBXTextBookmark */ = { + B642F1290F132FA3001F7696 /* UniversalDiskImage.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1353, 796}}"; + sepNavSelRange = "{225, 23}"; + sepNavVisRange = "{0, 707}"; + }; + }; + B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {796, 700}}"; + sepNavSelRange = "{820, 0}"; + sepNavVisRange = "{293, 671}"; + sepNavWindowFrame = "{{447, 64}, {1412, 924}}"; + }; + }; + B642F1420F1334BC001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91580EFD77E3000E4348 /* common.h */; + name = "common.h: 40"; + rLen = 0; + rLoc = 627; + rType = 0; + vrLen = 550; + vrLoc = 171; + }; + B642F1430F1334BC001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'DiskCopy42' was not declared in this scope"; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + rLen = 1; + rLoc = 97; + rType = 1; + }; + B642F1440F1334BC001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91580EFD77E3000E4348 /* common.h */; + name = "common.h: 40"; + rLen = 0; + rLoc = 627; + rType = 0; + vrLen = 550; + vrLoc = 171; + }; + B642F1450F1334BC001F7696 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; - name = "Disk.cpp: 324"; + name = "Disk.cpp: 12"; rLen = 0; - rLoc = 7441; + rLoc = 157; rType = 0; - vrLen = 351; + vrLen = 820; + vrLoc = 3068; + }; + B642F14F0F133629001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + name = "Disk.cpp: 12"; + rLen = 0; + rLoc = 157; + rType = 0; + vrLen = 1181; + vrLoc = 1318; + }; + B642F1500F133629001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'creator_offset' was not declared in this scope"; + fRef = B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */; + rLen = 1; + rLoc = 42; + rType = 1; + }; + B642F1510F133629001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + name = "Disk.cpp: 12"; + rLen = 0; + rLoc = 157; + rType = 0; + vrLen = 1181; + vrLoc = 1318; + }; + B642F1520F133629001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */; + name = "UniversalDiskImage.cpp: 42"; + rLen = 0; + rLoc = 820; + rType = 0; + vrLen = 671; + vrLoc = 293; + }; + B642F1530F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E914E0EFB3628000E4348 /* File.cpp */; + name = "File.cpp: 176"; + rLen = 0; + rLoc = 3668; + rType = 0; + vrLen = 532; + vrLoc = 1287; + }; + B642F1540F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B6B17FA00F1138830060F7AA /* DiskCopy42.h */; + name = "DiskCopy42.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 355; + vrLoc = 0; + }; + B642F1550F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + name = "Disk.cpp: 364"; + rLen = 0; + rLoc = 7418; + rType = 0; + vrLen = 325; + vrLoc = 28; + }; + B642F1560F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: expected ',' or '...' before '*' token"; + fRef = B60E91580EFD77E3000E4348 /* common.h */; + rLen = 1; + rLoc = 39; + rType = 1; + }; + B642F1570F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E914E0EFB3628000E4348 /* File.cpp */; + name = "File.cpp: 176"; + rLen = 0; + rLoc = 3668; + rType = 0; + vrLen = 532; + vrLoc = 1287; + }; + B642F1580F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B6B17FA00F1138830060F7AA /* DiskCopy42.h */; + name = "DiskCopy42.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 355; + vrLoc = 0; + }; + B642F1590F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + name = "Disk.cpp: 364"; + rLen = 0; + rLoc = 7418; + rType = 0; + vrLen = 325; + vrLoc = 28; + }; + B642F15A0F133632001F7696 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91580EFD77E3000E4348 /* common.h */; + name = "common.h: 40"; + rLen = 0; + rLoc = 627; + rType = 0; + vrLen = 313; vrLoc = 0; }; B6614B050EFF5F280073C4E7 /* PBXTextBookmark */ = { @@ -380,9 +557,16 @@ modificationTime = 251949619.113812; state = 2; }; - B6B17F350F1024010060F7AA /* PBXTextBookmark */ = { + B6B17F820F103AA70060F7AA /* fuse_common.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = fuse_common.h; + path = /usr/local/include/fuse/fuse_common.h; + sourceTree = ""; + }; + B6B17F940F1136550060F7AA /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = B6B767F10F0FFEE300D819C9 /* fuse_common.h */; + fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */; name = "fuse_common.h: 36"; rLen = 0; rLoc = 921; @@ -390,9 +574,9 @@ vrLen = 579; vrLoc = 535; }; - B6B17F490F1027CE0060F7AA /* PBXTextBookmark */ = { + B6B17F950F1136550060F7AA /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = B6B767F10F0FFEE300D819C9 /* fuse_common.h */; + fRef = B6B17F820F103AA70060F7AA /* fuse_common.h */; name = "fuse_common.h: 36"; rLen = 0; rLoc = 921; @@ -400,6 +584,72 @@ vrLen = 579; vrLoc = 535; }; + B6B17FA00F1138830060F7AA /* DiskCopy42.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1353, 796}}"; + sepNavSelRange = "{226, 0}"; + sepNavVisRange = "{0, 434}"; + sepNavWindowFrame = "{{310, 58}, {1412, 924}}"; + }; + }; + B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1353, 796}}"; + sepNavSelRange = "{150, 0}"; + sepNavVisRange = "{0, 683}"; + sepNavWindowFrame = "{{299, 31}, {1412, 924}}"; + }; + }; + B6B17FA50F1140160060F7AA /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + name = "Disk.cpp: 326"; + rLen = 0; + rLoc = 7418; + rType = 0; + vrLen = 325; + vrLoc = 28; + }; + B6B17FA60F1140160060F7AA /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B6B17FA00F1138830060F7AA /* DiskCopy42.h */; + name = "DiskCopy42.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 374; + vrLoc = 0; + }; + B6B17FA70F1140160060F7AA /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; + name = "Disk.cpp: 326"; + rLen = 0; + rLoc = 7418; + rType = 0; + vrLen = 325; + vrLoc = 28; + }; + B6B17FA80F1140160060F7AA /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B6B17FA00F1138830060F7AA /* DiskCopy42.h */; + name = "DiskCopy42.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 374; + vrLoc = 0; + }; + B6B17FB90F1140DC0060F7AA /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B60E914E0EFB3628000E4348 /* File.cpp */; + name = "File.cpp: 175"; + rLen = 0; + rLoc = 3668; + rType = 0; + vrLen = 532; + vrLoc = 1288; + }; B6B767C80F0FFA3900D819C9 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = B6DBB4E70F0C6BBD00F385F2 /* profuse.1 */; @@ -410,21 +660,6 @@ vrLen = 722; vrLoc = 2400; }; - B6B767C90F0FFA3900D819C9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - comments = "error: #error Please add -D_FILE_OFFSET_BITS=64 to your compile flags!"; - fRef = B6B767CA0F0FFA3900D819C9 /* fuse_common.h */; - rLen = 1; - rLoc = 31; - rType = 1; - }; - B6B767CA0F0FFA3900D819C9 /* fuse_common.h */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = fuse_common.h; - path = /usr/local/include/fuse/fuse_common.h; - sourceTree = ""; - }; B6B767CB0F0FFA3900D819C9 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = B6DBB4E70F0C6BBD00F385F2 /* profuse.1 */; @@ -435,28 +670,6 @@ vrLen = 722; vrLoc = 2400; }; - B6B767F00F0FFEE300D819C9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = B6B767F10F0FFEE300D819C9 /* fuse_common.h */; - name = "fuse_common.h: 36"; - rLen = 0; - rLoc = 921; - rType = 0; - vrLen = 579; - vrLoc = 535; - }; - B6B767F10F0FFEE300D819C9 /* fuse_common.h */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = fuse_common.h; - path = /usr/local/include/fuse/fuse_common.h; - sourceTree = ""; - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {883, 4214}}"; - sepNavSelRange = "{921, 0}"; - sepNavVisRange = "{535, 579}"; - }; - }; B6D81E5B0EFDE859000219B7 /* xmain.cpp:163 */ = { isa = PBXFileBreakpoint; actions = ( diff --git a/profuse.xcodeproj/project.pbxproj b/profuse.xcodeproj/project.pbxproj index 2dde17c..9d9d0e6 100644 --- a/profuse.xcodeproj/project.pbxproj +++ b/profuse.xcodeproj/project.pbxproj @@ -9,7 +9,9 @@ /* Begin PBXBuildFile section */ B60E914F0EFB3628000E4348 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B60E914E0EFB3628000E4348 /* File.cpp */; }; B60E91550EFB51FE000E4348 /* Disk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B60E91540EFB51FE000E4348 /* Disk.cpp */; }; + B642F12B0F132FA3001F7696 /* UniversalDiskImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */; }; B679E4A80F02E79300FB3F0C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B679E4A70F02E79300FB3F0C /* main.cpp */; }; + B6B17FA20F1138830060F7AA /* DiskCopy42.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -31,7 +33,11 @@ B60E91530EFB51FE000E4348 /* Disk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Disk.h; sourceTree = ""; }; B60E91540EFB51FE000E4348 /* Disk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Disk.cpp; sourceTree = ""; }; B60E91580EFD77E3000E4348 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + B642F1290F132FA3001F7696 /* UniversalDiskImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniversalDiskImage.h; sourceTree = ""; }; + B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniversalDiskImage.cpp; sourceTree = ""; }; B679E4A70F02E79300FB3F0C /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; + B6B17FA00F1138830060F7AA /* DiskCopy42.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiskCopy42.h; sourceTree = ""; }; + B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DiskCopy42.cpp; sourceTree = ""; }; B6DBB4E70F0C6BBD00F385F2 /* profuse.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = profuse.1; sourceTree = ""; }; /* End PBXFileReference section */ @@ -60,12 +66,16 @@ 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( + B642F1290F132FA3001F7696 /* UniversalDiskImage.h */, + B642F12A0F132FA3001F7696 /* UniversalDiskImage.cpp */, B60E91580EFD77E3000E4348 /* common.h */, B60E91530EFB51FE000E4348 /* Disk.h */, B60E91540EFB51FE000E4348 /* Disk.cpp */, B60E914D0EFB3627000E4348 /* File.h */, B60E914E0EFB3628000E4348 /* File.cpp */, B679E4A70F02E79300FB3F0C /* main.cpp */, + B6B17FA00F1138830060F7AA /* DiskCopy42.h */, + B6B17FA10F1138830060F7AA /* DiskCopy42.cpp */, ); name = Source; sourceTree = ""; @@ -139,6 +149,8 @@ B60E914F0EFB3628000E4348 /* File.cpp in Sources */, B60E91550EFB51FE000E4348 /* Disk.cpp in Sources */, B679E4A80F02E79300FB3F0C /* main.cpp in Sources */, + B6B17FA20F1138830060F7AA /* DiskCopy42.cpp in Sources */, + B642F12B0F132FA3001F7696 /* UniversalDiskImage.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -257,7 +269,7 @@ B6B767C10F0FF90400D819C9 /* Debug Universal 10.4 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; GCC_C_LANGUAGE_STANDARD = c99; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = "";