8
8
using LibEveryFileExplorer . Files . SimpleFileSystem ;
9
9
using _3DS . UI ;
10
10
using LibEveryFileExplorer . IO ;
11
+ using LibEveryFileExplorer . IO . Serialization ;
11
12
12
13
namespace _3DS
13
14
{
14
15
public class SARC : FileFormat < SARC . SARCIdentifier > , IViewable , IWriteable
15
16
{
16
17
public SARC ( byte [ ] Data )
17
18
{
18
- EndianBinaryReader er = new EndianBinaryReader ( new MemoryStream ( Data ) , Endianness . LittleEndian ) ;
19
+ EndianBinaryReaderEx er = new EndianBinaryReaderEx ( new MemoryStream ( Data ) , Endianness . LittleEndian ) ;
19
20
try
20
21
{
21
22
Header = new SARCHeader ( er ) ;
@@ -68,15 +69,9 @@ public SARCHeader()
68
69
FileDataOffset = 0 ;
69
70
Unknown = 0x0100 ;
70
71
}
71
- public SARCHeader ( EndianBinaryReader er )
72
+ public SARCHeader ( EndianBinaryReaderEx er )
72
73
{
73
- Signature = er . ReadString ( Encoding . ASCII , 4 ) ;
74
- if ( Signature != "SARC" ) throw new SignatureNotCorrectException ( Signature , "SARC" , er . BaseStream . Position - 4 ) ;
75
- HeaderSize = er . ReadUInt16 ( ) ;
76
- Endianness = er . ReadUInt16 ( ) ;
77
- FileSize = er . ReadUInt32 ( ) ;
78
- FileDataOffset = er . ReadUInt32 ( ) ;
79
- Unknown = er . ReadUInt32 ( ) ;
74
+ er . ReadObject ( this ) ;
80
75
}
81
76
public void Write ( EndianBinaryWriter er )
82
77
{
@@ -87,9 +82,11 @@ public void Write(EndianBinaryWriter er)
87
82
er . Write ( FileDataOffset ) ;
88
83
er . Write ( Unknown ) ;
89
84
}
90
-
85
+ [ BinaryStringSignature ( "SARC" ) ]
86
+ [ BinaryFixedSize ( 4 ) ]
91
87
public String Signature ;
92
88
public UInt16 HeaderSize ;
89
+ [ BinaryBOM ( 0xFEFF ) ]
93
90
public UInt16 Endianness ;
94
91
public UInt32 FileSize ;
95
92
public UInt32 FileDataOffset ;
@@ -107,7 +104,7 @@ public SFAT()
107
104
HashMultiplier = 0x65 ;
108
105
Entries = new List < SFATEntry > ( ) ;
109
106
}
110
- public SFAT ( EndianBinaryReader er )
107
+ public SFAT ( EndianBinaryReaderEx er )
111
108
{
112
109
Signature = er . ReadString ( Encoding . ASCII , 4 ) ;
113
110
if ( Signature != "SFAT" ) throw new SignatureNotCorrectException ( Signature , "SFAT" , er . BaseStream . Position - 4 ) ;
@@ -138,12 +135,9 @@ public void Write(EndianBinaryWriter er)
138
135
public class SFATEntry
139
136
{
140
137
public SFATEntry ( ) { }
141
- public SFATEntry ( EndianBinaryReader er )
138
+ public SFATEntry ( EndianBinaryReaderEx er )
142
139
{
143
- FileNameHash = er . ReadUInt32 ( ) ;
144
- FileNameOffset = er . ReadUInt32 ( ) ;
145
- FileDataStart = er . ReadUInt32 ( ) ;
146
- FileDataEnd = er . ReadUInt32 ( ) ;
140
+ er . ReadObject ( this ) ;
147
141
}
148
142
public void Write ( EndianBinaryWriter er )
149
143
{
@@ -169,7 +163,7 @@ public SFNT()
169
163
HeaderSize = 8 ;
170
164
Unknown1 = 0 ;
171
165
}
172
- public SFNT ( EndianBinaryReader er )
166
+ public SFNT ( EndianBinaryReaderEx er )
173
167
{
174
168
Signature = er . ReadString ( Encoding . ASCII , 4 ) ;
175
169
if ( Signature != "SFNT" ) throw new SignatureNotCorrectException ( Signature , "SFNT" , er . BaseStream . Position - 4 ) ;
0 commit comments