Index: trunk/Chameleon.xcodeproj/project.pbxproj =================================================================== --- trunk/Chameleon.xcodeproj/project.pbxproj (revision 2399) +++ trunk/Chameleon.xcodeproj/project.pbxproj (revision 2400) @@ -113,6 +113,12 @@ 360A04CE1861F48F0091F464 /* xml.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xml.h; sourceTree = ""; }; 361BC70214BD977700236488 /* Changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changes.txt; sourceTree = ""; }; 361BC70B14BD97C800236488 /* pkg.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; name = pkg.zip; path = Icons/pkg.zip; sourceTree = ""; }; + 36809A7019DA43B5007ACE3F /* lzvn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = lzvn.c; sourceTree = ""; }; + 36809A7219DA4563007ACE3F /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE; path = klibc/LICENSE; sourceTree = ""; }; + 36809A7319DA4563007ACE3F /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = klibc/Makefile; sourceTree = ""; }; + 36809A7419DA4563007ACE3F /* strlcpy.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = strlcpy.c; path = klibc/strlcpy.c; sourceTree = ""; }; + 36809A7619DA461E007ACE3F /* segsize.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = segsize.c; sourceTree = ""; }; + 36809A7719DA4789007ACE3F /* pt.po */ = {isa = PBXFileReference; lastKnownFileType = text; path = pt.po; sourceTree = ""; }; 369689D014BD0AF10013D77F /* BLOCKERS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BLOCKERS; sourceTree = ""; }; 369689D114BD0AF10013D77F /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = ""; }; 369689D214BD0B470013D77F /* version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = version; sourceTree = ""; }; @@ -1089,143 +1095,11 @@ A396E2D1150247630025A245 /* Description.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Description.html; sourceTree = ""; }; A396E2D2150247630025A245 /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; }; A396E35915028C9C0025A245 /* Welcome.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Welcome.html; sourceTree = ""; }; - A396E4F51502D0580025A245 /* ar */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ar; path = ar.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E4F71502D0580025A245 /* ar */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ar; path = ar.lproj/Description.html; sourceTree = ""; }; - A396E4F91502D0580025A245 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ar; path = ar.lproj/License.rtf; sourceTree = ""; }; - A396E4FB1502D0580025A245 /* ar */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - A396E4FD1502D0580025A245 /* ar */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ar; path = ar.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E4FE1502D0580025A245 /* background.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = background.tiff; sourceTree = ""; }; - A396E4FF1502D0580025A245 /* bg */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bg; path = bg.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5001502D0580025A245 /* bg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = bg; path = bg.lproj/Description.html; sourceTree = ""; }; - A396E5011502D0580025A245 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = bg; path = bg.lproj/License.rtf; sourceTree = ""; }; - A396E5021502D0580025A245 /* bg */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; - A396E5031502D0580025A245 /* bg */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bg; path = bg.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5041502D0580025A245 /* bs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bs; path = bs.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5051502D0580025A245 /* bs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = bs; path = bs.lproj/Description.html; sourceTree = ""; }; - A396E5061502D0580025A245 /* bs */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = bs; path = bs.lproj/License.rtf; sourceTree = ""; }; - A396E5071502D0580025A245 /* bs */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = bs; path = bs.lproj/Localizable.strings; sourceTree = ""; }; - A396E5081502D0580025A245 /* bs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = bs; path = bs.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5091502D0580025A245 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ca; path = ca.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E50A1502D0580025A245 /* ca */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ca; path = ca.lproj/Description.html; sourceTree = ""; }; - A396E50B1502D0580025A245 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ca; path = ca.lproj/License.rtf; sourceTree = ""; }; - A396E50C1502D0580025A245 /* ca */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; - A396E50D1502D0580025A245 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ca; path = ca.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E50E1502D0580025A245 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = de; path = de.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E50F1502D0580025A245 /* de */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = de; path = de.lproj/Description.html; sourceTree = ""; }; - A396E5101502D0580025A245 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = de; path = de.lproj/License.rtf; sourceTree = ""; }; - A396E5111502D0580025A245 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - A396E5121502D0580025A245 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = de; path = de.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5131502D0580025A245 /* el */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = el; path = el.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5141502D0580025A245 /* el */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = el; path = el.lproj/Description.html; sourceTree = ""; }; - A396E5151502D0580025A245 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = el; path = el.lproj/License.rtf; sourceTree = ""; }; - A396E5161502D0580025A245 /* el */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; - A396E5171502D0580025A245 /* el */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = el; path = el.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5181502D0580025A245 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = en; path = en.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5191502D0580025A245 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = en; path = en.lproj/Description.html; sourceTree = ""; }; - A396E51A1502D0580025A245 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/License.rtf; sourceTree = ""; }; - A396E51B1502D0580025A245 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - A396E51C1502D0580025A245 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = en; path = en.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E51D1502D0580025A245 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = es; path = es.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E51E1502D0580025A245 /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = es; path = es.lproj/Description.html; sourceTree = ""; }; - A396E51F1502D0580025A245 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = es.lproj/License.rtf; sourceTree = ""; }; - A396E5201502D0580025A245 /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - A396E5211502D0580025A245 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = es; path = es.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5221502D0580025A245 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fr; path = fr.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5231502D0580025A245 /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = fr; path = fr.lproj/Description.html; sourceTree = ""; }; - A396E5241502D0580025A245 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = fr; path = fr.lproj/License.rtf; sourceTree = ""; }; - A396E5251502D0580025A245 /* fr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - A396E5261502D0580025A245 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fr; path = fr.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5271502D0580025A245 /* he */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = he; path = he.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5281502D0580025A245 /* he */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = he; path = he.lproj/Description.html; sourceTree = ""; }; - A396E5291502D0580025A245 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = he; path = he.lproj/License.rtf; sourceTree = ""; }; - A396E52A1502D0580025A245 /* he */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - A396E52B1502D0580025A245 /* he */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = he; path = he.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E52C1502D0580025A245 /* hr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = hr; path = hr.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E52D1502D0580025A245 /* hr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = hr; path = hr.lproj/Description.html; sourceTree = ""; }; - A396E52E1502D0580025A245 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = hr; path = hr.lproj/License.rtf; sourceTree = ""; }; - A396E52F1502D0580025A245 /* hr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Localizable.strings; sourceTree = ""; }; - A396E5301502D0580025A245 /* hr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = hr; path = hr.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5311502D0580025A245 /* id */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = id; path = id.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5321502D0580025A245 /* id */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = id; path = id.lproj/Description.html; sourceTree = ""; }; - A396E5331502D0580025A245 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = id; path = id.lproj/License.rtf; sourceTree = ""; }; - A396E5341502D0580025A245 /* id */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; - A396E5351502D0580025A245 /* id */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = id; path = id.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5361502D0580025A245 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = it; path = it.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5371502D0580025A245 /* it */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = it; path = it.lproj/Description.html; sourceTree = ""; }; - A396E5381502D0580025A245 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = it; path = it.lproj/License.rtf; sourceTree = ""; }; - A396E5391502D0580025A245 /* it */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - A396E53A1502D0580025A245 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = it; path = it.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E53B1502D0580025A245 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ja; path = ja.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E53C1502D0580025A245 /* ja */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ja; path = ja.lproj/Description.html; sourceTree = ""; }; - A396E53D1502D0580025A245 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ja; path = ja.lproj/License.rtf; sourceTree = ""; }; - A396E53E1502D0580025A245 /* ja */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - A396E53F1502D0580025A245 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ja; path = ja.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5401502D0580025A245 /* ko */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ko; path = ko.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5411502D0580025A245 /* ko */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ko; path = ko.lproj/Description.html; sourceTree = ""; }; - A396E5421502D0580025A245 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ko; path = ko.lproj/License.rtf; sourceTree = ""; }; - A396E5431502D0580025A245 /* ko */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - A396E5441502D0580025A245 /* ko */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ko; path = ko.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5451502D0580025A245 /* mk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = mk; path = mk.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5461502D0580025A245 /* mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = mk; path = mk.lproj/Description.html; sourceTree = ""; }; - A396E5471502D0580025A245 /* mk */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = mk; path = mk.lproj/License.rtf; sourceTree = ""; }; - A396E5481502D0580025A245 /* mk */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = mk; path = mk.lproj/Localizable.strings; sourceTree = ""; }; - A396E5491502D0580025A245 /* mk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = mk; path = mk.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E54A1502D0580025A245 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = nl; path = nl.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E54B1502D0580025A245 /* nl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = nl; path = nl.lproj/Description.html; sourceTree = ""; }; - A396E54C1502D0580025A245 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = nl; path = nl.lproj/License.rtf; sourceTree = ""; }; - A396E54D1502D0580025A245 /* nl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - A396E54E1502D0580025A245 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = nl; path = nl.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E54F1502D0580025A245 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = pl; path = pl.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5501502D0580025A245 /* pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = pl; path = pl.lproj/Description.html; sourceTree = ""; }; - A396E5511502D0580025A245 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = pl; path = pl.lproj/License.rtf; sourceTree = ""; }; - A396E5521502D0580025A245 /* pl */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - A396E5531502D0580025A245 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = pl; path = pl.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5541502D0580025A245 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-BR"; path = "pt-BR.lproj/Conclusion.rtfd"; sourceTree = ""; }; - A396E5551502D0580025A245 /* pt-BR */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "pt-BR"; path = "pt-BR.lproj/Description.html"; sourceTree = ""; }; - A396E5561502D0580025A245 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "pt-BR"; path = "pt-BR.lproj/License.rtf"; sourceTree = ""; }; - A396E5571502D0580025A245 /* pt-BR */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - A396E5581502D0580025A245 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-BR"; path = "pt-BR.lproj/Welcome.rtfd"; sourceTree = ""; }; - A396E5591502D0580025A245 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-PT"; path = "pt-PT.lproj/Conclusion.rtfd"; sourceTree = ""; }; - A396E55A1502D0580025A245 /* pt-PT */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "pt-PT"; path = "pt-PT.lproj/Description.html"; sourceTree = ""; }; - A396E55B1502D0580025A245 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "pt-PT"; path = "pt-PT.lproj/License.rtf"; sourceTree = ""; }; - A396E55C1502D0580025A245 /* pt-PT */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; - A396E55D1502D0580025A245 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-PT"; path = "pt-PT.lproj/Welcome.rtfd"; sourceTree = ""; }; - A396E55E1502D0580025A245 /* ro */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ro; path = ro.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E55F1502D0580025A245 /* ro */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ro; path = ro.lproj/Description.html; sourceTree = ""; }; - A396E5601502D0580025A245 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ro; path = ro.lproj/License.rtf; sourceTree = ""; }; - A396E5611502D0580025A245 /* ro */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - A396E5621502D0580025A245 /* ro */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ro; path = ro.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5631502D0580025A245 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ru; path = ru.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5641502D0580025A245 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = ru; path = ru.lproj/Description.html; sourceTree = ""; }; - A396E5651502D0580025A245 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/License.rtf; sourceTree = ""; }; - A396E5661502D0580025A245 /* ru */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - A396E5671502D0580025A245 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = ru; path = ru.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5681502D0580025A245 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = sr; path = sr.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5691502D0580025A245 /* sr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = sr; path = sr.lproj/Description.html; sourceTree = ""; }; - A396E56A1502D0580025A245 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sr; path = sr.lproj/License.rtf; sourceTree = ""; }; - A396E56B1502D0580025A245 /* sr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Localizable.strings; sourceTree = ""; }; - A396E56C1502D0580025A245 /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = sr; path = sr.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E56D1502D0580025A245 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_CN; path = zh_CN.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E56E1502D0580025A245 /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = zh_CN; path = zh_CN.lproj/Description.html; sourceTree = ""; }; - A396E56F1502D0580025A245 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = zh_CN; path = zh_CN.lproj/License.rtf; sourceTree = ""; }; - A396E5701502D0580025A245 /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_CN; path = zh_CN.lproj/Localizable.strings; sourceTree = ""; }; - A396E5711502D0580025A245 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_CN; path = zh_CN.lproj/Welcome.rtfd; sourceTree = ""; }; - A396E5721502D0580025A245 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_TW; path = zh_TW.lproj/Conclusion.rtfd; sourceTree = ""; }; - A396E5731502D0580025A245 /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = zh_TW; path = zh_TW.lproj/Description.html; sourceTree = ""; }; - A396E5741502D0580025A245 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = zh_TW; path = zh_TW.lproj/License.rtf; sourceTree = ""; }; - A396E5751502D0580025A245 /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/Localizable.strings; sourceTree = ""; }; - A396E5761502D0580025A245 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = zh_TW; path = zh_TW.lproj/Welcome.rtfd; sourceTree = ""; }; A396E5821502D3320025A245 /* Conclusion.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Conclusion.html; sourceTree = ""; }; A3F1F267141B9B3B00DDA709 /* Readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.txt; sourceTree = ""; }; AB1DE71815B6E2D00088E06B /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = ""; }; AB1DE71A15B6E2D00088E06B /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; AB1DE71B15B6E2D00088E06B /* Sata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Sata.c; sourceTree = ""; }; - AB30C92E15DE60ED0047BE7B /* ld_classic */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = ld_classic; sourceTree = ""; }; - AB30C92F15DE60ED0047BE7B /* ld_classic.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = ld_classic.1; sourceTree = ""; }; - AB30C93215DE66D90047BE7B /* Cconfig */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cconfig; sourceTree = ""; }; - AB30C93315DE66D90047BE7B /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - AB30C93415DE66D90047BE7B /* md.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = md.1; sourceTree = ""; }; - AB30C93515DE66D90047BE7B /* md.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = md.c; sourceTree = ""; }; AB47D38A15B702F00083D898 /* org.chameleon.Boot.nvidia.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = org.chameleon.Boot.nvidia.plist; sourceTree = ""; }; AB4DDA8D15CEFF2100E77157 /* acpi_codec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acpi_codec.c; sourceTree = ""; }; AB4DDA8E15CEFF2100E77157 /* acpi_tools.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acpi_tools.c; sourceTree = ""; }; @@ -1427,7 +1301,6 @@ B4118CA2153EFF3300C8D926 /* nl.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nl.po; sourceTree = ""; }; B4118CA3153EFF3300C8D926 /* pl.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pl.po; sourceTree = ""; }; B4118CA4153EFF3300C8D926 /* pt-BR.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pt-BR.po"; sourceTree = ""; }; - B4118CA5153EFF3300C8D926 /* pt-PT.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pt-PT.po"; sourceTree = ""; }; B4118CA6153EFF3300C8D926 /* ro.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ro.po; sourceTree = ""; }; B4118CA7153EFF3300C8D926 /* ru.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ru.po; sourceTree = ""; }; B4118CA8153EFF3300C8D926 /* sr.po */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sr.po; sourceTree = ""; }; @@ -1482,7 +1355,6 @@ 08FB7794FE84155DC02AAC07 /* Chameleon */ = { isa = PBXGroup; children = ( - AB30C92D15DE60ED0047BE7B /* bin */, B0056D8211F3868000754B65 /* APPLE_LICENSE */, B0056DBA11F3868000754B65 /* artwork */, 369689D014BD0AF10013D77F /* BLOCKERS */, @@ -1554,6 +1426,23 @@ path = Scripts.templates/Pre; sourceTree = ""; }; + 36809A7119DA4549007ACE3F /* klibc */ = { + isa = PBXGroup; + children = ( + 36809A7219DA4563007ACE3F /* LICENSE */, + 36809A7319DA4563007ACE3F /* Makefile */, + 36809A7419DA4563007ACE3F /* strlcpy.c */, + ); + name = klibc; + sourceTree = ""; + }; + 36809A7519DA45E8007ACE3F /* KextPatcher */ = { + isa = PBXGroup; + children = ( + ); + name = KextPatcher; + sourceTree = ""; + }; 36AE6E5616D6449A00D083A6 /* KernelPatcher */ = { isa = PBXGroup; children = ( @@ -2763,6 +2652,7 @@ A3561CAD1414024C00E9B51E /* HelloWorld */, A3561CB21414024C00E9B51E /* include */, 36AE6E5616D6449A00D083A6 /* KernelPatcher */, + 36809A7519DA45E8007ACE3F /* KextPatcher */, A3561CB41414024C00E9B51E /* Keylayout */, A3561CB71414024D00E9B51E /* klibc */, A3561D011414024D00E9B51E /* Makefile */, @@ -3106,19 +2996,6 @@ path = templates; sourceTree = ""; }; - A396E4F31502D0580025A245 /* Resources.old */ = { - isa = PBXGroup; - children = ( - A396E4F41502D0580025A245 /* Conclusion.rtfd */, - A396E4F61502D0580025A245 /* Description.html */, - A396E4F81502D0580025A245 /* License.rtf */, - A396E4FA1502D0580025A245 /* Localizable.strings */, - A396E4FC1502D0580025A245 /* Welcome.rtfd */, - A396E4FE1502D0580025A245 /* background.tiff */, - ); - path = Resources.old; - sourceTree = ""; - }; A3F1F20D141B9B0D00DDA709 /* Scripts */ = { isa = PBXGroup; children = ( @@ -3146,26 +3023,6 @@ path = include; sourceTree = ""; }; - AB30C92D15DE60ED0047BE7B /* bin */ = { - isa = PBXGroup; - children = ( - AB30C92E15DE60ED0047BE7B /* ld_classic */, - AB30C92F15DE60ED0047BE7B /* ld_classic.1 */, - ); - path = bin; - sourceTree = ""; - }; - AB30C93115DE66D90047BE7B /* md */ = { - isa = PBXGroup; - children = ( - AB30C93215DE66D90047BE7B /* Cconfig */, - AB30C93315DE66D90047BE7B /* Makefile */, - AB30C93415DE66D90047BE7B /* md.1 */, - AB30C93515DE66D90047BE7B /* md.c */, - ); - path = md; - sourceTree = ""; - }; AB4DDA8C15CEFF2100E77157 /* AcpiCodec */ = { isa = PBXGroup; children = ( @@ -3209,10 +3066,10 @@ B4189A0314BFBED900ED5B0B /* config */, B0056D1311F3868000754B65 /* doc */, 6DBAFD1713B0D4590047ED33 /* include */, + 36809A7119DA4549007ACE3F /* klibc */, B0056D1611F3868000754B65 /* libsa */, B0056D2411F3868000754B65 /* libsaio */, B0056D7611F3868000754B65 /* Makefile */, - AB30C93115DE66D90047BE7B /* md */, A3561CAB1414024C00E9B51E /* modules */, B0056D7911F3868000754B65 /* util */, ); @@ -3262,15 +3119,16 @@ B0056CFC11F3868000754B65 /* graphics.c */, B0056CFD11F3868000754B65 /* graphics.h */, B0056CFE11F3868000754B65 /* gui.c */, - 6DBAFD1313B0D21E0047ED33 /* modules_support.s */, - 6DBAFD1413B0D21E0047ED33 /* modules.c */, - 6DBAFD1513B0D21E0047ED33 /* modules.h */, B0056CFF11F3868000754B65 /* gui.h */, B0056D0011F3868000754B65 /* IOHibernatePrivate.h */, B0056D0111F3868000754B65 /* lzss.c */, + 36809A7019DA43B5007ACE3F /* lzvn.c */, B0056D0211F3868000754B65 /* Makefile */, B0056D0311F3868000754B65 /* mboot.c */, B0056D0411F3868000754B65 /* mboot.h */, + 6DBAFD1313B0D21E0047ED33 /* modules_support.s */, + 6DBAFD1413B0D21E0047ED33 /* modules.c */, + 6DBAFD1513B0D21E0047ED33 /* modules.h */, B0056D0511F3868000754B65 /* multiboot.h */, B0056D0611F3868000754B65 /* options.c */, B0056D0711F3868000754B65 /* picopng.c */, @@ -3445,6 +3303,7 @@ B0056D7A11F3868000754B65 /* machOconv.c */, B0056D7B11F3868000754B65 /* Makefile */, A3561C891413FD7800E9B51E /* openUp.c */, + 36809A7619DA461E007ACE3F /* segsize.c */, ); path = util; sourceTree = ""; @@ -3461,7 +3320,6 @@ B4118C8E153EFF3300C8D926 /* po */, B4118CAB153EFF3D00C8D926 /* po4a-chameleon.cfg */, A396E2CA150247630025A245 /* Resources */, - A396E4F31502D0580025A245 /* Resources.old */, A3F1F20D141B9B0D00DDA709 /* Scripts */, 364E0DDF14BCFB6600F55E58 /* Scripts.templates */, A35D2187141A75DC00969AC0 /* slimpkg.sh */, @@ -3768,7 +3626,7 @@ B4118CA2153EFF3300C8D926 /* nl.po */, B4118CA3153EFF3300C8D926 /* pl.po */, B4118CA4153EFF3300C8D926 /* pt-BR.po */, - B4118CA5153EFF3300C8D926 /* pt-PT.po */, + 36809A7719DA4789007ACE3F /* pt.po */, B4118CA6153EFF3300C8D926 /* ro.po */, B4118CA7153EFF3300C8D926 /* ru.po */, B4118CA8153EFF3300C8D926 /* sr.po */, @@ -3926,169 +3784,6 @@ }; /* End PBXProject section */ -/* Begin PBXVariantGroup section */ - A396E4F41502D0580025A245 /* Conclusion.rtfd */ = { - isa = PBXVariantGroup; - children = ( - A396E4F51502D0580025A245 /* ar */, - A396E4FF1502D0580025A245 /* bg */, - A396E5041502D0580025A245 /* bs */, - A396E5091502D0580025A245 /* ca */, - A396E50E1502D0580025A245 /* de */, - A396E5131502D0580025A245 /* el */, - A396E5181502D0580025A245 /* en */, - A396E51D1502D0580025A245 /* es */, - A396E5221502D0580025A245 /* fr */, - A396E5271502D0580025A245 /* he */, - A396E52C1502D0580025A245 /* hr */, - A396E5311502D0580025A245 /* id */, - A396E5361502D0580025A245 /* it */, - A396E53B1502D0580025A245 /* ja */, - A396E5401502D0580025A245 /* ko */, - A396E5451502D0580025A245 /* mk */, - A396E54A1502D0580025A245 /* nl */, - A396E54F1502D0580025A245 /* pl */, - A396E5541502D0580025A245 /* pt-BR */, - A396E5591502D0580025A245 /* pt-PT */, - A396E55E1502D0580025A245 /* ro */, - A396E5631502D0580025A245 /* ru */, - A396E5681502D0580025A245 /* sr */, - A396E56D1502D0580025A245 /* zh_CN */, - A396E5721502D0580025A245 /* zh_TW */, - ); - name = Conclusion.rtfd; - sourceTree = ""; - }; - A396E4F61502D0580025A245 /* Description.html */ = { - isa = PBXVariantGroup; - children = ( - A396E4F71502D0580025A245 /* ar */, - A396E5001502D0580025A245 /* bg */, - A396E5051502D0580025A245 /* bs */, - A396E50A1502D0580025A245 /* ca */, - A396E50F1502D0580025A245 /* de */, - A396E5141502D0580025A245 /* el */, - A396E5191502D0580025A245 /* en */, - A396E51E1502D0580025A245 /* es */, - A396E5231502D0580025A245 /* fr */, - A396E5281502D0580025A245 /* he */, - A396E52D1502D0580025A245 /* hr */, - A396E5321502D0580025A245 /* id */, - A396E5371502D0580025A245 /* it */, - A396E53C1502D0580025A245 /* ja */, - A396E5411502D0580025A245 /* ko */, - A396E5461502D0580025A245 /* mk */, - A396E54B1502D0580025A245 /* nl */, - A396E5501502D0580025A245 /* pl */, - A396E5551502D0580025A245 /* pt-BR */, - A396E55A1502D0580025A245 /* pt-PT */, - A396E55F1502D0580025A245 /* ro */, - A396E5641502D0580025A245 /* ru */, - A396E5691502D0580025A245 /* sr */, - A396E56E1502D0580025A245 /* zh_CN */, - A396E5731502D0580025A245 /* zh_TW */, - ); - name = Description.html; - sourceTree = ""; - }; - A396E4F81502D0580025A245 /* License.rtf */ = { - isa = PBXVariantGroup; - children = ( - A396E4F91502D0580025A245 /* ar */, - A396E5011502D0580025A245 /* bg */, - A396E5061502D0580025A245 /* bs */, - A396E50B1502D0580025A245 /* ca */, - A396E5101502D0580025A245 /* de */, - A396E5151502D0580025A245 /* el */, - A396E51A1502D0580025A245 /* en */, - A396E51F1502D0580025A245 /* es */, - A396E5241502D0580025A245 /* fr */, - A396E5291502D0580025A245 /* he */, - A396E52E1502D0580025A245 /* hr */, - A396E5331502D0580025A245 /* id */, - A396E5381502D0580025A245 /* it */, - A396E53D1502D0580025A245 /* ja */, - A396E5421502D0580025A245 /* ko */, - A396E5471502D0580025A245 /* mk */, - A396E54C1502D0580025A245 /* nl */, - A396E5511502D0580025A245 /* pl */, - A396E5561502D0580025A245 /* pt-BR */, - A396E55B1502D0580025A245 /* pt-PT */, - A396E5601502D0580025A245 /* ro */, - A396E5651502D0580025A245 /* ru */, - A396E56A1502D0580025A245 /* sr */, - A396E56F1502D0580025A245 /* zh_CN */, - A396E5741502D0580025A245 /* zh_TW */, - ); - name = License.rtf; - sourceTree = ""; - }; - A396E4FA1502D0580025A245 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - A396E4FB1502D0580025A245 /* ar */, - A396E5021502D0580025A245 /* bg */, - A396E5071502D0580025A245 /* bs */, - A396E50C1502D0580025A245 /* ca */, - A396E5111502D0580025A245 /* de */, - A396E5161502D0580025A245 /* el */, - A396E51B1502D0580025A245 /* en */, - A396E5201502D0580025A245 /* es */, - A396E5251502D0580025A245 /* fr */, - A396E52A1502D0580025A245 /* he */, - A396E52F1502D0580025A245 /* hr */, - A396E5341502D0580025A245 /* id */, - A396E5391502D0580025A245 /* it */, - A396E53E1502D0580025A245 /* ja */, - A396E5431502D0580025A245 /* ko */, - A396E5481502D0580025A245 /* mk */, - A396E54D1502D0580025A245 /* nl */, - A396E5521502D0580025A245 /* pl */, - A396E5571502D0580025A245 /* pt-BR */, - A396E55C1502D0580025A245 /* pt-PT */, - A396E5611502D0580025A245 /* ro */, - A396E5661502D0580025A245 /* ru */, - A396E56B1502D0580025A245 /* sr */, - A396E5701502D0580025A245 /* zh_CN */, - A396E5751502D0580025A245 /* zh_TW */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - A396E4FC1502D0580025A245 /* Welcome.rtfd */ = { - isa = PBXVariantGroup; - children = ( - A396E4FD1502D0580025A245 /* ar */, - A396E5031502D0580025A245 /* bg */, - A396E5081502D0580025A245 /* bs */, - A396E50D1502D0580025A245 /* ca */, - A396E5121502D0580025A245 /* de */, - A396E5171502D0580025A245 /* el */, - A396E51C1502D0580025A245 /* en */, - A396E5211502D0580025A245 /* es */, - A396E5261502D0580025A245 /* fr */, - A396E52B1502D0580025A245 /* he */, - A396E5301502D0580025A245 /* hr */, - A396E5351502D0580025A245 /* id */, - A396E53A1502D0580025A245 /* it */, - A396E53F1502D0580025A245 /* ja */, - A396E5441502D0580025A245 /* ko */, - A396E5491502D0580025A245 /* mk */, - A396E54E1502D0580025A245 /* nl */, - A396E5531502D0580025A245 /* pl */, - A396E5581502D0580025A245 /* pt-BR */, - A396E55D1502D0580025A245 /* pt-PT */, - A396E5621502D0580025A245 /* ro */, - A396E5671502D0580025A245 /* ru */, - A396E56C1502D0580025A245 /* sr */, - A396E5711502D0580025A245 /* zh_CN */, - A396E5761502D0580025A245 /* zh_TW */, - ); - name = Welcome.rtfd; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ 1DEB919008733D9F0010E9CD /* Debug */ = { isa = XCBuildConfiguration; Index: trunk/i386/boot2/drivers.c =================================================================== --- trunk/i386/boot2/drivers.c (revision 2399) +++ trunk/i386/boot2/drivers.c (revision 2400) @@ -869,7 +869,8 @@ { DBG("Decompressing Kernel: "); - if (kernel_header->compress_type != OSSwapBigToHostConstInt32('lzss')) + if ((kernel_header->compress_type != OSSwapBigToHostConstInt32('lzss')) && + (kernel_header->compress_type != OSSwapBigToHostConstInt32('lzvn'))) { error("ERROR: kernel compression is bad!\n"); return -1; @@ -887,7 +888,23 @@ uncompressed_size = OSSwapBigToHostInt32(kernel_header->uncompressed_size); binary = buffer = malloc(uncompressed_size); - size = decompress_lzss((u_int8_t *)binary, &kernel_header->data[0], OSSwapBigToHostInt32(kernel_header->compressed_size)); + // MinusZwei + size = 0; + switch (kernel_header->compress_type) + { + case OSSwapBigToHostConstInt32('lzvn'): + size = decompress_lzvn( binary, uncompressed_size, &kernel_header->data[0], OSSwapBigToHostInt32(kernel_header->compressed_size)); + break; + + case OSSwapBigToHostConstInt32('lzss'): + size = decompress_lzss( (u_int8_t *)binary, uncompressed_size, &kernel_header->data[0], OSSwapBigToHostInt32(kernel_header->compressed_size)); + break; + + default: + break; + } + // MinusZwei + if (uncompressed_size != size) { error("ERROR: size mismatch from lzss (found: %x, expected: %x).\n", size, uncompressed_size); return -1; @@ -921,9 +938,9 @@ execute_hook("DecodeKernel", (void*)binary, NULL, NULL, NULL); ret = DecodeMachO(binary, rentry, raddr, rsize); - if (ret<0 && archCpuType==CPU_TYPE_X86_64) + if (ret < 0 && archCpuType == CPU_TYPE_X86_64) { - archCpuType=CPU_TYPE_I386; + archCpuType = CPU_TYPE_I386; ret = DecodeMachO(binary, rentry, raddr, rsize); } Index: trunk/i386/boot2/lzvn.c =================================================================== --- trunk/i386/boot2/lzvn.c (revision 0) +++ trunk/i386/boot2/lzvn.c (revision 2400) @@ -0,0 +1,497 @@ +// +// lzvn.c +// +// Based on works from Pike R. Alpha and AnV Software (Andy Vandijck). +// Converted to C by MinusZwei on 9/14/14. +// +// No dogs allowed. +// + +#include + +#include + + +static short Llzvn_tableref[256] = +{ + 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 4, 3, + 1, 1, 1, 1, 1, 1, 4, 3, 1, 1, 1, 1, 1, 1, 5, 3, + 1, 1, 1, 1, 1, 1, 5, 3, 1, 1, 1, 1, 1, 1, 5, 3, + 1, 1, 1, 1, 1, 1, 5, 3, 1, 1, 1, 1, 1, 1, 5, 3, + 1, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, + 1, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, + 1, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 1, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, + 1, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 1, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 +}; + + +// mov (%rdx),%r8 +// movzbq (%rdx),%r9 +// jmpq *(%rbx,%r9,8) + +#define LABEL_JUMP \ + do { \ + r8 = *(uint64_t *)rdx; \ + r9 = r8 & 0xFF; \ + switch (Llzvn_tableref[r9]) { \ + case 0: goto Llzvn_table0; break; \ + case 1: goto Llzvn_table1; break; \ + case 2: return rax; \ + case 3: goto Llzvn_table3; break; \ + case 4: goto Llzvn_table4; break; \ + case 5: return 0; \ + case 6: goto Llzvn_table6; break; \ + case 7: goto Llzvn_table7; break; \ + case 8: goto Llzvn_table8; break; \ + case 9: goto Llzvn_table9; break; \ + case 10: goto Llzvn_table10; break; \ + } \ + } while (0) + + +size_t +decompress_lzvn(void * _dest, + size_t _dest_size, + void * _src, + size_t _src_size) +{ + size_t rax = 0; + + const uint64_t rdi = (const uint64_t)_dest; + uint64_t rsi = _dest_size; + uint64_t rcx = _src_size; + uint64_t rdx = (uint64_t)_src; + + uint64_t r8 = 0; + uint64_t r9 = 0; + uint64_t r10 = 0; + uint64_t r11 = 0; + uint64_t r12 = 0; + + uint64_t addr = 0; + unsigned char byte_data = 0; + + short jmp = 0; + + // lea Llzvn_tableref(%rip),%rbx + // + // this will load the address of the tableref label into the %rbx + // register. in our code, this is the 'Llzvn_tableref' array + // + // for clearness, it will be used directly. + + rax = 0; // xor %rax,%rax + r12 = 0; // xor %r12,%r12 + + // sub $0x8,%rsi + // jb Llzvn_exit + jmp = rsi < 0x8 ? 1 : 0; + rsi -= 0x8; + if (jmp) { + return 0; + } + + // lea -0x8(%rdx,%rcx,1),%rcx + // cmp %rcx,%rdx + // ja Llzvn_exit + rcx = rdx + rcx - 0x8; + if (rdx > rcx) { + return 0; + } + + LABEL_JUMP; + + + +Llzvn_table0: + r9 >>= 0x6; // shr $0x6,%r9 + rdx = rdx + r9 + 0x1; // lea 0x1(%rdx,%r9,1),%rdx + + // cmp %rcx,%rdx + // ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r10 = 0x38; // mov $0x38,%r10 + r10 &= r8; // and %r8,%r10 + r8 >>= 0x8; // shr $0x8,%r8 + r10 >>= 0x3; // shr $0x3,%r10 + r10 += 0x3; // add $0x3,%r10 + goto Llzvn_l10; // jmp Llzvn_l10 + +Llzvn_table1: + r9 >>= 0x6; // shr $0x6,%r9 + rdx = rdx + r9 + 0x2; // lea 0x2(%rdx,%r9,1),%rdx + + // cmp %rcx,%rdx + // ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r12 = r8; // mov %r8,%r12 + r12 = OSSwapInt64(r12); // bswap %r12 + r10 = r12; // mov %r12,%r10 + r12 <<= 0x5; // shl $0x5,%r12 + r12 >>= 0x35; // shr $0x35,%r12 + r10 <<= 0x2; // shl $0x2,%r10 + r10 >>= 0x3d; // shr $0x3d,%r10 + r10 += 0x3; // add $0x3,%r10 + r8 >>= 0x10; // shr $0x10,%r8 + goto Llzvn_l10; + + +Llzvn_table3: + r9 >>= 0x6; // shr $0x6,%r9 + rdx = rdx + r9 + 0x3; // lea 0x3(%rdx,%r9,1),%rdx + + // cmp %rcx,%rdx + // ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r10 = 0x38; // mov $0x38,%r10 + r12 = 0xFFFF; // mov $0xffff,%r12 + r10 &= r8; // and %r8,%r10 + r8 >>= 0x8; // shr $0x8,%r8 + r10 >>= 0x3; // shr $0x3,%r10 + r12 &= r8; // and %r8,%r12 + r8 >>= 0x10; // shr $0x10,%r8 + r10 += 0x3; // add $0x3,%r10 + goto Llzvn_l10; // jmp Llzvn_l10 + + +Llzvn_table4: + // add $0x1,%rdx + // cmp %rcx,%rdx + // ja Llzvn_exit + rdx += 1; + if (rdx > rcx) { + return 0; + } + + LABEL_JUMP; + + +Llzvn_table6: + r9 >>= 0x3; // shr $0x3,%r9 + r9 &= 0x3; // and $0x3,%r9 + rdx = rdx + r9 + 0x3; // lea 0x3(%rdx,%r9,1),%rdx + + // cmp %rcx,%rdx + // ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r10 = r8; // mov %r8,%r10 + r10 &= 0x307; // and $0x307,%r10 + r8 >>= 0xa; // shr $0xa,%r8 + + // movzbq %r10b,%r12 + r12 = r10 & 0xFF; + + r10 >>= 0x8; // shr $0x8,%r10 + r12 <<= 0x2; // shl $0x2,%r12 + r10 |= r12; // or %r12,%r10 + r12 = 0x3FFF; // mov $0x3fff,%r12 + r10 += 0x3; // add $0x3,%r10 + r12 &= r8; // and %r8,%r12 + r8 >>= 0xE; // shr $0xe,%r8 + goto Llzvn_l10; // jmp Llzvn_l10 + + +Llzvn_table7: + r8 >>= 0x8; // shr $0x8,%r8 + r8 &= 0xFF; // and $0xff,%r8 + r8 += 0x10; // add $0x10,%r8 + rdx = rdx + r8 + 0x2; // lea 0x2(%rdx,%r8,1),%rdx + goto Llzvn_l0; + + +Llzvn_table8: + r8 &= 0xF; // and $0xf,%r8 + rdx = rdx + r8 + 0x1; // lea 0x1(%rdx,%r8,1),%rdx + goto Llzvn_l0; // jmp Llzvn_l0 + + +Llzvn_table9: + rdx += 0x2; // add $0x2,%rdx + + // cmp %rcx,%rdx + // ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r10 = r8; // mov %r8,%r10 + r10 >>= 0x8; // shr $0x8,%r10 + r10 &= 0xFF; // and $0xff,%r10 + r10 += 0x10; // add $0x10,%r10 + goto Llzvn_l11; + + +Llzvn_table10: + rdx += 1; // add $0x1,%rdx + + //cmp %rcx,%rdx + //ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r10 = r8; // mov %r8,%r10 + r10 &= 0xF; // and $0xf,%r10 + goto Llzvn_l11; // jmp Llzvn_l11 + + + + +Llzvn_l10: + r11 = rax + r9; // lea (%rax,%r9,1),%r11 + r11 += r10; // add %r10,%r11 + + // cmp %rsi,%r11 + // jae Llzvn_l8 + if (r11 >= rsi) { + goto Llzvn_l8; + } + + // mov %r8,(%rdi,%rax,1) + addr = rdi + rax; + *((uint64_t *)addr) = r8; + + rax += r9; // add %r9,%rax + r8 = rax; // mov %rax,%r8 + + // sub %r12,%r8 + // jb Llzvn_exit + jmp = r8 < r12 ? 1 : 0; + r8 -= r12; + if (jmp) { + return 0; + } + + // cmp $0x8,%r12 + // jb Llzvn_l4 + if (r12 < 0x8) { + goto Llzvn_l4; + } + + +Llzvn_l5: + do + { + // mov (%rdi,%r8,1),%r9 + addr = rdi + r8; + r9 = *((uint64_t *)addr); + + r8 += 0x8; // add $0x8,%r8 + + // mov %r9,(%rdi,%rax,1) + addr = rdi + rax; + *((uint64_t *)addr) = r9; + + rax += 0x8; // add $0x8,%rax + + // sub $0x8,%r10 + // ja Llzvn_l5 + jmp = r10 > 0x8 ? 1 : 0; + r10 -= 0x8; + } + while (jmp); + + rax += r10; // add %r10,%rax + + LABEL_JUMP; + + +Llzvn_l8: + // test %r9,%r9 + // je Llzvn_l7 + if (r9 != 0) + { + r11 = rsi + 0x8; // lea 0x8(%rsi),%r11 + + do + { + // mov %r8b,(%rdi,%rax,1) + addr = rdi + rax; + byte_data = (unsigned char)(r8 & 0xFF); + *((unsigned char *)addr) = byte_data; + + rax += 0x1; // add $0x1,%rax + + // cmp %rax,%r11 + // je Llzvn_exit2 + if (rax == r11) { + return rax; + } + + r8 >>= 0x8; // shr $0x8,%r8 + + // sub $0x1,%r9 + // jne Llzvn_l6 + jmp = r9 != 0x1 ? 1 : 0; + r9 -= 1; + } + while (jmp); + } + + // mov %rax,%r8 + r8 = rax; + + // sub %r12,%r8 + // jb Llzvn_exit + jmp = r8 < r12 ? 1 : 0; + r8 -= r12; + if (jmp) { + return 0; + } + + +Llzvn_l4: + r11 = rsi + 0x8; // lea 0x8(%rsi),%r11 + + do + { + // movzbq (%rdi,%r8,1),%r9 + addr = rdi + r8; + byte_data = *((unsigned char *)addr); + r9 = byte_data; + r9 &= 0xFF; + + r8 += 0x1; // add $0x1,%r8 + + // mov %r9b,(%rdi,%rax,1) + addr = rdi + rax; + byte_data = (unsigned char)r9; + *((unsigned char *)addr) = byte_data; + + rax += 0x1; // add $0x1,%rax + + // cmp %rax,%r11 + // je Llzvn_exit2 + if (rax == r11) { + return rax; + } + + // sub $0x1,%r10 + // jne Llzvn_l9 + jmp = r10 != 0x1 ? 1 : 0; + r10 -= 0x1; + } + while (jmp); + + LABEL_JUMP; + + +Llzvn_l11: + r8 = rax; // mov %rax,%r8 + r8 -= r12; // sub %r12,%r8 + r11 = rax + r10; // lea (%rax,%r10,1),%r11 + + // cmp %rsi,%r11 + // jae Llzvn_l4 + if (r11 >= rsi) { + goto Llzvn_l4; + } + + // cmp $0x8,%r12 + // jae Llzvn_l5 + if (r12 >= 0x8) { + goto Llzvn_l5; + } + + goto Llzvn_l4; // jmp Llzvn_l4 + + +Llzvn_l0: + // cmp %rcx,%rdx + // ja Llzvn_exit + if (rdx > rcx) { + return 0; + } + + r11 = rax + r8; // lea (%rax,%r8,1),%r11 + r8 = -r8; // neg %r8 + + // cmp %rsi,%r11 + // ja Llzvn_l2 + if (r11 <= rsi) + { + r11 = rdi + r11; // lea (%rdi,%r11,1),%r11 + + uint64_t check = 0; + + do + { + // mov (%rdx,%r8,1),%r9 + addr = rdx + r8; + r9 = *(uint64_t *)addr; + + // mov %r9,(%r11,%r8,1) + addr = r11 + r8; + *(uint64_t *)addr = r9; + + // add $0x8,%r8 + // jae Llzvn_l1 + + check = UINT64_MAX; + check -= (uint64_t)r8; + + r8 += 0x8; + } + while (check >= 0x8); + + rax = r11; // mov %r11,%rax + rax -= rdi; // sub %rdi,%rax + + LABEL_JUMP; + } + + r11 = rsi + 0x8; // lea 0x8(%rsi),%r11 + + do + { + // movzbq (%rdx,%r8,1),%r9 + addr = rdx + r8; + r9 = *((uint64_t *)addr); + r9 &= 0xFF; + + // mov %r9b,(%rdi,%rax,1) + addr = rdi + rax; + byte_data = (unsigned char)r9; + *((unsigned char *)addr) = byte_data; + + rax += 0x1; // add $0x1,%rax + + // cmp %rax,%r11 + // je Llzvn_exit2 + if (r11 == rax) { + return rax; + } + + // add $0x1,%r8 + // jne Llzvn_l3 + jmp = ((int64_t)r8 + 0x1 == 0) ? 0 : 1; + r8 += 0x1; + } + while (jmp); + + LABEL_JUMP; + + + // should never come here. + return 0; +} Property changes on: trunk/i386/boot2/lzvn.c ___________________________________________________________________ Added: svn:executable + * Index: trunk/i386/boot2/Makefile =================================================================== --- trunk/i386/boot2/Makefile (revision 2399) +++ trunk/i386/boot2/Makefile (revision 2400) @@ -42,7 +42,7 @@ # The ordering is important; # boot2.o must be first. -OBJS = boot2.o boot.o graphics.o drivers.o prompt.o options.o lzss.o mboot.o \ +OBJS = boot2.o boot.o graphics.o drivers.o prompt.o options.o lzss.o lzvn.o mboot.o \ ramdisk.o picopng.o resume.o bmdecompress.o graphic_utils.o gui.o modules.o \ modules_support.o boot_modules.o # button.o browser.o scrollbar.o == NOTYET Index: trunk/i386/boot2/boot.h =================================================================== --- trunk/i386/boot2/boot.h (revision 2399) +++ trunk/i386/boot2/boot.h (revision 2400) @@ -286,8 +286,15 @@ /* * lzss.c */ -extern int decompress_lzss(u_int8_t *dst, u_int8_t *src, u_int32_t srclen); +extern int decompress_lzss(u_int8_t *dst, u_int32_t dstlen, u_int8_t *src, u_int32_t srclen); +extern u_int8_t *compress_lzss(u_int8_t *dst, u_int32_t dstlen, u_int8_t *src, u_int32_t srcLen); +/* + * lzvn.c + */ +extern size_t decompress_lzvn(void * _dest, size_t _dest_size, void * _src, size_t _src_size); +// extern u_int8_t *compress_lzvn(u_int8_t *dst, u_int32_t dstlen, u_int8_t *src, u_int32_t srcLen); + struct compressed_kernel_header { u_int32_t signature; u_int32_t compress_type; @@ -297,7 +304,7 @@ u_int32_t reserved[11]; char platform_name[64]; char root_path[256]; - u_int8_t data[0]; + u_int8_t data[0]; }; typedef struct compressed_kernel_header compressed_kernel_header; Index: trunk/i386/boot2/lzss.c =================================================================== --- trunk/i386/boot2/lzss.c (revision 2399) +++ trunk/i386/boot2/lzss.c (revision 2400) @@ -65,49 +65,53 @@ }; int -decompress_lzss( - u_int8_t * dst, - u_int8_t * src, - u_int32_t srclen) +decompress_lzss( u_int8_t *dst, u_int32_t dstlen, u_int8_t *src, u_int32_t srclen ) { - /* ring buffer of size N, with extra F-1 bytes to aid string comparison */ - u_int8_t text_buf[N + F - 1]; - u_int8_t *dststart = dst; - u_int8_t *srcend = src + srclen; - int i, j, k, r, c; - unsigned int flags; - - dst = dststart; - srcend = src + srclen; - for (i = 0; i < N - F; i++) - text_buf[i] = ' '; - r = N - F; - flags = 0; - for ( ; ; ) { - if (((flags >>= 1) & 0x100) == 0) { - if (src < srcend) c = *src++; else break; - flags = c | 0xFF00; /* uses higher byte cleverly */ - } /* to count eight */ - if (flags & 1) { - if (src < srcend) c = *src++; else break; - *dst++ = c; - text_buf[r++] = c; - r &= (N - 1); - } else { - if (src < srcend) i = *src++; else break; - if (src < srcend) j = *src++; else break; - i |= ((j & 0xF0) << 4); - j = (j & 0x0F) + THRESHOLD; - for (k = 0; k <= j; k++) { - c = text_buf[(i + k) & (N - 1)]; - *dst++ = c; - text_buf[r++] = c; - r &= (N - 1); - } - } - } - - return dst - dststart; + /* ring buffer of size N, with extra F-1 bytes to aid string comparison */ + u_int8_t text_buf[N + F - 1]; + u_int8_t *dststart = dst; + u_int8_t *dstend = dst + dstlen; + u_int8_t *srcend = src + srclen; + int i, j, k, r, c; + unsigned int flags; + + dst = dststart; + srcend = src + srclen; + for (i = 0; i < N - F; i++) + text_buf[i] = ' '; + r = N - F; + flags = 0; + for ( ; ; ) { + if (((flags >>= 1) & 0x100) == 0) { + if (src < srcend) c = *src++; else break; + flags = c | 0xFF00; /* uses higher byte cleverly */ + } /* to count eight */ + if (flags & 1) { + if (src < srcend) c = *src++; else break; + *dst++ = c; + if (dst >= dstend) { + goto finish; + } + text_buf[r++] = c; + r &= (N - 1); + } else { + if (src < srcend) i = *src++; else break; + if (src < srcend) j = *src++; else break; + i |= ((j & 0xF0) << 4); + j = (j & 0x0F) + THRESHOLD; + for (k = 0; k <= j; k++) { + c = text_buf[(i + k) & (N - 1)]; + *dst++ = c; + if (dst >= dstend) { + goto finish; + } + text_buf[r++] = c; + r &= (N - 1); + } + } + } +finish: + return dst - dststart; } /* @@ -224,11 +228,7 @@ sp->parent[p] = NIL; } -u_int8_t *compress_lzss( - u_int8_t *dst, - u_int32_t dstlen, - u_int8_t *src, - u_int32_t srcLen) +u_int8_t *compress_lzss( u_int8_t *dst, u_int32_t dstlen, u_int8_t *src, u_int32_t srcLen ) { /* Encoding state, mostly tree but some current match stuff */ struct encode_state *sp; Index: trunk/CHANGES =================================================================== --- trunk/CHANGES (revision 2399) +++ trunk/CHANGES (revision 2400) @@ -1,3 +1,4 @@ +- ErmaC : Merge LZVN decompression routine by MinusZwei (C Conversion) based on works from Pike R. Alpha and AnV Software (Andy Vandijck). - Bungo : Loading custom ECDT.aml, Darwin version string printing, clean boot-args, change firmware rev. to real Mac (0x0001000a), added kernel-compatibility, boot-file, boot-args, machine-signature, random-seed DT properties & some minor changes. - ErmaC : Merge tja's patch http://forum.voodooprojects.org/index.php/topic,5951.0.html - bitshoveler : Optimized basic string functions strlen, strncmp, strncat, strcat