/* GNUstep.h - macros to make easier to port gnustep apps to macos-x Copyright (C) 2001 Free Software Foundation, Inc. Written by: Nicola Pero Date: March, October 2001 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __GNUSTEP_GNUSTEP_H_INCLUDED_ #define __GNUSTEP_GNUSTEP_H_INCLUDED_ /* The contents of this file are designed to be usable with either * GNUstep-base or MacOS-X Foundation. */ #if GS_WITH_GC #ifndef RETAIN #define RETAIN(object) ((id)object) #endif #ifndef RELEASE #define RELEASE(object) #endif #ifndef AUTORELEASE #define AUTORELEASE(object) ((id)object) #endif #ifndef TEST_RETAIN #define TEST_RETAIN(object) ((id)object) #endif #ifndef TEST_RELEASE #define TEST_RELEASE(object) #endif #ifndef TEST_AUTORELEASE #define TEST_AUTORELEASE(object) ((id)object) #endif #ifndef ASSIGN #define ASSIGN(object,value) (object = value) #endif #ifndef ASSIGNCOPY #define ASSIGNCOPY(object,value) (object = [value copy]) #endif #ifndef DESTROY #define DESTROY(object) (object = nil) #endif #ifndef CREATE_AUTORELEASE_POOL #define CREATE_AUTORELEASE_POOL(X) #endif #ifndef RECREATE_AUTORELEASE_POOL #define RECREATE_AUTORELEASE_POOL(X) #endif #define IF_NO_GC(X) #else #ifndef RETAIN /** * Basic retain operation ... calls [NSObject-retain] */ #define RETAIN(object) [object retain] #endif #ifndef RELEASE /** * Basic release operation ... calls [NSObject-release] */ #define RELEASE(object) [object release] #endif #ifndef AUTORELEASE /** * Basic autorelease operation ... calls [NSObject-autorelease] */ #define AUTORELEASE(object) [object autorelease] #endif #ifndef TEST_RETAIN /** * Tested retain - only invoke the * objective-c method if the receiver is not nil. */ #define TEST_RETAIN(object) ({\ id __object = (id)(object); (__object != nil) ? [__object retain] : nil; }) #endif #ifndef TEST_RELEASE /** * Tested release - only invoke the * objective-c method if the receiver is not nil. */ #define TEST_RELEASE(object) ({\ id __object = (id)(object); if (__object != nil) [__object release]; }) #endif #ifndef TEST_AUTORELEASE /** * Tested autorelease - only invoke the * objective-c method if the receiver is not nil. */ #define TEST_AUTORELEASE(object) ({\ id __object = (id)(object); (__object != nil) ? [__object autorelease] : nil; }) #endif #ifndef ASSIGN /** * ASSIGN(object,value) assigns the value to the object with * appropriate retain and release operations. */ #define ASSIGN(object,value) ({\ id __object = (id)(object); \ object = [((id)value) retain]; \ [__object release]; \ }) #endif #ifndef ASSIGNCOPY /** * ASSIGNCOPY(object,value) assigns a copy of the value to the object * with release of the original. */ #define ASSIGNCOPY(object,value) ({\ id __object = (id)(object); \ object = [((id)value) copy];\ [__object release]; \ }) #endif #ifndef DESTROY /** * DESTROY() is a release operation which also sets the variable to be * a nil pointer for tidiness - we can't accidentally use a DESTROYED * object later. It also makes sure to set the variable to nil before * releasing the object - to avoid side-effects of the release trying * to reference the object being released through the variable. */ #define DESTROY(object) ({ \ id __o = object; \ object = nil; \ [__o release]; \ }) #endif #ifndef CREATE_AUTORELEASE_POOL /** * Declares an autorelease pool variable and creates and initialises * an autorelease pool object. */ #define CREATE_AUTORELEASE_POOL(X) \ NSAutoreleasePool *(X) = [NSAutoreleasePool new] #endif #ifndef RECREATE_AUTORELEASE_POOL /** * Similar, but allows reuse of variables. This destroys the old pool before * creating the new one. */ #define RECREATE_AUTORELEASE_POOL(X) \ DESTROY(X);\ (X) = [NSAutoreleasePool new] #endif #define IF_NO_GC(X) X #endif /** *

* This function (macro) is a GNUstep extension. *

*

* _(@"My string to translate") *

*

* is exactly the same as *

*

* NSLocalizedString (@"My string to translate", @"") *

*

* It is useful when you need to translate an application * very quickly, as you just need to enclose all strings * inside _(). But please note that when you * use this macro, you are not taking advantage of comments * for the translator, so consider using * NSLocalizedString instead when you need a * comment. *

*/ #define _(X) NSLocalizedString (X, @"") /* The quickest possible way to localize a static string: static NSString *string = __(@"New Game"); NSLog (_(string)); */ /** *

* This function (macro) is a GNUstep extension. *

*

* __(@"My string to translate") *

*

* is exactly the same as *

*

* GSLocalizedStaticString (@"My string to translate", @"") *

*

* It is useful when you need to translate an application very * quickly. You would use it as follows for static strings: *

*

* * NSString *message = __(@"Hello there"); * ... more code ... * NSLog (_(messages)); * *

*

* But please note that when you use this macro, you are not * taking advantage of comments for the translator, so * consider using GSLocalizedStaticString * instead when you need a comment. *

*/ #define __(X) X /* The better way for a static string, with a comment - use as follows - static NSString *string = GSLocalizedStaticString (@"New Game", @"Menu Option"); NSLog (_(string)); If you need anything more complicated than this, please initialize the static strings manually. */ /** *

* This function (macro) is a GNUstep extensions, and it is used * to localize static strings. Here is an example of a static * string: *

*

* * NSString *message = @"Hi there"; * ... some code ... * NSLog (message); * *

*

* This string can not be localized using the standard * openstep functions/macros. By using this gnustep extension, * you can localize it as follows: *

*

* * NSString *message = GSLocalizedStaticString (@"Hi there", * @"Greeting"); * * ... some code ... * * NSLog (NSLocalizedString (message, @"")); * *

*

* When the tools generate the * Localizable.strings file from the source * code, they will ignore the NSLocalizedString * call while they will extract the string (and the comment) * to localize from the GSLocalizedStaticString * call. *

*

* When the code is compiled, instead, the * GSLocalizedStaticString call is ignored (discarded, * it is a macro which simply expands to key), while * the NSLocalizedString will actually look up the * string for translation in the Localizable.strings * file. *

*

* Please note that there is currently no macro/function to * localize static strings using different tables. If you * need that functionality, you have either to prepare the * localization tables by hand, or to rewrite your code in * such a way as not to use static strings. *

*/ #define GSLocalizedStaticString(key, comment) key #endif /* __GNUSTEP_GNUSTEP_H_INCLUDED_ */