Index: branches/ErmaC/Chameleon.xcodeproj/project.pbxproj =================================================================== --- branches/ErmaC/Chameleon.xcodeproj/project.pbxproj (revision 1530) +++ branches/ErmaC/Chameleon.xcodeproj/project.pbxproj (revision 1531) @@ -17,6 +17,8 @@ 019DFBAF11FB94090013E8CC /* MEMTEST86_LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MEMTEST86_LICENSE; sourceTree = ""; }; 1D145307137073F40050C0CD /* bootargs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bootargs.h; sourceTree = ""; }; 1D2A1AF513743A2600787720 /* bootargs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bootargs.h; sourceTree = ""; }; + 26F2051D13D04B060020D229 /* exfat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = exfat.h; sourceTree = ""; }; + 26F2052013D04B130020D229 /* exfat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exfat.c; sourceTree = ""; }; 65ED53931204B83200B22507 /* disk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disk.h; sourceTree = ""; }; 6DBAFD1313B0D21E0047ED33 /* modules_support.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = modules_support.s; sourceTree = ""; }; 6DBAFD1413B0D21E0047ED33 /* modules.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = modules.c; sourceTree = ""; }; @@ -679,7 +681,6 @@ A3561CAF1414024C00E9B51E /* HelloWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HelloWorld.cpp; sourceTree = ""; }; A3561CB11414024C00E9B51E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; A3561CB31414024C00E9B51E /* modules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = modules; sourceTree = ""; }; - A3561CB61414024D00E9B51E /* test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test; sourceTree = ""; }; A3561CB81414024D00E9B51E /* __ashldi3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = __ashldi3.c; sourceTree = ""; }; A3561CB91414024D00E9B51E /* __ashrdi3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = __ashrdi3.c; sourceTree = ""; }; A3561CBA1414024D00E9B51E /* __clzsi2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = __clzsi2.c; sourceTree = ""; }; @@ -878,7 +879,122 @@ A3561D7F1414024D00E9B51E /* utility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utility.cpp; sourceTree = ""; }; A3561D801414024D00E9B51E /* valarray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = valarray.cpp; sourceTree = ""; }; A3561D811414024D00E9B51E /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector.cpp; sourceTree = ""; }; + A3561DA61414296600E9B51E /* Keylayout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Keylayout.c; sourceTree = ""; }; + A3561DA71414296600E9B51E /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + A3561DA81414296600E9B51E /* Cconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cconfig; sourceTree = ""; }; + A35D216F141A73B000969AC0 /* cham-mklayout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "cham-mklayout.c"; sourceTree = ""; }; + A35D2171141A73B000969AC0 /* mac-de.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-de.slt"; sourceTree = ""; }; + A35D2172141A73B000969AC0 /* mac-es.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-es.slt"; sourceTree = ""; }; + A35D2173141A73B000969AC0 /* mac-fr.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-fr.slt"; sourceTree = ""; }; + A35D2174141A73B000969AC0 /* mac-it.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-it.slt"; sourceTree = ""; }; + A35D2175141A73B000969AC0 /* mac-se.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mac-se.slt"; sourceTree = ""; }; + A35D2176141A73B000969AC0 /* pc-fr.slt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "pc-fr.slt"; sourceTree = ""; }; + A35D2177141A73B000969AC0 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + A35D2178141A753E00969AC0 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; + A35D2187141A75DC00969AC0 /* slimpkg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = slimpkg.sh; sourceTree = ""; }; + A35D2188141A75DC00969AC0 /* buildpkg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = buildpkg.sh; sourceTree = ""; }; + A35D2189141A75DC00969AC0 /* builddmg.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = builddmg.sh; sourceTree = ""; }; A360AA7D14136C1A00084D3F /* Make.rules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Make.rules; sourceTree = ""; }; + A37D7D4A141B7C6F0069C38B /* background.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = background.tiff; sourceTree = ""; }; + A37D7D4C141B7C6F0069C38B /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = de; path = de.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D4E141B7C6F0069C38B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = de; path = de.lproj/Description.html; sourceTree = ""; }; + A37D7D50141B7C6F0069C38B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = de; path = de.lproj/License.rtf; sourceTree = ""; }; + A37D7D52141B7C6F0069C38B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D54141B7C6F0069C38B /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = de; path = de.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D55141B7C6F0069C38B /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = en; path = en.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D56141B7C6F0069C38B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/Description.html; sourceTree = ""; }; + A37D7D57141B7C6F0069C38B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/License.rtf; sourceTree = ""; }; + A37D7D58141B7C6F0069C38B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D59141B7C6F0069C38B /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = en; path = en.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D5A141B7C6F0069C38B /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = es; path = es.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D5B141B7C6F0069C38B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = es; path = es.lproj/Description.html; sourceTree = ""; }; + A37D7D5C141B7C6F0069C38B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = es.lproj/License.rtf; sourceTree = ""; }; + A37D7D5D141B7C6F0069C38B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D5E141B7C6F0069C38B /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = es; path = es.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D5F141B7C6F0069C38B /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fr; path = fr.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D60141B7C6F0069C38B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = fr; path = fr.lproj/Description.html; sourceTree = ""; }; + A37D7D61141B7C6F0069C38B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = fr; path = fr.lproj/License.rtf; sourceTree = ""; }; + A37D7D62141B7C6F0069C38B /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D63141B7C6F0069C38B /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = fr; path = fr.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D64141B7C6F0069C38B /* hr-HR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "hr-HR"; path = "hr-HR.lproj/Conclusion.rtfd"; sourceTree = ""; }; + A37D7D65141B7C6F0069C38B /* hr-HR */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = "hr-HR"; path = "hr-HR.lproj/Description.html"; sourceTree = ""; }; + A37D7D66141B7C6F0069C38B /* hr-HR */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "hr-HR"; path = "hr-HR.lproj/License.rtf"; sourceTree = ""; }; + A37D7D67141B7C6F0069C38B /* hr-HR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hr-HR"; path = "hr-HR.lproj/Localizable.strings"; sourceTree = ""; }; + A37D7D68141B7C6F0069C38B /* hr-HR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "hr-HR"; path = "hr-HR.lproj/Welcome.rtfd"; sourceTree = ""; }; + A37D7D69141B7C6F0069C38B /* id */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = id; path = id.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D6A141B7C6F0069C38B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = id; path = id.lproj/Description.html; sourceTree = ""; }; + A37D7D6B141B7C6F0069C38B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = id; path = id.lproj/License.rtf; sourceTree = ""; }; + A37D7D6C141B7C6F0069C38B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D6D141B7C6F0069C38B /* id */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = id; path = id.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D6E141B7C6F0069C38B /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = it; path = it.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D6F141B7C6F0069C38B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = it; path = it.lproj/Description.html; sourceTree = ""; }; + A37D7D70141B7C6F0069C38B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = it; path = it.lproj/License.rtf; sourceTree = ""; }; + A37D7D71141B7C6F0069C38B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D72141B7C6F0069C38B /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = it; path = it.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D73141B7C6F0069C38B /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = pl; path = pl.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D74141B7C6F0069C38B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = pl; path = pl.lproj/Description.html; sourceTree = ""; }; + A37D7D75141B7C6F0069C38B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = pl; path = pl.lproj/License.rtf; sourceTree = ""; }; + A37D7D76141B7C6F0069C38B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D77141B7C6F0069C38B /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = pl; path = pl.lproj/Welcome.rtfd; sourceTree = ""; }; + A37D7D78141B7C6F0069C38B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-BR"; path = "pt-BR.lproj/Conclusion.rtfd"; sourceTree = ""; }; + A37D7D79141B7C6F0069C38B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = "pt-BR"; path = "pt-BR.lproj/Description.html"; sourceTree = ""; }; + A37D7D7A141B7C6F0069C38B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "pt-BR"; path = "pt-BR.lproj/License.rtf"; sourceTree = ""; }; + A37D7D7B141B7C6F0069C38B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; + A37D7D7C141B7C6F0069C38B /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-BR"; path = "pt-BR.lproj/Welcome.rtfd"; sourceTree = ""; }; + A37D7D7D141B7C6F0069C38B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-PT"; path = "pt-PT.lproj/Conclusion.rtfd"; sourceTree = ""; }; + A37D7D7E141B7C6F0069C38B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = "pt-PT"; path = "pt-PT.lproj/Description.html"; sourceTree = ""; }; + A37D7D7F141B7C6F0069C38B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "pt-PT"; path = "pt-PT.lproj/License.rtf"; sourceTree = ""; }; + A37D7D80141B7C6F0069C38B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; + A37D7D81141B7C6F0069C38B /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = "pt-PT"; path = "pt-PT.lproj/Welcome.rtfd"; sourceTree = ""; }; + A37D7D82141B7C6F0069C38B /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = sr; path = sr.lproj/Conclusion.rtfd; sourceTree = ""; }; + A37D7D83141B7C6F0069C38B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = sr; path = sr.lproj/Description.html; sourceTree = ""; }; + A37D7D84141B7C6F0069C38B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sr; path = sr.lproj/License.rtf; sourceTree = ""; }; + A37D7D85141B7C6F0069C38B /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = sr.lproj/Localizable.strings; sourceTree = ""; }; + A37D7D86141B7C6F0069C38B /* sr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = sr; path = sr.lproj/Welcome.rtfd; sourceTree = ""; }; + A3F1F210141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F212141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F214141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F216141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F218141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F21A141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F21C141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F21E141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F220141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F222141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F224141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F226141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F228141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F22A141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F22C141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F22E141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F230141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F233141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F235141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F237141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F239141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F23B141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F23D141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F23F141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F241141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F243141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F245141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F247141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F249141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F24B141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; + A3F1F24D141B9B0D00DDA709 /* postinstall.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall.in; sourceTree = ""; }; + A3F1F24F141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; + A3F1F252141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F254141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F256141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F258141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F25A141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F25C141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F25E141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F260141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F262141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F264141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = postinstall; sourceTree = ""; }; + A3F1F266141B9B0D00DDA709 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; + A3F1F267141B9B3B00DDA709 /* Readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.txt; sourceTree = ""; }; B0056CE711F3868000754B65 /* boot0.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = boot0.s; sourceTree = ""; }; B0056CE811F3868000754B65 /* chain0.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = chain0.s; sourceTree = ""; }; B0056CE911F3868000754B65 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; @@ -1018,40 +1134,7 @@ B0056D8011F3868000754B65 /* coding_standards.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coding_standards.txt; sourceTree = ""; }; B0056D8111F3868000754B65 /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGES; sourceTree = ""; }; B0056D8211F3868000754B65 /* APPLE_LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = APPLE_LICENSE; sourceTree = ""; }; - B0056D8411F3868000754B65 /* buildpkg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = buildpkg; sourceTree = ""; }; B0056D8511F3868000754B65 /* Distribution */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Distribution; sourceTree = ""; }; - B0056D8611F3868000754B65 /* fdisk */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = fdisk; sourceTree = ""; }; - B0056D8811F3868000754B65 /* AHCIPortInjector.kext */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.kernel-extension"; path = AHCIPortInjector.kext; sourceTree = ""; }; - B0056D8911F3868000754B65 /* ATAPortInjector.kext */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.kernel-extension"; path = ATAPortInjector.kext; sourceTree = ""; }; - B0056D8A11F3868000754B65 /* Disabler.kext */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.kernel-extension"; path = Disabler.kext; sourceTree = ""; }; - B0056D8B11F3868000754B65 /* IOAHCIBlockStorageInjector.kext */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.kernel-extension"; path = IOAHCIBlockStorageInjector.kext; sourceTree = ""; }; - B0056D8C11F3868000754B65 /* JMicronATAInjector.kext */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.kernel-extension"; path = JMicronATAInjector.kext; sourceTree = ""; }; - B0056D8E11F3868000754B65 /* background.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = background.tiff; sourceTree = ""; }; - B0056D9011F3868000754B65 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = English; path = English.lproj/Description.html; sourceTree = ""; }; - B0056D9211F3868000754B65 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/License.rtf; sourceTree = ""; }; - B0056D9411F3868000754B65 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; - B0056D9611F3868000754B65 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = English; path = English.lproj/Welcome.rtfd; sourceTree = ""; }; - B0056D9711F3868000754B65 /* French */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = French; path = French.lproj/Description.html; sourceTree = ""; }; - B0056D9811F3868000754B65 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = French; path = French.lproj/License.rtf; sourceTree = ""; }; - B0056D9911F3868000754B65 /* French */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/Localizable.strings; sourceTree = ""; }; - B0056D9A11F3868000754B65 /* German */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = German; path = German.lproj/Description.html; sourceTree = ""; }; - B0056D9B11F3868000754B65 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = German; path = German.lproj/License.rtf; sourceTree = ""; }; - B0056D9C11F3868000754B65 /* German */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = German; path = German.lproj/Localizable.strings; sourceTree = ""; }; - B0056D9D11F3868000754B65 /* Spanish */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = Spanish; path = Spanish.lproj/Description.html; sourceTree = ""; }; - B0056D9E11F3868000754B65 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Spanish; path = Spanish.lproj/License.rtf; sourceTree = ""; }; - B0056D9F11F3868000754B65 /* Spanish */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Spanish; path = Spanish.lproj/Localizable.strings; sourceTree = ""; }; - B0056DA011F3868000754B65 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = wrapper.rtfd; name = Spanish; path = Spanish.lproj/Welcome.rtfd; sourceTree = ""; }; - B0056DA311F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DA511F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DA811F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DAA11F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DAC11F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DAE11F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DB011F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DB211F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DB411F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DB611F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; - B0056DB811F3868000754B65 /* postinstall */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinstall; sourceTree = ""; }; B0056DB911F3868000754B65 /* smbios.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = smbios.plist; sourceTree = ""; }; B0056DBD11F3868000754B65 /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = background.png; sourceTree = ""; }; B0056DBE11F3868000754B65 /* boot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = boot.png; sourceTree = ""; }; @@ -2342,19 +2425,15 @@ A3561CB41414024C00E9B51E /* Keylayout */ = { isa = PBXGroup; children = ( - A3561CB51414024C00E9B51E /* utils */, + A3F1F267141B9B3B00DDA709 /* Readme.txt */, + A35D216E141A73B000969AC0 /* layouts */, + A3561DA81414296600E9B51E /* Cconfig */, + A3561DA61414296600E9B51E /* Keylayout.c */, + A3561DA71414296600E9B51E /* Makefile */, ); path = Keylayout; sourceTree = ""; }; - A3561CB51414024C00E9B51E /* utils */ = { - isa = PBXGroup; - children = ( - A3561CB61414024D00E9B51E /* test */, - ); - path = utils; - sourceTree = ""; - }; A3561CB71414024D00E9B51E /* klibc */ = { isa = PBXGroup; children = ( @@ -2587,6 +2666,461 @@ path = include; sourceTree = ""; }; + A35D216E141A73B000969AC0 /* layouts */ = { + isa = PBXGroup; + children = ( + A35D216F141A73B000969AC0 /* cham-mklayout.c */, + A35D2170141A73B000969AC0 /* layouts-src */, + A35D2177141A73B000969AC0 /* Makefile */, + ); + path = layouts; + sourceTree = ""; + }; + A35D2170141A73B000969AC0 /* layouts-src */ = { + isa = PBXGroup; + children = ( + A35D2178141A753E00969AC0 /* README */, + A35D2171141A73B000969AC0 /* mac-de.slt */, + A35D2172141A73B000969AC0 /* mac-es.slt */, + A35D2173141A73B000969AC0 /* mac-fr.slt */, + A35D2174141A73B000969AC0 /* mac-it.slt */, + A35D2175141A73B000969AC0 /* mac-se.slt */, + A35D2176141A73B000969AC0 /* pc-fr.slt */, + ); + path = "layouts-src"; + sourceTree = ""; + }; + A37D7D49141B7C6F0069C38B /* Resources */ = { + isa = PBXGroup; + children = ( + A37D7D4A141B7C6F0069C38B /* background.tiff */, + A37D7D4B141B7C6F0069C38B /* Conclusion.rtfd */, + A37D7D4D141B7C6F0069C38B /* Description.html */, + A37D7D4F141B7C6F0069C38B /* License.rtf */, + A37D7D51141B7C6F0069C38B /* Localizable.strings */, + A37D7D53141B7C6F0069C38B /* Welcome.rtfd */, + ); + path = Resources; + sourceTree = ""; + }; + A3F1F20D141B9B0D00DDA709 /* Scripts */ = { + isa = PBXGroup; + children = ( + A3F1F20E141B9B0D00DDA709 /* Advanced */, + A3F1F231141B9B0D00DDA709 /* BaseOptions */, + A3F1F24A141B9B0D00DDA709 /* EFI */, + A3F1F24C141B9B0D00DDA709 /* Keymaps */, + A3F1F24E141B9B0D00DDA709 /* Post */, + A3F1F250141B9B0D00DDA709 /* Resolutions */, + A3F1F265141B9B0D00DDA709 /* Standard */, + ); + path = Scripts; + sourceTree = ""; + }; + A3F1F20E141B9B0D00DDA709 /* Advanced */ = { + isa = PBXGroup; + children = ( + A3F1F20F141B9B0D00DDA709 /* BootBanner */, + A3F1F211141B9B0D00DDA709 /* EHCIacquire */, + A3F1F213141B9B0D00DDA709 /* ForceHPET */, + A3F1F215141B9B0D00DDA709 /* ForceWake */, + A3F1F217141B9B0D00DDA709 /* GUI */, + A3F1F219141B9B0D00DDA709 /* LegacyLogo */, + A3F1F21B141B9B0D00DDA709 /* Npci */, + A3F1F21D141B9B0D00DDA709 /* QuietBoot */, + A3F1F21F141B9B0D00DDA709 /* ShowInfo */, + A3F1F221141B9B0D00DDA709 /* SMBIOSdefaults */, + A3F1F223141B9B0D00DDA709 /* UHCIreset */, + A3F1F225141B9B0D00DDA709 /* UseAtiROM */, + A3F1F227141B9B0D00DDA709 /* UseMemDetect */, + A3F1F229141B9B0D00DDA709 /* UseNvidiaROM */, + A3F1F22B141B9B0D00DDA709 /* VBIOS */, + A3F1F22D141B9B0D00DDA709 /* Wait */, + A3F1F22F141B9B0D00DDA709 /* Wake */, + ); + path = Advanced; + sourceTree = ""; + }; + A3F1F20F141B9B0D00DDA709 /* BootBanner */ = { + isa = PBXGroup; + children = ( + A3F1F210141B9B0D00DDA709 /* postinstall */, + ); + path = BootBanner; + sourceTree = ""; + }; + A3F1F211141B9B0D00DDA709 /* EHCIacquire */ = { + isa = PBXGroup; + children = ( + A3F1F212141B9B0D00DDA709 /* postinstall */, + ); + path = EHCIacquire; + sourceTree = ""; + }; + A3F1F213141B9B0D00DDA709 /* ForceHPET */ = { + isa = PBXGroup; + children = ( + A3F1F214141B9B0D00DDA709 /* postinstall */, + ); + path = ForceHPET; + sourceTree = ""; + }; + A3F1F215141B9B0D00DDA709 /* ForceWake */ = { + isa = PBXGroup; + children = ( + A3F1F216141B9B0D00DDA709 /* postinstall */, + ); + path = ForceWake; + sourceTree = ""; + }; + A3F1F217141B9B0D00DDA709 /* GUI */ = { + isa = PBXGroup; + children = ( + A3F1F218141B9B0D00DDA709 /* postinstall */, + ); + path = GUI; + sourceTree = ""; + }; + A3F1F219141B9B0D00DDA709 /* LegacyLogo */ = { + isa = PBXGroup; + children = ( + A3F1F21A141B9B0D00DDA709 /* postinstall */, + ); + path = LegacyLogo; + sourceTree = ""; + }; + A3F1F21B141B9B0D00DDA709 /* Npci */ = { + isa = PBXGroup; + children = ( + A3F1F21C141B9B0D00DDA709 /* postinstall */, + ); + path = Npci; + sourceTree = ""; + }; + A3F1F21D141B9B0D00DDA709 /* QuietBoot */ = { + isa = PBXGroup; + children = ( + A3F1F21E141B9B0D00DDA709 /* postinstall */, + ); + path = QuietBoot; + sourceTree = ""; + }; + A3F1F21F141B9B0D00DDA709 /* ShowInfo */ = { + isa = PBXGroup; + children = ( + A3F1F220141B9B0D00DDA709 /* postinstall */, + ); + path = ShowInfo; + sourceTree = ""; + }; + A3F1F221141B9B0D00DDA709 /* SMBIOSdefaults */ = { + isa = PBXGroup; + children = ( + A3F1F222141B9B0D00DDA709 /* postinstall */, + ); + path = SMBIOSdefaults; + sourceTree = ""; + }; + A3F1F223141B9B0D00DDA709 /* UHCIreset */ = { + isa = PBXGroup; + children = ( + A3F1F224141B9B0D00DDA709 /* postinstall */, + ); + path = UHCIreset; + sourceTree = ""; + }; + A3F1F225141B9B0D00DDA709 /* UseAtiROM */ = { + isa = PBXGroup; + children = ( + A3F1F226141B9B0D00DDA709 /* postinstall */, + ); + path = UseAtiROM; + sourceTree = ""; + }; + A3F1F227141B9B0D00DDA709 /* UseMemDetect */ = { + isa = PBXGroup; + children = ( + A3F1F228141B9B0D00DDA709 /* postinstall */, + ); + path = UseMemDetect; + sourceTree = ""; + }; + A3F1F229141B9B0D00DDA709 /* UseNvidiaROM */ = { + isa = PBXGroup; + children = ( + A3F1F22A141B9B0D00DDA709 /* postinstall */, + ); + path = UseNvidiaROM; + sourceTree = ""; + }; + A3F1F22B141B9B0D00DDA709 /* VBIOS */ = { + isa = PBXGroup; + children = ( + A3F1F22C141B9B0D00DDA709 /* postinstall */, + ); + path = VBIOS; + sourceTree = ""; + }; + A3F1F22D141B9B0D00DDA709 /* Wait */ = { + isa = PBXGroup; + children = ( + A3F1F22E141B9B0D00DDA709 /* postinstall */, + ); + path = Wait; + sourceTree = ""; + }; + A3F1F22F141B9B0D00DDA709 /* Wake */ = { + isa = PBXGroup; + children = ( + A3F1F230141B9B0D00DDA709 /* postinstall */, + ); + path = Wake; + sourceTree = ""; + }; + A3F1F231141B9B0D00DDA709 /* BaseOptions */ = { + isa = PBXGroup; + children = ( + A3F1F232141B9B0D00DDA709 /* arch */, + A3F1F234141B9B0D00DDA709 /* CSTUsingSystemIO */, + A3F1F236141B9B0D00DDA709 /* DropSSDT */, + A3F1F238141B9B0D00DDA709 /* EnableC2State */, + A3F1F23A141B9B0D00DDA709 /* EnableC3State */, + A3F1F23C141B9B0D00DDA709 /* EnableC4State */, + A3F1F23E141B9B0D00DDA709 /* EthernetBuiltIn */, + A3F1F240141B9B0D00DDA709 /* GenerateCStates */, + A3F1F242141B9B0D00DDA709 /* GeneratePStates */, + A3F1F244141B9B0D00DDA709 /* GraphicsEnabler */, + A3F1F246141B9B0D00DDA709 /* InstantMenu */, + A3F1F248141B9B0D00DDA709 /* RestartFix */, + ); + path = BaseOptions; + sourceTree = ""; + }; + A3F1F232141B9B0D00DDA709 /* arch */ = { + isa = PBXGroup; + children = ( + A3F1F233141B9B0D00DDA709 /* postinstall */, + ); + path = arch; + sourceTree = ""; + }; + A3F1F234141B9B0D00DDA709 /* CSTUsingSystemIO */ = { + isa = PBXGroup; + children = ( + A3F1F235141B9B0D00DDA709 /* postinstall */, + ); + path = CSTUsingSystemIO; + sourceTree = ""; + }; + A3F1F236141B9B0D00DDA709 /* DropSSDT */ = { + isa = PBXGroup; + children = ( + A3F1F237141B9B0D00DDA709 /* postinstall */, + ); + path = DropSSDT; + sourceTree = ""; + }; + A3F1F238141B9B0D00DDA709 /* EnableC2State */ = { + isa = PBXGroup; + children = ( + A3F1F239141B9B0D00DDA709 /* postinstall */, + ); + path = EnableC2State; + sourceTree = ""; + }; + A3F1F23A141B9B0D00DDA709 /* EnableC3State */ = { + isa = PBXGroup; + children = ( + A3F1F23B141B9B0D00DDA709 /* postinstall */, + ); + path = EnableC3State; + sourceTree = ""; + }; + A3F1F23C141B9B0D00DDA709 /* EnableC4State */ = { + isa = PBXGroup; + children = ( + A3F1F23D141B9B0D00DDA709 /* postinstall */, + ); + path = EnableC4State; + sourceTree = ""; + }; + A3F1F23E141B9B0D00DDA709 /* EthernetBuiltIn */ = { + isa = PBXGroup; + children = ( + A3F1F23F141B9B0D00DDA709 /* postinstall */, + ); + path = EthernetBuiltIn; + sourceTree = ""; + }; + A3F1F240141B9B0D00DDA709 /* GenerateCStates */ = { + isa = PBXGroup; + children = ( + A3F1F241141B9B0D00DDA709 /* postinstall */, + ); + path = GenerateCStates; + sourceTree = ""; + }; + A3F1F242141B9B0D00DDA709 /* GeneratePStates */ = { + isa = PBXGroup; + children = ( + A3F1F243141B9B0D00DDA709 /* postinstall */, + ); + path = GeneratePStates; + sourceTree = ""; + }; + A3F1F244141B9B0D00DDA709 /* GraphicsEnabler */ = { + isa = PBXGroup; + children = ( + A3F1F245141B9B0D00DDA709 /* postinstall */, + ); + path = GraphicsEnabler; + sourceTree = ""; + }; + A3F1F246141B9B0D00DDA709 /* InstantMenu */ = { + isa = PBXGroup; + children = ( + A3F1F247141B9B0D00DDA709 /* postinstall */, + ); + path = InstantMenu; + sourceTree = ""; + }; + A3F1F248141B9B0D00DDA709 /* RestartFix */ = { + isa = PBXGroup; + children = ( + A3F1F249141B9B0D00DDA709 /* postinstall */, + ); + path = RestartFix; + sourceTree = ""; + }; + A3F1F24A141B9B0D00DDA709 /* EFI */ = { + isa = PBXGroup; + children = ( + A3F1F24B141B9B0D00DDA709 /* postinstall */, + ); + path = EFI; + sourceTree = ""; + }; + A3F1F24C141B9B0D00DDA709 /* Keymaps */ = { + isa = PBXGroup; + children = ( + A3F1F24D141B9B0D00DDA709 /* postinstall.in */, + ); + path = Keymaps; + sourceTree = ""; + }; + A3F1F24E141B9B0D00DDA709 /* Post */ = { + isa = PBXGroup; + children = ( + A3F1F24F141B9B0D00DDA709 /* postinstall */, + ); + path = Post; + sourceTree = ""; + }; + A3F1F250141B9B0D00DDA709 /* Resolutions */ = { + isa = PBXGroup; + children = ( + A3F1F251141B9B0D00DDA709 /* 1024x600x32 */, + A3F1F253141B9B0D00DDA709 /* 1024x768x32 */, + A3F1F255141B9B0D00DDA709 /* 1280x1024x32 */, + A3F1F257141B9B0D00DDA709 /* 1280x800x32 */, + A3F1F259141B9B0D00DDA709 /* 1280x960x32 */, + A3F1F25B141B9B0D00DDA709 /* 1440x900x32 */, + A3F1F25D141B9B0D00DDA709 /* 1600x900x32 */, + A3F1F25F141B9B0D00DDA709 /* 1680x1050x32 */, + A3F1F261141B9B0D00DDA709 /* 1920x1080x32 */, + A3F1F263141B9B0D00DDA709 /* 1920x1200x32 */, + ); + path = Resolutions; + sourceTree = ""; + }; + A3F1F251141B9B0D00DDA709 /* 1024x600x32 */ = { + isa = PBXGroup; + children = ( + A3F1F252141B9B0D00DDA709 /* postinstall */, + ); + path = 1024x600x32; + sourceTree = ""; + }; + A3F1F253141B9B0D00DDA709 /* 1024x768x32 */ = { + isa = PBXGroup; + children = ( + A3F1F254141B9B0D00DDA709 /* postinstall */, + ); + path = 1024x768x32; + sourceTree = ""; + }; + A3F1F255141B9B0D00DDA709 /* 1280x1024x32 */ = { + isa = PBXGroup; + children = ( + A3F1F256141B9B0D00DDA709 /* postinstall */, + ); + path = 1280x1024x32; + sourceTree = ""; + }; + A3F1F257141B9B0D00DDA709 /* 1280x800x32 */ = { + isa = PBXGroup; + children = ( + A3F1F258141B9B0D00DDA709 /* postinstall */, + ); + path = 1280x800x32; + sourceTree = ""; + }; + A3F1F259141B9B0D00DDA709 /* 1280x960x32 */ = { + isa = PBXGroup; + children = ( + A3F1F25A141B9B0D00DDA709 /* postinstall */, + ); + path = 1280x960x32; + sourceTree = ""; + }; + A3F1F25B141B9B0D00DDA709 /* 1440x900x32 */ = { + isa = PBXGroup; + children = ( + A3F1F25C141B9B0D00DDA709 /* postinstall */, + ); + path = 1440x900x32; + sourceTree = ""; + }; + A3F1F25D141B9B0D00DDA709 /* 1600x900x32 */ = { + isa = PBXGroup; + children = ( + A3F1F25E141B9B0D00DDA709 /* postinstall */, + ); + path = 1600x900x32; + sourceTree = ""; + }; + A3F1F25F141B9B0D00DDA709 /* 1680x1050x32 */ = { + isa = PBXGroup; + children = ( + A3F1F260141B9B0D00DDA709 /* postinstall */, + ); + path = 1680x1050x32; + sourceTree = ""; + }; + A3F1F261141B9B0D00DDA709 /* 1920x1080x32 */ = { + isa = PBXGroup; + children = ( + A3F1F262141B9B0D00DDA709 /* postinstall */, + ); + path = 1920x1080x32; + sourceTree = ""; + }; + A3F1F263141B9B0D00DDA709 /* 1920x1200x32 */ = { + isa = PBXGroup; + children = ( + A3F1F264141B9B0D00DDA709 /* postinstall */, + ); + path = 1920x1200x32; + sourceTree = ""; + }; + A3F1F265141B9B0D00DDA709 /* Standard */ = { + isa = PBXGroup; + children = ( + A3F1F266141B9B0D00DDA709 /* postinstall */, + ); + path = Standard; + sourceTree = ""; + }; B0056CE511F3868000754B65 /* i386 */ = { isa = PBXGroup; children = ( @@ -2709,6 +3243,8 @@ B0056D2411F3868000754B65 /* libsaio */ = { isa = PBXGroup; children = ( + 26F2052013D04B130020D229 /* exfat.c */, + 26F2051D13D04B060020D229 /* exfat.h */, B0056D2511F3868000754B65 /* acpi.h */, B0056D2611F3868000754B65 /* acpi_patcher.c */, B0056D2711F3868000754B65 /* acpi_patcher.h */, @@ -2815,155 +3351,17 @@ B0056D8311F3868000754B65 /* package */ = { isa = PBXGroup; children = ( - B0056D8411F3868000754B65 /* buildpkg */, + A35D2187141A75DC00969AC0 /* slimpkg.sh */, + A35D2188141A75DC00969AC0 /* buildpkg.sh */, + A35D2189141A75DC00969AC0 /* builddmg.sh */, B0056D8511F3868000754B65 /* Distribution */, - B0056D8611F3868000754B65 /* fdisk */, - B0056D8711F3868000754B65 /* Kexts */, - B0056D8D11F3868000754B65 /* Resources */, - B0056DA111F3868000754B65 /* Scripts */, + A37D7D49141B7C6F0069C38B /* Resources */, + A3F1F20D141B9B0D00DDA709 /* Scripts */, B0056DB911F3868000754B65 /* smbios.plist */, ); path = package; sourceTree = ""; }; - B0056D8711F3868000754B65 /* Kexts */ = { - isa = PBXGroup; - children = ( - B0056D8811F3868000754B65 /* AHCIPortInjector.kext */, - B0056D8911F3868000754B65 /* ATAPortInjector.kext */, - B0056D8A11F3868000754B65 /* Disabler.kext */, - B0056D8B11F3868000754B65 /* IOAHCIBlockStorageInjector.kext */, - B0056D8C11F3868000754B65 /* JMicronATAInjector.kext */, - ); - path = Kexts; - sourceTree = ""; - }; - B0056D8D11F3868000754B65 /* Resources */ = { - isa = PBXGroup; - children = ( - B0056D8E11F3868000754B65 /* background.tiff */, - B0056D8F11F3868000754B65 /* Description.html */, - B0056D9111F3868000754B65 /* License.rtf */, - B0056D9311F3868000754B65 /* Localizable.strings */, - B0056D9511F3868000754B65 /* Welcome.rtfd */, - ); - path = Resources; - sourceTree = ""; - }; - B0056DA111F3868000754B65 /* Scripts */ = { - isa = PBXGroup; - children = ( - B0056DA211F3868000754B65 /* FAT */, - B0056DA411F3868000754B65 /* HFS */, - B0056DA611F3868000754B65 /* Options */, - B0056DB511F3868000754B65 /* Post */, - B0056DB711F3868000754B65 /* Standard */, - ); - path = Scripts; - sourceTree = ""; - }; - B0056DA211F3868000754B65 /* FAT */ = { - isa = PBXGroup; - children = ( - B0056DA311F3868000754B65 /* postinstall */, - ); - path = FAT; - sourceTree = ""; - }; - B0056DA411F3868000754B65 /* HFS */ = { - isa = PBXGroup; - children = ( - B0056DA511F3868000754B65 /* postinstall */, - ); - path = HFS; - sourceTree = ""; - }; - B0056DA611F3868000754B65 /* Options */ = { - isa = PBXGroup; - children = ( - B0056DA711F3868000754B65 /* EHCIacquire */, - B0056DA911F3868000754B65 /* EthernetBuiltIn */, - B0056DAB11F3868000754B65 /* ForceHPET */, - B0056DAD11F3868000754B65 /* ForceWake */, - B0056DAF11F3868000754B65 /* GraphicsEnabler */, - B0056DB111F3868000754B65 /* GUI */, - B0056DB311F3868000754B65 /* UHCIreset */, - ); - path = Options; - sourceTree = ""; - }; - B0056DA711F3868000754B65 /* EHCIacquire */ = { - isa = PBXGroup; - children = ( - B0056DA811F3868000754B65 /* postinstall */, - ); - path = EHCIacquire; - sourceTree = ""; - }; - B0056DA911F3868000754B65 /* EthernetBuiltIn */ = { - isa = PBXGroup; - children = ( - B0056DAA11F3868000754B65 /* postinstall */, - ); - path = EthernetBuiltIn; - sourceTree = ""; - }; - B0056DAB11F3868000754B65 /* ForceHPET */ = { - isa = PBXGroup; - children = ( - B0056DAC11F3868000754B65 /* postinstall */, - ); - path = ForceHPET; - sourceTree = ""; - }; - B0056DAD11F3868000754B65 /* ForceWake */ = { - isa = PBXGroup; - children = ( - B0056DAE11F3868000754B65 /* postinstall */, - ); - path = ForceWake; - sourceTree = ""; - }; - B0056DAF11F3868000754B65 /* GraphicsEnabler */ = { - isa = PBXGroup; - children = ( - B0056DB011F3868000754B65 /* postinstall */, - ); - path = GraphicsEnabler; - sourceTree = ""; - }; - B0056DB111F3868000754B65 /* GUI */ = { - isa = PBXGroup; - children = ( - B0056DB211F3868000754B65 /* postinstall */, - ); - path = GUI; - sourceTree = ""; - }; - B0056DB311F3868000754B65 /* UHCIreset */ = { - isa = PBXGroup; - children = ( - B0056DB411F3868000754B65 /* postinstall */, - ); - path = UHCIreset; - sourceTree = ""; - }; - B0056DB511F3868000754B65 /* Post */ = { - isa = PBXGroup; - children = ( - B0056DB611F3868000754B65 /* postinstall */, - ); - path = Post; - sourceTree = ""; - }; - B0056DB711F3868000754B65 /* Standard */ = { - isa = PBXGroup; - children = ( - B0056DB811F3868000754B65 /* postinstall */, - ); - path = Standard; - sourceTree = ""; - }; B0056DBA11F3868000754B65 /* artwork */ = { isa = PBXGroup; children = ( @@ -3164,6 +3562,17 @@ French, German, Spanish, + de, + en, + es, + fr, + "hr-HR", + id, + it, + pl, + "pt-BR", + "pt-PT", + sr, ); mainGroup = 08FB7794FE84155DC02AAC07 /* Chameleon */; projectDirPath = ""; @@ -3175,44 +3584,92 @@ /* End PBXProject section */ /* Begin PBXVariantGroup section */ - B0056D8F11F3868000754B65 /* Description.html */ = { + A37D7D4B141B7C6F0069C38B /* Conclusion.rtfd */ = { isa = PBXVariantGroup; children = ( - B0056D9011F3868000754B65 /* English */, - B0056D9711F3868000754B65 /* French */, - B0056D9A11F3868000754B65 /* German */, - B0056D9D11F3868000754B65 /* Spanish */, + A37D7D55141B7C6F0069C38B /* en */, + A37D7D4C141B7C6F0069C38B /* de */, + A37D7D5A141B7C6F0069C38B /* es */, + A37D7D5F141B7C6F0069C38B /* fr */, + A37D7D64141B7C6F0069C38B /* hr-HR */, + A37D7D69141B7C6F0069C38B /* id */, + A37D7D6E141B7C6F0069C38B /* it */, + A37D7D73141B7C6F0069C38B /* pl */, + A37D7D78141B7C6F0069C38B /* pt-BR */, + A37D7D7D141B7C6F0069C38B /* pt-PT */, + A37D7D82141B7C6F0069C38B /* sr */, ); + name = Conclusion.rtfd; + sourceTree = ""; + }; + A37D7D4D141B7C6F0069C38B /* Description.html */ = { + isa = PBXVariantGroup; + children = ( + A37D7D4E141B7C6F0069C38B /* de */, + A37D7D56141B7C6F0069C38B /* en */, + A37D7D5B141B7C6F0069C38B /* es */, + A37D7D60141B7C6F0069C38B /* fr */, + A37D7D65141B7C6F0069C38B /* hr-HR */, + A37D7D6A141B7C6F0069C38B /* id */, + A37D7D6F141B7C6F0069C38B /* it */, + A37D7D74141B7C6F0069C38B /* pl */, + A37D7D79141B7C6F0069C38B /* pt-BR */, + A37D7D7E141B7C6F0069C38B /* pt-PT */, + A37D7D83141B7C6F0069C38B /* sr */, + ); name = Description.html; sourceTree = ""; }; - B0056D9111F3868000754B65 /* License.rtf */ = { + A37D7D4F141B7C6F0069C38B /* License.rtf */ = { isa = PBXVariantGroup; children = ( - B0056D9211F3868000754B65 /* English */, - B0056D9811F3868000754B65 /* French */, - B0056D9B11F3868000754B65 /* German */, - B0056D9E11F3868000754B65 /* Spanish */, + A37D7D50141B7C6F0069C38B /* de */, + A37D7D57141B7C6F0069C38B /* en */, + A37D7D5C141B7C6F0069C38B /* es */, + A37D7D61141B7C6F0069C38B /* fr */, + A37D7D66141B7C6F0069C38B /* hr-HR */, + A37D7D6B141B7C6F0069C38B /* id */, + A37D7D70141B7C6F0069C38B /* it */, + A37D7D75141B7C6F0069C38B /* pl */, + A37D7D7A141B7C6F0069C38B /* pt-BR */, + A37D7D7F141B7C6F0069C38B /* pt-PT */, + A37D7D84141B7C6F0069C38B /* sr */, ); name = License.rtf; sourceTree = ""; }; - B0056D9311F3868000754B65 /* Localizable.strings */ = { + A37D7D51141B7C6F0069C38B /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - B0056D9411F3868000754B65 /* English */, - B0056D9911F3868000754B65 /* French */, - B0056D9C11F3868000754B65 /* German */, - B0056D9F11F3868000754B65 /* Spanish */, + A37D7D58141B7C6F0069C38B /* en */, + A37D7D52141B7C6F0069C38B /* de */, + A37D7D5D141B7C6F0069C38B /* es */, + A37D7D62141B7C6F0069C38B /* fr */, + A37D7D67141B7C6F0069C38B /* hr-HR */, + A37D7D6C141B7C6F0069C38B /* id */, + A37D7D71141B7C6F0069C38B /* it */, + A37D7D76141B7C6F0069C38B /* pl */, + A37D7D7B141B7C6F0069C38B /* pt-BR */, + A37D7D80141B7C6F0069C38B /* pt-PT */, + A37D7D85141B7C6F0069C38B /* sr */, ); name = Localizable.strings; sourceTree = ""; }; - B0056D9511F3868000754B65 /* Welcome.rtfd */ = { + A37D7D53141B7C6F0069C38B /* Welcome.rtfd */ = { isa = PBXVariantGroup; children = ( - B0056D9611F3868000754B65 /* English */, - B0056DA011F3868000754B65 /* Spanish */, + A37D7D59141B7C6F0069C38B /* en */, + A37D7D54141B7C6F0069C38B /* de */, + A37D7D5E141B7C6F0069C38B /* es */, + A37D7D63141B7C6F0069C38B /* fr */, + A37D7D68141B7C6F0069C38B /* hr-HR */, + A37D7D6D141B7C6F0069C38B /* id */, + A37D7D72141B7C6F0069C38B /* it */, + A37D7D77141B7C6F0069C38B /* pl */, + A37D7D7C141B7C6F0069C38B /* pt-BR */, + A37D7D81141B7C6F0069C38B /* pt-PT */, + A37D7D86141B7C6F0069C38B /* sr */, ); name = Welcome.rtfd; sourceTree = ""; Index: branches/ErmaC/i386/MakePaths.dir =================================================================== --- branches/ErmaC/i386/MakePaths.dir (revision 1530) +++ branches/ErmaC/i386/MakePaths.dir (revision 1531) @@ -1,9 +0,0 @@ -# -# Default paths for subdirectories. -# - -OBJROOT=../../obj/i386/$(DIR) -SYMROOT=../../sym/i386 -DSTROOT=../../dst/i386 -SRCROOT=/tmp - Index: branches/ErmaC/i386/libsaio/exfat.c =================================================================== --- branches/ErmaC/i386/libsaio/exfat.c (revision 0) +++ branches/ErmaC/i386/libsaio/exfat.c (revision 1531) @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * Copyright (c) 1999-2004 Apple Computer, Inc. All Rights Reserved. + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +/* + * dmazar, 14/7/2011 + * support for EXFAT volume label reading + * EXFAT info from: http://www.ntfs.com/exfat-overview.htm + * + * EXFAT shares partition type with NTFS (0x7) and easiest way of + * adding it was through ntfs.c module. All functions here are called + * from similar ntfs.c funcs as fallback (if not NTFS, maybe it's EXFAT). + */ + +#include "libsaio.h" +#include "sl.h" + +#ifndef DEBUG_EXFAT +#define DEBUG_EXFAT 0 +#endif + +#if DEBUG_EXFAT +#define DBG(x...) printf(x) +#define PAUSE() getchar() +#else +#define DBG(x...) +#define PAUSE() +#endif + +#define EXFAT_BBID "EXFAT " +#define EXFAT_BBIDLEN 8 + +#define MAX_BLOCK_SIZE 4096 +#define MAX_CLUSTER_SIZE 32 * 1024 * 1024 + +#define ERROR -1 + + +/* + * boot sector of the partition + * http://www.ntfs.com/exfat-boot-sector.htm + */ +struct exfatbootfile { + u_int8_t reserved1[3]; /* JumpBoot: 0xEB7690 */ + u_int8_t bf_sysid[8]; /* FileSystemName: 'EXFAT ' */ + u_int8_t reserved2[53]; /* MustBeZero */ + u_int64_t bf_prtoff; /* PartitionOffset: In sectors; if 0, shall be ignored */ + u_int64_t bf_vollen; /* VolumeLength: Size of exFAT volume in sectors */ + u_int32_t bf_fatoff; /* FatOffset: In sectors */ + u_int32_t bf_fatlen; /* FatLength: In sectors. May exceed the required space in order to align the second FAT */ + u_int32_t bf_cloff; /* ClusterHeapOffset: In sectors. */ + u_int32_t bf_clcnt; /* ClusterCount: 2^32-11 is the maximum number of clusters could be described. */ + u_int32_t bf_rdircl; /* RootDirectoryCluster. */ + u_int32_t bf_volsn; /* VolumeSerialNumber. */ + u_int16_t bf_fsrev; /* FileSystemRevision: as MAJOR.minor, major revision is high byte, minor is low byte; currently 01.00. */ + u_int16_t bf_volflags; /* VolumeFlags. */ + u_int8_t bf_bpss; /* BytesPerSectorShift: Power of 2. Minimum 9 (512 bytes per sector), maximum 12 (4096 bytes per sector) */ + u_int8_t bf_spcs; /* SectorsPerClusterShift: Power of 2. Minimum 0 (1 sector per cluster), maximum 25 РBytesPerSectorShift, so max cluster size is 32 MB */ + u_int8_t bf_nfats; /* NumberOfFats: 2 is for TexFAT only */ + u_int8_t bf_drvs; /* DriveSelect: Extended INT 13h drive number; typically 0x80 */ + u_int8_t bf_pused; /* PercentInUse: 0..100 Рpercentage of allocated clusters rounded down to the integer 0xFF Рpercentage is not available */ + u_int8_t reserved3[7]; /* Reserved */ + u_int8_t bootcode[390]; /* BootCode */ + u_int16_t bf_bsig; /* BootSignature: 0xAA55 */ +}; + +struct direntry_label { + u_int8_t type; /* EntryType: 0x83 (or 0x03 if label is empty) */ + u_int8_t llen; /* CharacterCount: Length in Unicode characters (max 11) */ + u_int16_t label[11]; /* VolumeLabel: Unicode characters (max 11) */ + u_int8_t reserved1[8]; /* Reserved */ +}; + + +/** + * Reads volume label into str. + * Reads boot sector, performs dome checking, loads root dir + * and parses volume label. + */ +void +EXFATGetDescription(CICell ih, char *str, long strMaxLen) +{ + struct exfatbootfile *boot; + u_int32_t bytesPerSector = 0; + u_int32_t sectorsPerCluster = 0; + long long rdirOffset = 0; + char *buf = NULL; + struct direntry_label *dire = NULL; + int loopControl = 0; + + DBG("EXFAT: start %x:%x\n", ih->biosdev, ih->part_no); + + buf = (char *)malloc(MAX_BLOCK_SIZE); + if (buf == 0) + { + goto error; + } + + /* + * Read the boot sector, check signatures, and do some minimal + * sanity checking. NOTE: the size of the read below is intended + * to be a multiple of all supported block sizes, so we don't + * have to determine or change the device's block size. + */ + Seek(ih, 0); + Read(ih, (long)buf, MAX_BLOCK_SIZE); + + // take our boot structure + boot = (struct exfatbootfile *) buf; + + /* + * The first three bytes are an Intel x86 jump instruction. I assume it + * can be the same forms as DOS FAT: + * 0xE9 0x?? 0x?? + * 0xEC 0x?? 0x90 + * where 0x?? means any byte value is OK. + */ + if (boot->reserved1[0] != 0xE9 + && (boot->reserved1[0] != 0xEB || boot->reserved1[2] != 0x90)) + { + goto error; + } + + // Check the "EXFAT " signature. + if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) != 0) + { + goto error; + } + + /* + * Make sure the bytes per sector and sectors per cluster are + * powers of two, and within reasonable ranges. + */ + bytesPerSector = 1 << boot->bf_bpss; /* Just one byte; no swapping needed */ + DBG("EXFAT: bpss=%d, bytesPerSector=%d\n", boot->bf_bpss, bytesPerSector); + if (boot->bf_bpss < 9 || boot->bf_bpss > 12) + { + DBG("EXFAT: invalid bytes per sector shift(%d)\n", boot->bf_bpss); + goto error; + } + + sectorsPerCluster = 1 << boot->bf_spcs; /* Just one byte; no swapping needed */ + DBG("EXFAT: spcs=%d, sectorsPerCluster=%d\n", boot->bf_spcs, sectorsPerCluster); + if (boot->bf_spcs > (25 - boot->bf_bpss)) + { + DBG("EXFAT: invalid sectors per cluster shift (%d)\n", boot->bf_spcs); + goto error; + } + + // calculate root dir cluster offset + rdirOffset = boot->bf_cloff + (boot->bf_rdircl - 2) * sectorsPerCluster; + DBG("EXFAT: rdirOffset=%d\n", rdirOffset); + + // load MAX_BLOCK_SIZE bytes of root dir + Seek(ih, rdirOffset * bytesPerSector); + Read(ih, (long)buf, MAX_BLOCK_SIZE); + DBG("buf 0 1 2 = %x %x %x\n", 0x00ff & buf[0], 0x00ff & buf[1], 0x00ff & buf[2]); + + str[0] = '\0'; + + /* + * Search for volume label dir entry (type 0x83), convert from unicode and put to str. + * Set loopControl var to avoid searching outside of buf. + */ + loopControl = MAX_BLOCK_SIZE / sizeof(struct direntry_label); + dire = (struct direntry_label *)buf; + while (loopControl && dire->type && dire->type != 0x83) + { + dire++; + loopControl--; + } + if (dire->type == 0x83 && dire->llen > 0 && dire->llen <= 11) + { + utf_encodestr( dire->label, (int)dire->llen, (u_int8_t *)str, strMaxLen, OSLittleEndian ); + } + DBG("EXFAT: label=%s\n", str); + + free(buf); + PAUSE(); + return; + + error: + if (buf) free(buf); + DBG("EXFAT: error\n"); + PAUSE(); + return; +} + +/** + * Sets UUID to uuidStr. + * Reads the boot sector, does some checking, generates UUID + * (like the one you get on Windows???) + */ +long EXFATGetUUID(CICell ih, char *uuidStr) +{ + struct exfatbootfile *boot; + void *buf = malloc(MAX_BLOCK_SIZE); + if ( !buf ) + return -1; + + /* + * Read the boot sector, check signatures, and do some minimal + * sanity checking. NOTE: the size of the read below is intended + * to be a multiple of all supported block sizes, so we don't + * have to determine or change the device's block size. + */ + Seek(ih, 0); + Read(ih, (long)buf, MAX_BLOCK_SIZE); + + boot = (struct exfatbootfile *) buf; + + /* + * Check the "EXFAT " signature. + */ + if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) != 0) + return -1; + + // Check for non-null volume serial number + if( !boot->bf_volsn ) + return -1; + + // Use UUID like the one you get on Windows + sprintf(uuidStr, "%04X-%04X", (unsigned short)(boot->bf_volsn >> 16) & 0xFFFF, + (unsigned short)boot->bf_volsn & 0xFFFF); + + DBG("EXFATGetUUID: %x:%x = %s\n", ih->biosdev, ih->part_no, uuidStr); + return 0; +} + +/** + * Returns true if given buffer is the boot rec of the EXFAT volume. + */ +bool EXFATProbe(const void * buffer) +{ + bool result = false; + + // boot sector structure + const struct exfatbootfile * boot = buffer; + + // Looking for EXFAT signature. + if (memcmp((const char *)boot->bf_sysid, EXFAT_BBID, EXFAT_BBIDLEN) == 0) + result = true; + + DBG("EXFATProbe: %d\n", result ? 1 : 0); + return result; +} Index: branches/ErmaC/i386/libsaio/term.h =================================================================== --- branches/ErmaC/i386/libsaio/term.h (revision 0) +++ branches/ErmaC/i386/libsaio/term.h (revision 1531) @@ -0,0 +1,59 @@ +/* + * term.h + * Chameleon + * + * Created by JrCs on 30/08/11. + * Copyright 2011. All rights reserved. + * + */ + +#ifndef __LIBSAIO_TERM_H +#define __LIBSAIO_TERM_H + +#define ASCII_KEY_MASK 0x7f +#define ASCII_KEY(x) ((x & ASCII_KEY_MASK)) + +#define KEY_BKSP 0x0008 +#define KEY_TAB 0x0009 +#define KEY_ENTER 0x000d +#define KEY_ESC 0x001b +#define KEY_PRTSC 0x002a +#define KEY_LEFT 0x4b00 +#define KEY_RIGHT 0x4d00 +#define KEY_UP 0x4800 +#define KEY_DOWN 0x5000 +#define KEY_HOME 0x4700 +#define KEY_END 0x4f00 +#define KEY_CENTER 0x4c00 +#define KEY_INS 0x5200 +#define KEY_DEL 0x5300 +#define KEY_PGUP 0x4900 +#define KEY_PGDN 0x5100 +#define KEY_F1 0x3b00 +#define KEY_F2 0x3c00 +#define KEY_F3 0x3d00 +#define KEY_F4 0x3e00 +#define KEY_F5 0x3f00 +#define KEY_F6 0x4000 +#define KEY_F7 0x4100 +#define KEY_F8 0x4200 +#define KEY_F9 0x4300 +#define KEY_F10 0x4400 +#define KEY_F11 0x5700 +#define KEY_F12 0x5800 + +// Key code for input that shouldn't echoed back +#define KEY_NOECHO 0xff00 + +/* Bitmasks for modifier keys */ +#define STATUS_RSHIFT (1 << 0) +#define STATUS_LSHIFT (1 << 1) +#define STATUS_RCTRL (1 << 2) +#define STATUS_RALT (1 << 3) +#define STATUS_SCROLL (1 << 4) +#define STATUS_NUM (1 << 5) +#define STATUS_CAPS (1 << 6) +#define STATUS_LCTRL (1 << 8) +#define STATUS_LALT (1 << 9) + +#endif /* !__LIBSAIO_TERM_H */ Index: branches/ErmaC/i386/libsaio/exfat.h =================================================================== --- branches/ErmaC/i386/libsaio/exfat.h (revision 0) +++ branches/ErmaC/i386/libsaio/exfat.h (revision 1531) @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 2.0 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +/* + * dmazar, 14/7/2011 + * support for EXFAT volume label reading + * + */ + +extern void EXFATGetDescription(CICell ih, char *str, long strMaxLen); +extern bool EXFATProbe (const void *buf); +extern long EXFATGetUUID(CICell ih, char *uuidStr); Index: branches/ErmaC/i386/libsaio/Makefile =================================================================== --- branches/ErmaC/i386/libsaio/Makefile (revision 1530) +++ branches/ErmaC/i386/libsaio/Makefile (revision 1531) @@ -39,7 +39,7 @@ fake_efi.o ext2fs.o \ hpet.o dram_controllers.o spd.o usb.o pci_setup.o \ device_inject.o nvidia.o ati.o gma.o pci_root.o \ - convert.o aml_generator.o console.o + convert.o aml_generator.o console.o exfat.o SAIO_OBJS := $(addprefix $(OBJROOT)/, $(SAIO_OBJS)) Index: branches/ErmaC/i386/libsaio/nvidia.c =================================================================== --- branches/ErmaC/i386/libsaio/nvidia.c (revision 1530) +++ branches/ErmaC/i386/libsaio/nvidia.c (revision 1531) @@ -835,8 +835,8 @@ // 10A0 - 10AF // 10B0 - 10BF // 10C0 - 10CF + { 0x10DE10C3, "GeForce 8400 GS" }, { 0x10DE10C5, "GeForce 405" }, - { 0x10DE10C3, "GeForce 8400 GS" }, // 1200 - { 0x10DE1200, "GeForce GTX 560 Ti" }, { 0x10DE1201, "GeForce GTX 560" }, Index: branches/ErmaC/i386/libsaio/ntfs.c =================================================================== --- branches/ErmaC/i386/libsaio/ntfs.c (revision 1530) +++ branches/ErmaC/i386/libsaio/ntfs.c (revision 1531) @@ -26,6 +26,11 @@ #include "libsaio.h" #include "sl.h" +/* + * dmazar, 14/7/2011 - support for EXFAT volume label reading + */ +#include "exfat.h" + #define BYTE_ORDER_MARK 0xFEFF #include "ntfs_private.h" @@ -191,6 +196,11 @@ */ if (memcmp((const char *)boot->bf_sysid, "NTFS ", 8) != 0) { + /* + * Check for EXFAT. Finish by jumping to error to free buf, + * although if it is EXFAT then it's no an error. + */ + EXFATGetDescription(ih, str, strMaxLen); goto error; } @@ -316,8 +326,10 @@ boot = (struct bootfile *) buf; // Check for NTFS signature - if ( memcmp((void*)boot->bf_sysid, NTFS_BBID, NTFS_BBIDLEN) != 0 ) - return -1; + if ( memcmp((void*)boot->bf_sysid, NTFS_BBID, NTFS_BBIDLEN) != 0 ) { + // If not NTFS, maybe it is EXFAT + return EXFATGetUUID(ih, uuidStr); + } // Check for non-null volume serial number if( !boot->bf_volsn ) @@ -340,5 +352,9 @@ if (strncmp((const char *)part_bootfile->bf_sysid, NTFS_BBID, NTFS_BBIDLEN) == 0) result = true; + // If not NTFS, maybe it is EXFAT + if (!result) + result = EXFATProbe(buffer); + return result; } Index: branches/ErmaC/i386/libsaio/fake_efi.c =================================================================== --- branches/ErmaC/i386/libsaio/fake_efi.c (revision 1530) +++ branches/ErmaC/i386/libsaio/fake_efi.c (revision 1531) @@ -438,6 +438,7 @@ // Breaks booting from RAID static const char const BOOT_UUID_PROP[] = "boot-uuid"; static char uuidStr[64]; +//Facetime fix end /* * Get an smbios option string option to convert to EFI_CHAR16 string Index: branches/ErmaC/i386/boot0/boot0.s =================================================================== --- branches/ErmaC/i386/boot0/boot0.s (revision 1530) +++ branches/ErmaC/i386/boot0/boot0.s (revision 1531) @@ -628,7 +628,7 @@ ; DS:SI = pointer to Disk Address Packet ; ; Returns: - ; AH = return status (sucess is 0) + ; AH = return status (success is 0) ; carry = 0 success ; 1 error ; @@ -780,7 +780,6 @@ LogString(nv_scaler_str) ret %endif - ;-------------------------------------------------------------------------- ; NULL terminated strings. ; Index: branches/ErmaC/i386/boot0/Cconfig =================================================================== --- branches/ErmaC/i386/boot0/Cconfig (revision 1530) +++ branches/ErmaC/i386/boot0/Cconfig (revision 1531) @@ -12,7 +12,7 @@ config BOOT0_VERBOSE bool "boot0 verbose support" - default n + default y help Say Y here if you want to enable boot0 verbose messages. boot0 will print out status updates as it executes to @@ -21,7 +21,7 @@ config BOOT0_UNSTRETCH bool "boot0 unstretch support" - default y + default n help Say Y here if you want your Chameleon Boot Screen to be unstretched. Requires a nVidia card, and a digital LCD Index: branches/ErmaC/i386/boot2/gui.c =================================================================== --- branches/ErmaC/i386/boot2/gui.c (revision 1530) +++ branches/ErmaC/i386/boot2/gui.c (revision 1531) @@ -9,6 +9,7 @@ */ #include "gui.h" +#include "term.h" #include "appleboot.h" #include "vers.h" @@ -1604,15 +1605,15 @@ key = getchar(); - if( key == kUpArrowkey ) + if( key == KEY_UP ) if( currentline > 0 ) currentline--; - if( key == kDownArrowkey ) + if( key == KEY_DOWN ) if( lines > ( currentline + visiblelines ) ) currentline++; - if( key == kEscapeKey || key == 'q' || key == 'Q') + if( key == KEY_ESC || key == 'q' || key == 'Q') { gui.infobox.draw = false; gui.redraw = true; @@ -1762,7 +1763,7 @@ switch (key) { - case kUpArrowkey: // up arrow + case KEY_UP: // up arrow if (infoMenuSelection > 0) { if(!infoMenuNativeBoot && infoMenuSelection == INFOMENU_NATIVEBOOT_END + 1) @@ -1784,7 +1785,7 @@ } break; - case kDownArrowkey: // down arrow + case KEY_DOWN: // down arrow if (infoMenuSelection < infoMenuItemsCount - 1) { if(!infoMenuNativeBoot && infoMenuSelection == INFOMENU_NATIVEBOOT_START - 1) @@ -1796,7 +1797,7 @@ } break; - case kReturnKey: + case KEY_ENTER: key = 0; if( infoMenuSelection == MENU_SHOW_MEMORY_INFO ) showInfoBox( "Memory Info. Press q to quit.\n", getMemoryInfoString()); Index: branches/ErmaC/i386/boot2/gui.h =================================================================== --- branches/ErmaC/i386/boot2/gui.h (revision 1530) +++ branches/ErmaC/i386/boot2/gui.h (revision 1531) @@ -38,18 +38,6 @@ VerticalLayout = 1 }; -enum { - kBackspaceKey = 0x08, - kTabKey = 0x09, - kReturnKey = '\r', - kEscapeKey = 0x1b, - kUpArrowkey = 0x4800, - kDownArrowkey = 0x5000, - kASCIIKeyMask = 0x7f, - kF5Key = 0x3f00, - kF10Key = 0x4400 -}; - /* * Menu item structure. */ Index: branches/ErmaC/i386/boot2/options.c =================================================================== --- branches/ErmaC/i386/boot2/options.c (revision 1530) +++ branches/ErmaC/i386/boot2/options.c (revision 1531) @@ -27,6 +27,7 @@ #include "fdisk.h" #include "ramdisk.h" #include "gui.h" +#include "term.h" #include "embedded.h" #include "pci.h" @@ -235,11 +236,11 @@ static void updateBootArgs( int key ) { - key &= kASCIIKeyMask; + key = ASCII_KEY(key); switch ( key ) { - case kBackspaceKey: + case KEY_BKSP: if ( gBootArgsPtr > gBootArgs ) { *--gBootArgsPtr = '\0'; @@ -927,7 +928,7 @@ } switch (key) { - case kReturnKey: + case KEY_ENTER: if (gui.menu.draw) { key=0; break; @@ -978,11 +979,11 @@ gBIOSDev = menuBVR->biosdev; break; - case kEscapeKey: + case KEY_ESC: clearBootArgs(); break; - case kF5Key: + case KEY_F5: // New behavior: // Clear gBootVolume to restart the loop // if the user enabled rescanning the optical drive. @@ -993,14 +994,14 @@ } break; - case kF10Key: + case KEY_F10: gScanSingleDrive = false; scanDisks(gBIOSDev, &bvCount); gBootVolume = NULL; clearBootArgs(); break; - case kTabKey: + case KEY_TAB: // New behavior: // Switch between text & graphic interfaces // Only Permitted if started in graphics interface @@ -1460,8 +1461,8 @@ printf("Enter two-digit hexadecimal boot device [%02x]: ", bootdevice); do { key = getchar(); - switch (key & kASCIIKeyMask) { - case kBackspaceKey: + switch (ASCII_KEY(key)) { + case KEY_BKSP: if (digitsI > 0) { int x, y, t; getCursorPositionAndType(&x, &y, &t); @@ -1476,7 +1477,7 @@ } break; - case kReturnKey: + case KEY_ENTER: digits[digitsI] = '\0'; newbootdevice = strtol(digits, &end, 16); if (end == digits && *end == '\0') { @@ -1494,9 +1495,9 @@ break; default: - if (isxdigit(key & kASCIIKeyMask) && digitsI < 2) { - putchar(key & kASCIIKeyMask); - digits[digitsI++] = key & kASCIIKeyMask; + if (isxdigit(ASCII_KEY(key)) && digitsI < 2) { + putchar(ASCII_KEY(key)); + digits[digitsI++] = ASCII_KEY(key); } else { // TODO: Beep or something } @@ -1510,7 +1511,7 @@ bool promptForRescanOption(void) { printf("\nWould you like to enable media rescan option?\nPress ENTER to enable or any key to skip.\n"); - if (getchar() == kReturnKey) { + if (getchar() == KEY_ENTER) { return true; } else { return false; Index: branches/ErmaC/i386/modules/MakeInc.dir =================================================================== --- branches/ErmaC/i386/modules/MakeInc.dir (revision 1530) +++ branches/ErmaC/i386/modules/MakeInc.dir (revision 1531) @@ -7,7 +7,6 @@ IMGSKELROOT = $(SRCROOT)/imgskel CDBOOT = ${IMGROOT}/usr/standalone/i386/cdboot - ifeq ($(BUILT_IN),yes) override OBJROOT = $(SRCROOT)/obj/i386/boot2_modules/$(DIR) override SYMROOT = $(SRCROOT)/obj/i386/ Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-es.slt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-es.slt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-es.slt (revision 1531) @@ -0,0 +1,59 @@ +# Keycode Normal Shift Alt Shift+Alt + +# 1rst Row +keycode 0x02 = 1 VoidSymbol +keycode 0x03 = 2 ! +keycode 0x04 = 3 # +keycode 0x05 = 4 $ +keycode 0x06 = 5 % [ +keycode 0x07 = 6 / \ +keycode 0x08 = 7 & | +keycode 0x09 = 8 * +keycode 0x0a = 9 ( +keycode 0x0b = 0 ) +keycode 0x0c = minus underscore minus +keycode 0x0d = = + +keycode 0x0e = Backspace + +# 2nd Row +keycode 0x0f = Tab +keycode 0x10 = q Q +keycode 0x11 = w W +keycode 0x12 = e E +keycode 0x13 = r R +keycode 0x14 = t T +keycode 0x15 = y Y +keycode 0x16 = u U +keycode 0x17 = i I ^ +keycode 0x18 = o O +keycode 0x19 = p P +keycode 0x1a = VoidSymbol VoidSymbol +keycode 0x1b = ` VoidSymbol | + +# 3rd Row +keycode 0x1e = a A +keycode 0x1f = s S +keycode 0x20 = d D +keycode 0x21 = f F +keycode 0x22 = g G @ , +keycode 0x23 = h H +keycode 0x24 = j J +keycode 0x25 = k K +keycode 0x26 = l L +keycode 0x27 = VoidSymbol VoidSymbol ~ +keycode 0x28 = ; : +keycode 0x2b = ' " ] } + +# 4th Row +keycode 0x29 = < > [ { +keycode 0x2c = z Z +keycode 0x2d = x X +keycode 0x2e = c C +keycode 0x2f = v V +keycode 0x30 = b B +shift alt keycode 0x30 = < +keycode 0x31 = n N > > +keycode 0x32 = m M +keycode 0x33 = , VoidSymbol +keycode 0x34 = . ? +keycode 0x35 = VoidSymbol VoidSymbol Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-fr.slt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-fr.slt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-fr.slt (revision 1531) @@ -0,0 +1,61 @@ +# Keycode Normal Shift Alt Shift+Alt + +# 1ère Ligne +keycode 0x02 = & 1 +keycode 0x03 = VoidSymbol 2 +keycode 0x04 = " 3 +keycode 0x05 = ' 4 +keycode 0x06 = ( 5 { [ +keycode 0x07 = VoidSymbol 6 +keycode 0x08 = VoidSymbol 7 +keycode 0x09 = ! 8 +keycode 0x0a = VoidSymbol 9 +keycode 0x0b = VoidSymbol 0 +keycode 0x0c = ) VoidSymbol } ] +keycode 0x0d = - _ +keycode 0x0e = Backspace + +# 2ème Ligne +keycode 0x0f = Tab +keycode 0x10 = a A +keycode 0x11 = z Z +keycode 0x12 = e E +keycode 0x13 = r R +keycode 0x14 = t T +keycode 0x15 = y Y +keycode 0x16 = u U +keycode 0x17 = i I +keycode 0x18 = o O +keycode 0x19 = p P +keycode 0x1a = ^ VoidSymbol +keycode 0x1b = $ * + +# 3ème Ligne +keycode 0x1e = q Q +keycode 0x1f = s S +keycode 0x20 = d D +keycode 0x21 = f F +keycode 0x22 = g G +keycode 0x23 = h H +keycode 0x24 = j J +keycode 0x25 = k K +keycode 0x26 = l L +shift alt keycode 0x26 = | +keycode 0x27 = m M +keycode 0x28 = VoidSymbol % +keycode 0x2b = ` VoidSymbol @ # + +# 4ème Ligne +keycode 0x29 = < > +keycode 0x2c = w W +keycode 0x2d = x X +keycode 0x2e = c C +keycode 0x2f = v V +keycode 0x30 = b B +keycode 0x31 = n N ~ +keycode 0x32 = , ? +keycode 0x33 = ; . +keycode 0x34 = : / +shift alt keycode 0x34 = \ +keycode 0x35 = = + + Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-se.slt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-se.slt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-se.slt (revision 1531) @@ -0,0 +1,58 @@ +# Keycode Normal Shift Alt Shift+Alt + +# 1rst Row +keycode 0x02 = 1 ! +keycode 0x03 = 2 " +keycode 0x04 = 3 # +keycode 0x05 = 4 VoidSymbol $ +keycode 0x06 = 5 % +keycode 0x07 = 6 & +keycode 0x08 = 7 / | \ +keycode 0x09 = 8 ( [ { +keycode 0x0a = 9 ) ] } +keycode 0x0b = 0 = +keycode 0x0c = + ? +keycode 0x0d = VoidSymbol ` +keycode 0x0e = Backspace + +# 2nd Row +keycode 0x0f = Tab +keycode 0x10 = q Q +keycode 0x11 = w W +keycode 0x12 = e E +keycode 0x13 = r R +keycode 0x14 = t T +keycode 0x15 = y Y +keycode 0x16 = u U +keycode 0x17 = i I ^ +keycode 0x18 = o O +keycode 0x19 = p P +keycode 0x1a = VoidSymbol VoidSymbol VoidSymbol +keycode 0x1b = VoidSymbol ^ ~ ^ + +# 3rd Row +keycode 0x1e = a A +keycode 0x1f = s S +keycode 0x20 = d D +keycode 0x21 = f F +keycode 0x22 = g G , +keycode 0x23 = h H +keycode 0x24 = j J +keycode 0x25 = k K +keycode 0x26 = l L +keycode 0x27 = VoidSymbol VoidSymbol +keycode 0x28 = VoidSymbol VoidSymbol +keycode 0x2b = ' * @ ' + +# 4th Row +keycode 0x29 = < > [ { +keycode 0x2c = z Z +keycode 0x2d = x X +keycode 0x2e = c C +keycode 0x2f = v V +keycode 0x30 = b B +keycode 0x31 = n N +keycode 0x32 = m M +keycode 0x33 = , ; +keycode 0x34 = . : +keycode 0x35 = minus underscore Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-de.slt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-de.slt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-de.slt (revision 1531) @@ -0,0 +1,58 @@ +# Keycode Normal Shift Alt Shift+Alt + +# 1rst Row +keycode 0x02 = 1 ! +keycode 0x03 = 2 " +keycode 0x04 = 3 VoidSymbol +keycode 0x05 = 4 $ +keycode 0x06 = 5 % [ +keycode 0x07 = 6 & ] +keycode 0x08 = 7 / | +keycode 0x09 = 8 ( { +keycode 0x0a = 9 ) } +keycode 0x0b = 0 = +keycode 0x0c = VoidSymbol ? +keycode 0x0d = VoidSymbol VoidSymbol +keycode 0x0e = Backspace + +# 2nd Row +keycode 0x0f = Tab +keycode 0x10 = q Q +keycode 0x11 = w W +keycode 0x12 = e E +keycode 0x13 = r R +keycode 0x14 = t T +keycode 0x15 = y Y +keycode 0x16 = u U +keycode 0x17 = i I +keycode 0x18 = o O +keycode 0x19 = p P +keycode 0x1a = VoidSymbol VoidSymbol +keycode 0x1b = + * + +# 3rd Row +keycode 0x1e = a A +keycode 0x1f = s S +keycode 0x20 = d D +keycode 0x21 = f F +keycode 0x22 = g G +keycode 0x23 = h H +keycode 0x24 = j J +keycode 0x25 = k K +keycode 0x26 = l L +keycode 0x27 = VoidSymbol VoidSymbol +keycode 0x28 = VoidSymbol VoidSymbol +keycode 0x2b = # ' + +# 4th Row +keycode 0x29 = < > +keycode 0x2c = y Y +keycode 0x2d = x X +keycode 0x2e = c C +keycode 0x2f = v V +keycode 0x30 = b B +keycode 0x31 = n N +keycode 0x32 = m M +keycode 0x33 = , ; +keycode 0x34 = . : +keycode 0x35 = minus underscore Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/pc-fr.slt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/pc-fr.slt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/pc-fr.slt (revision 1531) @@ -0,0 +1,58 @@ +# Keycode Normal Shift Alt Shift+Alt + +# 1ère Ligne +keycode 0x29 = < > +keycode 0x02 = & 1 +keycode 0x03 = VoidSymbol 2 ~ +keycode 0x04 = " 3 # +keycode 0x05 = ' 4 { +keycode 0x06 = ( 5 [ +keycode 0x07 = minus 6 | +keycode 0x08 = VoidSymbol 7 ` +keycode 0x09 = underscore 8 \ +keycode 0x0a = VoidSymbol 9 ^ +keycode 0x0b = VoidSymbol 0 @ +keycode 0x0c = ) VoidSymbol ] +keycode 0x0d = = + } +keycode 0x0e = Backspace + +# 2ème Ligne +keycode 0x0f = Tab +keycode 0x10 = a A +keycode 0x11 = z Z +keycode 0x12 = e E +keycode 0x13 = r R +keycode 0x14 = t T +keycode 0x15 = y Y +keycode 0x16 = u U +keycode 0x17 = i I +keycode 0x18 = o O +keycode 0x19 = p P +keycode 0x1a = ^ VoidSymbol +keycode 0x1b = $ VoidSymbol + +# 3ème Ligne +keycode 0x1e = q Q +keycode 0x1f = s S +keycode 0x20 = d D +keycode 0x21 = f F +keycode 0x22 = g G +keycode 0x23 = h H +keycode 0x24 = j J +keycode 0x25 = k K +keycode 0x26 = l L +keycode 0x27 = m M +keycode 0x28 = VoidSymbol % +keycode 0x2b = * VoidSymbol + +# 4ème Ligne +keycode 0x2c = w W +keycode 0x2d = x X +keycode 0x2e = c C +keycode 0x2f = v V +keycode 0x30 = b B +keycode 0x31 = n N +keycode 0x32 = , ? +keycode 0x33 = ; . +keycode 0x34 = : / +keycode 0x35 = ! VoidSymbol Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-it.slt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-it.slt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/mac-it.slt (revision 1531) @@ -0,0 +1,59 @@ +# Keycode Normal Shift Alt Shift+Alt + +# Prima riga +keycode 0x02 = ampersand one +keycode 0x03 = quotedbl two +keycode 0x04 = apostrophe three grave +keycode 0x05 = parenleft four braceleft bracketleft +keycode 0x06 = VoidSymbol five +keycode 0x07 = VoidSymbol six +keycode 0x08 = parenright seven braceright bracketright +keycode 0x09 = VoidSymbol eight +keycode 0x0a = VoidSymbol nine +keycode 0x0b = VoidSymbol zero +keycode 0x0c = minus underscore +keycode 0x0d = equal plus +keycode 0x0e = Backspace + +# Seconda riga +keycode 0x0f = Tab +keycode 0x10 = q Q +keycode 0x11 = z Z +keycode 0x12 = e E +keycode 0x13 = r R +keycode 0x14 = t T +keycode 0x15 = y Y +keycode 0x16 = u U +keycode 0x17 = i I +keycode 0x18 = o O +keycode 0x19 = p P +keycode 0x1a = VoidSymbol ^ +keycode 0x1b = $ * + +# Terza riga +keycode 0x1e = a A +keycode 0x1f = s S +keycode 0x20 = d D +keycode 0x21 = f F +keycode 0x22 = g G +keycode 0x23 = h H +keycode 0x24 = j J +keycode 0x25 = k K +keycode 0x26 = l L +keycode 0x27 = m M +keycode 0x28 = VoidSymbol % +keycode 0x2b = ` VoidSymbol @ # + +# Quarta riga +keycode 0x29 = < > +keycode 0x2c = w W +keycode 0x2d = x X +keycode 0x2e = c C +keycode 0x2f = v V +keycode 0x30 = b B +keycode 0x31 = n N ~ +keycode 0x32 = , ? +keycode 0x33 = ; . +shift alt keycode 0x33 = % +keycode 0x34 = : / | \ +keycode 0x35 = VoidSymbol ! Index: branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/README =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/README (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/layouts-src/README (revision 1531) @@ -0,0 +1,2 @@ +You can create your own keylayout file with the cham-mklayout command with a +source file (*.slt) as input. \ No newline at end of file Index: branches/ErmaC/i386/modules/Keylayout/layouts/cham-mklayout.c =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/cham-mklayout.c (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/cham-mklayout.c (revision 1531) @@ -0,0 +1,373 @@ +/* + * cham-mklayout.c + * Chameleon + * + * Created by JrCs on 30/08/11. + * Copyright 2011. All rights reserved. + * + */ + +#include +#include +#include +#include +#include +#include "stdint.h" +#include "term.h" +#include "keylayout.h" + +#define PACKAGE_NAME "chameleon" +#define PROGRAM_VERSION "1.0" + +static struct keyboard_layout default_layout = { + .keyboard_map = { + /* 0x00 */ 0, KEY_ESC, '1', '2', '3', '4', '5', '6', + /* 0x08 */ '7', '8', '9', '0', '-', '=', KEY_BKSP, KEY_TAB, + /* 0x10 */ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', + /* 0x18 */ 'o', 'p', '[', ']', KEY_ENTER, 0, 'a', 's', + /* 0x20 */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', + /* 0x28 */ '\'', '`', 0, '\\', 'z', 'x', 'c', 'v', + /* 0x30 */ 'b', 'n', 'm', ',', '.', '/', 0, 0 + }, + .keyboard_map_shift = { + /* 0x00 */ 0, KEY_ESC, '!', '@', '#', '$', '%', '^', + /* 0x08 */ '&', '*', '(', ')', '_', '+', KEY_BKSP, 0, + /* 0x10 */ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', + /* 0x18 */ 'O', 'P', '{', '}', KEY_ENTER, 0, 'A', 'S', + /* 0x20 */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', + /* 0x28 */ '"', '~', 0, '|', 'Z', 'X', 'C', 'V', + /* 0x30 */ 'B', 'N', 'M', '<', '>', '?', 0, 0, + }, + .keyboard_map_alt = { + /* 0x00 */ 0, KEY_NOECHO, 0, 0, 0, 0, 0, 0, + /* 0x08 */ 0, 0, 0, 0, 0, 0, KEY_NOECHO, KEY_NOECHO, + /* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x18 */ 0, 0, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, 0, 0, + /* 0x20 */ 0, 0, 0, 0, 0, 0, 0, KEY_NOECHO, + /* 0x28 */ KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, 0, 0, 0, 0, + /* 0x30 */ 0, 0, 0, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, KEY_NOECHO, + }, +}; + +const char* program_name; + +static struct option options[] = { + {"input", required_argument, 0, 'i'}, + {"output", required_argument, 0, 'o'}, + {"keysyms", no_argument, 0, 'k'}, + {"help", no_argument, 0, 'h'}, + {"version", no_argument, 0, 'V'}, + {0, 0, 0, 0} +}; + +struct hash +{ + const char *keysym; + int code; +}; + +static struct hash keysym_to_code[] = { + {"BackSpace", KEY_BKSP}, + {"Tab", KEY_TAB}, + {"Linefeed", 0x000a}, + {"Space", 0x0020}, + {"Exclam", 0x0021}, + {"QuoteDbl", 0x0022}, + {"NumberSign", 0x0023}, + {"Dollar", 0x0024}, + {"Percent", 0x0025}, + {"Ampersand", 0x0026}, + {"Apostrophe", 0x0027}, + {"Parenleft", 0x0028}, + {"Parenright", 0x0029}, + {"Asterisk", 0x002a}, + {"Plus", 0x002b}, + {"Comma", 0x002c}, + {"Minus", 0x002d}, + {"Period", 0x002e}, + {"Slash", 0x002f}, + {"Zero", 0x0030}, + {"One", 0x0031}, + {"Two", 0x0032}, + {"Three", 0x0033}, + {"Four", 0x0034}, + {"Five", 0x0035}, + {"Six", 0x0036}, + {"Seven", 0x0037}, + {"Eight", 0x0038}, + {"Nine", 0x0039}, + {"Colon", 0x003a}, + {"SemiColon", 0x003b}, + {"Less", 0x003c}, + {"Equal", 0x003d}, + {"Greater", 0x003e}, + {"Question", 0x003f}, + {"At", 0x0040}, + {"BracketLeft", 0x005b}, + {"Backslash", 0x005c}, + {"BracketRight",0x005d}, + {"AsciiCircum", 0x005e}, + {"Underscore", 0x005f}, + {"Grave", 0x0060}, + {"BraceLeft", 0x007b}, + {"Bar", 0x007c}, + {"BraceRight", 0x007d}, + {"AsciiTilde", 0x007e}, + {"Enter", KEY_ENTER}, + {"Escape", KEY_ESC}, + {"PrintScreen", KEY_PRTSC}, + {"Left", KEY_LEFT}, + {"Right", KEY_RIGHT}, + {"Up", KEY_UP}, + {"Down", KEY_DOWN}, + {"Home", KEY_HOME}, + {"End", KEY_END}, + {"Center", KEY_CENTER}, + {"Insert", KEY_INS}, + {"Delete", KEY_DEL}, + {"PageUp", KEY_PGUP}, + {"PageDown", KEY_PGDN}, + {"F1", KEY_F1}, + {"F2", KEY_F2}, + {"F3", KEY_F3}, + {"F4", KEY_F4}, + {"F5", KEY_F5}, + {"F6", KEY_F6}, + {"F7", KEY_F7}, + {"F8", KEY_F8}, + {"F9", KEY_F9}, + {"F10", KEY_F10}, + {"F11", KEY_F11}, + {"F12", KEY_F12}, + {"VoidSymbol", KEY_NOECHO}, + {NULL, 0} +}; + + +static void usage (int status) { + if (status) + fprintf (stderr, "Try `%s --help' for more information.\n", program_name); + else + printf ("\ +Usage: %s [OPTIONS]\n\ + -i, --input set input filename.\n\ + -o, --output set output filename.\n\ + -k, --keysyms list recognized keysyms.\n\ + -h, --help display this message and exit.\n\ + -V, --version print version information and exit.\n\ +\n", program_name); + + exit (status); +} + +static void list_keysyms (void) { + int i; + for (i = 0; keysym_to_code[i].keysym != NULL; i++) { + printf("0x%04x\t %s\n", keysym_to_code[i].code, keysym_to_code[i].keysym); + } +} + +static int hash_lookup (const char *keysym, unsigned int *code) { + int i; + for (i = 0; keysym_to_code[i].keysym != NULL; i++) { + if (strcasecmp (keysym, keysym_to_code[i].keysym) == 0) { + *code = keysym_to_code[i].code; + return 0; + } + } + return -1; +} + +static int parse_keysym(const char* str, unsigned int *code) { + // Single character + if (strlen(str) == 1) { + *code=(unsigned char)(str[0]); + if (*code > ASCII_KEY_MASK) + return -1; + return 0; + } + + // Hex character code + if (sscanf(str, "0x%x", code)) + return 0; + + // Keysym + if (hash_lookup(str, code) == 0) + return 0; + + return -1; +} + +int parse_scancode(int linenum, char* code, unsigned int* scancode) { + + char* tmp; + errno = 0; // clear errno + + float parse_value = strtof(code, &tmp); + int rest = strlen(code) - ((void*) tmp - (void*)code); + if (rest != 0 || errno != 0) { + printf("Ignoring line %d: invalid scancode `%s'\n", linenum, code); + return -1; + } + + *scancode = parse_value; + + // Only the first scancodes can be translated + if (*scancode >= KEYBOARD_MAP_SIZE) { + printf("Ignoring line %d: invalid scancode 0x%02x. Scancode must be <= 0x%02x.\n", linenum, *scancode, + KEYBOARD_MAP_SIZE); + return -1; + } + return 0; +} + +void assign_keycode(int linenum, unsigned int scancode, const char* arg, uint16_t* map) { + unsigned int value; + if (parse_keysym(arg, &value) == -1) { + printf("Warning line %d (keycode 0x%02x): invalid symbol %s (must be a true ascii character)\n", + linenum, scancode, arg); + value = KEY_NOECHO; // VoidSymbol + } + map[scancode] = value; +} + +struct keyboard_layout* create_keylayout(FILE* in) { + char line[128], code[sizeof(line)]; + char arg1[sizeof(line)], arg2[sizeof(line)], arg3[sizeof(line)], + arg4[sizeof(line)]; + int n, linenum = 0; + unsigned int scancode; + + struct keyboard_layout* new_layout= malloc(sizeof(*new_layout)); + if (!new_layout) + return NULL; + + // Initialize new keybord layout + memcpy(new_layout, &default_layout, sizeof(*new_layout)); + + while(fgets(line, sizeof(line), in)) { + linenum++; + n = sscanf (line, "keycode %s = %s %s %s %s", code, arg1, arg2, arg3, arg4); + if (n > 1) { + if (parse_scancode(linenum, code, &scancode) == -1) + continue; + if (n >= 2) + assign_keycode(linenum, scancode, arg1, + new_layout->keyboard_map); + if (n >= 3) + assign_keycode(linenum, scancode, arg2, + new_layout->keyboard_map_shift); + if (n >= 4) + assign_keycode(linenum, scancode, arg3, + new_layout->keyboard_map_alt); + if (n >= 5) + assign_keycode(linenum, scancode, arg4, + new_layout->keyboard_map_shift_alt); + } else if (sscanf (line, "shift keycode %s = %s", code, arg1) == 2) { + if (parse_scancode(linenum, code, &scancode) == -1) + continue; + assign_keycode(linenum, scancode, arg1, + new_layout->keyboard_map_shift); + } else if (sscanf (line, "alt keycode %s = %s", code, arg1) == 2) { + if (parse_scancode(linenum, code, &scancode) == -1) + continue; + assign_keycode(linenum, scancode, arg1, + new_layout->keyboard_map_alt); + } else if (sscanf (line, "shift alt keycode %s = %s", code, arg1) == 2) { + if (parse_scancode(linenum, code, &scancode) == -1) + continue; + assign_keycode(linenum, scancode, arg1, + new_layout->keyboard_map_shift_alt); + } + } + return new_layout; +} + +void write_layout(struct keyboard_layout* layout, FILE* out) { + // Create the header + uint32_t version = KEYBOARD_LAYOUTS_VERSION; + fwrite(KEYBOARD_LAYOUTS_MAGIC, KEYBOARD_LAYOUTS_MAGIC_SIZE, 1, out); + fwrite(&version, 1, sizeof(version), out); + // Seek to start of layout + fseek(out, KEYBOARD_LAYOUTS_MAP_OFFSET, SEEK_SET); + // Write layout + fwrite(layout, sizeof(*layout), 1, out); +} + +void set_program_name(const char* arg) { + const char* last_slash; + last_slash = strrchr(arg, '/'); + program_name = (last_slash != NULL) ? last_slash + 1 : arg; +} + +int main (int argc, char *argv[]) { + int ch; + char *infile_name = NULL; + char *outfile_name = NULL; + FILE *in, *out; + + set_program_name (argv[0]); + + /* Check for options. */ + while ((ch = getopt_long (argc, argv, "i:o:hkV", options, 0)) != -1) { + switch (ch) { + case 'h': + usage (0); + break; + + case 'k': + list_keysyms(); + exit(0); + break; + + case 'i': + infile_name = optarg; + break; + + case 'o': + outfile_name = optarg; + break; + + case 'V': + printf ("%s v%s (%s)\n", program_name, PROGRAM_VERSION, PACKAGE_NAME); + return 0; + + default: + usage (1); + break; + } + } + + if (infile_name == NULL) { + fprintf(stderr, "You must specify an input file\n"); + usage(1); + } + + if (outfile_name == NULL) { + fprintf(stderr, "You must specify an output file\n"); + usage(1); + } + + in = fopen (infile_name, "r"); + if (!in) { + fprintf(stderr, "Couldn't open input file `%s': %s\n", + infile_name, strerror (errno)); + exit(1); + } + + out = fopen (outfile_name, "wb"); + if (!out) { + fprintf(stderr, "Couldn't open output file `%s': %s\n", + outfile_name, strerror (errno)); + exit(1); + } + + struct keyboard_layout* new_layout = create_keylayout(in); + if (new_layout) + write_layout(new_layout, out); + + fclose(out); + fclose(in); + + return 0; +} Index: branches/ErmaC/i386/modules/Keylayout/layouts/Makefile =================================================================== --- branches/ErmaC/i386/modules/Keylayout/layouts/Makefile (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/layouts/Makefile (revision 1531) @@ -0,0 +1,56 @@ + +SRCROOT = $(abspath $(CURDIR)/../../../..) +OBJROOT = $(SRCROOT)/obj/i386/util +SYMROOT = $(SRCROOT)/sym/i386 +DSTROOT = $(SRCROOT)/dst/i386 +DOCROOT = $(SRCROOT)/doc +KEYMAPSROOT = $(SRCROOT)/Keymaps + +INC = -I$(SRCROOT)/i386/libsaio/ -I. -I.. + +OBJS = cham-mklayout.o32 cham-mklayout.o64 +OBJS := $(addprefix $(OBJROOT)/, $(OBJS)) + +MKLAYOUT = cham-mklayout +MKLAYOUT := $(addprefix $(SYMROOT)/, $(MKLAYOUT)) + +PROGRAMS = $(MKLAYOUT) + +LAYOUTS_SRC_DIR = layouts-src +KEYBOARD_LAYOUTS = $(patsubst $(LAYOUTS_SRC_DIR)/%.slt, $(KEYMAPSROOT)/%.lyt, \ + $(wildcard $(LAYOUTS_SRC_DIR)/*.slt)) + +DIRS_NEEDED = $(KEYMAPSROOT) + +include ${SRCROOT}/Make.rules + +all: $(DIRS_NEEDED) $(OBJROOT) $(SYMROOT) keymaps + +$(PROGRAMS): $(OBJS) + @echo "\t[LD32] $(@F)_32" + @$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -arch i386 \ + -o $(SYMROOT)/$(@F)_32 $(OBJROOT)/$(@F).o32 + @echo "\t[LD64] $(@F)_64" + @$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -arch x86_64 \ + -o $(SYMROOT)/$(@F)_64 $(OBJROOT)/$(@F).o64 + @echo "\t[LIPO] $(@F)" + @lipo -create -arch i386 $(SYMROOT)/$(@F)_32 -arch x86_64 $(SYMROOT)/$(@F)_64 \ + -output $(SYMROOT)/$(@F) + @$(RM) $(SYMROOT)/$(@F)_32 $(SYMROOT)/$(@F)_64 + +keymaps: $(KEYBOARD_LAYOUTS) + +$(KEYMAPSROOT)/%.lyt: $(LAYOUTS_SRC_DIR)/%.slt $(MKLAYOUT) + @echo "\t[LAYOUT] Creating keyboard layout: $*" + @$(MKLAYOUT) -i $< -o $@ + +#.PHONY layouts +clean-local: + @for o in $(OBJS); do if [ -f "$${o}" ];then echo "\t[RM] $${o}"; fi; done + @for p in $(PROGRAMS); do if [ -f "$${p}" ];then echo "\t[RM] $${p}"; fi; done + @for k in $(KEYBOARD_LAYOUTS); do if [ -f "$${k}" ];then echo "\t[RM] $${k}"; fi; done + @$(RM) -f $(PROGRAMS) $(OBJS) + +distclean-local: + @if [ -d "$(KEYMAPSROOT)" ];then echo "\t[RMDIR] $(KEYMAPSROOT)"; fi + @$(RM) -rf $(KEYMAPSROOT) Index: branches/ErmaC/i386/modules/Keylayout/Keylayout.c =================================================================== --- branches/ErmaC/i386/modules/Keylayout/Keylayout.c (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/Keylayout.c (revision 1531) @@ -0,0 +1,131 @@ +/* + * Keymapper.c + * Chameleon + * + * Created by JrCs on 28/08/11. + * Copyright 2011. All rights reserved. + * + */ + +#include "libsaio.h" +#include "term.h" +#include "modules.h" +#include "Keylayout.h" +#include "bootstruct.h" + +#define kKeyboardLayout "KeyboardLayout" + +struct keyboard_layout *current_layout = NULL; + +int getchar_replacement() { + int code = bgetc(); + int status = readKeyboardShiftFlags(); + uint8_t scancode = code >> 8; + + // Special scancode sent when alt + some keys are pressed + if (scancode >= 0x78 && scancode <= 0x83) + scancode -= 0x76; + + if (scancode < KEYBOARD_MAP_SIZE && !(status & (STATUS_LCTRL| STATUS_RCTRL))) { + int key; + if ((status & (STATUS_LALT|STATUS_RALT)) && + (status & (STATUS_LSHIFT|STATUS_RSHIFT|STATUS_CAPS))) { + key=current_layout->keyboard_map_shift_alt[scancode]; + } + else if (status & (STATUS_LSHIFT|STATUS_RSHIFT|STATUS_CAPS)) + key=current_layout->keyboard_map_shift[scancode]; + else if (status & (STATUS_LALT|STATUS_RALT)) + key=current_layout->keyboard_map_alt[scancode]; + else + key=current_layout->keyboard_map[scancode]; + + if (key != 0) // do the mapping + code = key; + } + + if (ASCII_KEY(code) != 0) // if ascii not null return it + code = ASCII_KEY(code); + + //printf("Code: %04x\n",code); + return (code); +} + +static uint32_t load_keyboard_layout_file(const char *filename) { + int fd; + char magic[KEYBOARD_LAYOUTS_MAGIC_SIZE]; + uint32_t version; + + if ((fd = open_bvdev("bt(0,0)", filename, 0)) < 0) { + goto fail; // fail + } + + if (read(fd, magic, sizeof(magic)) != sizeof(magic)) { + printf("Can't find magic in keyboard layout file: %s\n", filename); + goto fail; + } + + if (memcmp (magic, KEYBOARD_LAYOUTS_MAGIC, KEYBOARD_LAYOUTS_MAGIC_SIZE) != 0) { + printf("Invalid magic code in keyboard layout file: %s\n", filename); + goto fail; + } + + if (read(fd, (char*) &version, sizeof(version)) != sizeof(version)) { + printf("Can't get version of keyboard layout file: %s\n", filename); + goto fail; + } + + if (version != KEYBOARD_LAYOUTS_VERSION) { + verbose("Bad version for keyboard layout file %s expected v%d found v%d\n", + filename, KEYBOARD_LAYOUTS_VERSION, version); + goto fail; + } + + if (current_layout) + free(current_layout); + + current_layout = malloc(sizeof(*current_layout)); + if (!current_layout) + goto fail; + + b_lseek(fd, KEYBOARD_LAYOUTS_MAP_OFFSET, 0); + + if (read(fd, (char*) current_layout, sizeof(*current_layout)) != sizeof(*current_layout)) { + printf("Wrong keyboard layout file %s size\n", filename); + goto fail; + } + + close(fd); + + return 1; + + fail: + + if (current_layout) { + free(current_layout); + current_layout = NULL; + } + return 0; +} + +void Keylayout_start() +{ + char layoutPath[512]; + const char *val; + int len; + + if (getValueForKey("KeyLayout", &val, &len, &bootInfo->chameleonConfig)) { + sprintf(layoutPath, "/Extra/Keymaps/%s", val); + // Add the extension if needed + if (len <= 4 || strcmp(val+len-4,".lyt") != 0) + strncat(layoutPath, ".lyt", sizeof(layoutPath)); + + if (!load_keyboard_layout_file(layoutPath)) { + printf("Can't load %s keyboard layout file. Keylayout will not be used !\n", + layoutPath); + sleep(2); + } else if (!replace_function("_getchar", &getchar_replacement)) { + printf("Can't replace function getchar: Keylayout module can't be used !\n"); + sleep(2); + } + } +} Index: branches/ErmaC/i386/modules/Keylayout/Cconfig =================================================================== --- branches/ErmaC/i386/modules/Keylayout/Cconfig (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/Cconfig (revision 1531) @@ -0,0 +1,10 @@ +# +# Chameleon Modules +# + +config KEYLAYOUT_MODULE + tristate "Keylayout Module" + default m + ---help--- + Say Y here if you want to enable the use of this module. + Index: branches/ErmaC/i386/modules/Keylayout/Readme.txt =================================================================== --- branches/ErmaC/i386/modules/Keylayout/Readme.txt (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/Readme.txt (revision 1531) @@ -0,0 +1,3 @@ +Module: Keylayout +Description: This module permits the user to define the keyboard key mappings +Dependencies: none Index: branches/ErmaC/i386/modules/Keylayout/Keylayout.h =================================================================== --- branches/ErmaC/i386/modules/Keylayout/Keylayout.h (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/Keylayout.h (revision 1531) @@ -0,0 +1,29 @@ +/* + * Keylayout.h + * Chameleon + * + * Created by JrCs on 28/8/11. + * Copyright 2011. All rights reserved. + * + */ + + +#ifndef __KEYLAYOUT_H +#define __KEYLAYOUT_H + +#define KEYBOARD_LAYOUTS_MAGIC "CHAMLAYT" +#define KEYBOARD_LAYOUTS_MAGIC_SIZE (sizeof(KEYBOARD_LAYOUTS_MAGIC) - 1) +#define KEYBOARD_LAYOUTS_VERSION 3 +#define KEYBOARD_LAYOUTS_MAP_OFFSET 0x10 // 0x10 offset of the map in layout file + +#define KEYBOARD_MAP_SIZE 0x38 + +struct keyboard_layout +{ + uint16_t keyboard_map[KEYBOARD_MAP_SIZE]; + uint16_t keyboard_map_shift[KEYBOARD_MAP_SIZE]; + uint16_t keyboard_map_alt[KEYBOARD_MAP_SIZE]; + uint16_t keyboard_map_shift_alt[KEYBOARD_MAP_SIZE]; +}; + +#endif Index: branches/ErmaC/i386/modules/Keylayout/Makefile =================================================================== --- branches/ErmaC/i386/modules/Keylayout/Makefile (revision 0) +++ branches/ErmaC/i386/modules/Keylayout/Makefile (revision 1531) @@ -0,0 +1,14 @@ +MODULE_NAME = Keylayout +MODULE_DESCRIPTION = This module provides keylayout functionality +MODULE_AUTHOR = "JrCs" +MODULE_VERSION = "1.2.0" +MODULE_COMPAT_VERSION = "1.2.0" +MODULE_START = $(MODULE_NAME)_start +MODULE_DEPENDENCIES = + +DIR = Keylayout +SUBDIRS += layouts + +MODULE_OBJS = Keylayout.o + +include ../MakeInc.dir Index: branches/ErmaC/i386/modules/Cconfig =================================================================== --- branches/ErmaC/i386/modules/Cconfig (revision 1530) +++ branches/ErmaC/i386/modules/Cconfig (revision 1531) @@ -7,4 +7,5 @@ source "i386/modules/klibc/Cconfig" source "i386/modules/uClibcxx/Cconfig" source "i386/modules/HelloWorld/Cconfig" -endmenu \ No newline at end of file +source "i386/modules/Keylayout/Cconfig" +endmenu Index: branches/ErmaC/i386/modules/Makefile =================================================================== --- branches/ErmaC/i386/modules/Makefile (revision 1530) +++ branches/ErmaC/i386/modules/Makefile (revision 1531) @@ -29,6 +29,10 @@ SUBDIRS += HelloWorld endif +ifdef CONFIG_KEYLAYOUT_MODULE +SUBDIRS += Keylayout +endif + CFLAGS= -O3 $(MORECPP) -arch i386 -g -static DEFINES= CONFIG = hd Index: branches/ErmaC/package/Scripts/EFI/postinstall =================================================================== --- branches/ErmaC/package/Scripts/EFI/postinstall (revision 1530) +++ branches/ErmaC/package/Scripts/EFI/postinstall (revision 1531) @@ -303,7 +303,7 @@ if [ ${disksignature} == "00000000" ]; then echo "Executing command: fdisk -u -f "${osxvolume}/usr/standalone/i386/${diskloader}" -y ${bootdisk}" - fdisk -u -f "${osxvolume}/usr/standalone/i386/${diskloader}" -y ${bootdisk} #Azipkg + fdisk -u -f "${osxvolume}/usr/standalone/i386/${diskloader}" -y ${bootdisk} else #--------------------------------------------------------------------- # If it exists then Windows is also installed on the HDD and we need to write boot0hfs @@ -311,7 +311,7 @@ #Azipkg: diskloader=boot0 ??? boot0hfs/boot0md - remenber this is for GPT!! echo "Executing command: fdisk -u -f "${osxvolume}/usr/standalone/i386/${diskloader}" -y ${bootdisk}" - fdisk -u -f "${osxvolume}/usr/standalone/i386/${diskloader}" -y ${bootdisk} #Azipkg + fdisk -u -f "${osxvolume}/usr/standalone/i386/${diskloader}" -y ${bootdisk} fi else echo "Diskupdate is false, so no stage 0 file was written" Index: branches/ErmaC/package/Scripts/Keymaps/postinstall.in =================================================================== --- branches/ErmaC/package/Scripts/Keymaps/postinstall.in (revision 0) +++ branches/ErmaC/package/Scripts/Keymaps/postinstall.in (revision 1531) @@ -0,0 +1,34 @@ +#!/usr/bin/python +# Script to add Graphics_Mode for Chameleon boot loaders + +import sys +import os +import shutil + +vol = str(sys.argv[3]) +boot = "/Extra/org.chameleon.Boot.plist" +plist = vol + boot +if not os.path.exists(plist): + shutil.copy('/Library/Preferences/SystemConfiguration/com.apple.Boot.plist', plist) + +infile = open(plist, "r") +# check if Graphics_Mode has been written or not +KeyLayoutCheck = False + +body = "" + +for line in infile: + # if we finish the tags and haven't written KeyLayout Yet + if "" in line and KeyLayoutCheck == False: + line = " KeyLayout\n" + line += " @@KEYMAP@@\n" + line += "\n" + KeyLayoutCheck = True + + body += line + +infile.close() + +outfile = open(plist, "w") +outfile.write(body) +outfile.close() Property changes on: branches/ErmaC/package/Scripts/Keymaps/postinstall.in ___________________________________________________________________ Added: svn:executable + * Index: branches/ErmaC/package/Resources/id.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/en.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/pt-PT.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/es.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/fr.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/fr.lproj/Welcome.rtfd/TXT.rtf =================================================================== --- branches/ErmaC/package/Resources/fr.lproj/Welcome.rtfd/TXT.rtf (revision 1530) +++ branches/ErmaC/package/Resources/fr.lproj/Welcome.rtfd/TXT.rtf (revision 1531) @@ -18,18 +18,19 @@ \fs26 \cf0 \ \pard\ri0\ql\qnatural \cf0 \ -Developeurs : %DEVELOP%\ +D\'e9veloppeurs : %DEVELOP%\ \ -Remerciements : %CREDITS%\ +Remerciements \'e0 : %CREDITS%\ \pard\tx360\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \b0\fs30 \cf0 \ \pard\ri0\ql\qnatural -\b\fs26 \cf0 Pkg : %PKGDEV% +\b\fs26 \cf0 Paquet r\'e9alis\'e9 par : %PKGDEV% \b0\fs30 \ \pard\tx360\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \cf0 \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural -\fs26 \cf0 Copyright \'a9 2011} +\fs26 \cf0 Copyright \'a9 2011 +\b \cf3 Traduit par : jrcs} Index: branches/ErmaC/package/Resources/fr.lproj/Conclusion.rtfd/TXT.rtf =================================================================== --- branches/ErmaC/package/Resources/fr.lproj/Conclusion.rtfd/TXT.rtf (revision 1530) +++ branches/ErmaC/package/Resources/fr.lproj/Conclusion.rtfd/TXT.rtf (revision 1531) @@ -16,7 +16,7 @@ \fs26 \cf0 \ \pard\ri0\qc -\fs50 \cf3 Installation compl\'e8te! +\fs50 \cf3 Installation Termin\'e9e ! \b0\fs26 \cf0 \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural Index: branches/ErmaC/package/Resources/pl.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/It.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/hr-HR.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/pt-BR.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/sr.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/Resources/de.lproj/Localizable.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: branches/ErmaC/package/buildpkg.sh =================================================================== --- branches/ErmaC/package/buildpkg.sh (revision 1530) +++ branches/ErmaC/package/buildpkg.sh (revision 1531) @@ -120,6 +120,7 @@ # NVIDIAGraphicsEnabler.dylib # # Resolution.dylib # # uClibcxx.dylib # + # Keylayout.dylib # ############################### if [ "$(ls -A "${1%/*}/i386/modules")" ]; then { @@ -182,6 +183,27 @@ } fi # - + if [ -e ${1%/*}/i386/modules/Keylayout.dylib ]; then + { + mkdir -p ${1}/Keylayout/Root/Extra/{modules,Keymaps} + mkdir -p ${1}/Keylayout/Root/usr/bin + layout_src_dir="${1%/sym/*}/i386/modules/Keylayout/layouts/layouts-src" + if [ -d "$layout_src_dir" ];then + # Create a tar.gz from layout sources + (cd "$layout_src_dir"; \ + tar czf "${1}/Keylayout/Root/Extra/Keymaps/layouts-src.tar.gz" README *.slt) + fi + # Adding module + ditto --noextattr --noqtn ${1%/*}/i386/modules/Keylayout.dylib ${1}/Keylayout/Root/Extra/modules + # Adding Keymaps + ditto --noextattr --noqtn ${1%/sym/*}/Keymaps ${1}/Keylayout/Root/Extra/Keymaps + # Adding tools + ditto --noextattr --noqtn ${1%/*}/i386/cham-mklayout ${1}/Keylayout/Root/usr/bin + echo " [BUILD] Keylayout " + buildpackage "${1}/Keylayout" "/" "" "start_selected=\"true\"" >/dev/null 2>&1 + } + fi +# - if [ -e ${1%/*}/i386/modules/uClibcxx.dylib ]; then { mkdir -p ${1}/uClibc/Root @@ -264,6 +286,26 @@ done # End build base options packages + # build KeyLayout option packages + echo "================= Keymaps Options =================" + outline[$((outlinecount++))]="${indent[$xmlindent]}\t" + choices[$((choicescount++))]="\n\n" + ((xmlindent++)) + packagesidentity="org.chameleon.options.keylayout" + keymaps=($( find "${1%/sym/*}/Keymaps" -type f -depth 1 -name '*.lyt' | sed 's|.*/||;s|\.lyt||' )) + for (( i = 0 ; i < ${#keymaps[@]} ; i++ )) + do + mkdir -p "${1}/${keymaps[$i]}/Root/" + mkdir -p "${1}/${keymaps[$i]}/Scripts/" + sed "s/@@KEYMAP@@/${keymaps[$i]}/g" "${pkgroot}/Scripts/Keymaps/postinstall" > "${1}/${keymaps[$i]}/Scripts/postinstall" && \ + chmod +rx "${1}/${keymaps[$i]}/Scripts/postinstall" + echo " [BUILD] ${keymaps[$i]} " + buildpackage "${1}/${keymaps[$i]}" "/tmpcham" "" "start_selected=\"false\"" >/dev/null 2>&1 + done + ((xmlindent--)) + outline[$((outlinecount++))]="${indent[$xmlindent]}\t" + # End build KeyLayout option packages + # build resolution packages echo "================= Res. Options =================" outline[$((outlinecount++))]="${indent[$xmlindent]}\t" @@ -283,7 +325,7 @@ ((xmlindent--)) outline[$((outlinecount++))]="${indent[$xmlindent]}\t" # End build resolution packages - + # build Advanced packages echo "================= Adv. Options =================" outline[$((outlinecount++))]="${indent[$xmlindent]}\t" @@ -309,7 +351,7 @@ outline[$((outlinecount++))]="${indent[$xmlindent]}\t" # End build options packages - + # build theme packages echo "================= Themes =================" outline[$((outlinecount++))]="${indent[$xmlindent]}\t" Index: branches/ErmaC/doc/BootHelp.txt =================================================================== --- branches/ErmaC/doc/BootHelp.txt (revision 1530) +++ branches/ErmaC/doc/BootHelp.txt (revision 1531) @@ -72,6 +72,9 @@ and /S/L/E/Extensions.mkext. Default is No but Yes if you use Lion on a Raid partition. + KeyLayout=keymap Use to change the keyboard mapping of the bootloader + (e.g. KeyLayout=mac-fr) + GraphicsEnabler=Yes|No Automatic device-properties generation for gfx cards. AtiConfig= Use a different card config, e.g. AtiConfig=Megalodon. AtiPorts= Specify the number of ports, e.g. AtiPorts=2. Index: branches/ErmaC/Makefile =================================================================== --- branches/ErmaC/Makefile (revision 1530) +++ branches/ErmaC/Makefile (revision 1531) @@ -81,6 +81,14 @@ ifdef CONFIG_BDMESG @cp -f ${SYMROOT}/i386/bdmesg ${IMGROOT}/usr/bin endif +ifdef CONFIG_KEYLAYOUT_MODULE + @cp -f ${SYMROOT}/i386/cham-mklayout ${IMGROOT}/usr/bin + @echo "\t[MKDIR] ${IMGROOT}/Extra/Keymaps" + @mkdir -p ${IMGROOT}/Extra/Keymaps + @echo "\t[CP] Keymaps ${IMGROOT}/Extra/Keymaps" + @cp -R -f "Keymaps"/* "${IMGROOT}/Extra/Keymaps/" +endif + @echo "\t[HDIUTIL] ${ISOIMAGE}" @hdiutil makehybrid -iso -joliet -hfs -hfs-volume-name \ ${CDLABEL} -eltorito-boot ${CDBOOT} -no-emul-boot -ov -o \ @@ -122,14 +130,6 @@ ${SRCROOT}/package/slimpkg.sh ${SYMROOT}/package; ${SRCROOT}/package/builddmg.sh ${SYMROOT}/package; -$(SYMROOT)/i386/vers.h: version - @echo "#define I386BOOT_VERSION \"5.0.132\"" > $@ - @echo "#define I386BOOT_BUILDDATE \"`date \"+%Y-%m-%d %H:%M:%S\"`\"" >> $@ - @echo "#define I386BOOT_CHAMELEONVERSION \"`cat version`\"" >> $@ - @echo "#define I386BOOT_CHAMELEONREVISION \"`svnversion -n | tr -d [:alpha:]`\"" >> $@ - - -.PHONY: $(SYMROOT)/i386/vers.h .PHONY: config .PHONY: clean .PHONY: image