]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/flattened_file_object.go
Add more file extension -> type/creator code mappings
[rbdr/mobius] / hotline / flattened_file_object.go
index 02804f697f44e62d89cf4f039330672af5ef35f7..bd281e070b855726952217ac2e05eebd6221b1e2 100644 (file)
@@ -58,8 +58,8 @@ type FlatFileInformationFork struct {
 func NewFlatFileInformationFork(fileName string) FlatFileInformationFork {
        return FlatFileInformationFork{
                Platform:         []byte("AMAC"),                                         // TODO: Remove hardcode to support "AWIN" Platform (maybe?)
 func NewFlatFileInformationFork(fileName string) FlatFileInformationFork {
        return FlatFileInformationFork{
                Platform:         []byte("AMAC"),                                         // TODO: Remove hardcode to support "AWIN" Platform (maybe?)
-               TypeSignature:    []byte(fileTypeFromFilename(fileName)),                 // TODO: Don't infer types from filename
-               CreatorSignature: []byte(fileCreatorFromFilename(fileName)),              // TODO: Don't infer types from filename
+               TypeSignature:    []byte(fileTypeFromFilename(fileName).TypeCode),        // TODO: Don't infer types from filename
+               CreatorSignature: []byte(fileTypeFromFilename(fileName).CreatorCode),     // TODO: Don't infer types from filename
                Flags:            []byte{0, 0, 0, 0},                                     // TODO: What is this?
                PlatformFlags:    []byte{0, 0, 1, 0},                                     // TODO: What is this?
                RSVD:             make([]byte, 32),                                       // Unimplemented in Hotline Protocol
                Flags:            []byte{0, 0, 0, 0},                                     // TODO: What is this?
                PlatformFlags:    []byte{0, 0, 1, 0},                                     // TODO: What is this?
                RSVD:             make([]byte, 32),                                       // Unimplemented in Hotline Protocol
@@ -67,18 +67,18 @@ func NewFlatFileInformationFork(fileName string) FlatFileInformationFork {
                ModifyDate:       []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}, // TODO: implement
                NameScript:       make([]byte, 2),                                        // TODO: What is this?
                Name:             []byte(fileName),
                ModifyDate:       []byte{0x07, 0x70, 0x00, 0x00, 0xba, 0x74, 0x24, 0x73}, // TODO: implement
                NameScript:       make([]byte, 2),                                        // TODO: What is this?
                Name:             []byte(fileName),
+               CommentSize:      []byte{0, 4},
                Comment:          []byte("TODO"), // TODO: implement (maybe?)
        }
 }
 
                Comment:          []byte("TODO"), // TODO: implement (maybe?)
        }
 }
 
-// Size of the flat file information fork, which is the fixed size of 72 bytes
-// plus the number of bytes in the FileName
-// TODO: plus the size of the Comment!
+// DataSize calculates the size of the flat file information fork, which is
+// 72 bytes for the fixed length fields plus the length of the Name + Comment
 func (ffif FlatFileInformationFork) DataSize() []byte {
        size := make([]byte, 4)
 func (ffif FlatFileInformationFork) DataSize() []byte {
        size := make([]byte, 4)
-       nameLen := len(ffif.Name)
+
        //TODO: Can I do math directly on two byte slices?
        //TODO: Can I do math directly on two byte slices?
-       dataSize := nameLen + 74
+       dataSize := len(ffif.Name) + len(ffif.Comment) + 74
 
        binary.BigEndian.PutUint32(size, uint32(dataSize))
 
 
        binary.BigEndian.PutUint32(size, uint32(dataSize))
 
@@ -184,9 +184,8 @@ func (f flattenedFileObject) BinaryMarshal() []byte {
        out = append(out, f.FlatFileInformationFork.NameScript...)
        out = append(out, f.FlatFileInformationFork.ReadNameSize()...)
        out = append(out, f.FlatFileInformationFork.Name...)
        out = append(out, f.FlatFileInformationFork.NameScript...)
        out = append(out, f.FlatFileInformationFork.ReadNameSize()...)
        out = append(out, f.FlatFileInformationFork.Name...)
-
-       // TODO: Implement commentlen and comment field
-       out = append(out, []byte{0, 0}...)
+       out = append(out, f.FlatFileInformationFork.CommentSize...)
+       out = append(out, f.FlatFileInformationFork.Comment...)
 
        out = append(out, f.FlatFileDataForkHeader.ForkType...)
        out = append(out, f.FlatFileDataForkHeader.CompressionType...)
 
        out = append(out, f.FlatFileDataForkHeader.ForkType...)
        out = append(out, f.FlatFileDataForkHeader.CompressionType...)