Property changes on: branches/diebuche/ChameleonPrefPane/build ___________________________________________________________________ Added: svn:ignore + * Index: branches/diebuche/ChameleonPrefPane/version.plist =================================================================== --- branches/diebuche/ChameleonPrefPane/version.plist (revision 0) +++ branches/diebuche/ChameleonPrefPane/version.plist (revision 77) @@ -0,0 +1,16 @@ + + + + + BuildVersion + 1 + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + ProjectName + PreferencePaneTemplate + SourceVersion + 270000 + + Index: branches/diebuche/ChameleonPrefPane/APPLE_LICENSE =================================================================== --- branches/diebuche/ChameleonPrefPane/APPLE_LICENSE (revision 0) +++ branches/diebuche/ChameleonPrefPane/APPLE_LICENSE (revision 77) @@ -0,0 +1,367 @@ +APPLE PUBLIC SOURCE LICENSE +Version 2.0 - August 6, 2003 + +Please read this License carefully before downloading this software. +By downloading or using this software, you are agreeing to be bound by +the terms of this License. If you do not or cannot agree to the terms +of this License, please do not download or use the software. + +1. General; Definitions. This License applies to any program or other +work which Apple Computer, Inc. ("Apple") makes publicly available and +which contains a notice placed by Apple identifying such program or +work as "Original Code" and stating that it is subject to the terms of +this Apple Public Source License version 2.0 ("License"). As used in +this License: + +1.1 "Applicable Patent Rights" mean: (a) in the case where Apple is +the grantor of rights, (i) claims of patents that are now or hereafter +acquired, owned by or assigned to Apple and (ii) that cover subject +matter contained in the Original Code, but only to the extent +necessary to use, reproduce and/or distribute the Original Code +without infringement; and (b) in the case where You are the grantor of +rights, (i) claims of patents that are now or hereafter acquired, +owned by or assigned to You and (ii) that cover subject matter in Your +Modifications, taken alone or in combination with Original Code. + +1.2 "Contributor" means any person or entity that creates or +contributes to the creation of Modifications. + +1.3 "Covered Code" means the Original Code, Modifications, the +combination of Original Code and any Modifications, and/or any +respective portions thereof. + +1.4 "Externally Deploy" means: (a) to sublicense, distribute or +otherwise make Covered Code available, directly or indirectly, to +anyone other than You; and/or (b) to use Covered Code, alone or as +part of a Larger Work, in any way to provide a service, including but +not limited to delivery of content, through electronic communication +with a client other than You. + +1.5 "Larger Work" means a work which combines Covered Code or portions +thereof with code not governed by the terms of this License. + +1.6 "Modifications" mean any addition to, deletion from, and/or change +to, the substance and/or structure of the Original Code, any previous +Modifications, the combination of Original Code and any previous +Modifications, and/or any respective portions thereof. When code is +released as a series of files, a Modification is: (a) any addition to +or deletion from the contents of a file containing Covered Code; +and/or (b) any new file or other representation of computer program +statements that contains any part of Covered Code. + +1.7 "Original Code" means (a) the Source Code of a program or other +work as originally made available by Apple under this License, +including the Source Code of any updates or upgrades to such programs +or works made available by Apple under this License, and that has been +expressly identified by Apple as such in the header file(s) of such +work; and (b) the object code compiled from such Source Code and +originally made available by Apple under this License. + +1.8 "Source Code" means the human readable form of a program or other +work that is suitable for making modifications to it, including all +modules it contains, plus any associated interface definition files, +scripts used to control compilation and installation of an executable +(object code). + +1.9 "You" or "Your" means an individual or a legal entity exercising +rights under this License. For legal entities, "You" or "Your" +includes any entity which controls, is controlled by, or is under +common control with, You, where "control" means (a) the power, direct +or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (b) ownership of fifty percent +(50%) or more of the outstanding shares or beneficial ownership of +such entity. + +2. Permitted Uses; Conditions & Restrictions. Subject to the terms +and conditions of this License, Apple hereby grants You, effective on +the date You accept this License and download the Original Code, a +world-wide, royalty-free, non-exclusive license, to the extent of +Apple's Applicable Patent Rights and copyrights covering the Original +Code, to do the following: + +2.1 Unmodified Code. You may use, reproduce, display, perform, +internally distribute within Your organization, and Externally Deploy +verbatim, unmodified copies of the Original Code, for commercial or +non-commercial purposes, provided that in each instance: + +(a) You must retain and reproduce in all copies of Original Code the +copyright and other proprietary notices and disclaimers of Apple as +they appear in the Original Code, and keep intact all notices in the +Original Code that refer to this License; and + +(b) You must include a copy of this License with every copy of Source +Code of Covered Code and documentation You distribute or Externally +Deploy, and You may not offer or impose any terms on such Source Code +that alter or restrict this License or the recipients' rights +hereunder, except as permitted under Section 6. + +2.2 Modified Code. You may modify Covered Code and use, reproduce, +display, perform, internally distribute within Your organization, and +Externally Deploy Your Modifications and Covered Code, for commercial +or non-commercial purposes, provided that in each instance You also +meet all of these conditions: + +(a) You must satisfy all the conditions of Section 2.1 with respect to +the Source Code of the Covered Code; + +(b) You must duplicate, to the extent it does not already exist, the +notice in Exhibit A in each file of the Source Code of all Your +Modifications, and cause the modified files to carry prominent notices +stating that You changed the files and the date of any change; and + +(c) If You Externally Deploy Your Modifications, You must make +Source Code of all Your Externally Deployed Modifications either +available to those to whom You have Externally Deployed Your +Modifications, or publicly available. Source Code of Your Externally +Deployed Modifications must be released under the terms set forth in +this License, including the license grants set forth in Section 3 +below, for as long as you Externally Deploy the Covered Code or twelve +(12) months from the date of initial External Deployment, whichever is +longer. You should preferably distribute the Source Code of Your +Externally Deployed Modifications electronically (e.g. download from a +web site). + +2.3 Distribution of Executable Versions. In addition, if You +Externally Deploy Covered Code (Original Code and/or Modifications) in +object code, executable form only, You must include a prominent +notice, in the code itself as well as in related documentation, +stating that Source Code of the Covered Code is available under the +terms of this License with information on how and where to obtain such +Source Code. + +2.4 Third Party Rights. You expressly acknowledge and agree that +although Apple and each Contributor grants the licenses to their +respective portions of the Covered Code set forth herein, no +assurances are provided by Apple or any Contributor that the Covered +Code does not infringe the patent or other intellectual property +rights of any other entity. Apple and each Contributor disclaim any +liability to You for claims brought by any other entity based on +infringement of intellectual property rights or otherwise. As a +condition to exercising the rights and licenses granted hereunder, You +hereby assume sole responsibility to secure any other intellectual +property rights needed, if any. For example, if a third party patent +license is required to allow You to distribute the Covered Code, it is +Your responsibility to acquire that license before distributing the +Covered Code. + +3. Your Grants. In consideration of, and as a condition to, the +licenses granted to You under this License, You hereby grant to any +person or entity receiving or distributing Covered Code under this +License a non-exclusive, royalty-free, perpetual, irrevocable license, +under Your Applicable Patent Rights and other intellectual property +rights (other than patent) owned or controlled by You, to use, +reproduce, display, perform, modify, sublicense, distribute and +Externally Deploy Your Modifications of the same scope and extent as +Apple's licenses under Sections 2.1 and 2.2 above. + +4. Larger Works. You may create a Larger Work by combining Covered +Code with other code not governed by the terms of this License and +distribute the Larger Work as a single product. In each such instance, +You must make sure the requirements of this License are fulfilled for +the Covered Code or any portion thereof. + +5. Limitations on Patent License. Except as expressly stated in +Section 2, no other patent rights, express or implied, are granted by +Apple herein. Modifications and/or Larger Works may require additional +patent licenses from Apple which Apple may grant in its sole +discretion. + +6. Additional Terms. You may choose to offer, and to charge a fee for, +warranty, support, indemnity or liability obligations and/or other +rights consistent with the scope of the license granted herein +("Additional Terms") to one or more recipients of Covered Code. +However, You may do so only on Your own behalf and as Your sole +responsibility, and not on behalf of Apple or any Contributor. You +must obtain the recipient's agreement that any such Additional Terms +are offered by You alone, and You hereby agree to indemnify, defend +and hold Apple and every Contributor harmless for any liability +incurred by or claims asserted against Apple or such Contributor by +reason of any such Additional Terms. + +7. Versions of the License. Apple may publish revised and/or new +versions of this License from time to time. Each version will be given +a distinguishing version number. Once Original Code has been published +under a particular version of this License, You may continue to use it +under the terms of that version. You may also choose to use such +Original Code under the terms of any subsequent version of this +License published by Apple. No one other than Apple has the right to +modify the terms applicable to Covered Code created under this +License. + +8. NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in +part pre-release, untested, or not fully tested works. The Covered +Code may contain errors that could cause failures or loss of data, and +may be incomplete or contain inaccuracies. You expressly acknowledge +and agree that use of the Covered Code, or any portion thereof, is at +Your sole and entire risk. THE COVERED CODE IS PROVIDED "AS IS" AND +WITHOUT WARRANTY, UPGRADES OR SUPPORT OF ANY KIND AND APPLE AND +APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE +PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM +ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR +PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. APPLE AND EACH CONTRIBUTOR DOES NOT WARRANT AGAINST +INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE +FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, +THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR +ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO +ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE, AN APPLE +AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY. +You acknowledge that the Covered Code is not intended for use in the +operation of nuclear facilities, aircraft navigation, communication +systems, or air traffic control machines in which case the failure of +the Covered Code could lead to death, personal injury, or severe +physical or environmental damage. + +9. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO +EVENT SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING +TO THIS LICENSE OR YOUR USE OR INABILITY TO USE THE COVERED CODE, OR +ANY PORTION THEREOF, WHETHER UNDER A THEORY OF CONTRACT, WARRANTY, +TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR OTHERWISE, EVEN IF +APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY +REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF +INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY +TO YOU. In no event shall Apple's total liability to You for all +damages (other than as may be required by applicable law) under this +License exceed the amount of fifty dollars ($50.00). + +10. Trademarks. This License does not grant any rights to use the +trademarks or trade names "Apple", "Apple Computer", "Mac", "Mac OS", +"QuickTime", "QuickTime Streaming Server" or any other trademarks, +service marks, logos or trade names belonging to Apple (collectively +"Apple Marks") or to any trademark, service mark, logo or trade name +belonging to any Contributor. You agree not to use any Apple Marks in +or as part of the name of products derived from the Original Code or +to endorse or promote products derived from the Original Code other +than as expressly permitted by and in strict compliance at all times +with Apple's third party trademark usage guidelines which are posted +at http://www.apple.com/legal/guidelinesfor3rdparties.html. + +11. Ownership. Subject to the licenses granted under this License, +each Contributor retains all rights, title and interest in and to any +Modifications made by such Contributor. Apple retains all rights, +title and interest in and to the Original Code and any Modifications +made by or on behalf of Apple ("Apple Modifications"), and such Apple +Modifications will not be automatically subject to this License. Apple +may, at its sole discretion, choose to license such Apple +Modifications under this License, or on different terms from those +contained in this License or may choose not to license them at all. + +12. Termination. + +12.1 Termination. This License and the rights granted hereunder will +terminate: + +(a) automatically without notice from Apple if You fail to comply with +any term(s) of this License and fail to cure such breach within 30 +days of becoming aware of such breach; + +(b) immediately in the event of the circumstances described in Section +13.5(b); or + +(c) automatically without notice from Apple if You, at any time during +the term of this License, commence an action for patent infringement +against Apple; provided that Apple did not first commence +an action for patent infringement against You in that instance. + +12.2 Effect of Termination. Upon termination, You agree to immediately +stop any further use, reproduction, modification, sublicensing and +distribution of the Covered Code. All sublicenses to the Covered Code +which have been properly granted prior to termination shall survive +any termination of this License. Provisions which, by their nature, +should remain in effect beyond the termination of this License shall +survive, including but not limited to Sections 3, 5, 8, 9, 10, 11, +12.2 and 13. No party will be liable to any other for compensation, +indemnity or damages of any sort solely as a result of terminating +this License in accordance with its terms, and termination of this +License will be without prejudice to any other right or remedy of +any party. + +13. Miscellaneous. + +13.1 Government End Users. The Covered Code is a "commercial item" as +defined in FAR 2.101. Government software and technical data rights in +the Covered Code include only those rights customarily provided to the +public as defined in this License. This customary commercial license +in technical data and software is provided in accordance with FAR +12.211 (Technical Data) and 12.212 (Computer Software) and, for +Department of Defense purchases, DFAR 252.227-7015 (Technical Data -- +Commercial Items) and 227.7202-3 (Rights in Commercial Computer +Software or Computer Software Documentation). Accordingly, all U.S. +Government End Users acquire Covered Code with only those rights set +forth herein. + +13.2 Relationship of Parties. This License will not be construed as +creating an agency, partnership, joint venture or any other form of +legal association between or among You, Apple or any Contributor, and +You will not represent to the contrary, whether expressly, by +implication, appearance or otherwise. + +13.3 Independent Development. Nothing in this License will impair +Apple's right to acquire, license, develop, have others develop for +it, market and/or distribute technology or products that perform the +same or similar functions as, or otherwise compete with, +Modifications, Larger Works, technology or products that You may +develop, produce, market or distribute. + +13.4 Waiver; Construction. Failure by Apple or any Contributor to +enforce any provision of this License will not be deemed a waiver of +future enforcement of that or any other provision. Any law or +regulation which provides that the language of a contract shall be +construed against the drafter will not apply to this License. + +13.5 Severability. (a) If for any reason a court of competent +jurisdiction finds any provision of this License, or portion thereof, +to be unenforceable, that provision of the License will be enforced to +the maximum extent permissible so as to effect the economic benefits +and intent of the parties, and the remainder of this License will +continue in full force and effect. (b) Notwithstanding the foregoing, +if applicable law prohibits or restricts You from fully and/or +specifically complying with Sections 2 and/or 3 or prevents the +enforceability of either of those Sections, this License will +immediately terminate and You must immediately discontinue any use of +the Covered Code and destroy all copies of it that are in your +possession or control. + +13.6 Dispute Resolution. Any litigation or other dispute resolution +between You and Apple relating to this License shall take place in the +Northern District of California, and You and Apple hereby consent to +the personal jurisdiction of, and venue in, the state and federal +courts within that District with respect to this License. The +application of the United Nations Convention on Contracts for the +International Sale of Goods is expressly excluded. + +13.7 Entire Agreement; Governing Law. This License constitutes the +entire agreement between the parties with respect to the subject +matter hereof. This License shall be governed by the laws of the +United States and the State of California, except that body of +California law concerning conflicts of law. + +Where You are located in the province of Quebec, Canada, the following +clause applies: The parties hereby confirm that they have requested +that this License and all related documents be drafted in English. Les +parties ont exige que le present contrat et tous les documents +connexes soient rediges en anglais. + +EXHIBIT A. + +"Portions Copyright (c) 1999-2003 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." Index: branches/diebuche/ChameleonPrefPane/Sources/ChameleonPropertyList.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/ChameleonPropertyList.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/ChameleonPropertyList.h (revision 77) @@ -0,0 +1,176 @@ +/* + * ChameleonPropertyList.h + * ChameleonPrefPane + * + * Created by Rekursor on 1/22/10. + * + */ +#ifndef __CHBOOT_PROPERTYLIST_LIST_H +#define __CHBOOT_PROPERTYLIST_LIST_H + +#include "PropertyList.h" +#include + +//-------------------------------------------------------------------------- +// Chameleon Boot options type +//-------------------------------------------------------------------------- +typedef enum +{ + OptionYesNo=0, // "Yes" or "No" + OptionString, // String Content + OptionFileString, // like String but with file dialog caps + OptionUnix, // Unix like command option like -x, -v ... + OptionKernel, // kernel cmd like "mach_kernel" or "blacklist=0" + OptionKernel1 // kernel cmd like "mach_kernel" or "blacklist=0" + +} BootOptionType; + +typedef enum PropertyKind +{ + KindPreferencesFile, + KindBootConfigFile, + KindSmbiosConfigFile +}; + +struct BootOptionDesc; + +typedef bool (*FieldValidator) (BootOptionDesc* bod); + +//-------------------------------------------------------------------------- +// Boot Option descriptor : +// used by all derived class to permit parameters handling automation ... +//-------------------------------------------------------------------------- +struct BootOptionDesc +{ + BootOptionDesc(void* i, void * c, BootOptionType t, const char* n, const char* d, + FieldValidator validator=NULL, PropertyKind kind=KindBootConfigFile) : + ID(i), contentID(c), Type(t), Name(n), Default(d), + Validator(validator), Kind(kind) + { + + } + void* ID; // the corresponding button or textfield in the interface + void* contentID; // the corresponding content ID (i.e: the string content for text fields) + BootOptionType Type; + const char * Name; + FieldValidator Validator; + PropertyKind Kind; + const char * Default; + +} ; + +//-------------------------------------------------------------------------- + +/** + * Specialization of PropertyList with Chameleon Boot Config, fast id key to desc search features + */ +class ChameleonPropertyList : public PropertyList +{ +protected: + ChameleonPropertyList() { } +public: + virtual ~ChameleonPropertyList() { deleteOptionDesc(); } + + // id to map BootOptionDesc handling + void addOptionDesc(void * ID, void* cID, BootOptionType t, const char * szName, const char* szDefault, + FieldValidator validator=NULL, PropertyKind kind=KindBootConfigFile) + + { + if (ID) _idToDescDict[ID] = + new BootOptionDesc(ID, cID, t, szName? szName : "", szDefault ? szDefault : ""); + if (cID) _contentIdToDescDict[cID] = + new BootOptionDesc(ID, cID, t, szName? szName : "", szDefault ? szDefault : ""); + } + + // find the desc corresponding to id: + const BootOptionDesc* findOption(void *ID) const + { + std::map::const_iterator bod; + if (!ID || (bod=_idToDescDict.find(ID))==_idToDescDict.end()) return NULL; + return bod->second; + } + + // find the option bod corresponding to contentID + const BootOptionDesc* findOptionContent(void *cID) const + { + std::map::const_iterator bod; + if (!cID || (bod=_contentIdToDescDict.find(cID))==_contentIdToDescDict.end()) return NULL; + return bod->second; + } + + // opaque enumeration for the map + const BootOptionDesc* firstOption() + { + _bod=_idToDescDict.begin(); + if (_bod!= _idToDescDict.end()) return _bod->second; else return NULL; + } + + const BootOptionDesc* nextOption() + { + if(_bod++ ==_idToDescDict.end()) return NULL; + if (_bod != _idToDescDict.end()) return _bod->second; else return NULL; + } + + + // remove all elements in dict, calls deleteOptionsDesc() + void clearOptionDesc(); + +protected: + void deleteOptionDesc(); + + // dictionary for id -> desc and contentID -> desc association type + std::map _idToDescDict, _contentIdToDescDict; + std::map::const_iterator _bod; +}; + +//-------------------------------------------------------------------------- +// Concrete definition of Chameleon property lists +// implements the Singleton DP +//-------------------------------------------------------------------------- + +class BootProp : public ChameleonPropertyList { +public: + static BootProp& instance() + { + return _instance ? *_instance : *(_instance=new BootProp()); + } + +protected: + BootProp() : ChameleonPropertyList() {} + +private: + static BootProp* _instance; +}; + +//-------------------------------------------------------------------------- +class PrefsProp : public ChameleonPropertyList { +public: + static PrefsProp& instance() + { + return _instance ? *_instance : *(_instance=new PrefsProp()); + } + +protected: + PrefsProp() : ChameleonPropertyList() {} + +private: + static PrefsProp* _instance; +}; + +//-------------------------------------------------------------------------- +class SmbiosProp : public ChameleonPropertyList { +public: + static SmbiosProp& instance() + { + return _instance ? *_instance : *(_instance=new SmbiosProp()); + } + +protected: + SmbiosProp() : ChameleonPropertyList() {} + +private: + static SmbiosProp* _instance; +}; + + +#endif \ No newline at end of file Index: branches/diebuche/ChameleonPrefPane/Sources/ChameleonPrefPane.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/ChameleonPrefPane.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/ChameleonPrefPane.mm (revision 77) @@ -0,0 +1,429 @@ +// +// StartupPrefPanePref.mm +// +// Created by Rekursor on 1/16/10. +// + +#import "ChameleonPrefPane.h" +#import "BootSetupController.h" +#import "BootFlagsController.h" +#import "PeripheralsController.h" +#import "AdvancedSetupController.h" + +#include "ShellProcess.h" +#import "ChameleonPropertyList.h" +#include + +//-------------------------------------------------------------------------- +// Constants +//-------------------------------------------------------------------------- +static const char * const szBootPaths[]= { + "/", + "/Extra/", + "/Volumes/EFI/Extra/", + "/Volumes/Cham/Extra/", + "/Volumes/BootLoaders/Extra/", + "/Volumes/RX0/Extra/", + "/Library/Preferences/SystemConfiguration/", + NULL +}; + +static const char* const szPropFileName = "com.apple.Boot.plist"; + +static const int CurrentPreferencesFileVersion = 0x02; // for future back compatibility +//-------------------------------------------------------------------------- +// Static file variables +//-------------------------------------------------------------------------- +static std::string sCurrentDefaultPartition; + +PartitionExtractor * partExtractor=NULL; + +static int currentRowSel = -1; +static ChameleonPrefPane *gInstance = NULL; + +//-------------------------------------------------------------------------- + +@implementation ChameleonPrefPane + ++ (ChameleonPrefPane *)instance { return(gInstance);} + +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + gInstance = self; + + // set the image to display the current file being played + mMacOSXImage = [self getImageResource: @"MacOSX" ofType: @"png"]; + mWindowsImage = [self getImageResource: @"Windows" ofType: @"png"]; + mLinuxImage = [self getImageResource: @"Linux" ofType: @"png"]; + mCDROMImage = [self getImageResource: @"CDROM" ofType: @"png"]; + mUnknownImage = [self getImageResource: @"Chameleon" ofType: @"tiff"]; + + + // create the process that will extract the diskutil list infos + if(!partExtractor) partExtractor = new PartitionExtractor(); + + // Retrieve the com.chameleon.prefPane.plist config + return self; +} +- (void)dealloc +{ + // release the colors + [mOptionsDict release]; + [mPartitionsDict release]; + + [super dealloc]; +} + +- (NSMutableDictionary*) preferencesFile { return mOptionsDict; } +- (NSMutableDictionary*) preferencesParts { return mPartitionsDict; } +- (NSTableView*) partitionsTable { return mPartitionsTable;} + +//-------------------------------------------------------------------------- +-(bool) savePreferences: (NSDictionary*) dict +{ + std::string sPath = [kPreferencesFilePath UTF8String]; + + if(dict==nil || sPath.length()==0) return false; + + AuthorizationRef auth = [self isUnlocked] ? [[authView authorization] authorizationRef] : NULL; + + PropertyList::chmodFile(sPath.c_str(), "0777", auth); + [dict writeToFile:kPreferencesFilePath atomically:YES]; + PropertyList::chmodFile(sPath.c_str(), "0644", auth); + return true; +} + +//-------------------------------------------------------------------------- +// SFAuthorization implementation +//-------------------------------------------------------------------------- + +// SFAuthorization delegates +- (void)authorizationViewDidAuthorize:(SFAuthorizationView *)view { + [self selectDefaultPartition]; + [self refreshLockStates]; + +} + +//-------------------------------------------------------------------------- +- (void)authorizationViewDidDeauthorize:(SFAuthorizationView *)view { + [self refreshLockStates]; +} + +//-------------------------------------------------------------------------- +// Setup security for changing boot options +-(void) initAuthorization +{ + AuthorizationItem items = {kAuthorizationRightExecute, 0, NULL, 0}; + AuthorizationRights rights = {1, &items}; + + [authView setAuthorizationRights:&rights]; + authView.delegate = self; + [authView updateStatus:nil]; +} +//-------------------------------------------------------------------------- +- ( AuthorizationRef) auth +{ + return [self isUnlocked] ? [[authView authorization] authorizationRef] : NULL; + +} + +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + [mPartitionsTable setEnabled:[self isUnlocked]]; + [mStatusText setEnabled:[self isUnlocked]]; + + // Refresh other panels + [PreferencesControllerBase doForEachGroup: RefreshLockStates withOption: nil]; +} + + +//-------------------------------------------------------------------------- +- (bool)isUnlocked +{ + return [authView authorizationState] == SFAuthorizationViewUnlockedState; +} + +//-------------------------------------------------------------------------- +- (id) getImageResource: (NSString *) str ofType: (NSString*) sType +{ + NSImage * img=nil; + if(!str) return nil; + NSBundle * b = [NSBundle bundleForClass:[self class]]; + NSString* sRes = [b pathForResource: str ofType:sType ]; + img = [[NSImage alloc] initWithContentsOfFile: sRes]; + return img; +} + + +//-------------------------------------------------------------------------- +/** When called here, all outlets references are initialized */ +- (void)awakeFromNib +{ // called more than once, we only need one resource init + static bool ft=true; + if(ft) + { + ft=false; + [self loadPreferences]; + [self initBootConfig]; + } +} + +//-------------------------------------------------------------------------- +- (void) loadPreferences +{ +// PrefsProp::instance().open([kPreferencesFilePath UTF8String], CreateIfNotExist, +// [self auth]); + + // test with preferences file already created and when no prefs exists + + id oldGlobalPreferences = [ [NSDictionary dictionaryWithContentsOfFile: + kPreferencesFilePath ] retain]; + + mPartitionsDict = [[NSMutableDictionary alloc] init]; + [mPartitionsDict retain]; + + // Initialize bootConfig desc dict + [PreferencesControllerBase doForEachGroup: AddOptionsDesc withOption: nil]; + + if (oldGlobalPreferences!=nil) + { + mPreferenceFileVersion= [[oldGlobalPreferences objectForKey: keyPreferencesFileVersion] intValue ]; + [PreferencesControllerBase doForEachGroup: LoadPreferencesOptions withOption: oldGlobalPreferences]; + [mPartitionsDict addEntriesFromDictionary: [oldGlobalPreferences objectForKey: keyPartitionsList] ]; + } + else + { // Create a preference plist file with Defaults values + oldGlobalPreferences = [[NSMutableDictionary alloc] init]; + [PreferencesControllerBase doForEachGroup: SetDefaultValues withOption: oldGlobalPreferences]; + + // Initialize defaults + [oldGlobalPreferences setObject: [[NSNumber alloc] initWithInt: CurrentPreferencesFileVersion] + forKey: keyPreferencesFileVersion]; + [oldGlobalPreferences setObject: mPartitionsDict forKey: keyPartitionsList]; + + // Save the preferences file + [ self savePreferences:oldGlobalPreferences ]; + } + + mOptionsDict = [[NSMutableDictionary alloc] init]; + [mOptionsDict addEntriesFromDictionary:oldGlobalPreferences]; + if (mPartitionsDict!=nil) [mPartitionsDict retain]; + [oldGlobalPreferences release]; +} + +//-------------------------------------------------------------------------- +- (void) initBootConfig +{ + static bool ft=true; + + [self initAuthorization]; + + if (!BootProp::instance().isValid()) + { + std::string sPath; + CFStringRef errorString=NULL; + bool cont =true; + + id sForcedPath = [mOptionsDict valueForKey: keyForceBootConfigPath]; + const char * szForcedPath = sForcedPath!=nil ? [sForcedPath UTF8String] : NULL; + if (szForcedPath && *szForcedPath) + { + cont = !BootProp::instance().open(szForcedPath, [self auth]); + } + else { + for(int i=0; szBootPaths[i] && cont; i++) + { + sPath = szBootPaths[i]; + sPath += szPropFileName; + cont = !BootProp::instance().open(sPath.c_str(), [self auth]); + } + } + if (cont) + { + if(!ft) return; + ft=false; + [mStatusText setTextColor: [NSColor redColor] ]; + if (errorString) + [mStatusText setStringValue:[NSString stringWithFormat: @"Error while parsing com.apple.Boot.plist : %@", + errorString] ]; + else + [mStatusText setStringValue: @"Error while searching for com.apple.Boot.plist"]; + + } + else + { + [mStatusText setTextColor: [NSColor grayColor] ]; + NSString* ns = [ [NSString alloc] initWithUTF8String:BootProp::instance().propFilePath() ]; + [mStatusText setStringValue: [NSString stringWithFormat: @"bootConfig: %@", ns] ]; + [[BootSetupController instance]->mBootConfigPathText setStringValue: + [[NSString alloc] initWithUTF8String: BootProp::instance().propFilePath()] ]; + + } + + if (BootProp::instance().isValid()) + { + // read options in the plist file + + partExtractor->hidePartitions(BootProp::instance().getStringForKey(kHidePartition)); + partExtractor->renamedPartitions(BootProp::instance().getStringForKey(kRenamePartition)); + + // partExtractor->resetSwapping(); + id val = [mOptionsDict valueForKey: keySwapHD01]; + [[BootSetupController instance]->mSwapHD01 setIntValue: [val intValue] ]; + [[BootSetupController instance] doSwapHD: [val boolValue] save: false src:0 dst:1]; + + val = [mOptionsDict valueForKey: keySwapHD02]; + [[BootSetupController instance]->mSwapHD02 setIntValue: [val intValue] ]; + [[BootSetupController instance] doSwapHD: [val boolValue] save: false src:0 dst:2]; + + // Load all boot Options into the interface components + [PreferencesControllerBase loadOptionsFromBootFile]; + [self selectDefaultPartition]; + + } + + } +} +//-------------------------------------------------------------------------- +- (void) selectDefaultPartition +{ + if(!authView) return; + + [self refreshLockStates]; + + // try to get the current default partition if any + if(partExtractor && BootProp::instance().isValid()) + { + const char *sdp = BootProp::instance().getStringForKey(kDefaultPartition); + sCurrentDefaultPartition = sdp ? sdp : ""; + if (sCurrentDefaultPartition.size()) + { + int index = partExtractor->getIndexFromHdStringSpec(sCurrentDefaultPartition.c_str()); + if (index>=0) + { + [mPartitionsTable selectRowIndexes: + [NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; + currentRowSel = index; + } + } + } + +} + +//-------------------------------------------------------------------------- +// following DieBuch recommendation : using applescript and system events (thanks!): +- (IBAction)onRestart: (id)sender +{ + NSInteger n = NSRunAlertPanel(@"Restarting OS X", + @"Are you sure you want to restart your computer now ?", + @"OK", @"Cancel", nil); + if (n==1) + { + AuthorizationRef auth = [[authView authorization] authorizationRef]; + executePrivilegedCmd(auth,"/usr/bin/osascript","-e 'tell app \"System Events\" to restart'"); + } + +} +//-------------------------------------------------------------------------- +- (IBAction)onShutdown: (id)sender +{ + NSInteger n = NSRunAlertPanel(@"Shutting Down OS X", + @"Are you sure you want to shut down your computer now ?", + @"OK", @"Cancel", /*ThirdButtonHere:*/nil + /*, args for a printf-style msg go here */); + if (n==1) + { + system("/usr/bin/osascript -e 'tell app \"System Events\" to shut down'"); + } +} + +- (IBAction)onSleep: (id)sender +{ + system("/usr/bin/osascript -e 'tell app \"System Events\" to sleep'"); +} + +//-------------------------------------------------------------------------- +- (void)tableViewSelectionDidChange:(NSNotification *)notification { + + NSTableView* tv= mPartitionsTable; + if ([tv selectedRow] != currentRowSel) + { + currentRowSel = [tv selectedRow]; + if (currentRowSel>=0) + { + const std::vector& partInfo = partExtractor->partList(); + char hd[7+1]="hd(n,m)"; + hd[3]= ('0'+partInfo[currentRowSel].disk()); + hd[5]= ('0'+partInfo[currentRowSel].partition()); + AuthorizationRef auth= [self isUnlocked] ? [[authView authorization] authorizationRef] : NULL; + if(BootProp::instance().setStringForKey(kDefaultPartition, hd)) + BootProp::instance().save(auth); + [ PreferencesControllerBase loadOptionsFromBootFile]; + } + else + { // no line selected + BootProp::instance().removeKeyAndValue(kDefaultPartition); + [ PreferencesControllerBase loadOptionsFromBootFile]; + + } + } + +} + +//-------------------------------------------------------------------------- +- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView +{ + int size = partExtractor ? partExtractor->partList().size() : 0; + return size; +} + +//-------------------------------------------------------------------------- +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + id ret=nil; + + const std::vector& partInfo = partExtractor->partList(); + + if (tableColumn == mPartitionImgColumn) + { + switch(partInfo[row].imageIndexFromFs()) + { + case 0: + ret = mMacOSXImage; + break; + case 1: + ret = mWindowsImage; + break; + case 2: + ret = mLinuxImage; + break; + default: + ret = mUnknownImage; + break; + + } + } + else if (tableColumn == mFileSystemColumn) + { + ret = [NSString stringWithFormat: @"%s", partInfo[row].cfsType() ]; + } + else if (tableColumn == mPartitionNameColumn) + { + ret = [NSString stringWithFormat: @"%s", partInfo[row].clabel() ]; + } + else if (tableColumn == mPartitionIDColumn) + { + ret= [NSString stringWithFormat: @"hd(%d,%d)", + partInfo[row].disk(), + partInfo[row].partition() + ]; + } + + return ret; +} +//-------------------------------------------------------------------------- + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/AboutController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/AboutController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/AboutController.mm (revision 77) @@ -0,0 +1,40 @@ +// +// About.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/27/10. +// + +#import "AboutController.h" + + +@implementation AboutController +- (id) init +{ + [super init]; + + bundle = [NSBundle bundleForClass:[self class]]; + sCredits = [bundle pathForResource: @"CREDITS" ofType: nil ]; + return self; +} + +- (IBAction)onAbout: (id)sender +{ + [mAboutDlg makeKeyAndOrderFront: sender]; +} + +- (NSString *)bundleVersionNumber { + NSString * sVer = [[bundle infoDictionary] valueForKey:@"CFBundleVersion"]; + NSString * info = [[NSString alloc] initWithFormat:@"Version %@", sVer ]; + return info; +} + +- (NSString *)credits +{ + NSString* s = [[NSString alloc] + initWithContentsOfFile:sCredits encoding: NSASCIIStringEncoding error: nil]; + return s ? s : @""; +} + +@end + Index: branches/diebuche/ChameleonPrefPane/Sources/ShellProcess.cpp =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/ShellProcess.cpp (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/ShellProcess.cpp (revision 77) @@ -0,0 +1,218 @@ +/* + * shell_process.cpp + * + * Created by Rekursor on 1/17/2010. + * + */ + +#include "ShellProcess.h" +#include +#include +#include + + +//---------------------------------------------------------------- +// portable open process: +FILE * ShellProcess::open(const char *cmd, const char *mode) { + _fpt=::popen(cmd,mode); + return _fpt; +} + +//---------------------------------------------------------------- +int ShellProcess::close() { + int ret = ::pclose(_fpt); + _fpt=NULL; + return ret; +} + +//---------------------------------------------------------------- +void PartitionInfo::removeSpaces(std::string &str) +{ + if (!str.size()) return; + int posl=0,posr=0; + for (posl=0; posl0 && str[posr]==' '; posr--); + str = (posl>posr) ? "" : str.substr(posl, posr-posl+1); +} +//---------------------------------------------------------------- +/** + * return the image index corresponding to a fs: + */ +int PartitionInfo::imageIndexFromFs() const +{ + if (_fsType.find("Apple")!=std::string::npos || + _fsType.find("HFS")!=std::string::npos) + return 0; // Windows + else if (_fsType.find("Windows")!=std::string::npos || + _fsType.find("Microsoft")!=std::string::npos || + _fsType.find("NTFS")!=std::string::npos || + _fsType.find("FAT")!=std::string::npos) + return 1; // Windows + else if (_fsType.find("Linux")!=std::string::npos) + return 2; // Unknown + return 10; //Unknown + +} +//---------------------------------------------------------------- +bool PartitionInfo::fromPartitionHdString(const char * inHdStr) +{ + if (!inHdStr || !(*inHdStr) || + strlen(inHdStr)<7 || !strstr(inHdStr,"hd(")) return false; + + // enhance me here: should not assume that we have less than 10 partitions per disk/ disks + _disk = inHdStr[3]-'0'; + _part = inHdStr[5]-'0'; + return true; +} +//---------------------------------------------------------------- +const char * PartitionExtractor::checkForRename(const char * label, const char *szHd) +{ + const int MAX_ALIAS_SIZE=31; + static char szAlias[MAX_ALIAS_SIZE+1]; + char *q=szAlias; + const char* szAliases = _renamedParts.c_str(); + + if (!szHd || !*szHd || !szAliases || !*szAliases) return label; // no renaming wanted + + const char * p = strstr(szAliases, szHd); + if(!p || !(*p)) return label; // this volume must not be renamed, or option is malformed + + p+= strlen(szHd); // skip the "hd(n,m) " field + // multiple aliases can be found separated by a semi-column + while(*p && *p != ';' && q<(szAlias+MAX_ALIAS_SIZE)) *q++=*p++; + *q='\0'; + + return szAlias; + +} + +// set to 1 the following line for debugging with a fake diskutil file named /diskutil.txt +// for the debug to be accurate you need to alias (ln -s ...) the user to debug with your real disks +#define DEBUG_DISKUTIL 0 + +//---------------------------------------------------------------- +const std::vector& +PartitionExtractor::extractPartitions(const char* szHide, const char* szRenamed) +{ + const char * const diskTag = "/dev/disk"; + const char * const nameTag = "NAME"; + const char * const sizeTag = "SIZE"; + + PartitionInfo partInfo; + + char line[1024]=""; + char label[32]="", fsType[32]="" ; + size_t len=0; + int disk =0, part=0; + int label_pos=0, size_pos=0; + char * p=0,*q=0; + int skipwhite=0; + + _partList.clear(); + if (szHide) hidePartitions(szHide); + if (szRenamed) renamedPartitions(szRenamed); + +#if DEBUG_DISKUTIL + this->open("cat /diskutil.txt"); +#else + this->open("diskutil list"); +#endif + + while(get_line(line, sizeof(line)-1)) + { + // printf("%s\n",line); + len = strlen(line); + for(skipwhite=0; line[skipwhite]==' ';skipwhite++); + + const char * sdisk = strstr(line, diskTag); + const char * sName = strstr(line, nameTag); + const char * sSize = strstr(line, sizeTag); + + if (sdisk) + { + // extract disk number + sscanf(&sdisk[strlen(diskTag)],"%d", &disk); + if (disk>=0 && disk =0 if a match happens + */ +int PartitionExtractor::getIndexFromHdStringSpec(const char* inHDStr) +{ + PartitionInfo info; + + if (info.fromPartitionHdString(inHDStr)) // try decode the partition disk and part infos + { + for (int i=0; i<_partList.size(); i++) + { + if (_partList[i].disk() == info.disk() && _partList[i].partition() == info.partition()) + return i; + } + } + + return -1; +} Index: branches/diebuche/ChameleonPrefPane/Sources/string_util.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/string_util.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/string_util.h (revision 77) @@ -0,0 +1,70 @@ +/* + * string_util.h + * ChameleonPrefPane + * + * Created by Rekursor on 1/22/10. + * + */ +#ifndef __CHSTR_UTIL_H +#define __CHSTR_UTIL_H +#include +#include + +/** + * trim the space (or any substring) chars on the right of a string + */ +inline std::string trim_right(const std::string &source , const std::string& substr = " ") +{ + std::string str = source; + return str.erase( str.find_last_not_of(substr) + 1); +} + +/** + * trim the space chars (or any substring) on the left of a string + */ +inline std::string trim_left( const std::string& source, const std::string& substr = " ") +{ + std::string str = source; + return str.erase(0 , source.find_first_not_of(substr) ); +} + +/** + * trim the space chars (or any substring) on the left and the right of a string + */ +inline std::string trim(const std::string& source, const std::string& substr = " ") +{ + return trim_left( trim_right( source , substr) , substr ); +} + +// const char* str input versions +inline std::string trim_right(const char* src , const std::string& substr = " ") +{ + std::string str = src ? src : ""; + return str.erase( str.find_last_not_of(substr) + 1); +} + +/** + * trim the space chars (or any substring) on the left of a string + */ +inline std::string trim_left( const char* src, const std::string& substr = " ") +{ + std::string str = src ? src : ""; + return str.erase(0 , str.find_first_not_of(substr) ); +} + +/** + * trim the space chars (or any substring) on the left and the right of a string + */ +inline std::string trim(const char* src, const std::string& substr = " ") +{ + return trim_left( trim_right( src , substr) , substr ); +} + +/** + * String Tokenizer + * In: src string and separator + * Out: a list of string tokens + */ +std::list tokenize(const std::string& src, const std::string& sep=" "); + +#endif Index: branches/diebuche/ChameleonPrefPane/Sources/PropertyList.cpp =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/PropertyList.cpp (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/PropertyList.cpp (revision 77) @@ -0,0 +1,369 @@ +/* + * property_list.cpp + * + * Created by Rekursor on 1/17/10. + * + */ + +#import "ChameleonPropertyList.h" +#include "file_util.h" +#include +#include + + +//-------------------------------------------------------------------------- +// Simple parsing and splitting args function, does handle env. vars +//-------------------------------------------------------------------------- +static void parseArgs(const char * args, const char* argv[], int argvlen) +{ + // Create a list of args fron the space delimited args parameters + int n=0; + if (args && *args) + { + bool skipSpaces = true; + bool prevCharwasDelim =false; + char * buf = strdup(args); + char lastPriorityDelim=' '; + + printf("Parsing <%s>\n", args); + + int k=0; + for (int i=0; i< strlen(args); i++) + { + switch (args[i]) + { + case ' ': case '\t': + if(!skipSpaces) { + buf[k++]=args[i]; + } + else { + prevCharwasDelim = true; // // keep a track of delim to further split tokens + } + break; + case '\0': + case '\'': + case '"': + if (!skipSpaces &&lastPriorityDelim!=args[i]) + { // consider the imbricated delim as a simple char + buf[k++]=args[i]; + break; + } + + if (!skipSpaces) // end of priority substr + { + skipSpaces = true; + lastPriorityDelim=' '; + buf[k]='\0'; + argv[n++]=strdup(buf); // copy the priority substr + k=0; // reset the buf index for next token + buf[0]='\0'; + } + else + { // start of priority substr + skipSpaces=false; + lastPriorityDelim=args[i]; + if(k>0) // previous string to store first + { + buf[k++]='\0'; // finish the substr + argv[n++]=strdup(buf); // copy the substr + k=0; // rest the index for next token + buf[0]='\0'; + } + //if (args[i] !='\0') buf[k++] = args[i]; // start the new priority substr + } + break; + default: // non delimiters chars + if(skipSpaces && prevCharwasDelim) + { + if(k>0) // a previous substr was before the space + { // store previous token + buf[k++]='\0'; // finish the substr + argv[n++]=strdup(buf); // copy the substr + k=0; // rest the index for next token + buf[0]='\0'; + } + } + prevCharwasDelim = false; + buf[k++]=args[i]; + break; + } + } + + if(*buf) + { + buf[k]='\0'; + argv[n++]=strdup(buf); // copy the last buffer + } + free((void*) buf); + } + argv[n]=NULL; +} + +//-------------------------------------------------------------------------- +// Execute a priviledge shell command : will wait for execution termination +// by calling wait() +//-------------------------------------------------------------------------- + bool executePrivilegedCmd(AuthorizationRef auth, + const char* pathToTool, + const char* args, + AuthorizationFlags flags) +{ + const char * argv[16]; + + parseArgs(args, argv, sizeof(argv)/sizeof(const char*)); + + // Execute Cmd + OSStatus status = AuthorizationExecuteWithPrivileges(auth, pathToTool,flags, (char**)argv, NULL); + // Wait for the child process of AEWP to terminate: + int wait_status=0; + /* pid_t pid = */ + wait(&wait_status); + // usleep(10000); // 10 ms + // Cleanup mem + for (int i=0; argv[i]; i++) free ((void*) argv[i]); + + return status ? false : true; +} + +//-------------------------------------------------------------------------- +// Execute priviledged chmod for accessing system files +//-------------------------------------------------------------------------- +bool PropertyList::chmodFile(const char * path, const char * chmodMask, + AuthorizationRef auth, AuthorizationFlags flags) +{ + if (!path || !*path) return false; + + if (auth) + { // give write temporary write rights to the file + std::string args = chmodMask; + args += ' '; + args += path; + if(!executePrivilegedCmd(auth, "/bin/chmod", args.c_str(), flags)) + return false; + } + return true; + +} + +//-------------------------------------------------------------------------- +// Write a property list from a file +//-------------------------------------------------------------------------- +bool WritePropertyListToFile( CFPropertyListRef propertyList, CFURLRef fileURL ) +{ + CFDataRef xmlData; + Boolean status; + SInt32 errorCode; + + // Convert the property list into XML data. + xmlData = CFPropertyListCreateXMLData( kCFAllocatorDefault, propertyList ); + + // Write the XML data to the file. + status = CFURLWriteDataAndPropertiesToResource ( + fileURL, // URL to use + xmlData, // data to write + NULL, + &errorCode); + CFRelease(xmlData); + + return status ? true: false; +} + +//-------------------------------------------------------------------------- +// Read a property list from a file +//-------------------------------------------------------------------------- +static CFPropertyListRef CreatePropertyListFromFile( CFURLRef fileURL, + const std::string& filePath, + CFStringRef * errorString, + bool createIfNotExist) { + CFPropertyListRef propertyList; + CFDataRef resourceData; + Boolean status; + SInt32 errorCode; + // + if (!fileExists(filePath)) + { + if (createIfNotExist) + { + CFMutableDictionaryRef dict = + CFDictionaryCreateMutable( kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks ); + WritePropertyListToFile(dict, fileURL); + } + + } + // Read the XML file. + status = CFURLCreateDataAndPropertiesFromResource( + kCFAllocatorDefault, + fileURL, + &resourceData, // place to put file data + NULL, + NULL, + &errorCode); + if (!status) return NULL; + + // Reconstitute the dictionary using the XML data. + propertyList = CFPropertyListCreateFromXMLData( kCFAllocatorDefault, + resourceData, + kCFPropertyListMutableContainersAndLeaves, + errorString); + + + CFRelease( resourceData ); + return propertyList; +} + +//-------------------------------------------------------------------------- +// Always return a valid static const string, +// if the CFSTR is not valid, then we return "" +//-------------------------------------------------------------------------- +static const char * CfsToCs(CFStringRef inRef) +{ + static char *buffer=NULL; + CFIndex len = CFStringGetLength(inRef); + if (buffer) { + delete[] buffer; + } + buffer = new char[len+1]; + if(CFStringGetFileSystemRepresentation (inRef, buffer, len+1)) + return buffer; + return ""; +} + +//-------------------------------------------------------------------------- +// Destruct a PropertyList Instance +//-------------------------------------------------------------------------- +PropertyList::~PropertyList() +{ + if (_CFURLRef) CFRelease(_CFURLRef); + if (_proplistRef) CFRelease(_proplistRef); + +} + +//-------------------------------------------------------------------------- +// Open a property list from a path name with auth +//-------------------------------------------------------------------------- +bool PropertyList::open(const char * path, bool createIfNotExist, AuthorizationRef auth, AuthorizationFlags flags) +{ + bool ret = false; + + if (!path || !*path) return false; + struct stat st; + if(stat(path,&st) != 0) return false; // file does not exist; + + _propFilePath = path; + + CFStringRef cfPath = CFStringCreateWithCString (kCFAllocatorDefault, path, kCFStringEncodingUTF8); + CFURLRef inURL = CFURLCreateWithFileSystemPath( kCFAllocatorDefault, + cfPath, + kCFURLPOSIXPathStyle, // interpret as POSIX path + false ); // is it a directory? + CFRelease(cfPath); + if (_CFURLRef) CFRelease(_CFURLRef); + _CFURLRef = inURL; + + if (_CFURLRef) + { + CFRetain(_CFURLRef); + + // give write temporary write rights to the file + if (!chmodFile(path,"0777", auth, flags)) return false; + + _proplistRef = CreatePropertyListFromFile(inURL, _propFilePath, &_errorString, createIfNotExist); + + // restore rights + ret= chmodFile(path,"0644", auth, flags); + + if (_proplistRef) { + CFRetain(_proplistRef); + ret= true; + } + } + + return ret; +} + +//-------------------------------------------------------------------------- +// Save the current property list +//-------------------------------------------------------------------------- +bool PropertyList::save(AuthorizationRef auth, AuthorizationFlags flags) +{ + bool ret=false; + if (auth) + { // give write temporary write rights to the file + std::string args = " 0777 "+ _propFilePath; + if(!executePrivilegedCmd(auth, "/bin/chmod", args.c_str(), flags)) + return false; + } + if (_proplistRef && _CFURLRef) + ret= WritePropertyListToFile(_proplistRef,_CFURLRef); + if (auth) + { // give write temporary write rights to the file + std::string args = " 0644 "+ _propFilePath; + if(!executePrivilegedCmd(auth, "/bin/chmod", args.c_str(), flags)) + return false; + } + return ret; +} + +//-------------------------------------------------------------------------- +// Get a string value from a property list key, +// value returned is not owned by caller, copy it necessary. +//-------------------------------------------------------------------------- +const char * PropertyList::getStringForKey(const char *key) +{ + if (!_proplistRef) return NULL; + CFStringRef cfKey = CFStringCreateWithCString (kCFAllocatorDefault, key, kCFStringEncodingUTF8); + CFStringRef myString; + + if (_proplistRef && CFDictionaryGetValueIfPresent((CFMutableDictionaryRef)_proplistRef, + cfKey, (const void **) &myString)) + { + CFRelease(cfKey); + return CfsToCs(myString); + } + + if(cfKey) CFRelease(cfKey); + return NULL; +} + +//-------------------------------------------------------------------------- +// Replace or add a string value from a property list key, +// value returned is not owned by caller, copy it necessary. +//-------------------------------------------------------------------------- +bool PropertyList::setStringForKey(const char *key, const char * value) +{ + if (!_proplistRef) return false; + bool ret = false; + CFStringRef cfKey = CFStringCreateWithCString (kCFAllocatorDefault, key, kCFStringEncodingUTF8); + CFStringRef myString = CFStringCreateWithCString (kCFAllocatorDefault, value, kCFStringEncodingUTF8); + CFMutableDictionaryRef myDict = (CFMutableDictionaryRef) _proplistRef; + + if (myDict) + { + CFDictionarySetValue(myDict, cfKey, myString); + ret=true; + } + if(cfKey) CFRelease(cfKey); + //if(myString) CFRelease(myString); + return ret; +} + +//-------------------------------------------------------------------------- +// Delete a key and its value from the dictionary +//-------------------------------------------------------------------------- +bool PropertyList::removeKeyAndValue(const char *key) +{ + if (!_proplistRef) return false; + bool ret = false; + + CFStringRef cfKey = CFStringCreateWithCString (kCFAllocatorDefault, key, kCFStringEncodingUTF8); + + if (_proplistRef) { + CFDictionaryRemoveValue((CFMutableDictionaryRef) _proplistRef, cfKey); + ret=true; + } + if(cfKey) CFRelease(cfKey); + return ret; +} + Index: branches/diebuche/ChameleonPrefPane/Sources/file_util.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/file_util.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/file_util.h (revision 77) @@ -0,0 +1,25 @@ +/* + * file_util.h + * ChameleonPrefPane + * + * Created by Rekursor on 1/24/10. + * + */ +#ifndef __CHFILE_UTIL_H +#define __CHFILE_UTIL_H +#include + +/** + * Check whether file exists: + */ +inline bool fileExists(const char * str) +{ + struct stat stFileInfo; + if((stat(str,&stFileInfo)) == 0) return true; + else return false; +} + +inline bool fileExists(std::string str) {return fileExists(str.c_str());} + + +#endif Index: branches/diebuche/ChameleonPrefPane/Sources/AdvancedSetupController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/AdvancedSetupController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/AdvancedSetupController.mm (revision 77) @@ -0,0 +1,74 @@ +// +// AdvancedSetupController.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import "AdvancedSetupController.h" + +static AdvancedSetupController *gInstance = NULL; + +@implementation AdvancedSetupController + +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + return (gInstance = self); +} + +//-------------------------------------------------------------------------- +- (void) addOptionsDesc +{ + BootProp::instance().addOptionDesc(mKernel, mKernelText, OptionKernel1, "Kernel", "mach_kernel"); // empty field for 1 field only "i.e: mach_kernel" syntax + BootProp::instance().addOptionDesc(mDeviceRd, mDeviceRdText, OptionKernel, "rd", ""); + BootProp::instance().addOptionDesc(mArch, mArchText, OptionKernel, "arch", ""); + BootProp::instance().addOptionDesc(mCPU, mCPUText, OptionKernel, "cpus", ""); + BootProp::instance().addOptionDesc(mBusRatio, mBusRatioText, OptionKernel, "busratio", ""); + BootProp::instance().addOptionDesc(mDebug, mDebugText, OptionString, "debug", ""); + BootProp::instance().addOptionDesc(mIO, mIOText, OptionString, "io", ""); + BootProp::instance().addOptionDesc(mDisableKextsBlacklisting, nil, OptionString, "blacklist", ""); + BootProp::instance().addOptionDesc(mDSDTFile, mDSDTFileText, OptionFileString, "DSDT", ""); + BootProp::instance().addOptionDesc(mDSDTDrop, nil, OptionYesNo, "DropSSDT", "No"); + BootProp::instance().addOptionDesc(mSMBIOSFile,mSMBIOSFileText, OptionFileString, "SMBIOS", ""); + BootProp::instance().addOptionDesc(mSMBIOSDefaults, nil, OptionYesNo, "SMBIOSdefaults", "No"); + BootProp::instance().addOptionDesc(mWake, nil, OptionYesNo, "Wake", "No"); + BootProp::instance().addOptionDesc(mForceWake, nil, OptionYesNo, "ForceWake", "No"); + BootProp::instance().addOptionDesc(mWakeImage, mWakeImageText, OptionFileString, "WakeImage", ""); + BootProp::instance().addOptionDesc(mSystemId, mSystemIdText, OptionString, "SystemId", ""); + BootProp::instance().addOptionDesc(mRestartFix, nil, OptionYesNo, "RestartFix", "Yes"); +} + +//-------------------------------------------------------------------------- +-(void) setDefaultsValues: (NSMutableDictionary*) dict +{ +} + +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + // automatic, nothing to do +} + +//-------------------------------------------------------------------------- +-(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict +{ + +} + +//-------------------------------------------------------------------------- +-(IBAction) onCheckButtonChange: (NSButton*) sender +{ + [self handleSender: sender]; +} + +//-------------------------------------------------------------------------- +-(IBAction) onTextFiedChange: (NSTextField*) sender +{ + [self handleSender: sender]; +} + ++ (AdvancedSetupController *)instance { return(gInstance);} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/ChameleonPrefPane.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/ChameleonPrefPane.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/ChameleonPrefPane.h (revision 77) @@ -0,0 +1,80 @@ +// +// ChameleonPrefPane.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/16/10. +// + +#import +#import +#import +#import "CustomTableView.h" + +// Constants definition +static const NSString* const keyForceBootConfigPath = @"forceBootConfigPath"; +static const NSString* const keySwapHD01 = @"swapHD01"; +static const NSString* const keySwapHD02 = @"swapHD02"; +static const NSString* const keyUseFrozenParts = @"useFrozenParts"; +static const NSString* const keyPartitionsList = @"partitionsList"; +static const NSString* const kPreferencesFilePath = @"/Library/Preferences/com.chameleon.prefPane.plist"; +static const NSString* const keyPreferencesFileVersion = @"version"; // for future back compatibility + +// Interface + +@interface ChameleonPrefPane : NSPreferencePane +{ +@public + IBOutlet SFAuthorizationView *authView; + + +@private + // Objects corresponding to the interface mapping: + IBOutlet CustomTableView * mPartitionsTable; + IBOutlet NSTableColumn * mPartitionImgColumn; + IBOutlet NSTableColumn * mFileSystemColumn; + IBOutlet NSTableColumn * mPartitionNameColumn; + IBOutlet NSTableColumn * mPartitionIDColumn; + IBOutlet NSButton * mSleepButton; + IBOutlet NSButton * mShutDownButton; + IBOutlet NSButton * mRestartButton; + IBOutlet NSTextField* mStatusText; + IBOutlet NSBox* mOptions; + + + NSMutableDictionary* mOptionsDict; + NSMutableDictionary* mPartitionsDict; + + NSImage* mMacOSXImage; + NSImage* mWindowsImage; + NSImage* mLinuxImage; + NSImage* mUnknownImage; + NSImage* mCDROMImage; + NSString* mOptionsPlistPath; + int mPreferenceFileVersion; +} + ++ (ChameleonPrefPane*) instance; // return the current instance +- (void) loadPreferences; +- (bool) savePreferences: (NSDictionary*) dict; +- (NSMutableDictionary*) preferencesFile; +- (NSMutableDictionary*) preferencesParts; + +- (NSTableView*) partitionsTable; + +- (IBAction)onRestart: (id)sender; +- (IBAction)onShutdown: (id)sender; +- (IBAction)onSleep: (id)sender; + +- (void)awakeFromNib; +- (void)initBootConfig; +- (id) getImageResource: (NSString *) str ofType: (NSString*) sType; + +- (void)tableViewSelectionDidChange:(NSNotification *)notification; +- (void) selectDefaultPartition; + +- (bool)isUnlocked; +- (void) refreshLockStates; +- (void)tableViewSelectionDidChange:(NSNotification *)notification; +- ( AuthorizationRef) auth; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/CustomTableView.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/CustomTableView.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/CustomTableView.h (revision 77) @@ -0,0 +1,17 @@ +// +// CustomTableView.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/25/10. +// + +#import + + +@interface CustomTableView : NSTableView { + NSColor * mHighlightColorInFocusView; + NSColor * mHighlightColorOutOfFocusView; + +} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/AboutController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/AboutController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/AboutController.h (revision 77) @@ -0,0 +1,22 @@ +// +// About.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/27/10. +// + +#import + + +@interface AboutController : NSObject { + IBOutlet NSPanel* mAboutDlg; + + NSBundle* bundle; + NSString* sCredits; +} + +- (IBAction)onAbout: (id)sender; +- (NSString *)bundleVersionNumber; +- (NSString *)credits; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/SmbiosController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/SmbiosController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/SmbiosController.mm (revision 77) @@ -0,0 +1,90 @@ +// +// EfiInject.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/26/10. +// + +#import "SmbiosController.h" + + +static SmbiosController *gInstance = NULL; + +@implementation SmbiosController +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + return (gInstance = self); +} + +//-------------------------------------------------------------------------- +- (void) addOptionsDesc +{ + // Add future smbios options here + // BootProp::instance().addOptionDesc(mEfiInject, mEfiInjectText, OptionString, "device-properties", ""); +} + +//-------------------------------------------------------------------------- +-(void) setDefaultsValues: (NSMutableDictionary*) dict +{ +} + +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + [PreferencesControllerBase refreshLockState: mEditSmbios]; +} + +//-------------------------------------------------------------------------- +-(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict +{ + +} +- (const char *) getSmbiosFilePath +{ + static std::string path; + if (fileExists("/Extra/smbios.plist")) + return "/Extra/smbios.plist"; + else if (fileExists("/smbios.plist")) + return "/smbios.plist"; + + return ""; //not found +} +//-------------------------------------------------------------------------- +-(IBAction) onCheckButtonChange: (NSButton*) sender +{ + if(sender == mEditSmbios) + { + // IMPROVE ME find the associated editor path and call it then wait for its termination + std::string smbiosPath = [self getSmbiosFilePath ]; + AuthorizationRef auth = [[self chameleon] auth ]; + if (smbiosPath.length()==0 || auth==nil) return; + + // give write temporary write rights to the file +// std::string args = " 0777 "+ smbiosPath; +// if(!executePrivilegedCmd(auth, "/bin/chmod", args.c_str())) return; + + // edit the file + std::string cmd = "/usr/bin/open " + smbiosPath; + system(cmd.c_str()); + + // [ self executeTaskAndWaitForTermination: [[NSString alloc] initWithUTF8String:cmd.c_str()] ]; + + // Remove temporary write +// args = " 0644 "+ smbiosPath; +// if(!executePrivilegedCmd(auth, "/bin/chmod", args.c_str())) return; + } + else + [self handleSender: sender]; +} + +//-------------------------------------------------------------------------- +-(IBAction) onTextFiedChange: (NSTextField*) sender +{ + [self handleSender: sender]; +} + ++ (SmbiosController *)instance { return(gInstance);} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/PreferencesControllerBase.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/PreferencesControllerBase.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/PreferencesControllerBase.mm (revision 77) @@ -0,0 +1,431 @@ +// +// PreferencesControllerBase.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import "PreferencesControllerBase.h" +#import "KernOptionsParser.h" +#include +#include +#include +#include + + +//-------------------------------------------------------------------------- +static std::list< id > groupList; + +// for unix-like options types +static std::map IdToUCmdList; +static KernOptionsParser kernelFlags; + +//-------------------------------------------------------------------------- + + +@implementation PreferencesControllerBase + +-(ChameleonPrefPane*) chameleon { return [ChameleonPrefPane instance]; } + + +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + + [PreferencesControllerBase registerPreferencesGroup: self]; + + return self; +} +//-------------------------------------------------------------------------- +- (id) getResourcePath: (NSString *) str ofType: (NSString*) sType +{ + if(!str) return nil; + NSBundle * b = [NSBundle bundleForClass:[self class]]; + id sRes = [b pathForResource: str ofType:sType ]; + return sRes; +} + + +//-------------------------------------------------------------------------- +// get authorisation from main panel lock +- (AuthorizationRef) getAuthorization +{ + AuthorizationRef auth= [[self chameleon] isUnlocked] ? + [[ [self chameleon]->authView authorization] authorizationRef] : NULL; + return auth; +} +//-------------------------------------------------------------------------- ++ (void) registerPreferencesGroup:(id) myGroup +{ + groupList.push_back(myGroup); +} + +- (void) synchronizeTextContent:(const BootOptionDesc*) bod withValue:(int) val +{ + if(!bod || !bod->contentID) return; + id item = (id) bod->contentID; + if ( [item isKindOfClass: [NSTextField class]] || + [item isKindOfClass: [NSComboBox class]]) + { + [item setEnabled: val]; + [item setEditable: val]; + } + +} +//-------------------------------------------------------------------------- ++ (void) refreshLockState: (id) item +{ + const BootOptionDesc * bod = BootProp::instance().findOption(item); + if(!bod) bod=BootProp::instance().findOptionContent(item); + if(bod) [PreferencesControllerBase refreshBodLockState: bod]; + else [item setEnabled: [[ChameleonPrefPane instance] isUnlocked]]; +} +//-------------------------------------------------------------------------- ++ (void) refreshBodLockState: (const BootOptionDesc*) bod +{ + if (!bod) return; + bool isUnlocked = [[ChameleonPrefPane instance] isUnlocked]; + if (bod->ID) [(id) bod->ID setEnabled: isUnlocked]; + int val = bod->ID ? [(id) bod->ID intValue] : 0; + if ( [(id) bod->contentID isKindOfClass: [NSTextField class]] || + [(id) bod->contentID isKindOfClass: [NSComboBox class]]) + { + [(id) bod->contentID setEnabled: (isUnlocked && val) ]; + [(id) bod->contentID setEditable: (isUnlocked && val) ]; + } + else + [(id) bod->contentID setEnabled: isUnlocked]; +} + +//-------------------------------------------------------------------------- ++ (void) refreshLockStates +{ + for (const BootOptionDesc* bod=BootProp::instance().firstOption(); + bod; + bod=BootProp::instance().nextOption()) + { + [self refreshLockState: (id) bod->ID ]; + if (bod->contentID) [self refreshLockState: (id) bod->contentID ]; + } + +} +//-------------------------------------------------------------------------- ++ (void) doForEachGroup: (GroupAction) action withOption:(id) option +{ + std::list::iterator it; + for (it=groupList.begin(); it!=groupList.end(); it++) + { + switch (action) { + case SetDefaultValues: + [*it setDefaultsValues: option]; + break; + case RefreshLockStates: + [*it refreshLockStates ]; + [PreferencesControllerBase refreshLockStates]; + break; + case LoadPreferencesOptions: + [*it loadOptionsFromPreferencesFile: option]; + break; + case LoadBootConfigOptions: + [*it loadOptionsFromBootFile]; + break; + case AddOptionsDesc: + [*it addOptionsDesc]; + break; + case SaveBootConfigOptions: + break; + default: + break; + } + } +} + +//-------------------------------------------------------------------------- ++ (void) loadOptionsFromBootFile +{ + // parse unix like command string: + kernelFlags.parseOptions(BootProp::instance().getStringForKey(kKernelFlags)); + + for (const BootOptionDesc* bod=BootProp::instance().firstOption(); + bod; + bod=BootProp::instance().nextOption()) + { + [PreferencesControllerBase loadOptionFromBootFile:(id)bod->ID ]; + } +} + +//-------------------------------------------------------------------------- + ++ (void) loadOptionFromBootFile:(id) optionID +{ + const BootOptionDesc* bod = BootProp::instance().findOption(optionID); + if (!bod) + { + NSRunAlertPanel(@"Error Parsing Option",@"loadOptionFromBootFile failed",@"OK", nil, nil); + return; + } + + const char * stringForKey = BootProp::instance().getStringForKey(bod->Name); + std::string s = stringForKey ? trim(stringForKey) : ""; + std::string def = trim(bod->Default ? bod->Default : ""); + + switch (bod->Type) + { + case OptionYesNo: + if (s.length()>0) + [(NSButton*)optionID setIntValue: (toupper(s[0])=='Y' ? 1 : 0 ) ]; + else + [(NSButton*)optionID setIntValue: (toupper(def[0])=='Y' ? 1 : 0 ) ]; + break; + + case OptionKernel1: + { + int val = (s.length()>0 ? 1 : 0 ); + [(NSButton*)optionID setIntValue: val ]; + [(NSTextField*) bod->contentID setStringValue: + [[NSString alloc] initWithUTF8String: s.c_str()] ]; + [(NSTextField*) bod->contentID setEnabled: val ? true : false]; + [(NSTextField*) bod->contentID setEditable: val ? true : false]; + } + break; + case OptionFileString: + case OptionString: + { + int val = (s.length()>0 ? 1 : 0 ); + [(NSButton*)optionID setIntValue: val ]; + [(NSTextField*) bod->contentID setStringValue: + [[NSString alloc] initWithUTF8String: s.c_str()] ]; + [(NSTextField*) bod->contentID setEnabled: val ? true: false]; + [(NSTextField*) bod->contentID setEditable: val ? true : false]; + } + break; + + case OptionUnix: + case OptionKernel: + { + std::string s = kernelFlags.stringFromKey(bod->Name); + if (s.length()>0) + { + [(NSButton*)optionID setIntValue: 1 ]; + if(bod->Type==OptionKernel) + { + [(NSTextField*) bod->contentID setStringValue: + [[NSString alloc] initWithUTF8String: + kernelFlags.rightMember(s).c_str()] ]; + [(NSTextField*) bod->contentID setEnabled: true]; + [(NSTextField*) bod->contentID setEditable: true]; + } + + } + else + { // set the default for thiso option + [(NSButton*)optionID setIntValue: (bod->Default[0] ? 1 :0) ]; + if(bod->Type==OptionKernel) + { + [(NSTextField*) bod->contentID setEnabled: false]; + [(NSTextField*) bod->contentID setEditable: false]; + } + + } + } + break; + default: + break; + } + +} + +//-------------------------------------------------------------------------- +- (void) loadPreferences +{ + [ [ChameleonPrefPane instance] loadPreferences]; +} + +//-------------------------------------------------------------------------- +- (bool) savePreferences +{ + return [ [ChameleonPrefPane instance] savePreferences: [self preferencesFile] ]; + +} +//-------------------------------------------------------------------------- +// update the boot Config with one option change and its associated desc +- (bool) saveBootConfig: (id) sender withBootOptionDesc: (BootOptionDesc*) bod +{ + if(!bod) + { + return false; + } + // load boot config file so that we don't risk to loose + // externally modified parameters + + int val = [(NSButton*) sender intValue ]; + std::string sDefaultValue = trim(bod->Default ? bod->Default : ""); + bool status = false; + std::string name = trim(bod->Name); + + switch (bod->Type) { + case OptionYesNo: + { + std::string sVal = val ? "Yes" : "No"; + if (sDefaultValue.length()==0) sDefaultValue = "No"; + // Avoid populating bootConfig with unnecessary options: + if (sVal == sDefaultValue) + status = BootProp::instance().removeKeyAndValue(name.c_str()); + else + status = BootProp::instance().setStringForKey(name, sVal.c_str()); + } + break; + case OptionUnix: + if (!val) kernelFlags.removeFlag(name); + else kernelFlags.addFlag(name); + BootProp::instance().setStringForKey(kKernelFlags,kernelFlags.options()); + status = true; + break; + case OptionKernel: + { + std::string contentValue = trim( + [ [(NSTextField*) bod->contentID stringValue] UTF8String ]); + kernelFlags.removeFlag(kernelFlags.stringFromKey(bod->Name)); + if(val && contentValue.length()>0) + { + std::string concat = trim(name); + concat+= "="; + concat+= trim(contentValue); + + kernelFlags.addFlag(concat); + } + BootProp::instance().setStringForKey(kKernelFlags,kernelFlags.options()); + status = true; + } + break; + case OptionKernel1: + case OptionFileString: + case OptionString: + // Avoid populating bootConfig with unnecessary options: + if (val == 0 && bod->Type!=OptionKernel1) + status = BootProp::instance().removeKeyAndValue(bod->Name); + else + { + std::string contentValue = + [ [(NSTextField*) bod->contentID stringValue] UTF8String ]; + if (contentValue.length()>0) + status = BootProp::instance().setStringForKey(bod->Name, contentValue.c_str()); + else { + return false; // no content to save so don't save it + } + + } + break; + default: + break; + } + + // Now save the bootConfig + AuthorizationRef auth = [self getAuthorization ]; + if (status) status = BootProp::instance().save(auth); + + return status; +} +//-------------------------------------------------------------------------- +-(NSMutableDictionary*) preferencesFile +{ + return [[ChameleonPrefPane instance] preferencesFile]; +} + +//-------------------------------------------------------------------------- +-(NSMutableDictionary*) preferencesParts +{ + return [[ChameleonPrefPane instance] preferencesParts]; +} + +//-------------------------------------------------------------------------- +- (bool) handleSender: (id) sender +{ + + const BootOptionDesc * bod = BootProp::instance().findOption(sender); + + if (!bod) { + bod = BootProp::instance().findOptionContent(sender); + NSTextField* textField = (NSTextField*) sender; + std::string content = [[textField stringValue] UTF8String ]; + if(bod->ID!=nil) sender = (id) bod->ID; + } + else + { + + int state = [sender intValue]; + + switch (bod->Type) { + case OptionKernel: + case OptionKernel1: + case OptionFileString: + case OptionString: + [(NSTextField*) bod->contentID setEnabled: state ? true : false]; + [(NSTextField*) bod->contentID setEditable: state ? true : false]; + if (state && bod->Type==OptionFileString) + { + NSString* f = [self selectAnyFile ]; + if (f) [(NSTextField*) bod->contentID setStringValue: f]; + } + [self synchronizeTextContent: bod withValue: state]; + break; + default: + break; + } + } + if(![self saveBootConfig: sender withBootOptionDesc: (BootOptionDesc*) bod] && !bod->contentID ) + { // Couldn't save, so warn user ... + NSRunAlertPanel(@"Error saving bootConfig", @"Could not save com.apple.Boot.plist", + @"OK", nil, nil); + } + return true; +} + +- (bool) executeTaskAndWaitForTermination: (NSString*)taskPath +{ + NSTask *task = [[NSTask alloc] init]; + [task setLaunchPath:taskPath]; + [task launch]; + + [task waitUntilExit]; // wait for process termination + int status = [task terminationStatus]; + + return (status == 0) ? true : false; +} + +- (NSString*) selectPlistFile:(NSString*) name +{ + return [self selectFileWithFileTypes: @"/" withName: name + withTypes: [NSArray arrayWithObjects: @"plist", nil] ]; +} + +- (NSString*) selectAnyFile +{ + return [self selectFileWithFileTypes: @"/" withName: nil withTypes:nil]; +} + +- (NSString*) selectFileWithFileTypes:(NSString*) dir withName: (NSString*) name withTypes:(NSArray*) fileTypes +{ + int result; + NSOpenPanel *oPanel = [NSOpenPanel openPanel]; + [oPanel setAllowsMultipleSelection:NO]; + [oPanel setCanChooseFiles:YES]; + [oPanel setCanChooseDirectories:NO]; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AppleShowAllFiles"]; + + result = [oPanel runModalForDirectory: dir file: name types:fileTypes]; + if (result == NSOKButton) + { + NSArray *filesToOpen = [oPanel filenames]; + int count = [filesToOpen count]; + if(count>0) + { + NSString *aFile = [filesToOpen objectAtIndex:0]; + return aFile; + + } + } + return nil; +} +@end Index: branches/diebuche/ChameleonPrefPane/Sources/GroupControllerProtocol.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/GroupControllerProtocol.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/GroupControllerProtocol.h (revision 77) @@ -0,0 +1,37 @@ +// +// GroupControllerProtocol.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/25/10. +// Copyright 2010 __MyCompanyName__. All rights reserved. +// + +#import + + +// Defintion of the required protocol for any derived classes of PreferencesControllerBase +@protocol GroupControllerProtocol + +@required +// must be implemented in all derived classes + +// Called by all buttons of each group in therface +- (IBAction) onCheckButtonChange: (NSButton*) sender; + +// Called by all text fields of each group in therface +- (IBAction) onTextFiedChange: (NSTextField*) sender; + +// Add the boot config options descriptors to the consolidated dictionary +- (void) addOptionsDesc; + +// Permit to each group to customize his default settings +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + +// Set refresh all group states {enabled | disabled} depending on the authorizations state +- (void) refreshLockStates; + +// load the corresponding pref filer options from the interface +- (void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict; + +@end + Index: branches/diebuche/ChameleonPrefPane/Sources/EfiInjectController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/EfiInjectController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/EfiInjectController.mm (revision 77) @@ -0,0 +1,64 @@ +// +// EfiInject.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/26/10. +// + +#import "EfiInjectController.h" + + +static EfiInjectController *gInstance = NULL; + +@implementation EfiInjectController +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + return (gInstance = self); +} + +//-------------------------------------------------------------------------- +- (void) addOptionsDesc +{ + BootProp::instance().addOptionDesc(mEfiInject, mEfiInjectText, OptionString, "device-properties", ""); +} + +//-------------------------------------------------------------------------- +-(void) setDefaultsValues: (NSMutableDictionary*) dict +{ +} + +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + // automatic, nothing to do +} + +//-------------------------------------------------------------------------- +-(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict +{ + +} + +//-------------------------------------------------------------------------- +-(IBAction) onCheckButtonChange: (NSButton*) sender +{ + if(sender == mCurrentGfxInjection) + { // using nohan script from Lizard here: + NSString* pathTask = [self getResourcePath:@"getDevProp" ofType:@"sh"]; + [self executeTaskAndWaitForTermination: pathTask]; + } + else + [self handleSender: sender]; +} + +//-------------------------------------------------------------------------- +-(IBAction) onTextFiedChange: (NSTextField*) sender +{ + [self handleSender: sender]; +} + ++ (EfiInjectController *)instance { return(gInstance);} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/ChameleonPropertyList.cpp =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/ChameleonPropertyList.cpp (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/ChameleonPropertyList.cpp (revision 77) @@ -0,0 +1,31 @@ +/* + * ChameleonPropertyList.cpp + * ChameleonPrefPane + * + * Created by Rekursor on 1/22/10. + * + */ + +#include "ChameleonPropertyList.h" + +PrefsProp* PrefsProp::_instance = NULL; +BootProp* BootProp::_instance = NULL; +SmbiosProp* SmbiosProp::_instance = NULL; + +void ChameleonPropertyList::deleteOptionDesc() +{ + // delete all alloc'ed pointers + std::map::iterator bod; + for (bod=_idToDescDict.begin(); bod!=_idToDescDict.end(); bod++) + if(bod->second) delete bod->second; + for (bod=_contentIdToDescDict.begin(); bod!=_contentIdToDescDict.end(); bod++) + if(bod->second) delete bod->second; +} + +void ChameleonPropertyList::clearOptionDesc() +{ + deleteOptionDesc(); + _idToDescDict.clear(); // now clear the pairs + _contentIdToDescDict.clear(); // now clear the pairs +} + Index: branches/diebuche/ChameleonPrefPane/Sources/KernOptionsParser.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/KernOptionsParser.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/KernOptionsParser.h (revision 77) @@ -0,0 +1,37 @@ +/* + * KernOptionsParser.h + * ChameleonPrefPane + * + * Created by Rekursor on 1/23/10. + */ +#include +#include + +class KernOptionsParser +{ +public: + KernOptionsParser() {} + + // extract from the string all kern options + bool parseOptions(const char* options); + + // get the corresponding kern option "xxxx=yyyy" + const std::string& stringFromKey(const std::string& key) const; + + // get the left member of kern option "xxxx=yyyy" + const std::string& leftMember(const std::string& expression) const; + + // get the right member of kern option "xxxx=yyyy" + const std::string& rightMember(const std::string& expression) const; + + // add / remove a kernel Flags in the string + void addFlag(const std::string& flag); + void removeFlag(const std::string& flag); + + const std::string& options() const { return _options;} + +private: + bool _status; + std::string _options; + std::list _optionsList; +}; \ No newline at end of file Index: branches/diebuche/ChameleonPrefPane/Sources/AdvancedSetupController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/AdvancedSetupController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/AdvancedSetupController.h (revision 77) @@ -0,0 +1,57 @@ +// +// AdvancedSetupController.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import +#import + + + +// TabView subpane controller definition +@interface AdvancedSetupController : PreferencesControllerBase +{ + IBOutlet NSButton* mKernel; + IBOutlet NSTextField* mKernelText; + IBOutlet NSButton* mDeviceRd; + IBOutlet NSTextField* mDeviceRdText; + + IBOutlet NSButton* mArch; + IBOutlet NSComboBox* mArchText; + IBOutlet NSButton* mCPU; + IBOutlet NSComboBox* mCPUText; + IBOutlet NSButton* mBusRatio; + IBOutlet NSComboBox* mBusRatioText; + + IBOutlet NSButton* mDebug; + IBOutlet NSComboBox* mDebugText; + IBOutlet NSButton* mIO; + IBOutlet NSComboBox* mIOText; + IBOutlet NSButton* mDisableKextsBlacklisting; + + IBOutlet NSButton* mDSDTFile; + IBOutlet NSTextField* mDSDTFileText; + IBOutlet NSButton* mDSDTDrop; + + IBOutlet NSButton* mSMBIOSFile; + IBOutlet NSTextField* mSMBIOSFileText; + IBOutlet NSButton* mSMBIOSDefaults; + + IBOutlet NSButton* mWake; + IBOutlet NSButton* mForceWake; + IBOutlet NSButton* mWakeImage; + IBOutlet NSTextField* mWakeImageText; + IBOutlet NSButton* mSystemId; + IBOutlet NSTextField* mSystemIdText; + IBOutlet NSButton* mRestartFix; +} + +- (IBAction) onCheckButtonChange: (NSButton*) sender; +- (IBAction) onTextFiedChange: (NSTextField*) sender; +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + ++ (AdvancedSetupController *)instance; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/string_util.cpp =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/string_util.cpp (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/string_util.cpp (revision 77) @@ -0,0 +1,34 @@ +/* + * string_util.cpp + * ChameleonPrefPane + * + * Created by Rekursor on 1/23/10. + */ + +#include "string_util.h" + +/* + * String Tokenizer + * In: src string and separator + * Out: a list of string tokens + */ +std::list tokenize(const std::string& src, const std::string& sep) +{ + std::list ret; + if (src.length()==0) return ret; + + std::string::size_type left=0, right=0; + std::string token; + std::string::size_type len = sep.length(); + + for (left=0; (right = src.find(sep, left)) != std::string::npos; left = right + len ) + { + token = src.substr (left, right-left); + if (token.length()>0) ret.push_back (token); + } + token = src.substr(left); + if (token.length()>0) ret.push_back (token); + + return ret; +} + Index: branches/diebuche/ChameleonPrefPane/Sources/CustomTableView.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/CustomTableView.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/CustomTableView.mm (revision 77) @@ -0,0 +1,33 @@ +// +// CustomTableView.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/25/10. +// + +#import "CustomTableView.h" + + +@implementation CustomTableView + +- (void)awakeFromNib +{ + // highlight colors + mHighlightColorInFocusView = [[NSColor colorWithDeviceRed:.65 green:.75 blue:1.0 alpha:1.0] retain]; + mHighlightColorOutOfFocusView = [[NSColor colorWithDeviceRed:.50 green:.65 blue:.85 alpha:1.0] retain]; +} +- (id)_highlightColorForCell:(NSCell *)cell +{ + return [self isEnabled] ? mHighlightColorInFocusView : mHighlightColorOutOfFocusView; + +} + +- (void)dealloc +{ + // release the colors + [mHighlightColorInFocusView release]; + [mHighlightColorOutOfFocusView release]; + + [super dealloc]; +} +@end Index: branches/diebuche/ChameleonPrefPane/Sources/PreferencesControllerBase.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/PreferencesControllerBase.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/PreferencesControllerBase.h (revision 77) @@ -0,0 +1,80 @@ +// +// PreferencesControllerBase.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import +#import "ChameleonPrefPane.h" +#import "ChameleonPropertyList.h" +#import "ShellProcess.h" +#import "string_util.h" +#import "GroupControllerProtocol.h" + + +//-------------------------------------------------------------------------- +const char * const kKernelFlags = "Kernel Flags"; + +//-------------------------------------------------------------------------- +typedef enum GroupAction +{ + SetDefaultValues, + RefreshLockStates, + LoadPreferencesOptions, + LoadBootConfigOptions, + AddOptionsDesc, + SaveBootConfigOptions +}; + + + +// ENHANCE ME: remove this globals and integrate them in ChameleonPrefPane or at least +// add function accessor entry points +extern PartitionExtractor * partExtractor; + +// Define common expected behavior for all derived controllers +@interface PreferencesControllerBase : NSObject +{ +} + +// Register the Group panel for further automatic iteration matters ++ (void) registerPreferencesGroup:(id) myGroup; + +// Iterate and execute action for each register group ++ (void) doForEachGroup: (GroupAction) action withOption:(id) option; + +// Set refresh state {enabled | disabled} depending on the authorizations state ++ (void) refreshBodLockState: (const BootOptionDesc*) bod; ++ (void) refreshLockState: (id) item; + +// Unitary Method for Load One option of any type ++ (void) loadOptionsFromBootFile; + +// Method for loading all registred options components in the interface ++ (void) loadOptionFromBootFile:(id) optionID; + +// Get the resource in the pref pane, needed because the bundle get resource api wont work +// as it would return the SystemPreferences application resource +- (id) getResourcePath: (NSString *) str ofType: (NSString*) sType; + +// Execute a task and wait for the process to terminate +- (bool) executeTaskAndWaitForTermination: (NSString*)taskPath; + +// Open a file selection modal dialog +- (NSString*) selectFileWithFileTypes:(NSString*) dir withName: (NSString*) name withTypes:(NSArray*) fileTypes; +// Open a file selection modal dialog with a plist predefined type +- (NSString*) selectAnyFile; +- (NSString*) selectPlistFile:(NSString*)name; + +- (void) loadPreferences; +- (bool) savePreferences; + +- (bool) handleSender: (id) sender; + +-(NSMutableDictionary*) preferencesFile; +-(NSMutableDictionary*) preferencesParts; + +-(ChameleonPrefPane*) chameleon; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/SmbiosController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/SmbiosController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/SmbiosController.h (revision 77) @@ -0,0 +1,26 @@ +// +// EfiInject.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/26/10. +// + +#import +#import + + + + +// TabView subpane controller definitions +@interface SmbiosController : PreferencesControllerBase +{ + IBOutlet NSButton* mEditSmbios; +} + +- (IBAction) onCheckButtonChange: (NSButton*) sender; +- (IBAction) onTextFiedChange: (NSTextField*) sender; +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + ++ (SmbiosController *)instance; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/EfiInjectController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/EfiInjectController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/EfiInjectController.h (revision 77) @@ -0,0 +1,28 @@ +// +// EfiInject.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/26/10. +// + +#import +#import + + + + +// TabView subpane controller definitions +@interface EfiInjectController : PreferencesControllerBase +{ + IBOutlet NSButton* mEfiInject; + IBOutlet NSTextField* mEfiInjectText; + IBOutlet NSButton* mCurrentGfxInjection; +} + +- (IBAction) onCheckButtonChange: (NSButton*) sender; +- (IBAction) onTextFiedChange: (NSTextField*) sender; +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + ++ (EfiInjectController *)instance; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/PeripheralsController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/PeripheralsController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/PeripheralsController.mm (revision 77) @@ -0,0 +1,69 @@ +// +// PeripheralsController.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import "PeripheralsController.h" + +static PeripheralsController *gInstance = NULL; + +@implementation PeripheralsController + +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + return (gInstance = self); +} + +//-------------------------------------------------------------------------- +- (void) addOptionsDesc +{ + BootProp::instance().addOptionDesc(mLegacyLogo, nil, OptionYesNo, "Legacy Logo", "No"); + BootProp::instance().addOptionDesc(mBootBanner, nil, OptionYesNo, "Boot Banner", "Yes"); + BootProp::instance().addOptionDesc(mVBIOS, nil, OptionYesNo, "VBIOS", "No"); + BootProp::instance().addOptionDesc(mVideoROM, mVideoROMText, OptionFileString, "VideoROM", ""); + BootProp::instance().addOptionDesc(mGraphicsMode, mGraphicsModeText, OptionString, "Graphics Mode", ""); + BootProp::instance().addOptionDesc(mGraphicsEnabler, nil, OptionYesNo, "GraphicsEnabler", "No"); + BootProp::instance().addOptionDesc(mUSBBusFix, nil, OptionYesNo, "USBBusFix", "No"); + BootProp::instance().addOptionDesc(mEHCIacquire, nil, OptionYesNo, "EHCIacquire", "No"); + BootProp::instance().addOptionDesc(mUHCIreset, nil,OptionYesNo, "UHCIreset", "No"); + BootProp::instance().addOptionDesc(mEthernetBuiltIn, nil, OptionYesNo, "EthernetBuiltIn", "No"); + BootProp::instance().addOptionDesc(mPciRoot, mPciRootText, OptionString, "PciRoot", ""); + BootProp::instance().addOptionDesc(mForceHPET, nil, OptionYesNo, "ForceHPET", "No"); + +} + +//-------------------------------------------------------------------------- +-(void) setDefaultsValues: (NSMutableDictionary*) dict +{ +} + +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + // automatic, nothing to do +} + +//-------------------------------------------------------------------------- +-(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict +{ + +} +//-------------------------------------------------------------------------- +-(IBAction) onCheckButtonChange: (NSButton*) sender +{ + [self handleSender: sender]; +} + +//-------------------------------------------------------------------------- +-(IBAction) onTextFiedChange: (NSTextField*) sender +{ + [self handleSender: sender]; +} + ++ (PeripheralsController *)instance { return(gInstance);} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/BootFlagsController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/BootFlagsController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/BootFlagsController.mm (revision 77) @@ -0,0 +1,73 @@ +// +// BootFlagsController.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import "BootFlagsController.h" + +// Constants + +// File static variables +static BootFlagsController *gInstance = NULL; + + +@implementation BootFlagsController + +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + return (gInstance = self); +} + +//-------------------------------------------------------------------------- +-(void) addOptionsDesc +{ + BootProp::instance().addOptionDesc(mVerbose, nil, OptionUnix, "-v", ""); + BootProp::instance().addOptionDesc(mSafeBoot, nil, OptionUnix, "-x", ""); + BootProp::instance().addOptionDesc(mIgnoreBootConfig, nil, OptionUnix, "-F", ""); + BootProp::instance().addOptionDesc(mSingleUser, nil, OptionUnix, "-s", ""); + BootProp::instance().addOptionDesc(mTimeOut, mTimeOutText, OptionString,"Timeout", "5"); + BootProp::instance().addOptionDesc(mQuietBoot, nil, OptionYesNo, "Quiet Boot", "No"); + BootProp::instance().addOptionDesc(mInstantMenu, nil, OptionYesNo, "Instant Menu", "No"); + BootProp::instance().addOptionDesc(mWait, nil, OptionYesNo, "Wait", "No"); + BootProp::instance().addOptionDesc(mRescan, nil, OptionYesNo, "Rescan", "No"); + BootProp::instance().addOptionDesc(mRescanPrompt, nil, OptionYesNo, "Rescan Prompt", "No"); + BootProp::instance().addOptionDesc(mRescanSingleDrive, nil, OptionYesNo, "Rescan SingleDrive", "No"); + BootProp::instance().addOptionDesc(mUseGUI, nil, OptionYesNo, "GUI", "Yes"); + BootProp::instance().addOptionDesc(mTheme, mThemeText, OptionString, "Theme", ""); +} + +//-------------------------------------------------------------------------- +-(void) setDefaultsValues: (NSMutableDictionary*) dict +{ +} +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + // automatic, nothing to do +} + +//-------------------------------------------------------------------------- +-(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict +{ + +} + +//-------------------------------------------------------------------------- +-(IBAction) onCheckButtonChange: (NSButton*) sender +{ + [self handleSender: sender]; +} + +//-------------------------------------------------------------------------- +-(IBAction) onTextFiedChange: (NSTextField*) sender +{ + [self handleSender: sender]; +} + ++ (BootFlagsController *)instance { return(gInstance);} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/ShellProcess.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/ShellProcess.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/ShellProcess.h (revision 77) @@ -0,0 +1,133 @@ +/* + * shell_process.h + * + * Created by Rekursor on 1/17/2010. + * + */ +#ifndef __CHSHELL_PROCESS_H +#define __CHSHELL_PROCESS_H + +#include +#include +#include +#include +#include +#include +#include +#include "file_util.h" +//---------------------------------------------------------------- +const int MAX_HD = 32; + +//---------------------------------------------------------------- +class ShellProcess +{ +public: + // construction / destruction + ShellProcess() {_fpt= NULL;} + ~ShellProcess() {if (_fpt) close();} + + FILE * open (const char *cmd, const char *mode="r"); + int close(); + FILE * desc() const { return _fpt;} // non null if file is open + char * get_line(char * line, size_t s) const {return _fpt ? fgets(line, s, _fpt) : NULL;} + +protected: + FILE * _fpt; +}; + +//---------------------------------------------------------------- +class PartitionInfo +{ +public: + PartitionInfo() : _disk(0), _part(0) {} + PartitionInfo(int disk, int part) { set(disk, part);} + + void disk(int disk) { _disk=disk;} + int disk() const { return _disk;} + + void partition(int part) { _part=part;} + int partition () const { return _part;} + + const char * clabel() const { return _label.c_str();} + const std::string& label() const { return _label; } + void label(const char * l) { + if (l) _label = l; + removeSpaces(_label); + } + + const char * cfsType() const { return _fsType.c_str();} + const std::string& fsType() const { return _fsType;} + void fsType(const char * fs) { + if (fs) _fsType = fs; + removeSpaces(_fsType); + } + + void set(int disk, int part) { _disk =disk; _part = part;} + bool fromPartitionHdString(const char * inHdStr); + std::string toHdStr() const + { + char buf[16]=""; + sprintf(buf, "hd(%d,%d)", disk(),partition()); + return std::string(buf); + } + int imageIndexFromFs() const; +protected: + void removeSpaces(std::string & s); + +private: + int _disk, _part; + std::string _fsType, _label; +}; + +static inline bool isDiskIndexInf(PartitionInfo i, PartitionInfo j) +{ + return ((i.disk()*100+i.partition()) < (j.disk()*100 + j.partition()) ) ; +} + +//---------------------------------------------------------------- +class PartitionExtractor : public ShellProcess +{ +public: + PartitionExtractor() : ShellProcess() { init(); } + + const std::vector& extractPartitions( + const char* szHide=NULL, + const char* szRenamed=NULL); + int getListCount() const {return (int) _partList.size();} + + const std::vector& partList() const {return _partList;} + std::vector& editPartList() {return _partList;} + + // get the index in the internal partlist of the hd(n,m) partition specified by the input string + // return -1 if no match, >=0 if a match happens + int getIndexFromHdStringSpec(const char*); + + void hidePartitions(const char* szParts){ _hiddenParts = (szParts ? szParts : "");} + void renamedPartitions(const char* szParts){ _renamedParts = (szParts ? szParts : "");} + void sortPartList() { sort(_partList.begin(), _partList.end(), isDiskIndexInf); } + + const char * checkForRename(const char * label, const char* szHd); + + void swapHD(int src, int dst) + { + if(src < 0 || src > MAX_HD-1 || dst < 0 || dst > MAX_HD-1) return; + _hdRedirTable[src]=dst; + _hdRedirTable[dst]=src; + } + + void resetSwapping() { init();} + +protected: + void init() { + for (int i=0; i _partList; + int _hdRedirTable[MAX_HD]; + std::string _hiddenParts; + std::string _renamedParts; + +}; + +#endif Index: branches/diebuche/ChameleonPrefPane/Sources/BootSetupController.mm =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/BootSetupController.mm (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/BootSetupController.mm (revision 77) @@ -0,0 +1,299 @@ +// +// BootSetupController.mm +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import "BootSetupController.h" +#import "ChameleonPrefPane.h" + +static const char* sPartDescSep = ";"; // cstring version +static const char cPartDescSep = ';'; // partition descriptor separator + +static BootSetupController *gInstance = NULL; + +@implementation BootSetupController + +//-------------------------------------------------------------------------- +- (id) init +{ + self = [super init]; + return (gInstance = self); +} + +//-------------------------------------------------------------------------- +- (void) addOptionsDesc +{ + BootProp::instance().addOptionDesc(mDefaultPartition, mDefaultPartitionText, OptionString, "Default Partition", ""); + BootProp::instance().addOptionDesc(mHidePartition , mHidePartitionText, OptionString, "Hide Partition", ""); + BootProp::instance().addOptionDesc(mRenamePartition , mRenamePartitionText, OptionString, "Rename Partition", ""); +} + +//-------------------------------------------------------------------------- +- (void) refreshLockStates +{ + // non boot config options (not automatized) + [PreferencesControllerBase refreshLockState: mSwapHD01 ]; + [PreferencesControllerBase refreshLockState: mSwapHD02 ]; + [PreferencesControllerBase refreshLockState: mFreezeParts ]; + [PreferencesControllerBase refreshLockState: mInjectFrozenParts ]; + [PreferencesControllerBase refreshLockState: mBootConfigPath ]; + [PreferencesControllerBase refreshLockState: mBootConfigPathText ]; +} + +//-------------------------------------------------------------------------- +- (void) setDefaultsValues: (NSMutableDictionary*) dict +{ + [dict setObject: [[NSNumber alloc] initWithBool: false] forKey: keySwapHD01]; + [dict setObject: [[NSNumber alloc] initWithBool: false] forKey: keySwapHD02]; + [dict setObject:[[NSNumber alloc] initWithBool: false] forKey: keyUseFrozenParts]; + [dict setObject:[[NSNumber alloc] initWithBool: false] forKey: keyUseFrozenParts]; + [dict setObject:[[NSString alloc] initWithString: @""] forKey: keyForceBootConfigPath]; +} +//-------------------------------------------------------------------------- +-(void) loadOptionsFromPreferencesFile: (NSMutableDictionary*) dict +{ + [mSwapHD01 setIntValue: [[dict objectForKey: keySwapHD01] intValue]]; + [mSwapHD02 setIntValue: [[dict objectForKey: keySwapHD02] intValue]]; + [mFreezeParts setIntValue: [[dict objectForKey: keyUseFrozenParts] intValue] ]; + id obj = [dict objectForKey: keyForceBootConfigPath]; + [mBootConfigPathText setStringValue: obj ? obj : @"" ]; + int val = (obj && [[mBootConfigPathText stringValue] length] >0 ? 1 : 0); + [mBootConfigPath setIntValue: val]; + [dict setObject:[[NSString alloc] initWithString: [mBootConfigPathText stringValue]] + forKey: keyForceBootConfigPath]; + [mBootConfigPathText setEnabled: val ? true : false]; + [mBootConfigPathText setEditable: val ? true : false]; + +} + +//-------------------------------------------------------------------------- +- (void) loadFrozenParts +{ + std::vector& partList = partExtractor->editPartList(); //rw + // iterate for all entries to add + char keyPartN[32] = ""; + char buffer[256]=""; + int k=0; + + partList.clear(); + for (int i=0; i< [[self preferencesParts] count]; i++) + { + // get the key + snprintf(keyPartN, sizeof(keyPartN)-1, "partition%02d",i); + NSString* obj = [[self preferencesParts] objectForKey: [[NSString alloc] initWithUTF8String: keyPartN] ]; + // assign this key if valid + if (obj!=nil && [obj length]>0) + { + PartitionInfo p; + // parse string + strncpy(buffer, [obj UTF8String], sizeof(buffer)-1); + k=0; + for(const char* word = strtok(buffer,";"); word; word=strtok(NULL,sPartDescSep),k++) + { + switch (k) { + case 0: // parse disk number + if (isdigit(*word)) p.disk(*word-'0'); + break; + case 1: // parse partition number + if (isdigit(*word)) p.partition(*word-'0'); + break; + case 2: // parse volume label + p.label(word); + case 3: + p.fsType(word); + break; + default: + break; + } + } + partList.push_back(p); + } + } + partExtractor->sortPartList(); + +} + +//-------------------------------------------------------------------------- +- (void) swapDisks: (bool) bSwap src: (int) iSrc dst: (int) iDst; +{ + if(!partExtractor || !BootProp::instance().isValid()) return; + if (bSwap) + { + partExtractor->swapHD(iSrc, iDst); + } + + if ([mFreezeParts intValue]==0) + partExtractor->extractPartitions(); + else + [self loadFrozenParts ]; + + [ [self chameleon] selectDefaultPartition]; + +} + +//-------------------------------------------------------------------------- +- (void) doSwapHD: (int) val save: (bool) doSave src: (int) isrc dst: (int) idst +{ + + if( val>0 && ![[BootSetupController instance]->mFreezeParts intValue]) //on + { + [self swapDisks: true src:isrc dst:idst ]; + } + else + { + [self swapDisks: false src:isrc dst:idst ]; + } + + if(doSave) + { + if (isrc==0 && idst==1) + [[self preferencesFile] setObject: [NSNumber numberWithBool: val ? true : false] forKey: keySwapHD01]; + if (isrc==0 && idst==2) + [[self preferencesFile] setObject: [NSNumber numberWithBool: val ? true : false] forKey: keySwapHD02]; + [ [self chameleon] savePreferences:[self preferencesFile] ]; + } + + [[[ChameleonPrefPane instance] partitionsTable] reloadData]; + [[[ChameleonPrefPane instance] partitionsTable] scrollRowToVisible: 0]; + //[self tableViewSelectionDidChange: nil]; + +} + + +//-------------------------------------------------------------------------- +- (IBAction)onInjectPartsToFreeze: (id)sender +{ + int size = partExtractor ? partExtractor->partList().size() : 0; + if (!size) + { // nothing to inject + NSRunAlertPanel(@"Inject Partitions to Freeze Configuration", + @"No current partitions to inject, did you check boot config file ?",@"OK", nil,nil); + return; + } + // generate the parts list in preferences proplist + NSInteger n = NSRunAlertPanel(@"Inject Partitions to Freeze Configuration", + @"Are you sure you want to overwrite your Freeze settings with current partition list ?", + @"OK", @"Cancel",nil); + if (n==1) + { + // populate the dictionary with the current partitions + + // empty dictionary and update key in parent: + [[self preferencesFile] removeObjectForKey: keyPartitionsList]; + [[self preferencesParts] removeAllObjects ]; + + // iterate for all entries to add + char partDesc[256]=""; + char keyPartN[32] = ""; + for (int i=0; i< size; i++) + { + + const PartitionInfo& p =partExtractor->partList()[i]; + + // format the partition key and descriptor string + snprintf(keyPartN, sizeof(keyPartN)-1, "partition%02d",i); + + snprintf(partDesc, sizeof(partDesc)-1, "%d%c%d%c%s%c%s", + p.disk(), cPartDescSep, + p.partition(), cPartDescSep, + p.clabel(), cPartDescSep, + p.cfsType()); + + // write it to the dictionary + NSString * key = [[NSString alloc] initWithUTF8String: keyPartN]; + NSString * desc = [[NSString alloc] initWithUTF8String: partDesc]; + [[self preferencesParts] setObject: desc forKey: key]; + } + [[self preferencesFile] setObject: [self preferencesParts] forKey: keyPartitionsList]; + [self savePreferences ]; + } +} + +//-------------------------------------------------------------------------- +- (IBAction) onForceBootConfigPath: (id) sender +{ + if (sender == mBootConfigPath) + { + int val = [mBootConfigPath intValue]; + [mBootConfigPathText setEnabled: val ? true : false]; + [mBootConfigPathText setEditable: val ? true : false]; + + if (val) + { + NSString * f = [self selectPlistFile: @"com.Apple.boot.plist"]; + if(f) [mBootConfigPathText setStringValue:f]; + } + + + [[self preferencesFile] setObject: + val ? [mBootConfigPathText stringValue] : [[NSString alloc] initWithUTF8String: ""] + forKey: keyForceBootConfigPath]; + + } + else + [[self preferencesFile] setObject: [mBootConfigPathText stringValue] forKey: keyForceBootConfigPath]; + [self savePreferences ]; + + + [PreferencesControllerBase loadOptionsFromBootFile ]; + +} +//-------------------------------------------------------------------------- +-(IBAction) onCheckButtonChange: (NSButton*) sender +{ + // IMPROVE ME: Should automatize the callback/load/save mechanism + // for the preferences file like the bootConfig file + if (sender == mSwapHD01 || sender == mSwapHD02) + { + partExtractor->resetSwapping(); + [self doSwapHD: [mSwapHD01 intValue] save:true src:0 dst:1]; + [self doSwapHD: [mSwapHD02 intValue] save:true src:0 dst:2]; + } + else if (sender == mFreezeParts) + { + bool val = !![sender intValue]; + [[self preferencesFile] setObject: [NSNumber numberWithBool: val] forKey: keyUseFrozenParts]; + [[self chameleon] savePreferences: [self preferencesFile]]; + [ self onCheckButtonChange: mSwapHD01]; + } + else if (sender == mInjectFrozenParts) + { + [self onInjectPartsToFreeze: mInjectFrozenParts]; + } + else if (sender == mDefaultPartition || sender == mHidePartition + || sender == mRenamePartition ) + { // sync with other panels + [self handleSender:sender]; + } + else if (sender == mBootConfigPath || (NSTextField*)sender == mBootConfigPathText) + { // sync with other panels + [self onForceBootConfigPath: sender]; + } + // Handle BootOptions generically: + else + [self handleSender:sender]; +} +//-------------------------------------------------------------------------- +-(IBAction) onTextFiedChange: (NSTextField*) sender +{ + if ( sender == mDefaultPartitionText || sender == mHidePartitionText || + sender == mRenamePartitionText ) + { + [self handleSender:sender]; + + [PreferencesControllerBase loadOptionsFromBootFile ]; + partExtractor->extractPartitions( + [[mHidePartitionText stringValue] UTF8String], + [[mRenamePartitionText stringValue] UTF8String] + ); + [self doSwapHD: [mSwapHD01 intValue] save:true src:0 dst:1]; + [self doSwapHD: [mSwapHD02 intValue] save:true src:0 dst:2]; + } +} + +//-------------------------------------------------------------------------- ++ (BootSetupController *)instance { return(gInstance);} + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/PropertyList.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/PropertyList.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/PropertyList.h (revision 77) @@ -0,0 +1,87 @@ +/* + * property_list.h + * + * Created by Rekursor on 1/17/10. + * + */ +#ifndef __CHPROPERTYLIST_LIST_H +#define __CHPROPERTYLIST_LIST_H + +#include +#include +#include +#include + +//---------------------------------------------------------------------------- + +static const bool CreateIfNotExist = true; +static const bool DontCreate = false; + + +//---------------------------------------------------------------------------- +/// Run priviledged command for cmds like property chmods and restard command +//---------------------------------------------------------------------------- +bool executePrivilegedCmd(AuthorizationRef auth, + const char* pathToTool, + const char* args=NULL, + AuthorizationFlags flags=kAuthorizationFlagDefaults); + + +//---------------------------------------------------------------------------- +/// Simple PropertyList Abstraction +//---------------------------------------------------------------------------- +class PropertyList +{ + +public: + // Create a property list + PropertyList() : _proplistRef(0), _CFURLRef(0) { } + virtual ~PropertyList(); + + /// Tell if a valid property list successfully opened + bool isValid() const { return _proplistRef!=NULL;} + + /// Open a property list + bool open(const char *propListPath, bool createIfNotExist, + AuthorizationRef auth=NULL, + AuthorizationFlags flags=kAuthorizationFlagDefaults); + + /// Save a property list + bool save(AuthorizationRef auth=NULL, + AuthorizationFlags flags=kAuthorizationFlagDefaults); + + /// Return last error status, used in open() + CFStringRef lastError() const { return _errorString;} + + /// Get a corresponding string content from a key spec + const char * getStringForKey(const char *key); + const char * getStringForKey(const std::string& key) + { + std::string str= key; + return getStringForKey(str.c_str()); + } + + /// Set a content from a string, at specified key + bool setStringForKey(const char* key, const char* value); + bool setStringForKey(const std::string& key, const std::string& value) + { + return setStringForKey(key.c_str(), value.c_str()); + } + + /// Remove a key from the Proplist + bool removeKeyAndValue(const char *key); + + /// Get the property list path + const char * propFilePath() const { return _propFilePath.c_str(); } + + /// permit to execute a priviledge chmod to access system files + static bool chmodFile(const char * path, const char * chmodMask, + AuthorizationRef auth, AuthorizationFlags flags=kAuthorizationFlagDefaults); +protected: + CFPropertyListRef _proplistRef; + CFURLRef _CFURLRef; + std::string _propFilePath; // keep a track of the proplist filename + CFStringRef _errorString; +}; + +#endif Index: branches/diebuche/ChameleonPrefPane/Sources/PeripheralsController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/PeripheralsController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/PeripheralsController.h (revision 77) @@ -0,0 +1,42 @@ +// +// PeripheralsController.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import +#import + + +// TabView subpane controller definition +@interface PeripheralsController : PreferencesControllerBase +{ + + IBOutlet NSButton* mLegacyLogo; + IBOutlet NSButton* mBootBanner; + IBOutlet NSButton* mVBIOS; + IBOutlet NSButton* mVideoROM; + IBOutlet NSTextField* mVideoROMText; + + IBOutlet NSButton* mGraphicsMode; + IBOutlet NSComboBox* mGraphicsModeText; + IBOutlet NSButton* mGraphicsEnabler; + + IBOutlet NSButton* mUSBBusFix; + IBOutlet NSButton* mEHCIacquire; + IBOutlet NSButton* mUHCIreset; + + IBOutlet NSButton* mEthernetBuiltIn; + IBOutlet NSButton* mPciRoot; + IBOutlet NSTextField* mPciRootText; + IBOutlet NSButton* mForceHPET; +} + +- (IBAction) onCheckButtonChange: (NSButton*) sender; +- (IBAction) onTextFiedChange: (NSTextField*) sender; +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + ++ (PeripheralsController *)instance; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/KernOptionsParser.cpp =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/KernOptionsParser.cpp (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/KernOptionsParser.cpp (revision 77) @@ -0,0 +1,76 @@ +/* + * KernOptionsParser.cpp + * ChameleonPrefPane + * + * Created by Rekursor on 1/23/10. + */ + +#include "KernOptionsParser.h" +#include "string_util.h" + +bool KernOptionsParser::parseOptions(const char* options) +{ + _options = options ? trim(options) : ""; + std::string token, temp=_options; + + // first remove spaces around '=' to simplify parsing + std::string::size_type found = std::string::npos; + while ((found=_options.find(" =")) != std::string::npos) _options.replace(found, 3,"="); + while ((found=_options.find("= ")) != std::string::npos) _options.replace(found, 3,"="); + + // then tokenize the string + _optionsList = tokenize(_options); + + return true; +} + +static const std::string sEmpty=""; + +// get the corresponding kern option "xxxx=yyyy" +const std::string& KernOptionsParser::stringFromKey(const std::string& key) const +{ + for (std::list::const_iterator it=_optionsList.begin(); it!=_optionsList.end(); it++) + if (it->find(key)!=std::string::npos) return *it; + + return sEmpty; +} + +// get the left member of kern option "xxxx=yyyy" +const std::string& KernOptionsParser::leftMember(const std::string& expression) const +{ + static std::string sLeft; + std::string::size_type pos = expression.find('='); + + if (pos!=std::string::npos) + return (sLeft = expression.substr(0, pos)); + return expression; +} + +// get the right member of kern option "xxxx=yyyy" +const std::string& KernOptionsParser::rightMember(const std::string& expression) const +{ + static std::string sLeft; + std::string::size_type pos = expression.find('='); + + if (pos!=std::string::npos) + return (sLeft = expression.substr(pos+1)); + return expression; +} +// remove a flag in the string +void KernOptionsParser::removeFlag(const std::string& flag) +{ + std::string::size_type found = _options.find(flag); + if (found==std::string::npos) return; + _options.erase(found, found+flag.length()); + _options = trim(_options); +} + +// remove a flag in the string +void KernOptionsParser::addFlag(const std::string& flag) +{ + std::string::size_type found = _options.find(flag); + if (found!=std::string::npos) return; + _options = " " + _options; + _options = flag + _options; + _options = trim(_options); +} Index: branches/diebuche/ChameleonPrefPane/Sources/BootFlagsController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/BootFlagsController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/BootFlagsController.h (revision 77) @@ -0,0 +1,42 @@ +// +// BootFlagsController.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import +#import "PreferencesControllerBase.h" + + +// TabView subpane controller definition +@interface BootFlagsController : PreferencesControllerBase +{ + + IBOutlet NSButton* mVerbose; + IBOutlet NSButton* mSafeBoot; + IBOutlet NSButton* mIgnoreBootConfig; + + IBOutlet NSButton* mTimeOut; + IBOutlet NSTextField* mTimeOutText; + IBOutlet NSButton* mSingleUser; + + IBOutlet NSButton* mQuietBoot; + IBOutlet NSButton* mInstantMenu; + IBOutlet NSButton* mWait; + + IBOutlet NSButton* mRescan; + IBOutlet NSButton* mRescanPrompt; + IBOutlet NSButton* mRescanSingleDrive; + IBOutlet NSButton* mUseGUI; + IBOutlet NSButton* mTheme; + IBOutlet NSComboBox* mThemeText; +} + +- (IBAction) onCheckButtonChange: (NSButton*) sender; +- (IBAction) onTextFiedChange: (NSTextField*) sender; +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + ++ (BootFlagsController *)instance; + +@end Index: branches/diebuche/ChameleonPrefPane/Sources/BootSetupController.h =================================================================== --- branches/diebuche/ChameleonPrefPane/Sources/BootSetupController.h (revision 0) +++ branches/diebuche/ChameleonPrefPane/Sources/BootSetupController.h (revision 77) @@ -0,0 +1,48 @@ +// +// PartitionsSetupController.h +// ChameleonPrefPane +// +// Created by Rekursor on 1/22/10. +// + +#import +#import "PreferencesControllerBase.h" + +// Constants definitions +static const char* const kDefaultPartition = "Default Partition"; +static const char* const kHidePartition = "Hide Partition"; +static const char* const kRenamePartition = "Rename Partition"; + +// TabView subpane controller definition +@interface BootSetupController : PreferencesControllerBase +{ +@public + IBOutlet NSButton * mSwapHD01; + IBOutlet NSButton * mSwapHD02; + IBOutlet NSButton * mFreezeParts; + IBOutlet NSButton * mInjectFrozenParts; + + IBOutlet NSButton* mDefaultPartition; + IBOutlet NSTextField* mDefaultPartitionText; + + IBOutlet NSButton* mHidePartition; + IBOutlet NSTextField* mHidePartitionText; + + IBOutlet NSButton* mRenamePartition; + IBOutlet NSTextField* mRenamePartitionText; + + IBOutlet NSButton* mBootConfigPath; + IBOutlet NSTextField* mBootConfigPathText; + +} + +- (IBAction) onCheckButtonChange: (NSButton*) sender; +- (IBAction) onTextFiedChange: (NSTextField*) sender; +- (void) setDefaultsValues: (NSMutableDictionary*) dict; + +- (void) doSwapHD: (int) val save: (bool) doSave src: (int) isrc dst: (int) idst; +- (IBAction) onForceBootConfigPath: (id) sender; + ++ (BootSetupController *)instance; + +@end Index: branches/diebuche/ChameleonPrefPane/Info.plist =================================================================== --- branches/diebuche/ChameleonPrefPane/Info.plist (revision 0) +++ branches/diebuche/ChameleonPrefPane/Info.plist (revision 77) @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + Chameleon.icns + CFBundleIdentifier + com.chameleon.${PRODUCT_NAME:identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 2.0 + CFBundleSignature + ???? + CFBundleVersion + 2.0.0 RC1 + NSMainNibFile + Chameleon + NSPrefPaneIconFile + Chameleon.tiff + NSPrefPaneIconLabel + Chameleon + NSPrincipalClass + ChameleonPrefPane + + Index: branches/diebuche/ChameleonPrefPane/TODO =================================================================== --- branches/diebuche/ChameleonPrefPane/TODO (revision 0) +++ branches/diebuche/ChameleonPrefPane/TODO (revision 77) @@ -0,0 +1,13 @@ +Future version (codename: Gandalf) Plans +---------------------------------------- +Implement most if not all of the Chameleon bootConfig parameters in the table view of the current prefpane : let the Magic happenning ! + +Current versions todo list +-------------------------- + - Graphical deign (icons and otehr graphical matter..) management -> DieBuche + - Localization -> DieBuche, have a look to scrax translation file in German, Italian, portuguese + in the issue pane of the repository (thiagomorales propsed portuguese maybe spanish would be better first ?) + - Enhance the partition filtering by checking really bootable partitions + (by contrast of the partition of a particular format) *OK* but can be improved + - Try to investigate if there is a better way to get the partition list + (currently done with diskutil list) probably with Chameleon booter RC6. Index: branches/diebuche/ChameleonPrefPane/makebin =================================================================== --- branches/diebuche/ChameleonPrefPane/makebin (revision 0) +++ branches/diebuche/ChameleonPrefPane/makebin (revision 77) @@ -0,0 +1,13 @@ +#!/bin/sh +# +# Creates binaries archives from the current version stored in ./bin +# +# Usage: +# +# makebin +# +(cd bin/OSX105; ditto -ck --keepParent ../../build/Release\ 10.5/Chameleon.prefPane Chameleon.zip) +(cd bin/OSX106; ditto -ck --keepParent ../../build/Release/*.prefPane Chameleon.zip) +if test "$1" != "" ; then + echo "$1" > bin/version +fi \ No newline at end of file Property changes on: branches/diebuche/ChameleonPrefPane/makebin ___________________________________________________________________ Added: svn:executable + * Index: branches/diebuche/ChameleonPrefPane/CHANGES =================================================================== --- branches/diebuche/ChameleonPrefPane/CHANGES (revision 0) +++ branches/diebuche/ChameleonPrefPane/CHANGES (revision 77) @@ -0,0 +1,47 @@ +- Added About Dialog, made the displayed version numbers all rely on the info.plist file +- Fixed refresh and on checked associated button state, made sure the string is disabled if value is 0 +- Fixed crash when using swap hd 0<->2 +- Added a new option type (OptionFileString) that features an open dialog box to open files +- Added few Combo boxes to simplify text inputs +- Added Missing ForceHPET option and Theme options +- Added a new SMBIOS panel only opening a file (in construction) +- Added new EFI Injection panel +- Added PciRoot, GUI boot options +- Added scrax to credits: thx for testing the Chameleon PrefPane! +- Create a makebin script (to enhance) that creates zip archives and sets a version + in the bin dir +- Fixed default value to Yes not included in the boot config would not be checked + by default in interface +- Added RestartFix boot option +- Added forceBootConfigPath to the tabview panel for quicker setup, so now no + need to edit the preferences file manually. +- Added SystemId +- Added full bootOptions loading into the interface with no custom code needed, + all loading features are implemented in base class PreferencesControllerBase, + with the automatic parser engine. +- Implemented the bootOption automatic and generic parsing engine. + Now any option is parsed from bootFile automatically (incl. defaults) + thanks to the underlying engine based on a dynamically constructed + id to desc map and also to the group panel registration init process +- Fixed dmg archives would appear in dynamic partition listing +- Added FREEZE (lock) features, see README. +- Refined cosmetics for the GUI +- Added images icon on the first column of each partition entries +- Added APSL and README for instructions +- Added swap disk (01 and 02) fixes +- Added Rename and Hide display from bootConfig +- Fixed 10.5 and 10.6 would crash because of memory references erased +- Added more bootConfig paths and an option to force it + (i.e:if not found automatically) +- Added new paths for bootConfig search now looking in this order: + "/", + "/Extra/", + "/Volumes/EFI/Extra/", + "/Volumes/Cham/Extra/", + "/Volumes/BootLoaders/Extra/", + "/Library/Preferences/SystemConfiguration/", +- Change the restart by replacing the internal reboot shell cmd by an applescript + eq. to the AppleMenu/Restart command +- Fixed nib file loading and initialization problem, possibly fixes the lock pb as well? +- Added Apple_Free filter to filter these free partitions + Index: branches/diebuche/ChameleonPrefPane/ChameleonPrefPane.xcodeproj/project.pbxproj =================================================================== --- branches/diebuche/ChameleonPrefPane/ChameleonPrefPane.xcodeproj/project.pbxproj (revision 0) +++ branches/diebuche/ChameleonPrefPane/ChameleonPrefPane.xcodeproj/project.pbxproj (revision 77) @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 010CC625110927A2006EFFE9 /* QuestionMark.png in Resources */ = {isa = PBXBuildFile; fileRef = 010CC624110927A2006EFFE9 /* QuestionMark.png */; }; + 01466A931104062500088464 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01466A921104062500088464 /* Security.framework */; }; + 01466C2A110408CC00088464 /* SecurityInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01466C29110408CC00088464 /* SecurityInterface.framework */; }; + 01466C381104091400088464 /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01466C371104091400088464 /* SecurityFoundation.framework */; }; + 0196529B11066CC0009E8F2F /* README in Resources */ = {isa = PBXBuildFile; fileRef = 0196529A11066CC0009E8F2F /* README */; }; + 019930E1110A0CB4003B056E /* BootSetupController.h in Headers */ = {isa = PBXBuildFile; fileRef = 019930DF110A0CB4003B056E /* BootSetupController.h */; }; + 019930E2110A0CB4003B056E /* BootSetupController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 019930E0110A0CB4003B056E /* BootSetupController.mm */; }; + 019930E8110A0D80003B056E /* BootFlagsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 019930E6110A0D80003B056E /* BootFlagsController.h */; }; + 019930E9110A0D80003B056E /* BootFlagsController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 019930E7110A0D80003B056E /* BootFlagsController.mm */; }; + 019930FE110A0E6F003B056E /* PeripheralsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 019930FC110A0E6F003B056E /* PeripheralsController.h */; }; + 019930FF110A0E6F003B056E /* PeripheralsController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 019930FD110A0E6F003B056E /* PeripheralsController.mm */; }; + 01993115110A0EB9003B056E /* AdvancedSetupController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01993113110A0EB9003B056E /* AdvancedSetupController.h */; }; + 01993116110A0EB9003B056E /* AdvancedSetupController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01993114110A0EB9003B056E /* AdvancedSetupController.mm */; }; + 019931DD110A37FA003B056E /* PreferencesControllerBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 019931DB110A37FA003B056E /* PreferencesControllerBase.h */; }; + 019931DE110A37FA003B056E /* PreferencesControllerBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 019931DC110A37FA003B056E /* PreferencesControllerBase.mm */; }; + 01993567110AA9FA003B056E /* ChameleonPropertyList.h in Headers */ = {isa = PBXBuildFile; fileRef = 01993565110AA9FA003B056E /* ChameleonPropertyList.h */; }; + 01993568110AA9FA003B056E /* ChameleonPropertyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01993566110AA9FA003B056E /* ChameleonPropertyList.cpp */; }; + 01A25D2E111108C80024EA7E /* AboutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D0E111108C80024EA7E /* AboutController.h */; }; + 01A25D2F111108C80024EA7E /* AboutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01A25D0F111108C80024EA7E /* AboutController.mm */; }; + 01A25D3A111108C80024EA7E /* CustomTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D1A111108C80024EA7E /* CustomTableView.h */; }; + 01A25D3B111108C80024EA7E /* CustomTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01A25D1B111108C80024EA7E /* CustomTableView.mm */; }; + 01A25D3C111108C80024EA7E /* EfiInjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D1C111108C80024EA7E /* EfiInjectController.h */; }; + 01A25D3D111108C80024EA7E /* EfiInjectController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01A25D1D111108C80024EA7E /* EfiInjectController.mm */; }; + 01A25D3E111108C80024EA7E /* file_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D1E111108C80024EA7E /* file_util.h */; }; + 01A25D3F111108C80024EA7E /* GroupControllerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D1F111108C80024EA7E /* GroupControllerProtocol.h */; }; + 01A25D40111108C80024EA7E /* KernOptionsParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01A25D20111108C80024EA7E /* KernOptionsParser.cpp */; }; + 01A25D41111108C80024EA7E /* KernOptionsParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D21111108C80024EA7E /* KernOptionsParser.h */; }; + 01A25D4A111108C80024EA7E /* SmbiosController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D2A111108C80024EA7E /* SmbiosController.h */; }; + 01A25D4B111108C80024EA7E /* SmbiosController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01A25D2B111108C80024EA7E /* SmbiosController.mm */; }; + 01A25D4C111108C80024EA7E /* string_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01A25D2C111108C80024EA7E /* string_util.cpp */; }; + 01A25D4D111108C80024EA7E /* string_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A25D2D111108C80024EA7E /* string_util.h */; }; + 01A25D6B111109FF0024EA7E /* cdBootCreator.sh in Resources */ = {isa = PBXBuildFile; fileRef = 01A25D68111109FF0024EA7E /* cdBootCreator.sh */; }; + 01A25D6C111109FF0024EA7E /* getDevProp.sh in Resources */ = {isa = PBXBuildFile; fileRef = 01A25D69111109FF0024EA7E /* getDevProp.sh */; }; + 01A25D6D111109FF0024EA7E /* gfxutil in Resources */ = {isa = PBXBuildFile; fileRef = 01A25D6A111109FF0024EA7E /* gfxutil */; }; + 01A40F75110550F4002A74CD /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 01A40F74110550F4002A74CD /* CHANGES */; }; + 01B0E8141108B85A00ACF21B /* ChameleonPrefPane.h in Headers */ = {isa = PBXBuildFile; fileRef = 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */; }; + 01B0E8151108B85A00ACF21B /* ChameleonPrefPane.mm in Sources */ = {isa = PBXBuildFile; fileRef = 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */; }; + 01B0E8161108B85A00ACF21B /* ShellProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01B0E8101108B85A00ACF21B /* ShellProcess.cpp */; }; + 01B0E8171108B85A00ACF21B /* ShellProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 01B0E8111108B85A00ACF21B /* ShellProcess.h */; }; + 01B0E8181108B85A00ACF21B /* PropertyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01B0E8121108B85A00ACF21B /* PropertyList.cpp */; }; + 01B0E8191108B85A00ACF21B /* PropertyList.h in Headers */ = {isa = PBXBuildFile; fileRef = 01B0E8131108B85A00ACF21B /* PropertyList.h */; }; + 01B0E8201108B87A00ACF21B /* CDROM.png in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E81A1108B87A00ACF21B /* CDROM.png */; }; + 01B0E8211108B87A00ACF21B /* Chameleon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E81B1108B87A00ACF21B /* Chameleon.icns */; }; + 01B0E8221108B87A00ACF21B /* Chameleon.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E81C1108B87A00ACF21B /* Chameleon.tiff */; }; + 01B0E8231108B87A00ACF21B /* Linux.png in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E81D1108B87A00ACF21B /* Linux.png */; }; + 01B0E8241108B87A00ACF21B /* MacOSX.png in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E81E1108B87A00ACF21B /* MacOSX.png */; }; + 01B0E8251108B87A00ACF21B /* Windows.png in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E81F1108B87A00ACF21B /* Windows.png */; }; + 01B0E8271108B89100ACF21B /* CREDITS in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E8261108B89100ACF21B /* CREDITS */; }; + 01B0E8291108B89D00ACF21B /* version in Resources */ = {isa = PBXBuildFile; fileRef = 01B0E8281108B89D00ACF21B /* version */; }; + 01E0E9511108F9ED004EF6E8 /* TODO in Resources */ = {isa = PBXBuildFile; fileRef = 01E0E9501108F9ED004EF6E8 /* TODO */; }; + 8D202CEA0486D31800D8A456 /* StartupPrefPane_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32DBCFA20370C41700C91783 /* StartupPrefPane_Prefix.pch */; }; + 8D202CED0486D31800D8A456 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 8D202CEF0486D31800D8A456 /* Chameleon.xib in Resources */ = {isa = PBXBuildFile; fileRef = F506C042013D9D8C01CA16C8 /* Chameleon.xib */; }; + 8D202CF30486D31800D8A456 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; + 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F506C035013D953901CA16C8 /* PreferencePanes.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 010CC624110927A2006EFFE9 /* QuestionMark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = QuestionMark.png; path = Resources/QuestionMark.png; sourceTree = SOURCE_ROOT; }; + 01466A921104062500088464 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 01466C29110408CC00088464 /* SecurityInterface.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityInterface.framework; path = System/Library/Frameworks/SecurityInterface.framework; sourceTree = SDKROOT; }; + 01466C371104091400088464 /* SecurityFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityFoundation.framework; path = System/Library/Frameworks/SecurityFoundation.framework; sourceTree = SDKROOT; }; + 0196529A11066CC0009E8F2F /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; + 019930DF110A0CB4003B056E /* BootSetupController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BootSetupController.h; path = Sources/BootSetupController.h; sourceTree = ""; }; + 019930E0110A0CB4003B056E /* BootSetupController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = BootSetupController.mm; path = Sources/BootSetupController.mm; sourceTree = ""; }; + 019930E6110A0D80003B056E /* BootFlagsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BootFlagsController.h; path = Sources/BootFlagsController.h; sourceTree = ""; }; + 019930E7110A0D80003B056E /* BootFlagsController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = BootFlagsController.mm; path = Sources/BootFlagsController.mm; sourceTree = ""; }; + 019930FC110A0E6F003B056E /* PeripheralsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PeripheralsController.h; path = Sources/PeripheralsController.h; sourceTree = ""; }; + 019930FD110A0E6F003B056E /* PeripheralsController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PeripheralsController.mm; path = Sources/PeripheralsController.mm; sourceTree = ""; }; + 01993113110A0EB9003B056E /* AdvancedSetupController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AdvancedSetupController.h; path = Sources/AdvancedSetupController.h; sourceTree = ""; }; + 01993114110A0EB9003B056E /* AdvancedSetupController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AdvancedSetupController.mm; path = Sources/AdvancedSetupController.mm; sourceTree = ""; }; + 019931DB110A37FA003B056E /* PreferencesControllerBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencesControllerBase.h; path = Sources/PreferencesControllerBase.h; sourceTree = ""; }; + 019931DC110A37FA003B056E /* PreferencesControllerBase.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PreferencesControllerBase.mm; path = Sources/PreferencesControllerBase.mm; sourceTree = ""; }; + 01993565110AA9FA003B056E /* ChameleonPropertyList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChameleonPropertyList.h; path = Sources/ChameleonPropertyList.h; sourceTree = ""; }; + 01993566110AA9FA003B056E /* ChameleonPropertyList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChameleonPropertyList.cpp; path = Sources/ChameleonPropertyList.cpp; sourceTree = ""; }; + 01A25D0E111108C80024EA7E /* AboutController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AboutController.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/AboutController.h; sourceTree = ""; }; + 01A25D0F111108C80024EA7E /* AboutController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AboutController.mm; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/AboutController.mm; sourceTree = ""; }; + 01A25D1A111108C80024EA7E /* CustomTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomTableView.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/CustomTableView.h; sourceTree = ""; }; + 01A25D1B111108C80024EA7E /* CustomTableView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CustomTableView.mm; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/CustomTableView.mm; sourceTree = ""; }; + 01A25D1C111108C80024EA7E /* EfiInjectController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EfiInjectController.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/EfiInjectController.h; sourceTree = ""; }; + 01A25D1D111108C80024EA7E /* EfiInjectController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = EfiInjectController.mm; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/EfiInjectController.mm; sourceTree = ""; }; + 01A25D1E111108C80024EA7E /* file_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_util.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/file_util.h; sourceTree = ""; }; + 01A25D1F111108C80024EA7E /* GroupControllerProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GroupControllerProtocol.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/GroupControllerProtocol.h; sourceTree = ""; }; + 01A25D20111108C80024EA7E /* KernOptionsParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KernOptionsParser.cpp; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/KernOptionsParser.cpp; sourceTree = ""; }; + 01A25D21111108C80024EA7E /* KernOptionsParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KernOptionsParser.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/KernOptionsParser.h; sourceTree = ""; }; + 01A25D2A111108C80024EA7E /* SmbiosController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SmbiosController.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/SmbiosController.h; sourceTree = ""; }; + 01A25D2B111108C80024EA7E /* SmbiosController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SmbiosController.mm; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/SmbiosController.mm; sourceTree = ""; }; + 01A25D2C111108C80024EA7E /* string_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_util.cpp; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/string_util.cpp; sourceTree = ""; }; + 01A25D2D111108C80024EA7E /* string_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = string_util.h; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Sources/string_util.h; sourceTree = ""; }; + 01A25D68111109FF0024EA7E /* cdBootCreator.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = cdBootCreator.sh; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Resources/cdBootCreator.sh; sourceTree = ""; }; + 01A25D69111109FF0024EA7E /* getDevProp.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = getDevProp.sh; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Resources/getDevProp.sh; sourceTree = ""; }; + 01A25D6A111109FF0024EA7E /* gfxutil */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = gfxutil; path = ../../../../../../../devl/OSX/voodoo/chameleonApplications/branches/rekursor/ChameleonPrefPane/Resources/gfxutil; sourceTree = ""; }; + 01A40F74110550F4002A74CD /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGES; sourceTree = ""; }; + 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChameleonPrefPane.h; path = Sources/ChameleonPrefPane.h; sourceTree = ""; }; + 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ChameleonPrefPane.mm; path = Sources/ChameleonPrefPane.mm; sourceTree = ""; }; + 01B0E8101108B85A00ACF21B /* ShellProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ShellProcess.cpp; path = Sources/ShellProcess.cpp; sourceTree = ""; }; + 01B0E8111108B85A00ACF21B /* ShellProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ShellProcess.h; path = Sources/ShellProcess.h; sourceTree = ""; }; + 01B0E8121108B85A00ACF21B /* PropertyList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PropertyList.cpp; path = Sources/PropertyList.cpp; sourceTree = ""; }; + 01B0E8131108B85A00ACF21B /* PropertyList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PropertyList.h; path = Sources/PropertyList.h; sourceTree = ""; }; + 01B0E81A1108B87A00ACF21B /* CDROM.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = CDROM.png; path = Resources/CDROM.png; sourceTree = ""; }; + 01B0E81B1108B87A00ACF21B /* Chameleon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Chameleon.icns; path = Resources/Chameleon.icns; sourceTree = ""; }; + 01B0E81C1108B87A00ACF21B /* Chameleon.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Chameleon.tiff; path = Resources/Chameleon.tiff; sourceTree = ""; }; + 01B0E81D1108B87A00ACF21B /* Linux.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Linux.png; path = Resources/Linux.png; sourceTree = ""; }; + 01B0E81E1108B87A00ACF21B /* MacOSX.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = MacOSX.png; path = Resources/MacOSX.png; sourceTree = ""; }; + 01B0E81F1108B87A00ACF21B /* Windows.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Windows.png; path = Resources/Windows.png; sourceTree = ""; }; + 01B0E8261108B89100ACF21B /* CREDITS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CREDITS; sourceTree = ""; }; + 01B0E8281108B89D00ACF21B /* version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = version; path = bin/version; sourceTree = ""; }; + 01E0E9501108F9ED004EF6E8 /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = SOURCE_ROOT; }; + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 32DBCFA20370C41700C91783 /* StartupPrefPane_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartupPrefPane_Prefix.pch; sourceTree = ""; }; + 8D202CF70486D31800D8A456 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8D202CF80486D31800D8A456 /* Chameleon.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Chameleon.prefPane; sourceTree = BUILT_PRODUCTS_DIR; }; + F506C035013D953901CA16C8 /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = /System/Library/Frameworks/PreferencePanes.framework; sourceTree = ""; }; + F506C043013D9D8C01CA16C8 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/Chameleon.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D202CF20486D31800D8A456 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CF30486D31800D8A456 /* Cocoa.framework in Frameworks */, + 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */, + 01466A931104062500088464 /* Security.framework in Frameworks */, + 01466C2A110408CC00088464 /* SecurityInterface.framework in Frameworks */, + 01466C381104091400088464 /* SecurityFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 01E314A9110FF91C0058F210 /* Controllers */ = { + isa = PBXGroup; + children = ( + 01A25D0E111108C80024EA7E /* AboutController.h */, + 01A25D0F111108C80024EA7E /* AboutController.mm */, + 01A25D1F111108C80024EA7E /* GroupControllerProtocol.h */, + 019931DB110A37FA003B056E /* PreferencesControllerBase.h */, + 019931DC110A37FA003B056E /* PreferencesControllerBase.mm */, + 019930DF110A0CB4003B056E /* BootSetupController.h */, + 019930E0110A0CB4003B056E /* BootSetupController.mm */, + 019930E6110A0D80003B056E /* BootFlagsController.h */, + 019930E7110A0D80003B056E /* BootFlagsController.mm */, + 019930FC110A0E6F003B056E /* PeripheralsController.h */, + 019930FD110A0E6F003B056E /* PeripheralsController.mm */, + 01993113110A0EB9003B056E /* AdvancedSetupController.h */, + 01993114110A0EB9003B056E /* AdvancedSetupController.mm */, + 01A25D1C111108C80024EA7E /* EfiInjectController.h */, + 01A25D1D111108C80024EA7E /* EfiInjectController.mm */, + 01A25D2A111108C80024EA7E /* SmbiosController.h */, + 01A25D2B111108C80024EA7E /* SmbiosController.mm */, + ); + name = Controllers; + sourceTree = ""; + }; + 01E314AA110FF9430058F210 /* GUI */ = { + isa = PBXGroup; + children = ( + 01E314A9110FF91C0058F210 /* Controllers */, + 01B0E80E1108B85A00ACF21B /* ChameleonPrefPane.h */, + 01B0E80F1108B85A00ACF21B /* ChameleonPrefPane.mm */, + 01A25D1A111108C80024EA7E /* CustomTableView.h */, + 01A25D1B111108C80024EA7E /* CustomTableView.mm */, + ); + name = GUI; + sourceTree = ""; + }; + 01E314AB110FF95C0058F210 /* Utilities */ = { + isa = PBXGroup; + children = ( + 01A25D1E111108C80024EA7E /* file_util.h */, + 01A25D2D111108C80024EA7E /* string_util.h */, + 01A25D2C111108C80024EA7E /* string_util.cpp */, + 01B0E8111108B85A00ACF21B /* ShellProcess.h */, + 01B0E8101108B85A00ACF21B /* ShellProcess.cpp */, + 01B0E8131108B85A00ACF21B /* PropertyList.h */, + 01B0E8121108B85A00ACF21B /* PropertyList.cpp */, + 01993565110AA9FA003B056E /* ChameleonPropertyList.h */, + 01993566110AA9FA003B056E /* ChameleonPropertyList.cpp */, + 01A25D20111108C80024EA7E /* KernOptionsParser.cpp */, + 01A25D21111108C80024EA7E /* KernOptionsParser.h */, + ); + name = Utilities; + sourceTree = ""; + }; + 089C166AFE841209C02AAC07 /* StartupPrefPane */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32DBCFA10370C40200C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = StartupPrefPane; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 01A25D68111109FF0024EA7E /* cdBootCreator.sh */, + 01A25D69111109FF0024EA7E /* getDevProp.sh */, + 01A25D6A111109FF0024EA7E /* gfxutil */, + 01B0E8261108B89100ACF21B /* CREDITS */, + 010CC624110927A2006EFFE9 /* QuestionMark.png */, + 01B0E81A1108B87A00ACF21B /* CDROM.png */, + 01B0E81B1108B87A00ACF21B /* Chameleon.icns */, + 01B0E81C1108B87A00ACF21B /* Chameleon.tiff */, + 01B0E81D1108B87A00ACF21B /* Linux.png */, + 01B0E81E1108B87A00ACF21B /* MacOSX.png */, + 01B0E81F1108B87A00ACF21B /* Windows.png */, + 8D202CF70486D31800D8A456 /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + F506C042013D9D8C01CA16C8 /* Chameleon.xib */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + 01E314AA110FF9430058F210 /* GUI */, + 01E314AB110FF95C0058F210 /* Utilities */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + F506C035013D953901CA16C8 /* PreferencePanes.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C1672FE841209C02AAC07 /* Foundation.framework */, + 089C167FFE841241C02AAC07 /* AppKit.framework */, + 01466A921104062500088464 /* Security.framework */, + 01466C29110408CC00088464 /* SecurityInterface.framework */, + 01466C371104091400088464 /* SecurityFoundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D202CF80486D31800D8A456 /* Chameleon.prefPane */, + ); + name = Products; + sourceTree = ""; + }; + 32DBCFA10370C40200C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 01E0E9501108F9ED004EF6E8 /* TODO */, + 01B0E8281108B89D00ACF21B /* version */, + 32DBCFA20370C41700C91783 /* StartupPrefPane_Prefix.pch */, + 01A40F74110550F4002A74CD /* CHANGES */, + 0196529A11066CC0009E8F2F /* README */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D202CE90486D31800D8A456 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CEA0486D31800D8A456 /* StartupPrefPane_Prefix.pch in Headers */, + 01B0E8141108B85A00ACF21B /* ChameleonPrefPane.h in Headers */, + 01B0E8171108B85A00ACF21B /* ShellProcess.h in Headers */, + 01B0E8191108B85A00ACF21B /* PropertyList.h in Headers */, + 019930E1110A0CB4003B056E /* BootSetupController.h in Headers */, + 019930E8110A0D80003B056E /* BootFlagsController.h in Headers */, + 019930FE110A0E6F003B056E /* PeripheralsController.h in Headers */, + 01993115110A0EB9003B056E /* AdvancedSetupController.h in Headers */, + 019931DD110A37FA003B056E /* PreferencesControllerBase.h in Headers */, + 01993567110AA9FA003B056E /* ChameleonPropertyList.h in Headers */, + 01A25D2E111108C80024EA7E /* AboutController.h in Headers */, + 01A25D3A111108C80024EA7E /* CustomTableView.h in Headers */, + 01A25D3C111108C80024EA7E /* EfiInjectController.h in Headers */, + 01A25D3E111108C80024EA7E /* file_util.h in Headers */, + 01A25D3F111108C80024EA7E /* GroupControllerProtocol.h in Headers */, + 01A25D41111108C80024EA7E /* KernOptionsParser.h in Headers */, + 01A25D4A111108C80024EA7E /* SmbiosController.h in Headers */, + 01A25D4D111108C80024EA7E /* string_util.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 8D202CE80486D31800D8A456 /* CStartup */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DBD214808BA80EA00186707 /* Build configuration list for PBXNativeTarget "CStartup" */; + buildPhases = ( + 8D202CE90486D31800D8A456 /* Headers */, + 8D202CEC0486D31800D8A456 /* Resources */, + 8D202CF00486D31800D8A456 /* Sources */, + 8D202CF20486D31800D8A456 /* Frameworks */, + 8D202CF50486D31800D8A456 /* Rez */, + ); + buildRules = ( + ); + comments = "Chameleon Startup PreferencePane By Rekursor, 1/17/2010.\n"; + dependencies = ( + ); + name = CStartup; + productInstallPath = "$(HOME)/Library/PreferencePanes"; + productName = StartupPrefPane; + productReference = 8D202CF80486D31800D8A456 /* Chameleon.prefPane */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DBD214C08BA80EA00186707 /* Build configuration list for PBXProject "ChameleonPrefPane" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* StartupPrefPane */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D202CE80486D31800D8A456 /* CStartup */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D202CEC0486D31800D8A456 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CED0486D31800D8A456 /* InfoPlist.strings in Resources */, + 8D202CEF0486D31800D8A456 /* Chameleon.xib in Resources */, + 01A40F75110550F4002A74CD /* CHANGES in Resources */, + 0196529B11066CC0009E8F2F /* README in Resources */, + 01B0E8201108B87A00ACF21B /* CDROM.png in Resources */, + 01B0E8211108B87A00ACF21B /* Chameleon.icns in Resources */, + 01B0E8221108B87A00ACF21B /* Chameleon.tiff in Resources */, + 01B0E8231108B87A00ACF21B /* Linux.png in Resources */, + 01B0E8241108B87A00ACF21B /* MacOSX.png in Resources */, + 01B0E8251108B87A00ACF21B /* Windows.png in Resources */, + 01B0E8271108B89100ACF21B /* CREDITS in Resources */, + 01B0E8291108B89D00ACF21B /* version in Resources */, + 01E0E9511108F9ED004EF6E8 /* TODO in Resources */, + 010CC625110927A2006EFFE9 /* QuestionMark.png in Resources */, + 01A25D6B111109FF0024EA7E /* cdBootCreator.sh in Resources */, + 01A25D6C111109FF0024EA7E /* getDevProp.sh in Resources */, + 01A25D6D111109FF0024EA7E /* gfxutil in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 8D202CF50486D31800D8A456 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D202CF00486D31800D8A456 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 01B0E8151108B85A00ACF21B /* ChameleonPrefPane.mm in Sources */, + 01B0E8161108B85A00ACF21B /* ShellProcess.cpp in Sources */, + 01B0E8181108B85A00ACF21B /* PropertyList.cpp in Sources */, + 019930E2110A0CB4003B056E /* BootSetupController.mm in Sources */, + 019930E9110A0D80003B056E /* BootFlagsController.mm in Sources */, + 019930FF110A0E6F003B056E /* PeripheralsController.mm in Sources */, + 01993116110A0EB9003B056E /* AdvancedSetupController.mm in Sources */, + 019931DE110A37FA003B056E /* PreferencesControllerBase.mm in Sources */, + 01993568110AA9FA003B056E /* ChameleonPropertyList.cpp in Sources */, + 01A25D2F111108C80024EA7E /* AboutController.mm in Sources */, + 01A25D3B111108C80024EA7E /* CustomTableView.mm in Sources */, + 01A25D3D111108C80024EA7E /* EfiInjectController.mm in Sources */, + 01A25D40111108C80024EA7E /* KernOptionsParser.cpp in Sources */, + 01A25D4B111108C80024EA7E /* SmbiosController.mm in Sources */, + 01A25D4C111108C80024EA7E /* string_util.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + F506C042013D9D8C01CA16C8 /* Chameleon.xib */ = { + isa = PBXVariantGroup; + children = ( + F506C043013D9D8C01CA16C8 /* English */, + ); + name = Chameleon.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 018B55E01106D2B5003FAB5E /* Release 10.5 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = NO; + PREBINDING = NO; + SDKROOT = macosx10.5; + VALID_ARCHS = i386; + }; + name = "Release 10.5"; + }; + 018B55E11106D2B5003FAB5E /* Release 10.5 */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = StartupPrefPane_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + PRODUCT_NAME = Chameleon; + WRAPPER_EXTENSION = prefPane; + }; + name = "Release 10.5"; + }; + 1DBD214908BA80EA00186707 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = build/Debug; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = StartupPrefPane_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + PRODUCT_NAME = Chameleon; + WRAPPER_EXTENSION = prefPane; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DBD214A08BA80EA00186707 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = StartupPrefPane_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + PRODUCT_NAME = Chameleon; + WRAPPER_EXTENSION = prefPane; + }; + name = Release; + }; + 1DBD214D08BA80EA00186707 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + SDKROOT = macosx10.6; + VALID_ARCHS = "i386 x86_64"; + }; + name = Debug; + }; + 1DBD214E08BA80EA00186707 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.6; + VALID_ARCHS = "i386 x86_64"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DBD214808BA80EA00186707 /* Build configuration list for PBXNativeTarget "CStartup" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DBD214908BA80EA00186707 /* Debug */, + 1DBD214A08BA80EA00186707 /* Release */, + 018B55E11106D2B5003FAB5E /* Release 10.5 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DBD214C08BA80EA00186707 /* Build configuration list for PBXProject "ChameleonPrefPane" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DBD214D08BA80EA00186707 /* Debug */, + 1DBD214E08BA80EA00186707 /* Release */, + 018B55E01106D2B5003FAB5E /* Release 10.5 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} Property changes on: branches/diebuche/ChameleonPrefPane/ChameleonPrefPane.xcodeproj ___________________________________________________________________ Added: svn:ignore + *.pbxuser *.mode* Index: branches/diebuche/ChameleonPrefPane/bin/OSX105/Chameleon.zip =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/bin/OSX105/Chameleon.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/bin/OSX106/Chameleon.zip =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/bin/OSX106/Chameleon.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/bin/version =================================================================== --- branches/diebuche/ChameleonPrefPane/bin/version (revision 0) +++ branches/diebuche/ChameleonPrefPane/bin/version (revision 77) @@ -0,0 +1 @@ +2.0-RC1 Index: branches/diebuche/ChameleonPrefPane/StartupPrefPane_Prefix.pch =================================================================== --- branches/diebuche/ChameleonPrefPane/StartupPrefPane_Prefix.pch (revision 0) +++ branches/diebuche/ChameleonPrefPane/StartupPrefPane_Prefix.pch (revision 77) @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'StartupPrefPane' target in the 'StartupPrefPane' project. +// + +#ifdef __OBJC__ + #import + #import +#endif Index: branches/diebuche/ChameleonPrefPane/Resources/Chameleon.tiff =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/Chameleon.tiff ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/Linux.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/Linux.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/gfxutil =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/gfxutil ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/Data.plist =================================================================== --- branches/diebuche/ChameleonPrefPane/Resources/Data.plist (revision 0) +++ branches/diebuche/ChameleonPrefPane/Resources/Data.plist (revision 77) @@ -0,0 +1,12 @@ + + + + + forceBootConfigPath + /Library/Preferences/SystemConfiguration/com.apple.Boot.plist + swapHD01 + + swapHD02 + + + Index: branches/diebuche/ChameleonPrefPane/Resources/cdBootCreator.sh =================================================================== --- branches/diebuche/ChameleonPrefPane/Resources/cdBootCreator.sh (revision 0) +++ branches/diebuche/ChameleonPrefPane/Resources/cdBootCreator.sh (revision 77) @@ -0,0 +1,104 @@ +#!/bin/sh + +# Copyright 2009 org.darwinx86.app. All rights reserved. + +# Directories +extra=/tmp/isodir +mydir=`dirname $0` +tempDir=/tmp +finaldir=~/Desktop +isodir=/tmp/newiso +extradir=/tmp/newiso/Extra +preDir=/tmp/newiso/Extra/Preboot/ +prebootDir=/tmp/newiso/Extra/Preboot/Extra +backDir=~/Desktop/Lizard +bkpdir=~/Desktop/Lizard/Previous-dmg + +echo "Starting script..." + +#errors +if ([ ! -f $extra/Extensions.mkext ] && [ ! -d $extra/Extensions ]);then + echo "- Error: no Extensions.mkext or Extensions folder. One of them is required" + echo " ------------------------" + exit +fi + +if [ ! -f $extra/com.apple.Boot.plist ];then + echo "- Error: no com.apple.boot.plist found. File required" + echo " ------------------------" + exit +fi +if [ ! -f $extra/cdboot ];then + echo "- Error: no cdboot found. File required" + echo " ------------------------" + exit +fi + +# Create a work directory +echo " - temps folders created" +echo " - Checking files" +#copy Extra files to temp directory +if [ -f $extra/cdboot ];then + cp -R $extra/cdboot $isodir +fi + +if [ -f $extra/dsdt.aml ];then + cp -R $extra/dsdt.aml $prebootDir +fi + +if [ -f $extra/DSDT.aml ];then + cp -R $extra/DSDT.aml $prebootDir +fi + +if [ -f $extra/NVIDIA.ROM ];then + cp -R $extra/NVIDIA.ROM $prebootDir +fi + +if [ -f $extra/smbios.plist ];then + cp -R $extra/smbios.plist $prebootDir +fi + +if [ -f $extra/Extensions.mkext ];then + cp -R $extra/Extensions.mkext $prebootDir +fi + +if [ -d $extra/Extensions ];then + cp -Rp $extra/Extensions $prebootDir +fi + +if [ -f $extra/com.apple.Boot.plist ];then + cp -R $extra/com.apple.Boot.plist $prebootDir +fi +if [ -f $tempDir/com.apple.Boot.plist ];then + cp -R $tempDir/com.apple.Boot.plist $extradir +fi + +echo "- Files copied in temp folder" + +# ramdisk creator +hdiutil create -srcfolder $preDir/ -layout GPTSPUD -fs HFS+ -format UDRW -volname Preboot $extradir/Preboot.dmg +rm -R $preDir +echo " - ram disk created" + +# boot cd creator +hdiutil makehybrid -o BootCD.iso $isodir/ -iso -hfs -joliet -eltorito-boot $isodir/cdboot -no-emul-boot -hfs-volume-name "Boot CD" -joliet-volume-name "Boot CD" +echo " - hybrid image created" + +# Create output and backup directories +if [ -f $finaldir/BootCD.iso ];then + if [ ! -d $bkpdir ];then + mkdir $backDir + mkdir $bkpdir + echo " - backup folder created" + fi + mv -f $finaldir/BootCD.iso $bkpdir/BootCd-$(date +"%d-%y-%Hh%M").iso + echo " - previous ISO moved into backup folder" +fi +mv BootCD.iso $finaldir +echo " - ISO moved on desktop" + +# cleanup +echo " - Perform cleaning" +echo " - ISO created succefully" +echo " ------------------------" +exit 0 \ No newline at end of file Property changes on: branches/diebuche/ChameleonPrefPane/Resources/cdBootCreator.sh ___________________________________________________________________ Added: svn:executable + * Index: branches/diebuche/ChameleonPrefPane/Resources/QuestionMark.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/QuestionMark.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/Chameleon.icns =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/Chameleon.icns ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/CDROM.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/CDROM.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/getDevProp.sh =================================================================== --- branches/diebuche/ChameleonPrefPane/Resources/getDevProp.sh (revision 0) +++ branches/diebuche/ChameleonPrefPane/Resources/getDevProp.sh (revision 77) @@ -0,0 +1,38 @@ +#!/bin/sh + +# getDevProp.sh +# smbios-cham +# +# Created by ronan & thomas on 12/08/09. +# Copyright 2009 org.darwinx86.app. All rights reserved. +# adapted for Chameleon control panel use by Rekursor +# +# Directories +cdir=`dirname $0` +tmpDir=/tmp/Chameleon +dmpdir=${tmpDir}/devprop + +# Create a dump directory +if [[ ! -d $dmpdir ]];then + mkdir -p $dmpdir +fi +if [[ ! -d $tmpDir ]];then + mkdir -p $tmpDir +fi +# Dump Device properties +ioreg -lw0 -p IODeviceTree -n efi -r -x |grep device-properties | sed 's/.*.*//;' | cat > $dmpdir/chameleon-devprop.hex + +$cdir/gfxutil -s -n -i hex -o xml $dmpdir/chameleon-devprop.hex $dmpdir/chameleon-devprop.plist + + +# Splash the result up !! +open $dmpdir/chameleon-devprop.plist +if [[ ! -d $dmpdir ]];then + rm -r $dmpdir +fi +if [[ ! -d $tmpDir ]];then + rm -r $tmpDir +fi + +#end +#echo $? \ No newline at end of file Property changes on: branches/diebuche/ChameleonPrefPane/Resources/getDevProp.sh ___________________________________________________________________ Added: svn:executable + * Index: branches/diebuche/ChameleonPrefPane/Resources/MacOSX.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/MacOSX.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/Resources/Windows.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/Resources/Windows.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/CREDITS =================================================================== --- branches/diebuche/ChameleonPrefPane/CREDITS (revision 0) +++ branches/diebuche/ChameleonPrefPane/CREDITS (revision 77) @@ -0,0 +1,18 @@ + + Initial Conception & Design: + --------------------------- + Rekursor + + Crew Members + ---------- + Rekursor, DieBuche + + Contributors & Testers: + --------------------- + BlackOSX, MasterChief, digital_dreamer, smith@@, scrax + + Chameleon also reuses: + --------------------- + Courtesy of Ronan (Lizard) : + Existing scripts and gfxutil tool from Lizard available at: + http://code.google.com/p/lizard-app/ Index: branches/diebuche/ChameleonPrefPane/README =================================================================== --- branches/diebuche/ChameleonPrefPane/README (revision 0) +++ branches/diebuche/ChameleonPrefPane/README (revision 77) @@ -0,0 +1,35 @@ +----------------------------------- +Chameleon System Preferences panel +by rekursor 1/17/2010 +----------------------------------- + +How to Install: + Double click on the panel file to install the resource + +Configuration: + The persistent configuration file is a all users level preferences property list + located in In /Library/Preferences/com.chameleon.prefPane.plist. + + The swap disk fix option might be use if your disk order from chameleon is different + from what diskutil list returns. + Ideally we should not need this fix, but as for now, I don't know another way to do it + + In /Library/Preferences/com.chameleon.prefPane.plist: + you can insert a 'forceBootConfigPath' key with your com.apple.Boot,plist file path: + So if automatic detection does not work, then force your com.apple.Boot.plist path here. + + Freeze Partitions (lock the partition list and prevent autodetection to happen) + You can also decide to freeze the partitions to prevent automatic detection, + if disk order is not matching after the boot or if you don't want the list to change + each time that a usb key is inserted, then use this feature. + For it to work, you will need first to click on: + Settings/Boot Selector Fixes/Inject Parts In Freeze File + Then all your automatically detected current partitions are injected in the pref. file, + all you need to do is to manually edit them to change their disk id/partition id + (2 first parameters in the pref. file under the partitionList key) + +Troubleshooting + If the panel sees your com.apple.boot.plist in the status box, but the boot selection + seem to have no effect, it might be that you have more than one bootConfig file + and that the chameleon booter does not load the one that the panel selected, + see upper to force the bootConfig to match the one loaded by the chameleon booter. Index: branches/diebuche/ChameleonPrefPane/English.lproj/InfoPlist.strings =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: branches/diebuche/ChameleonPrefPane/English.lproj/InfoPlist.strings ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: branches/diebuche/ChameleonPrefPane/English.lproj/Chameleon.xib =================================================================== --- branches/diebuche/ChameleonPrefPane/English.lproj/Chameleon.xib (revision 0) +++ branches/diebuche/ChameleonPrefPane/English.lproj/Chameleon.xib (revision 77) @@ -0,0 +1,8774 @@ + + + + 1050 + 10C540 + 740 + 1038.25 + 458.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 740 + + + YES + + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + NSPreferencePane + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{176, 715}, {668, 368}} + 1081606144 + << do not localize >> + NSWindow + + View + + {1.79769e+308, 1.79769e+308} + {224.664, 10} + + + 256 + + YES + + + 268 + {{11, 5}, {612, 46}} + + SFAuthorizationView + + + + 12 + {{4, 49}, {660, 313}} + + + YES + + 1 + + + 292 + + YES + + + 268 + {{484, 238}, {147, 19}} + + YES + + 72482368 + 138544128 + + + LucidaGrande + 11 + 3100 + + + YES + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 1 + MC4zODc1NDY5NjczIDAuMzkwNDY2Mjc0MyAwLjQxMzA0MzQ3ODMAA + + + + + + 268 + {{546, 37}, {91, 32}} + + YES + + 67239424 + 134217728 + Shutdown + + LucidaGrande + 13 + 1044 + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{484, 85}, {147, 140}} + + YES + + 71433728 + 4325376 + Status + + + YES + + + 1 + MC4wMDI3ODQ5NTE4IDAuMTg5OTYzMzQgMC42NjMwNDM1AA + + + + + + 268 + + YES + + + 2304 + + YES + + + 8448 + {465, 238} + + YES + + + 256 + {465, 17} + + + + + + -2147483392 + {{446, 0}, {16, 17}} + + + + YES + + 36 + 10 + 3.4028234663852886e+38 + + 75628096 + 2048 + + + + 6 + System + headerColor + + 3 + MQA + + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67239424 + 33554432 + + 0 + 0 + 0 + NO + + 3 + YES + YES + + + + 211 + 40 + 1000 + + 75628096 + 67110912 + Name + + + 3 + MC4zMzMzMzI5OQA + + + + + 69336641 + 67110912 + Text Cell + + LucidaGrande-Bold + 14 + 16 + + + 1 + + 6 + System + controlBackgroundColor + + + + 6 + System + controlTextColor + + + + YES + sr_Latn_RS + zh + ro_RO + be_BY + si_LK + fa_IR + en_BW + en_JM + ka_GE + zh_Hans_SG + mk_MK + en_HK + ar_LB + ii_CN + ru_UA + zh_Hant_HK + af + kl_GL + az_Latn + ar_SA + en_BE + bn_BD + en_MH + be + nl_NL + el_CY + az_Cyrl_AZ + ca + sr_Latn + om_ET + es_CL + bg + en_VI + es_VE + uz_Cyrl_UZ + fr_MC + am + zh_Hant + uz_Arab + en_GB + da + mr_IN + es_MX + es_PR + sq_AL + ar + fi_FI + bn + en_NA + de + as + cy_GB + en_IE + en_BZ + de_CH + en_US + sr_Latn_BA + te_IN + ar_QA + ar_TN + zh_Hans_MO + de_LI + fa + kw_GB + cs_CZ + hu_HU + zh_Hant_TW + uz_Latn + ta_IN + az + ar_EG + ar_SD + cs + ga + ar_LY + af_ZA + el + es_PA + es_CO + fi + en + ha + eo + gl_ES + cy + es_GT + ms_BN + ne_IN + he_IL + he + es + fo + en_CA + et + hr_HR + haw + gl + ar_SY + fr_SN + eu + uz_Arab_AF + id + fr + az_Latn_AZ + hi + zh_Hans_HK + ja + es_ES + ar_AE + uz_Latn_UZ + ca_ES + fr_BE + hi_IN + is_IS + ii + ps_AF + ka + tr_TR + it_CH + kk_Cyrl_KZ + gu + es_US + gv + en_PH + es_HN + hr + sv_FI + es_CR + haw_US + ar_MA + hu + nl_BE + th_TH + en_ZA + kk_Cyrl + is + it + es_PE + hy + de_DE + en_NZ + kk + kl + en_AU + pa_Guru + el_GR + km + kn + ko + nb + ar_IQ + es_PY + es_EC + en_US_POSIX + vi_VN + lv_LV + ne + kn_IN + es_AR + mk + ml + bg_BG + hy_AM_REVISED + kw + uk_UA + en_PK + pa + lt + sk_SK + nl + ur_PK + de_BE + lv + as_IN + mr + nn + en_ZW + fr_CA + ne_NP + ms + pl_PL + ti_ER + ja_JP + mt + fr_LU + om + sr_Cyrl_ME + en_IN + ga_IE + sw_KE + pl + kok + ur_IN + or + it_IT + hy_AM + ml_IN + en_SG + es_SV + am_ET + pt_BR + bn_IN + mt_MT + ar_KW + es_DO + pa_Arab + gv_GB + so_KE + ti_ET + ps + ms_MY + sl_SI + es_UY + en_MT + pt + sw_TZ + ta + nn_NO + sr_Cyrl_RS + si + te + ro + so_SO + sk + az_Cyrl + or_IN + sl + pa_Arab_PK + ru_RU + th + ar_DZ + ti + so + sr_Cyrl + es_NI + ha_Latn_NG + ru + en_TT + sq + fr_FR + sr + da_DK + es_BO + nb_NO + de_LU + uk + eu_ES + ar_JO + sv + so_ET + tr + sw + vi + zh_Hans_CN + km_KH + fa_AF + et_EE + ko_KR + pa_Guru_IN + sr_Latn_ME + so_DJ + ur + kok_IN + uz_Cyrl + zh_Hant_MO + zh_Hans + ar_YE + fo_FO + sv_SE + ha_Latn + de_AT + lt_LT + ar_OM + sr_Cyrl_BA + uz + ar_BH + id_ID + pt_PT + af_NA + om_KE + fr_CH + gu_IN + + + 3 + YES + YES + + + + 84 + 10 + 3.4028229999999999e+38 + + 75628096 + 134219776 + Partition + + + + + + 69336641 + 134219776 + Text Cell + + LucidaGrande + 14 + 16 + + + YES + 1 + + + + 3 + YES + + Name Displayed on the bootable partion during Chameleon boot + + + 122 + 40 + 1000 + + 75628096 + 2048 + File System + + + + + + 69336641 + 2048 + Text Cell + + + YES + 1 + + + + 3 + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 32 + -692060160 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 17}, {465, 238}} + + + + + 4 + + + + -2147483392 + {{446, 17}, {15, 142}} + + + _doScroller: + 0.93697478991596639 + + + + -2147483392 + {{1, 159}, {411, 15}} + + 1 + + _doScroller: + 0.99785407725321884 + + + + 2304 + + YES + + + {{1, 0}, {465, 17}} + + + + + 4 + + + + {{9, 2}, {467, 256}} + + + 562 + + + + + + QSAAAEEgAABCCAAAQggAAA + + + + 268 + {{479, -6}, {158, 32}} + + YES + + 67239424 + 134217728 + Restart + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{481, 37}, {67, 32}} + + YES + + 67239424 + 134217728 + Sleep + + + -2038284033 + 129 + + + 200 + 25 + + + + {{10, 33}, {640, 267}} + + + Boot From ... + + + + + 2 + + + 256 + + YES + + + 12 + + YES + + + 256 + + YES + + + 12 + {{16, 80}, {125, 23}} + + 2 + YES + + 67239424 + 0 + Default Partition + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 12 + {{174, 79}, {60, 22}} + + 2 + YES + + 611450433 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + + + + 12 + {{16, 47}, {125, 23}} + + 2 + YES + + 67239424 + 0 + Hide Partitions + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{174, 49}, {403, 22}} + + 2 + YES + + 611450433 + 272630784 + + + + YES + + + + + + + 12 + {{16, 17}, {136, 23}} + + 2 + YES + + 67239424 + 0 + Rename Partitions + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{174, 19}, {403, 22}} + + 2 + YES + + 611450433 + 272630784 + + + + YES + + + + + + {{1, 1}, {626, 114}} + + 2 + + + {{6, 122}, {628, 130}} + + YES + 2 + {0, 0} + + 67239424 + 0 + Partitions Management + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 2 + NO + + + + 12 + + YES + + + 256 + + YES + + + 268 + {{12, 54}, {128, 18}} + + 2 + YES + + 67239424 + 0 + Swap hd 0<->1 + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{150, 54}, {124, 18}} + + 2 + YES + + 67239424 + 0 + Swap hd 0<->2 + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{297, 54}, {161, 18}} + + 2 + YES + + 67239424 + 0 + Use Freezed Parts List + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{459, 48}, {159, 28}} + + 2 + YES + + 67239424 + 134348800 + Inject Parts in Freeze File + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{12, 26}, {128, 18}} + + 2 + YES + + 67239424 + 0 + Boot Config Path + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{152, 26}, {456, 21}} + + 2 + YES + + 611450433 + 272630784 + + + LucidaGrande + 12 + 16 + + + YES + + + + + + {{1, 1}, {626, 88}} + + 2 + + + {{6, 14}, {628, 104}} + + YES + 2 + {0, 0} + + 67239424 + 0 + Boot Selector Fixes + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 2 + NO + + + {{10, 33}, {640, 267}} + + Boot Setup + + + + + Item 2 + + + 256 + + YES + + + 12 + + YES + + + 256 + + YES + + + 12 + {{21, 102}, {116, 23}} + + YES + + 67239424 + 0 + Verbose (-v) + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{312, 102}, {170, 23}} + + YES + + 67239424 + 0 + Ignore Boot Config (-F) + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{312, 70}, {133, 23}} + + YES + + 67239424 + 0 + Single User (-s) + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{21, 70}, {92, 23}} + + YES + + 67239424 + 0 + Time Out + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{21, 41}, {100, 23}} + + YES + + 67239424 + 0 + Quiet Boot + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{141, 41}, {125, 23}} + + YES + + 67239424 + 0 + Instant Menu + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{312, 41}, {59, 23}} + + YES + + 67239424 + 0 + Wait + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{141, 104}, {109, 18}} + + YES + + 67239424 + 0 + Safe Boot (-x) + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{410, 41}, {72, 23}} + + YES + + 67239424 + 0 + Use GUI + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{143, 68}, {46, 26}} + + YES + + 343014976 + 272630784 + + + + YES + + + 5 + YES + + YES + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + + + + + 274 + {13, 210} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 1024 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 19 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + + 12 + {{21, 12}, {116, 23}} + + YES + + 67239424 + 0 + Boot Theme + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{143, 12}, {134, 26}} + + YES + + 343014976 + 272630784 + + + + YES + + + 5 + YES + + YES + Default + Bullet + MSI_netbook + Pinktink + Twilight + + + + + 274 + {13, 105} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 1024 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 19 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + {{1, 1}, {510, 144}} + + + + {{66, 100}, {512, 160}} + + {0, 0} + + 67239424 + 0 + Boot Flags + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 2 + NO + + + + 36 + + YES + + + 256 + + YES + + + 12 + {{16, 12}, {94, 23}} + + YES + + 67239424 + 0 + Rescan + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{298, 12}, {133, 23}} + + YES + + 67239424 + 0 + Scan Single Drive + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{150, 12}, {125, 23}} + + YES + + 67239424 + 0 + Rescan Prompt + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{1, 1}, {510, 52}} + + + + {{66, 22}, {512, 68}} + + {0, 0} + + 67239424 + 0 + CDROM + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + {{10, 33}, {640, 267}} + + Boot Flags + + + + + Item 6 + + + 256 + + YES + + + 36 + + YES + + + 256 + + YES + + + 12 + {{136, 42}, {100, 23}} + + YES + + 67239424 + 0 + Boot Banner + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{16, 13}, {116, 23}} + + YES + + 67239424 + 0 + Graphics Mode + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{316, 42}, {134, 23}} + + YES + + 67239424 + 0 + Graphics Enabler + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{541, 42}, {59, 23}} + + YES + + 67239424 + 0 + VBIOS + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{420, 12}, {178, 22}} + + YES + + 611450433 + 272630784 + + + + YES + + + + + + + 12 + {{16, 42}, {109, 23}} + + YES + + 67239424 + 0 + Legacy Logo + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{316, 15}, {98, 18}} + + YES + + 67239424 + 0 + Video ROM + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{138, 11}, {175, 26}} + + YES + + 343539264 + 272630784 + + + + YES + + + 5 + YES + YES + + YES + 800x600x32 + 1024x768x32 + 1280x800x32 + 1280x1024x32 + 1440x900x32 + 1680x1050x32 + 1920x1080x32 + 1920x1200x32 + + + + + 274 + {13, 168} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5OQA + + + + + 338820672 + 268436480 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 19 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + {{1, 1}, {610, 76}} + + + + {{14, 150}, {612, 92}} + + {0, 0} + + 67239424 + 0 + Graphics + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 36 + + YES + + + 256 + + YES + + + 268 + {{317, 13}, {101, 23}} + + YES + + 67239424 + 0 + UHCI reset + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{16, 13}, {104, 23}} + + YES + + 67239424 + 0 + USB Bus Fix + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{169, 13}, {103, 23}} + + YES + + 67239424 + 0 + EHCI acquire + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{1, 1}, {610, 44}} + + + + {{14, 80}, {612, 60}} + + {0, 0} + + 67239424 + 0 + USB + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 36 + + YES + + + 256 + + YES + + + 268 + {{16, 12}, {135, 23}} + + YES + + 67239424 + 0 + Ethernet Built-In + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{169, 12}, {69, 23}} + + YES + + 67239424 + 0 + PciRoot + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{244, 14}, {25, 22}} + + YES + + -1536033215 + 272630784 + + + + YES + + + + + + + 268 + {{318, 12}, {93, 23}} + + YES + + 67239424 + 0 + Force HPET + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{1, 1}, {610, 43}} + + + + {{14, 10}, {612, 59}} + + {0, 0} + + 67239424 + 0 + Ethernet + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + {{10, 33}, {640, 267}} + + Peripherals + + + + + Item 8 + + + 256 + + YES + + + 36 + + YES + + + 256 + + YES + + + 12 + {{437, 48}, {50, 23}} + + YES + + 67239424 + 0 + rd + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{14, 12}, {63, 23}} + + YES + + 67239424 + 0 + debug + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{14, 84}, {63, 23}} + + YES + + 67239424 + 0 + Kernel + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{478, 50}, {135, 22}} + + YES + + 611450433 + 272630784 + + + + YES + + + + + + + 268 + {{162, 12}, {34, 23}} + + YES + + 67239424 + 0 + io + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{83, 85}, {177, 22}} + + YES + + 611450433 + 272630784 + + + + YES + + + + + + + 268 + {{162, 51}, {52, 18}} + + YES + + 67239424 + 0 + cpus + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{297, 48}, {74, 23}} + + YES + + 67239424 + 0 + busratio + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{273, 86}, {79, 18}} + + YES + + 67239424 + 0 + SystemId + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{14, 48}, {63, 23}} + + YES + + 67239424 + 0 + arch + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{437, 15}, {157, 18}} + + YES + + 67239424 + 0 + Disable kext blacklist + + LucidaGrande + 13 + 16 + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 12 + {{353, 86}, {260, 19}} + + YES + + 611450433 + 272630784 + + + LucidaGrande + 11 + 16 + + + YES + + + + + + + 268 + {{297, 15}, {90, 18}} + + YES + + 67239424 + 0 + Restart Fix + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{83, 46}, {76, 26}} + + YES + + 343014976 + 272630784 + + + + YES + + + 5 + YES + + YES + X86_64 + i386 + + + + + 274 + {13, 42} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 1024 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 19 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + + 268 + {{377, 46}, {54, 26}} + + YES + + 343014976 + 272630784 + + + + YES + + + 5 + YES + + YES + 20 + 21 + + + + + 274 + {13, 42} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 1024 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 19 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + + 268 + {{227, 46}, {59, 26}} + + YES + + 343014976 + 272630784 + + + + YES + + + 5 + YES + + YES + 1 + 2 + 4 + + + + + 274 + {13, 63} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 268436480 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 19 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + + 268 + {{83, 11}, {76, 23}} + + YES + + 343014976 + 272630784 + + + LucidaGrande + 10 + 16 + + + YES + + + 5 + YES + + YES + 0x12A + 0x144 + 0x14E + + + + + 274 + {13, 51} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 1024 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 15 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + + 268 + {{200, 10}, {86, 26}} + + YES + + 343014976 + 272630784 + + + + YES + + + 5 + YES + + YES + 0x80 + 0xFFFFFFFF + + + + + 274 + {13, 34} + + + YES + + YES + + + 10 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 338820672 + 1024 + + + YES + + + + 3 + YES + + + + 3 + 2 + + + 15 + tableViewAction: + -765427712 + + + + 1 + 15 + 0 + YES + 0 + + + + + {{1, 1}, {626, 117}} + + + + {{6, 134}, {628, 133}} + + {0, 0} + + 67239424 + 0 + Kernel + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 12 + + YES + + + 256 + + YES + + + 268 + {{16, 13}, {47, 23}} + + YES + + 67239424 + 0 + File + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{228, 13}, {126, 22}} + + YES + + 67239424 + 0 + Drop + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{69, 14}, {153, 22}} + + YES + + 611450433 + 272630784 + + + + YES + + + + + + {{1, 1}, {302, 46}} + + + + {{7, 68}, {304, 62}} + + {0, 0} + + 67239424 + 0 + DSDT + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 2 + NO + + + + 36 + + YES + + + 256 + + YES + + + 268 + {{71, 14}, {146, 22}} + + YES + + 611450433 + 272630784 + + + + YES + + + + + + + 268 + {{224, 13}, {80, 23}} + + YES + + 67239424 + 0 + Defaults + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{16, 15}, {49, 23}} + + YES + + 67239424 + 0 + File + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{1, 1}, {320, 46}} + + + + {{313, 68}, {322, 62}} + + {0, 0} + + 67239424 + 0 + SMBIOS + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + + 36 + + YES + + + 256 + + YES + + + 268 + {{152, 9}, {100, 23}} + + YES + + 67239424 + 0 + Force Wake + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{308, 9}, {98, 23}} + + YES + + 67239424 + 0 + Wake Image + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{412, 11}, {201, 22}} + + YES + + 611450433 + 272630784 + + + + YES + + + + + + + 268 + {{16, 12}, {63, 18}} + + YES + + 67239424 + 0 + Wake + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{1, 1}, {626, 43}} + + + + {{7, 5}, {628, 59}} + + {0, 0} + + 67239424 + 0 + Wake + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + {{10, 33}, {640, 267}} + + Advanced + + + + + Item 5 + + + 256 + + YES + + + 36 + + YES + + + 256 + + YES + + + 268 + {{16, 209}, {132, 18}} + + YES + + 67239424 + 0 + Device Properties + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{430, 205}, {141, 27}} + + YES + + -2080244224 + 134217728 + Current Gfx Injection + + + -2033434369 + 162 + + + 400 + 75 + + + + + 268 + + YES + + + 2304 + + YES + + + 268 + {536, 506} + + YES + + -1805517311 + 272629760 + + + + YES + + + + + + {{1, 1}, {536, 173}} + {{0, 175}, {536, 173}} + + + + + 4 + + + + 256 + {{537, 1}, {15, 173}} + + YES + + _doScroller: + 0.52552552552552556 + 0.34189723320158105 + + + + -2147483392 + {{-100, -100}, {536, 15}} + + 1 + + _doScroller: + 0.50602412223815918 + + + {{18, 17}, {553, 175}} + + + 82 + + + + + + {{1, 1}, {589, 246}} + + + + {{26, 5}, {591, 262}} + + {0, 0} + + 67239424 + 0 + EFI injection + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 1 + 0 + 2 + NO + + + {{10, 33}, {640, 267}} + + EFI Inject + + + + + Item 6 + + + 256 + + YES + + + 268 + {{479, 9}, {155, 32}} + + YES + + 67239424 + 134217728 + Open smbios.plist + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{145, 137}, {404, 17}} + + YES + + 68288064 + 272630784 + In construction. More options In Future Versions... + + + + + + + + {{10, 33}, {640, 267}} + + SMBIOS + + + + + + + 0 + YES + YES + + YES + + + + + + 268 + {{625, 7}, {39, 38}} + + YES + + -2080244224 + 134217728 + + + LucidaGrande + 10 + 2843 + + + -2033450753 + 135 + + NSImage + QuestionMark + + + + 200 + 25 + + + + {668, 368} + + + {{0, 0}, {1920, 1178}} + {224.664, 32} + {1.79769e+308, 1.79769e+308} + + + 8215 + 2 + {{235, 202}, {464, 318}} + 1685586944 + About the Chameleon Preferences Pane + NSPanel + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 268 + {{146, 294}, {172, 17}} + + YES + + 68288064 + 138413056 + Version bla bla. + + LucidaGrande-Bold + 13 + 16 + + + + + 1 + MC4wMzkyNTU0ODM1NCAxIDAuNTg1MTc0NDA4MwA + + + + + + 268 + {{20, 20}, {424, 266}} + + YES + + -2076049920 + 272629760 + + + + YES + + 1 + MCAwIDAAA + + + 1 + MC4xMTY2MTUxMiAxIDAuNjA4ODgwNTkwOQA + + + + + {464, 318} + + + {{0, 0}, {1920, 1058}} + {1.79769e+308, 1.79769e+308} + + + AboutController + + + ChameleonPrefPane + + + BootSetupController + + + BootFlagsController + + + PeripheralsController + + + AdvancedSetupController + + + EfiInjectController + + + SmbiosController + + + YES + + + + + YES + + + _window + + + + 26 + + + + dataSource + + + + 121 + + + + delegate + + + + 122 + + + + mPartitionsTable + + + + 123 + + + + mPartitionNameColumn + + + + 126 + + + + mFileSystemColumn + + + + 127 + + + + mPartitionIDColumn + + + + 130 + + + + authView + + + + 137 + + + + mStatusText + + + + 142 + + + + mPartitionImgColumn + + + + 161 + + + + onRestart: + + + + 188 + + + + mSleepButton + + + + 192 + + + + mShutDownButton + + + + 193 + + + + mRestartButton + + + + 194 + + + + onSleep: + + + + 195 + + + + onShutdown: + + + + 197 + + + + mDefaultPartition + + + + 600 + + + + mHidePartition + + + + 601 + + + + mRenamePartition + + + + 602 + + + + mVerbose + + + + 616 + + + + mSafeBoot + + + + 617 + + + + mIgnoreBootConfig + + + + 618 + + + + mTimeOut + + + + 619 + + + + mSingleUser + + + + 621 + + + + mQuietBoot + + + + 622 + + + + mInstantMenu + + + + 623 + + + + mWait + + + + 624 + + + + mRescan + + + + 625 + + + + mRescanPrompt + + + + 626 + + + + mRescanSingleDrive + + + + 627 + + + + mLegacyLogo + + + + 628 + + + + mBootBanner + + + + 629 + + + + mVBIOS + + + + 631 + + + + mVideoROM + + + + 632 + + + + mGraphicsMode + + + + 633 + + + + mGraphicsEnabler + + + + 635 + + + + mUSBBusFix + + + + 636 + + + + mEHCIacquire + + + + 637 + + + + mUHCIreset + + + + 638 + + + + mEthernetBuiltIn + + + + 639 + + + + mKernel + + + + 640 + + + + mKernelText + + + + 641 + + + + mDeviceRd + + + + 642 + + + + mVideoROMText + + + + 643 + + + + mHidePartitionText + + + + 644 + + + + mRenamePartitionText + + + + 645 + + + + mDefaultPartitionText + + + + 646 + + + + mDeviceRdText + + + + 647 + + + + mArch + + + + 648 + + + + mCPU + + + + 650 + + + + mBusRatio + + + + 652 + + + + mDebug + + + + 654 + + + + mIO + + + + 656 + + + + mDisableKextsBlacklisting + + + + 658 + + + + mDSDTFile + + + + 659 + + + + mDSDTFileText + + + + 660 + + + + mDSDTDrop + + + + 661 + + + + mSMBIOSFile + + + + 662 + + + + mSMBIOSFileText + + + + 663 + + + + mSMBIOSDefaults + + + + 664 + + + + mWake + + + + 665 + + + + mForceWake + + + + 666 + + + + mWakeImage + + + + 667 + + + + mWakeImageText + + + + 668 + + + + onCheckButtonChange: + + + + 669 + + + + onTextFiedChange: + + + + 670 + + + + onCheckButtonChange: + + + + 671 + + + + onCheckButtonChange: + + + + 673 + + + + onCheckButtonChange: + + + + 674 + + + + onTextFiedChange: + + + + 675 + + + + onCheckButtonChange: + + + + 676 + + + + onCheckButtonChange: + + + + 677 + + + + onCheckButtonChange: + + + + 678 + + + + onTextFiedChange: + + + + 679 + + + + onCheckButtonChange: + + + + 680 + + + + onTextFiedChange: + + + + 681 + + + + onCheckButtonChange: + + + + 682 + + + + onTextFiedChange: + + + + 683 + + + + onCheckButtonChange: + + + + 684 + + + + onTextFiedChange: + + + + 685 + + + + onCheckButtonChange: + + + + 691 + + + + onCheckButtonChange: + + + + 692 + + + + onCheckButtonChange: + + + + 693 + + + + onCheckButtonChange: + + + + 694 + + + + mSwapHD01 + + + + 695 + + + + mSwapHD02 + + + + 696 + + + + mFreezeParts + + + + 697 + + + + mInjectFrozenParts + + + + 698 + + + + onCheckButtonChange: + + + + 699 + + + + onCheckButtonChange: + + + + 700 + + + + onCheckButtonChange: + + + + 701 + + + + onCheckButtonChange: + + + + 702 + + + + onCheckButtonChange: + + + + 703 + + + + onCheckButtonChange: + + + + 704 + + + + onCheckButtonChange: + + + + 705 + + + + onCheckButtonChange: + + + + 706 + + + + onCheckButtonChange: + + + + 707 + + + + onCheckButtonChange: + + + + 708 + + + + onCheckButtonChange: + + + + 709 + + + + onTextFiedChange: + + + + 710 + + + + onCheckButtonChange: + + + + 716 + + + + onCheckButtonChange: + + + + 717 + + + + onCheckButtonChange: + + + + 718 + + + + onCheckButtonChange: + + + + 719 + + + + onCheckButtonChange: + + + + 720 + + + + onCheckButtonChange: + + + + 721 + + + + onCheckButtonChange: + + + + 722 + + + + onCheckButtonChange: + + + + 723 + + + + onCheckButtonChange: + + + + 725 + + + + onCheckButtonChange: + + + + 726 + + + + onCheckButtonChange: + + + + 727 + + + + onCheckButtonChange: + + + + 728 + + + + onCheckButtonChange: + + + + 729 + + + + onCheckButtonChange: + + + + 730 + + + + onCheckButtonChange: + + + + 731 + + + + onCheckButtonChange: + + + + 732 + + + + onCheckButtonChange: + + + + 733 + + + + onCheckButtonChange: + + + + 734 + + + + onTextFiedChange: + + + + 735 + + + + onTextFiedChange: + + + + 736 + + + + onCheckButtonChange: + + + + 744 + + + + mSystemId + + + + 748 + + + + mSystemIdText + + + + 749 + + + + onTextFiedChange: + + + + 750 + + + + onCheckButtonChange: + + + + 760 + + + + onTextFiedChange: + + + + 761 + + + + mBootConfigPath + + + + 762 + + + + mBootConfigPathText + + + + 763 + + + + onCheckButtonChange: + + + + 766 + + + + mRestartFix + + + + 767 + + + + onCheckButtonChange: + + + + 770 + + + + onTextFiedChange: + + + + 773 + + + + mPciRoot + + + + 774 + + + + mPciRootText + + + + 775 + + + + onCheckButtonChange: + + + + 778 + + + + mUseGUI + + + + 779 + + + + mEfiInject + + + + 789 + + + + onCheckButtonChange: + + + + 792 + + + + mCurrentGfxInjection + + + + 796 + + + + onCheckButtonChange: + + + + 797 + + + + mEfiInjectText + + + + 824 + + + + onTextFiedChange: + + + + 825 + + + + mEditSmbios + + + + 835 + + + + onCheckButtonChange: + + + + 836 + + + + mGraphicsModeText + + + + 841 + + + + onTextFiedChange: + + + + 842 + + + + mArchText + + + + 845 + + + + onTextFiedChange: + + + + 846 + + + + mBusRatioText + + + + 849 + + + + onTextFiedChange: + + + + 850 + + + + mCPUText + + + + 853 + + + + onTextFiedChange: + + + + 854 + + + + mTimeOutText + + + + 857 + + + + onTextFiedChange: + + + + 858 + + + + onCheckButtonChange: + + + + 861 + + + + mForceHPET + + + + 862 + + + + mDebugText + + + + 865 + + + + onTextFiedChange: + + + + 866 + + + + onCheckButtonChange: + + + + 871 + + + + onTextFiedChange: + + + + 874 + + + + mThemeText + + + + 875 + + + + mTheme + + + + 876 + + + + mIOText + + + + 877 + + + + onTextFiedChange: + + + + 878 + + + + value: bundleVersionNumber + + + + + + value: bundleVersionNumber + value + bundleVersionNumber + 2 + + + 894 + + + + onAbout: + + + + 895 + + + + value: bundleVersionNumber + + + + + + value: bundleVersionNumber + value + bundleVersionNumber + 2 + + + 896 + + + + value: credits + + + + + + value: credits + value + credits + 2 + + + 900 + + + + value: credits + + + + + + value: credits + value + credits + 2 + + + 903 + + + + mAboutDlg + + + + 904 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 12 + + + YES + + + + PrefPane + + + 6 + + + YES + + + + + + + + -3 + + + Application + + + 112 + + + ChameleonPrefPane + + + 136 + + + + + 172 + + + YES + + + + + + + + + + + + 173 + + + YES + + + + + + 174 + + + YES + + + + + + + + + + + 175 + + + YES + + + + + + 176 + + + YES + + + + + + + 138 + + + YES + + + + + + 139 + + + + + 110 + + + YES + + + + + + 111 + + + + + 140 + + + YES + + + + + + 141 + + + + + 99 + + + YES + + + + + + + + + 103 + + + + + 102 + + + YES + + + + + + + + + 101 + + + + + 100 + + + + + 158 + + + YES + + + + + + 104 + + + YES + + + + + + 128 + + + YES + + + + + + 105 + + + YES + + + + + + 106 + + + + + 129 + + + + + 107 + + + + + 160 + + + + + 186 + + + YES + + + + + + 187 + + + + + 189 + + + YES + + + + + + 190 + + + + + 284 + + + YES + + + + + + 285 + + + YES + + + + + + + 286 + + + YES + + + + + + + + + + + + + + + + + 292 + + + YES + + + + + + 293 + + + YES + + + + + + 294 + + + YES + + + + + + 300 + + + YES + + + + + + 301 + + + YES + + + + + + 302 + + + YES + + + + + + 313 + + + + + 314 + + + + + 315 + + + + + 321 + + + + + 322 + + + + + 323 + + + + + 355 + + + YES + + + + + + + + + + + 368 + + + YES + + + + + + 371 + + + + + 372 + + + YES + + + + + + 373 + + + + + 423 + + + YES + + + + + + 424 + + + YES + + + + + + 425 + + + + + 426 + + + + + 427 + + + YES + + + + + + 428 + + + YES + + + + + + 429 + + + + + 430 + + + + + 431 + + + YES + + + + + + 432 + + + + + 441 + + + YES + + + + + + 442 + + + YES + + + + + + + + 456 + + + YES + + + + + + + + + + + + + 452 + + + YES + + + + + + 453 + + + + + 450 + + + YES + + + + + + 455 + + + + + 457 + + + YES + + + + + + 464 + + + + + 458 + + + YES + + + + + + 463 + + + + + 460 + + + YES + + + + + + 461 + + + + + 478 + + + YES + + + + + + 479 + + + YES + + + + + + + + + 487 + + + YES + + + + + + 488 + + + + + 511 + + + YES + + + + + + + + + + + + + + + + + + + + + + + 489 + + + YES + + + + + + 510 + + + + + 493 + + + YES + + + + + + 506 + + + + + 491 + + + YES + + + + + + 508 + + + + + 490 + + + YES + + + + + + 509 + + + + + 494 + + + YES + + + + + + 505 + + + + + 492 + + + YES + + + + + + 507 + + + + + 495 + + + YES + + + + + + 504 + + + + + 496 + + + YES + + + + + + 503 + + + + + 497 + + + YES + + + + + + 502 + + + + + 523 + + + YES + + + + + + + + 527 + + + YES + + + + + + 528 + + + YES + + + + + + 529 + + + YES + + + + + + 530 + + + + + 531 + + + + + 532 + + + + + 536 + + + YES + + + + + + + + 537 + + + YES + + + + + + + + + 540 + + + YES + + + + + + 541 + + + YES + + + + + + 542 + + + YES + + + + + + 543 + + + + + 544 + + + + + 545 + + + + + 559 + + + YES + + + + + + + + 555 + + + YES + + + + + + 556 + + + + + 554 + + + YES + + + + + + 557 + + + + + 553 + + + YES + + + + + + 558 + + + + + 560 + + + YES + + + + + + + + + 561 + + + YES + + + + + + 562 + + + YES + + + + + + 563 + + + YES + + + + + + 566 + + + + + 567 + + + + + 568 + + + + + 569 + + + YES + + + + + + + + 570 + + + YES + + + + + + 571 + + + YES + + + + + + 572 + + + YES + + + + + + 573 + + + + + 574 + + + + + 575 + + + + + 576 + + + YES + + + + + + 577 + + + YES + + + + + + + 580 + + + YES + + + + + + 581 + + + + + 578 + + + YES + + + + + + 583 + + + + + 584 + + + YES + + + + + + 585 + + + + + 586 + + + YES + + + + + + 587 + + + + + 588 + + + YES + + + + + + 589 + + + + + 590 + + + YES + + + + + + 591 + + + + + 596 + + + + + 597 + + + + + 598 + + + + + 599 + + + + + 603 + + + YES + + + + + + + + + + + 604 + + + YES + + + + + + 605 + + + YES + + + + + + 606 + + + YES + + + + + + 607 + + + YES + + + + + + 608 + + + + + 609 + + + + + 610 + + + + + 611 + + + + + 369 + + + YES + + + + + + 370 + + + + + 738 + + + YES + + + + + + 739 + + + + + 741 + + + YES + + + + + + 742 + + + + + 754 + + + YES + + + + + + 755 + + + + + 757 + + + YES + + + + + + 758 + + + + + 764 + + + YES + + + + + + 765 + + + + + 538 + + + YES + + + + + + 539 + + + + + 768 + + + YES + + + + + + 769 + + + + + 771 + + + YES + + + + + + 772 + + + + + 776 + + + YES + + + + + + 777 + + + + + 780 + + + YES + + + + + + 781 + + + YES + + + + + + 788 + + + + + 793 + + + YES + + + + + + + + 786 + + + YES + + + + + + 787 + + + + + 794 + + + YES + + + + + + 795 + + + + + 820 + + + YES + + + + + + + + 821 + + + + + 822 + + + + + 818 + + + YES + + + + + + 819 + + + + + 828 + + + YES + + + + + + 829 + + + YES + + + + + + + 830 + + + YES + + + + + + 831 + + + + + 832 + + + YES + + + + + + 833 + + + + + 834 + + + + + 839 + + + YES + + + + + + 840 + + + + + 843 + + + YES + + + + + + 844 + + + + + 847 + + + YES + + + + + + 848 + + + + + 851 + + + YES + + + + + + 852 + + + + + 855 + + + YES + + + + + + 856 + + + + + 859 + + + YES + + + + + + 860 + + + + + 863 + + + YES + + + + + + 864 + + + + + 867 + + + YES + + + + + + 868 + + + + + 869 + + + YES + + + + + + 870 + + + + + 872 + + + YES + + + + + + 873 + + + + + 893 + + + + + 897 + + + + + + + YES + + YES + -3.IBPluginDependency + 100.IBPluginDependency + 101.IBPluginDependency + 102.CustomClassName + 102.IBPluginDependency + 103.IBPluginDependency + 104.IBPluginDependency + 105.IBPluginDependency + 106.IBPluginDependency + 107.IBPluginDependency + 110.IBAttributePlaceholdersKey + 110.IBPluginDependency + 111.IBPluginDependency + 12.IBEditorWindowLastContentRect + 12.IBPluginDependency + 12.IBWindowTemplateEditedContentRect + 12.ImportedFromIB2 + 12.windowTemplate.hasMinSize + 12.windowTemplate.minSize + 128.IBPluginDependency + 129.IBPluginDependency + 136.IBPluginDependency + 138.IBPluginDependency + 139.IBPluginDependency + 140.IBPluginDependency + 141.IBPluginDependency + 158.IBPluginDependency + 160.IBPluginDependency + 172.IBPluginDependency + 173.IBPluginDependency + 174.IBPluginDependency + 175.IBPluginDependency + 176.IBAttributePlaceholdersKey + 176.IBPluginDependency + 186.IBAttributePlaceholdersKey + 186.IBPluginDependency + 187.IBPluginDependency + 189.IBAttributePlaceholdersKey + 189.IBPluginDependency + 190.IBPluginDependency + 284.IBPluginDependency + 285.IBPluginDependency + 286.IBPluginDependency + 292.IBAttributePlaceholdersKey + 292.IBPluginDependency + 293.IBAttributePlaceholdersKey + 293.IBPluginDependency + 294.IBAttributePlaceholdersKey + 294.IBPluginDependency + 300.IBAttributePlaceholdersKey + 300.IBPluginDependency + 301.IBAttributePlaceholdersKey + 301.IBPluginDependency + 302.IBAttributePlaceholdersKey + 302.IBPluginDependency + 313.IBPluginDependency + 314.IBPluginDependency + 315.IBPluginDependency + 321.IBPluginDependency + 322.IBPluginDependency + 323.IBPluginDependency + 355.IBPluginDependency + 368.IBAttributePlaceholdersKey + 368.IBPluginDependency + 369.IBPluginDependency + 370.IBPluginDependency + 371.IBPluginDependency + 372.IBAttributePlaceholdersKey + 372.IBPluginDependency + 373.IBPluginDependency + 423.IBAttributePlaceholdersKey + 423.IBPluginDependency + 424.IBPluginDependency + 425.IBAttributePlaceholdersKey + 425.IBPluginDependency + 426.IBPluginDependency + 427.IBAttributePlaceholdersKey + 427.IBPluginDependency + 428.IBPluginDependency + 429.IBAttributePlaceholdersKey + 429.IBPluginDependency + 430.IBPluginDependency + 431.IBPluginDependency + 432.IBPluginDependency + 441.IBPluginDependency + 442.IBPluginDependency + 450.IBAttributePlaceholdersKey + 450.IBPluginDependency + 452.IBAttributePlaceholdersKey + 452.IBPluginDependency + 453.IBPluginDependency + 455.IBPluginDependency + 456.IBPluginDependency + 457.IBAttributePlaceholdersKey + 457.IBPluginDependency + 458.IBAttributePlaceholdersKey + 458.IBPluginDependency + 460.IBAttributePlaceholdersKey + 460.IBPluginDependency + 461.IBPluginDependency + 463.IBPluginDependency + 464.IBPluginDependency + 478.IBPluginDependency + 479.IBPluginDependency + 487.IBAttributePlaceholdersKey + 487.IBPluginDependency + 488.IBPluginDependency + 489.IBAttributePlaceholdersKey + 489.IBPluginDependency + 490.IBAttributePlaceholdersKey + 490.IBPluginDependency + 491.IBAttributePlaceholdersKey + 491.IBPluginDependency + 492.IBAttributePlaceholdersKey + 492.IBPluginDependency + 493.IBAttributePlaceholdersKey + 493.IBPluginDependency + 494.IBAttributePlaceholdersKey + 494.IBPluginDependency + 495.IBAttributePlaceholdersKey + 495.IBPluginDependency + 496.IBAttributePlaceholdersKey + 496.IBPluginDependency + 497.IBAttributePlaceholdersKey + 497.IBPluginDependency + 502.IBPluginDependency + 503.IBPluginDependency + 504.IBPluginDependency + 505.IBPluginDependency + 506.IBPluginDependency + 507.IBPluginDependency + 508.IBPluginDependency + 509.IBPluginDependency + 510.IBPluginDependency + 511.IBPluginDependency + 523.IBPluginDependency + 527.IBAttributePlaceholdersKey + 527.IBPluginDependency + 528.IBAttributePlaceholdersKey + 528.IBPluginDependency + 529.IBAttributePlaceholdersKey + 529.IBPluginDependency + 530.IBPluginDependency + 531.IBPluginDependency + 532.IBPluginDependency + 536.IBPluginDependency + 537.IBPluginDependency + 538.IBAttributePlaceholdersKey + 538.IBPluginDependency + 539.IBPluginDependency + 540.IBAttributePlaceholdersKey + 540.IBPluginDependency + 541.IBAttributePlaceholdersKey + 541.IBPluginDependency + 542.IBAttributePlaceholdersKey + 542.IBPluginDependency + 543.IBPluginDependency + 544.IBPluginDependency + 545.IBPluginDependency + 553.IBAttributePlaceholdersKey + 553.IBPluginDependency + 554.IBAttributePlaceholdersKey + 554.IBPluginDependency + 555.IBAttributePlaceholdersKey + 555.IBPluginDependency + 556.IBPluginDependency + 557.IBPluginDependency + 558.IBPluginDependency + 559.IBPluginDependency + 560.IBPluginDependency + 561.IBAttributePlaceholdersKey + 561.IBPluginDependency + 562.IBAttributePlaceholdersKey + 562.IBPluginDependency + 563.IBAttributePlaceholdersKey + 563.IBPluginDependency + 566.IBPluginDependency + 567.IBPluginDependency + 568.IBPluginDependency + 569.IBPluginDependency + 570.IBAttributePlaceholdersKey + 570.IBPluginDependency + 571.IBAttributePlaceholdersKey + 571.IBPluginDependency + 572.IBAttributePlaceholdersKey + 572.IBPluginDependency + 573.IBPluginDependency + 574.IBPluginDependency + 575.IBPluginDependency + 576.IBEditorWindowLastContentRect + 576.IBPluginDependency + 576.IBWindowTemplateEditedContentRect + 576.NSWindowTemplate.visibleAtLaunch + 577.IBPluginDependency + 578.IBPluginDependency + 580.IBPluginDependency + 581.IBPluginDependency + 583.IBPluginDependency + 584.IBAttributePlaceholdersKey + 584.IBPluginDependency + 585.IBPluginDependency + 586.IBAttributePlaceholdersKey + 586.IBPluginDependency + 587.IBPluginDependency + 588.IBAttributePlaceholdersKey + 588.IBPluginDependency + 589.IBPluginDependency + 590.IBPluginDependency + 591.IBPluginDependency + 6.IBPluginDependency + 6.ImportedFromIB2 + 603.IBPluginDependency + 604.IBAttributePlaceholdersKey + 604.IBPluginDependency + 605.IBAttributePlaceholdersKey + 605.IBPluginDependency + 606.IBAttributePlaceholdersKey + 606.IBPluginDependency + 607.IBAttributePlaceholdersKey + 607.IBPluginDependency + 608.IBPluginDependency + 609.IBPluginDependency + 610.IBPluginDependency + 611.IBPluginDependency + 738.IBAttributePlaceholdersKey + 738.IBPluginDependency + 739.IBPluginDependency + 741.IBAttributePlaceholdersKey + 741.IBPluginDependency + 742.IBPluginDependency + 754.IBAttributePlaceholdersKey + 754.IBPluginDependency + 755.IBPluginDependency + 757.IBAttributePlaceholdersKey + 757.IBPluginDependency + 758.IBAttributePlaceholdersKey + 758.IBPluginDependency + 764.IBAttributePlaceholdersKey + 764.IBPluginDependency + 765.IBPluginDependency + 768.IBAttributePlaceholdersKey + 768.IBPluginDependency + 769.IBPluginDependency + 771.IBAttributePlaceholdersKey + 771.IBPluginDependency + 772.IBPluginDependency + 776.IBAttributePlaceholdersKey + 776.IBPluginDependency + 777.IBPluginDependency + 780.IBPluginDependency + 781.IBPluginDependency + 786.IBAttributePlaceholdersKey + 786.IBPluginDependency + 787.IBPluginDependency + 793.IBPluginDependency + 794.IBPluginDependency + 795.IBPluginDependency + 818.IBPluginDependency + 819.IBPluginDependency + 820.IBPluginDependency + 821.IBPluginDependency + 822.IBPluginDependency + 828.IBPluginDependency + 829.IBPluginDependency + 830.IBPluginDependency + 831.IBPluginDependency + 832.IBPluginDependency + 833.IBPluginDependency + 839.IBPluginDependency + 840.IBPluginDependency + 843.IBPluginDependency + 844.IBPluginDependency + 847.IBPluginDependency + 848.IBPluginDependency + 851.IBPluginDependency + 852.IBPluginDependency + 855.IBPluginDependency + 856.IBPluginDependency + 859.IBAttributePlaceholdersKey + 859.IBPluginDependency + 860.IBPluginDependency + 863.IBPluginDependency + 864.IBPluginDependency + 867.IBPluginDependency + 868.IBPluginDependency + 869.IBAttributePlaceholdersKey + 869.IBPluginDependency + 870.IBPluginDependency + 872.IBPluginDependency + 873.IBPluginDependency + 893.IBPluginDependency + 99.IBAttributePlaceholdersKey + 99.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + CustomTableView + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Shuts down the sytem + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{142, 78}, {668, 368}} + com.apple.InterfaceBuilder.CocoaPlugin + {{142, 78}, {668, 368}} + + + {224.664, 10} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Swap disk numbers 0 and 1, if diskutil list does not reflect the initial boot configuration. + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Restart the sytem + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Put the sytem in Sleep mode + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Boot in Single User Mode (default: No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Boot in verbose (text) mode, log info will be stored and accessible by the Console application (default: No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Ignore Boot Configuration file (default: No). If set, then com.apple.Boot.plist will not be loaded during the boot, only defaults options will be set. + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Sets the Time Out in seconds before default partition boots if no key is pressed + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use quiet boot mode (no messages or prompt) (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force displaying the partition selection menu (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + U2V0cyB0aGUgZGVmYXVsdCBib290IHBhcnRpdGlvbiBoZCh4LHkpICAgICAgICAgICAgICAgICAgd2hl +cmUgJ3gnIGlzIHRoZSBkaXNrIG51bWJlciwgJ3knIHRoZSBwYXJ0aXRpb24gbnVtYmVyCg + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use Wait to make the booter wait for a key press before it starts the mach kernel. Useful for debugging your boot configuration + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + U2V0IHRoZSBib290IHBhcnRpdGlvbnMgaGQoeCx5KSB0byBoaWRlICAgICAgICAgICAgICAgICAgd2hl +cmUgJ3gnIGlzIHRoZSBkaXNrIG51bWJlciwgJ3knIHRoZSBwYXJ0aXRpb24gbnVtYmVyCg + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + YES + + + YES + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Sets the boot partitions "hd(x,y) MyVolumeName " where 'x' is the disk number, 'y' the partition number and MyVolumeName is the alias you want to give to this partition. (i.e: useful for renaming System Reserved boot partition for Windows 7) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + YES + + + YES + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Graphics Mode="WIDTHxHEIGHTxDEPTH@FREQ). Works only if you have a VESA 3.0 compliant card (default= No custom resolution is selected) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Show boot banner in GUI mode (default=Yes) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Automatic device-properties generation for graphics cards (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + NVidia only. Inject Video BIOS to from a file in /Extra/ named [vendorid][devid].rom where vendorid and devid are 4 digits hexadecimal values(default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Define the GFX card video ROM file that should be loaded at boot + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use the legacy (grey on white) apple logo (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Usage: rd=<BSD device name> (e.g. rd=disk0s2) | rd=*<IODeviceTree path> (e.g. rd=*/PCI0@0/CHN0@0/@0:1) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Usage: rd=<BSD device name> (e.g. rd=disk0s2) | rd=*<IODeviceTree path> (e.g. rd=*/PCI0@0/CHN0@0/@0:1) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Select a custom mach_kernel (/mach_kernel is used by default) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Select a custom mach_kernel (/mach_kernel is used by default) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Enable kernel debug mode flags (i.e 0x0144). + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + io filtering mask associated with the debug mode. Warning: some io debug modes can crash your boot. + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force physical cpus count (all cores in all cpus), automatically detected by default. Use this override only if autodetection doesn't work for your cpu. + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force busratio multiplier, such as CPUFreq=FSB freq x busratio (automatically detected by default) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Kernel architecture boot mode (i386 | x86_64 | ppc). On intel platforms, select either i386 or x86_64 + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use an alternate DSDT.aml file (default path: /DSDT.aml /Extra/DSDT.aml) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Skip the SSDT tables while relocating the ACPI tables (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use an alternate DSDT.aml file (default path: /DSDT.aml /Extra/DSDT.aml) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Automatic "built-in" device-properties generation for ethernet interfaces (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Enable the EHCI fix (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Enable the EHCI and UHCI fixes (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Enable the UHCI fix (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use an alternate smbios.plist file (default path: /smbios.plist /Extra/smbios.plist) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Don't use the Default values for SMBIOS overriding. If smbios.plist doesn't exist, factory values are kept (default=Yes) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use an alternate smbios.plist file (default path: /smbios.plist /Extra/smbios.plist) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use an alternate sleepimage file (default path is /private/var/vm/sleepimage) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use an alternate sleepimage file (default path is /private/var/vm/sleepimage) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force using the sleepimage (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Scan the drive only where the booter got loaded from (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Prompts for enable CD-ROM rescan mode (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Enable CD-ROM rescan mode (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{808, 358}, {464, 318}} + com.apple.InterfaceBuilder.CocoaPlugin + {{808, 358}, {464, 318}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + NVidia only. (obsolete) Define the GFX card video ROM file that should be loaded at boot. Superseded by VBIOS + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Disable the blacklist kexts filtering in voodoo based kernels. Has no effect on vanilla kernels. (Enabled by default) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force to boot in safe mode. Useful in certains situations (i.e: when one kexts hangs the system) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use the freezed partitions list in located in the preference file for locking and manual handling purpose + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Swap disks indexes 0<->2, use this option if your disk sequence in osx does not match the chameleon boot disk sequence + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use this feature to initially inject the current dynamically listed partitions. Then you can change manually the partition disk numbers and labels in the preference file + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Swap disks indexes 0<->1, use this option if your disk sequence in osx does not match the chameleon boot disk sequence + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Set the SystemId from which will be generated the Hardware UUID. If no values are set, then the BIOS DMI UUID is taken as default, if no BIOS DMI UUID is found, then a fixed value is set. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Set the SystemId from which will be generated the Hardware UUID. If no values are set, then the BIOS DMI UUID is taken as default, if no BIOS DMI UUID is found, then a fixed value is set. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force the path of com.apple.Boot.plist. Useful if more than one file is autodetected, and the automatically found one is not the one that the booter use. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + orce the path of com.apple.Boot.plist. Useful if more than one file is autodetected, and the automatically found one is not the one that the booter use. + + + com.apple.InterfaceBuilder.CocoaPlugin + + YES + + + YES + + + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Restart fix enable/disable option. If disabled, no FACP patch will be done at boot time. (Enabled by default) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Override the automatic pciroot detection, and manually inject a pciroot number at boot time + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + YES + + + YES + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Disable GUI at boot time. (Enabled by Default) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Sets additional device properties like gfx card efi injection, network . + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Force HPET To Enable in BIOS. Use that options if your bios doesn't provide HPET compatibility. Make sure you tried to fix HPET in your DSDT File before using this option + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Use quiet boot mode (no messages or prompt) (default=No) + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Click on a partition to make it the default boot partition. + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 904 + + + + YES + + AboutController + NSObject + + onAbout: + id + + + mAboutDlg + NSPanel + + + IBProjectSource + ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/AboutController.h + + + + AdvancedSetupController + PreferencesControllerBase + + YES + + YES + onCheckButtonChange: + onTextFiedChange: + + + YES + NSButton + NSTextField + + + + YES + + YES + mArch + mArchText + mBusRatio + mBusRatioText + mCPU + mCPUText + mDSDTDrop + mDSDTFile + mDSDTFileText + mDebug + mDebugText + mDeviceRd + mDeviceRdText + mDisableKextsBlacklisting + mForceWake + mIO + mIOText + mKernel + mKernelText + mRestartFix + mSMBIOSDefaults + mSMBIOSFile + mSMBIOSFileText + mSystemId + mSystemIdText + mWake + mWakeImage + mWakeImageText + + + YES + NSButton + NSComboBox + NSButton + NSComboBox + NSButton + NSComboBox + NSButton + NSButton + NSTextField + NSButton + NSComboBox + NSButton + NSTextField + NSButton + NSButton + NSButton + NSComboBox + NSButton + NSTextField + NSButton + NSButton + NSButton + NSTextField + NSButton + NSTextField + NSButton + NSButton + NSTextField + + + + IBProjectSource + Sources/AdvancedSetupController.h + + + + BootFlagsController + PreferencesControllerBase + + YES + + YES + onCheckButtonChange: + onTextFiedChange: + + + YES + NSButton + NSTextField + + + + YES + + YES + mIgnoreBootConfig + mInstantMenu + mQuietBoot + mRescan + mRescanPrompt + mRescanSingleDrive + mSafeBoot + mSingleUser + mTheme + mThemeText + mTimeOut + mTimeOutText + mUseGUI + mVerbose + mWait + + + YES + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSComboBox + NSButton + NSTextField + NSButton + NSButton + NSButton + + + + IBProjectSource + Sources/BootFlagsController.h + + + + BootSetupController + PreferencesControllerBase + + YES + + YES + onCheckButtonChange: + onForceBootConfigPath: + onTextFiedChange: + + + YES + NSButton + id + NSTextField + + + + YES + + YES + mBootConfigPath + mBootConfigPathText + mDefaultPartition + mDefaultPartitionText + mFreezeParts + mHidePartition + mHidePartitionText + mInjectFrozenParts + mRenamePartition + mRenamePartitionText + mSwapHD01 + mSwapHD02 + + + YES + NSButton + NSTextField + NSButton + NSTextField + NSButton + NSButton + NSTextField + NSButton + NSButton + NSTextField + NSButton + NSButton + + + + IBProjectSource + Sources/BootSetupController.h + + + + ChameleonPrefPane + NSPreferencePane + + YES + + YES + onAbout: + onRestart: + onShutdown: + onSleep: + + + YES + id + id + id + id + + + + YES + + YES + authView + mFileSystemColumn + mOptions + mPartitionIDColumn + mPartitionImgColumn + mPartitionNameColumn + mPartitionsTable + mRestartButton + mShutDownButton + mSleepButton + mStatusText + + + YES + SFAuthorizationView + NSTableColumn + NSBox + NSTableColumn + NSTableColumn + NSTableColumn + CustomTableView + NSButton + NSButton + NSButton + NSTextField + + + + IBProjectSource + Sources/ChameleonPrefPane.h + + + + CustomTableView + NSTableView + + IBProjectSource + ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/CustomTableView.h + + + + EfiInjectController + PreferencesControllerBase + + YES + + YES + onCheckButtonChange: + onTextFiedChange: + + + YES + NSButton + NSTextField + + + + YES + + YES + mCurrentGfxInjection + mEfiInject + mEfiInjectText + + + YES + NSButton + NSButton + NSTextField + + + + IBProjectSource + ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/EfiInjectController.h + + + + FirstResponder + NSObject + + IBUserSource + + + + + NSPreferencePane + NSObject + + IBUserSource + + + + + PeripheralsController + PreferencesControllerBase + + YES + + YES + onCheckButtonChange: + onTextFiedChange: + + + YES + NSButton + NSTextField + + + + YES + + YES + mBootBanner + mEHCIacquire + mEthernetBuiltIn + mForceHPET + mGraphicsEnabler + mGraphicsMode + mGraphicsModeText + mLegacyLogo + mPciRoot + mPciRootText + mUHCIreset + mUSBBusFix + mVBIOS + mVideoROM + mVideoROMText + + + YES + NSButton + NSButton + NSButton + NSButton + NSButton + NSButton + NSComboBox + NSButton + NSButton + NSTextField + NSButton + NSButton + NSButton + NSButton + NSTextField + + + + IBProjectSource + Sources/PeripheralsController.h + + + + PreferencesControllerBase + NSObject + + IBProjectSource + Sources/PreferencesControllerBase.h + + + + SmbiosController + PreferencesControllerBase + + YES + + YES + onCheckButtonChange: + onTextFiedChange: + + + YES + NSButton + NSTextField + + + + mEditSmbios + NSButton + + + IBProjectSource + ../../../../../../devl/OSX/voodoo/chameleonApplications/trunk/ChameleonPrefPane/Sources/SmbiosController.h + + + + + YES + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + + + NSBox + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSBox.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSComboBox + NSTextField + + IBFrameworkSource + AppKit.framework/Headers/NSComboBox.h + + + + NSComboBoxCell + NSTextFieldCell + + IBFrameworkSource + AppKit.framework/Headers/NSComboBoxCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSController + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSController.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSObject + + IBFrameworkSource + SecurityInterface.framework/Headers/SFAuthorizationView.h + + + + NSObject + + IBFrameworkSource + SecurityInterface.framework/Headers/SFCertificatePanel.h + + + + NSObject + + IBFrameworkSource + SecurityInterface.framework/Headers/SFChooseIdentityPanel.h + + + + NSPanel + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSPanel.h + + + + NSPreferencePane + NSObject + + YES + + YES + _firstKeyView + _initialKeyView + _lastKeyView + _window + + + YES + NSView + NSView + NSView + NSWindow + + + + IBFrameworkSource + PreferencePanes.framework/Headers/NSPreferencePane.h + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + + + NSTabView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSTabView.h + + + + NSTabViewItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTabViewItem.h + + + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableHeaderView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSTableHeaderView.h + + + + NSTableView + NSControl + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSUserDefaultsController + NSController + + IBFrameworkSource + AppKit.framework/Headers/NSUserDefaultsController.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + SFAuthorizationView + NSView + + + + + 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../ChameleonPrefPane.xcodeproj + 3 + + Property changes on: branches/diebuche/ChameleonPrefPane ___________________________________________________________________ Added: merge-url + svn Added: merge-baserev + 71 Added: merge-revision + 71