diff options
author | Mathias Panzenböck <grosser.meister.morti@gmx.net> | 2011-06-24 01:11:10 +0200 |
---|---|---|
committer | Mathias Panzenböck <grosser.meister.morti@gmx.net> | 2011-06-24 01:11:10 +0200 |
commit | 9c27c45eb83453d8529bc139ed70647d6fffa624 (patch) | |
tree | c87864f04a63b495194e55c0a444da6cced536be /taglib/it/itfile.cpp | |
parent | e71806b6dff3ce8ad6b6e09417793042bd170cab (diff) |
IT: strings require term. NUL. mod files: tableLength -> lengthInPatterns
Also added enums for S3M/IT/XM flags.
Diffstat (limited to 'taglib/it/itfile.cpp')
-rw-r--r-- | taglib/it/itfile.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/taglib/it/itfile.cpp b/taglib/it/itfile.cpp index 09ff077d..ed175c85 100644 --- a/taglib/it/itfile.cpp +++ b/taglib/it/itfile.cpp @@ -78,7 +78,8 @@ bool IT::File::save() return false; } seek(4); - writeString(d->tag.title(), 26); + writeString(d->tag.title(), 25); + writeByte(0); seek(2, Current); @@ -103,9 +104,10 @@ bool IT::File::save() seek(instrumentOffset + 32); if(i < lines.size()) - writeString(lines[i], 26); + writeString(lines[i], 25); else - writeString(String::null, 26); + writeString(String::null, 25); + writeByte(0); } for(ushort i = 0; i < sampleCount; ++ i) @@ -118,9 +120,10 @@ bool IT::File::save() seek(sampleOffset + 20); if((i + instrumentCount) < lines.size()) - writeString(lines[i + instrumentCount], 26); + writeString(lines[i + instrumentCount], 25); else - writeString(String::null, 26); + writeString(String::null, 25); + writeByte(0); } // write rest as message: @@ -128,6 +131,9 @@ bool IT::File::save() for(uint i = instrumentCount + sampleCount; i < lines.size(); ++ i) messageLines.append(lines[i]); ByteVector message = messageLines.toString("\r").data(String::Latin1); + if(message.size() > 8000) + message.resize(8000); + ushort special = 0; ushort messageLength = 0; ulong messageOffset = 0; @@ -249,7 +255,7 @@ void IT::File::read(bool) if(order == 255) break; if(order != 254) ++ realLength; } - d->properties.setTableLength(realLength); + d->properties.setLengthInPatterns(realLength); StringList comment; // Note: I found files that have nil characters somewhere @@ -290,6 +296,7 @@ void IT::File::read(bool) READ_BYTE_AS(sampleFlags); READ_BYTE_AS(sampleVolume); READ_STRING_AS(sampleName, 26); + /* READ_BYTE_AS(sampleCvt); READ_BYTE_AS(samplePanning); READ_U32L_AS(sampleLength); @@ -303,15 +310,13 @@ void IT::File::read(bool) READ_BYTE_AS(vibratoDepth); READ_BYTE_AS(vibratoRate); READ_BYTE_AS(vibratoType); + */ comment.append(sampleName); } - if(comment.size() > 0 && message.size() > 0) - d->tag.setComment(comment.toString("\n") + "\n" + message); - else if(comment.size() > 0) - d->tag.setComment(comment.toString("\n")); - else - d->tag.setComment(message); + if(message.size() > 0) + comment.append(message); + d->tag.setComment(comment.toString("\n")); d->tag.setTrackerName("Impulse Tracker"); } |