<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.gnustep.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stefan+Urbanek</id>
	<title>GNUstepWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.gnustep.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stefan+Urbanek"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php/Special:Contributions/Stefan_Urbanek"/>
	<updated>2026-05-14T21:20:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Survey&amp;diff=3113</id>
		<title>Survey</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Survey&amp;diff=3113"/>
		<updated>2006-08-30T13:00:22Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Added 'cross-platform' question&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;About the survey:&lt;br /&gt;
* ''Each question should have a 'comment' field''&lt;br /&gt;
* ''For any multi-choice one can check more than one option''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
You are:&lt;br /&gt;
* developer&lt;br /&gt;
* future developer&lt;br /&gt;
* user&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Operating system (and flavour) you use:&lt;br /&gt;
* MS Windows: ....&lt;br /&gt;
* Linux: .....&lt;br /&gt;
* BSD: ....&lt;br /&gt;
* OSX&lt;br /&gt;
* Other: ....&lt;br /&gt;
&lt;br /&gt;
== User ==&lt;br /&gt;
&lt;br /&gt;
Kinds of applications you use (and reason):&lt;br /&gt;
&lt;br /&gt;
Concrete list of applications:&lt;br /&gt;
&lt;br /&gt;
What applications or application kinds you are missing: ....&lt;br /&gt;
&lt;br /&gt;
What do you do not like about current applications you use: .....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Developers ==&lt;br /&gt;
&lt;br /&gt;
=== Cross-platform ===&lt;br /&gt;
&lt;br /&gt;
Please state whether you develop for/use/are familiar with/know/do not know one of the following environments:&lt;br /&gt;
* KDE&lt;br /&gt;
* Gnome&lt;br /&gt;
* ... list other environments as well, including Win32, Cocoa,...&lt;br /&gt;
&lt;br /&gt;
* What are the features you like in the environments?&lt;br /&gt;
* What are you missing in those environments?&lt;br /&gt;
&lt;br /&gt;
* What are you using for developing cross-platform applications and why?&lt;br /&gt;
&lt;br /&gt;
What platform/environment you plan/want to port your applications to?&lt;br /&gt;
&lt;br /&gt;
=== Development ===&lt;br /&gt;
&lt;br /&gt;
''If you are not a developer and you are either planning to be one or imagining to be one, fill this part as well.''&lt;br /&gt;
&lt;br /&gt;
* Your development platform: .....&lt;br /&gt;
* Reason for using the platform (for example: company choice, because of feature ..., only one I learned)&lt;br /&gt;
&lt;br /&gt;
Type of applications you develop:&lt;br /&gt;
(FIXME: put a list of app types here)&lt;br /&gt;
&lt;br /&gt;
* Languagaes you use and why: ''(give a reason for the language you use)''&lt;br /&gt;
** C&lt;br /&gt;
** C++&lt;br /&gt;
** C#&lt;br /&gt;
** Perl&lt;br /&gt;
** PHP&lt;br /&gt;
** FIXME: add languages here&lt;br /&gt;
&lt;br /&gt;
== GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* What do you think gnustep is? .....&lt;br /&gt;
* Have you heard about gnustep? .....&lt;br /&gt;
* Where you have heard about gnustep? .....&lt;br /&gt;
&lt;br /&gt;
* What is you experience with gnustep?&lt;br /&gt;
&lt;br /&gt;
* Do you use gnustep? ....&lt;br /&gt;
* For what?&lt;br /&gt;
** Development of: .....&lt;br /&gt;
** Production of: .....&lt;br /&gt;
** Just for fun&lt;br /&gt;
** Other: .....&lt;br /&gt;
&lt;br /&gt;
If you do not use gnustep, give a reson why:&lt;br /&gt;
&lt;br /&gt;
(same for Do you plan to use GNUstep?)&lt;br /&gt;
&lt;br /&gt;
What applications you use in GNUstep? ''Same for plat to use: use either two lists or single with two columns with check-boxes''&lt;br /&gt;
(put a list of major gnustep applications)&lt;br /&gt;
&lt;br /&gt;
What applications would you like to see in GNUstep?&lt;br /&gt;
&lt;br /&gt;
What frameworks do you (plan to) use from gnustep?&lt;br /&gt;
&lt;br /&gt;
What frameworks are you missing?&lt;br /&gt;
&lt;br /&gt;
How do you compare gnustep to other development environments?&lt;br /&gt;
&lt;br /&gt;
== GNUstep development ==&lt;br /&gt;
&lt;br /&gt;
* would you like to develop for GNUstep?&lt;br /&gt;
* what?&lt;br /&gt;
** gnustep core libraries&lt;br /&gt;
** applications:....&lt;br /&gt;
** frameworks:....&lt;br /&gt;
&lt;br /&gt;
what are you missing to be able to develop for gnustep?&lt;br /&gt;
** experience&lt;br /&gt;
** courage&lt;br /&gt;
** documentation&lt;br /&gt;
** nothing&lt;br /&gt;
** other:.....&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=FOSDEM_2007&amp;diff=3112</id>
		<title>FOSDEM 2007</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=FOSDEM_2007&amp;diff=3112"/>
		<updated>2006-08-30T12:50:49Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Added 'survey' reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Few ideas:&lt;br /&gt;
* http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/9580d4fb865bfa4c/f6edba0f74411dec?q=fosdem&amp;amp;rnum=1#f6edba0f74411dec&lt;br /&gt;
&lt;br /&gt;
Extract:&lt;br /&gt;
* use Live CD - even rereleased last version&lt;br /&gt;
* Perhaps some GNUstep merchandize, like GNUstep T-shirts, GNUstep mouse pads,&lt;br /&gt;
GNUstep stickers, etc. Though I'm not sure we could so easily afford these yet.&lt;br /&gt;
Quickly lurking through the Internet, I calculated that 20 T-shirts come to&lt;br /&gt;
around 60 EUR, 30 T-shirts to ~85 EUR, and 50 T-shirts around ~130 EUR.&lt;br /&gt;
* perform a [Survey]&lt;br /&gt;
&lt;br /&gt;
== Portability demonstration ==&lt;br /&gt;
&lt;br /&gt;
Use several machines side-by side with:&lt;br /&gt;
* GNUstep with Camaelon, and perhaps the Etoile system&lt;br /&gt;
* some Apple hardware for showing that the same apps can run on GNUstep and OSX&lt;br /&gt;
* some Linux machine&lt;br /&gt;
* some BSD machine&lt;br /&gt;
* some x86 hardware to show that GNUstep is even available on Windows&lt;br /&gt;
* some other hardware (connected to the LCD we had) showing a presentation/video on GNUstep - something flashy, with sound and talk&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=FOSDEM_2007&amp;diff=2963</id>
		<title>FOSDEM 2007</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=FOSDEM_2007&amp;diff=2963"/>
		<updated>2006-03-05T10:34:37Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Few ideas:&lt;br /&gt;
* http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/9580d4fb865bfa4c/f6edba0f74411dec?q=fosdem&amp;amp;rnum=1#f6edba0f74411dec&lt;br /&gt;
&lt;br /&gt;
Extract:&lt;br /&gt;
* use Live CD - even rereleased last version&lt;br /&gt;
* Perhaps some GNUstep merchandize, like GNUstep T-shirts, GNUstep mouse pads,&lt;br /&gt;
GNUstep stickers, etc. Though I'm not sure we could so easily afford these yet.&lt;br /&gt;
Quickly lurking through the Internet, I calculated that 20 T-shirts come to&lt;br /&gt;
around 60 EUR, 30 T-shirts to ~85 EUR, and 50 T-shirts around ~130 EUR.&lt;br /&gt;
&lt;br /&gt;
== Portability demonstration ==&lt;br /&gt;
&lt;br /&gt;
Use several machines side-by side with:&lt;br /&gt;
* GNUstep with Camaelon, and perhaps the Etoile system&lt;br /&gt;
* some Apple hardware for showing that the same apps can run on GNUstep and OSX&lt;br /&gt;
* some Linux machine&lt;br /&gt;
* some BSD machine&lt;br /&gt;
* some x86 hardware to show that GNUstep is even available on Windows&lt;br /&gt;
* some other hardware (connected to the LCD we had) showing a presentation/video on GNUstep - something flashy, with sound and talk&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=FOSDEM_2007&amp;diff=2962</id>
		<title>FOSDEM 2007</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=FOSDEM_2007&amp;diff=2962"/>
		<updated>2006-03-05T10:34:23Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Few ideas:&lt;br /&gt;
* http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/9580d4fb865bfa4c/f6edba0f74411dec?q=fosdem&amp;amp;rnum=1#f6edba0f74411dec&lt;br /&gt;
&lt;br /&gt;
Extract:&lt;br /&gt;
* use Live CD - even rereleased last version&lt;br /&gt;
* Perhaps some GNUstep merchandize, like GNUstep T-shirts, GNUstep mouse pads,&lt;br /&gt;
GNUstep stickers, etc. Though I'm not sure we could so easily afford these yet.&lt;br /&gt;
Quickly lurking through the Internet, I calculated that 20 T-shirts come to&lt;br /&gt;
around 60 EUR, 30 T-shirts to ~85 EUR, and 50 T-shirts around ~130 EUR.&lt;br /&gt;
&lt;br /&gt;
== Portability demonstration ==&lt;br /&gt;
&lt;br /&gt;
Use several machines side-by side with:&lt;br /&gt;
- GNUstep with Camaelon, and perhaps the Etoile system&lt;br /&gt;
- some Apple hardware for showing that the same apps can run on GNUstep and OSX&lt;br /&gt;
- some Linux machine&lt;br /&gt;
- some BSD machine&lt;br /&gt;
- some x86 hardware to show that GNUstep is even available on Windows&lt;br /&gt;
- some other hardware (connected to the LCD we had) showing a presentation/video on GNUstep - something flashy, with sound and talk&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepWiki:Community_Portal&amp;diff=2961</id>
		<title>GNUstepWiki:Community Portal</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepWiki:Community_Portal&amp;diff=2961"/>
		<updated>2006-03-05T10:31:26Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Added FOSDEM 2007&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Development ==&lt;br /&gt;
&lt;br /&gt;
* [[Roadmap]]&lt;br /&gt;
* [[GNUstep release procedure]]&lt;br /&gt;
* [[Quality assurance]]&lt;br /&gt;
&lt;br /&gt;
* [[Ideas]]&lt;br /&gt;
&lt;br /&gt;
* [[User knowledge requirements]]&lt;br /&gt;
&lt;br /&gt;
== Marketing ==&lt;br /&gt;
&lt;br /&gt;
* [[Marketing CD]]&lt;br /&gt;
* [[Survey]]&lt;br /&gt;
* [[Presentations]]&lt;br /&gt;
* [[News]]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* [[GNUstep as product]]&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
* [[FOSDEM 2007]]&lt;br /&gt;
* [[FOSDEM 2006]]&lt;br /&gt;
* [[FOSDEM 2005]]&lt;br /&gt;
* [[FOSDEM 2004]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=NSString&amp;diff=2883</id>
		<title>NSString</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=NSString&amp;diff=2883"/>
		<updated>2005-11-23T11:24:51Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: /* Getting a C String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Strings in GNUstep use the NSString class in gnustep-base. See the reference manual for gnustep-base for more details about NSString.&lt;br /&gt;
&lt;br /&gt;
== Constant Strings ==&lt;br /&gt;
&lt;br /&gt;
As you can create static instances of char* plain C, you can create strings in GNUstep that automatically flatten out to be static instances of NSString. This is done by preceding the quoted string by an &amp;quot;at&amp;quot; symbol ('@'). For example:&lt;br /&gt;
&lt;br /&gt;
  NSString * myString = @&amp;quot;This is an example of a string.&amp;quot;;&lt;br /&gt;
  NSLog(myString);&lt;br /&gt;
&lt;br /&gt;
myString is now an NSString object, and can have methods called on it like any other string.&lt;br /&gt;
&lt;br /&gt;
== Getting a C String ==&lt;br /&gt;
&lt;br /&gt;
You can convert an NSString object to a plain C string using the cStringUsingEncoding: method. For example:&lt;br /&gt;
&lt;br /&gt;
  NSString *newString = @&amp;quot;This is a test string.&amp;quot;;&lt;br /&gt;
  char     *theString;&lt;br /&gt;
 &lt;br /&gt;
  theString = [newString cStringWithEncoding:[NSString defaultCStringEncoding]];&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
  theString = [newString UTF8String];&lt;br /&gt;
&lt;br /&gt;
Note that using [string cString] is deprecated!&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Template:CompactTOC2&amp;diff=2826</id>
		<title>Template:CompactTOC2</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Template:CompactTOC2&amp;diff=2826"/>
		<updated>2005-11-10T09:19:12Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| id=&amp;quot;toc&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! {{MediaWiki:Toc}}:&lt;br /&gt;
| [[#top|Top]] - [[#0-9|0-9]]  [[#A|A]] [[#B|B]] [[#C|C]] [[#D|D]] [[#E|E]] [[#F|F]] [[#G|G]] [[#H|H]] [[#I|I]] [[#J|J]] [[#K|K]] [[#L|L]] [[#M|M]] [[#N|N]] [[#O|O]] [[#P|P]] [[#Q|Q]] [[#R|R]] [[#S|S]] [[#T|T]] [[#U|U]] [[#V|V]] [[#W|W]] [[#X|X]] [[#Y|Y]] [[#Z|Z]] __NOTOC__&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=2825</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=2825"/>
		<updated>2005-11-10T09:18:53Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Please add mainly GNUstep related terms here.''&lt;br /&gt;
&lt;br /&gt;
{{compactTOC2}}&lt;br /&gt;
&lt;br /&gt;
== A ==&lt;br /&gt;
* Action Message - see [[Message#Action_Message|Message]]&lt;br /&gt;
* Anonymous Object - see [[Object#Anonymous_Object|Object]]&lt;br /&gt;
* [[AppKit|Application Kit]]&lt;br /&gt;
* [[Application]]&lt;br /&gt;
* Asynchronous Message - see [[Message#Asynchronous_Message|Message]]&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
* [[Back]]&lt;br /&gt;
* [[Bundle]]&lt;br /&gt;
* [[Bundle|Bundle, main]]&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
* [[Category]]&lt;br /&gt;
* [[Class]]&lt;br /&gt;
* Class Method - see [[Method#Class_Method|Method]]&lt;br /&gt;
* Class Object - see [[Object#Class_Object|Object]]&lt;br /&gt;
* [[Controller]]&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
* [[Delegate]]&lt;br /&gt;
* [[DPS]]&lt;br /&gt;
* [[Drag and Drop]]&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
* [[Event Loop]], ~main, ~modal&lt;br /&gt;
* Event Message - see [[Message#Event_Message|Message]]&lt;br /&gt;
&lt;br /&gt;
== F ==&lt;br /&gt;
* Factory Method - see [[Method#Factory_Method|Method]]&lt;br /&gt;
* Factory Object - see [[Object#Factory_Object|Object]]&lt;br /&gt;
* First responder - see [[Responder]]&lt;br /&gt;
* Formal Protocol - see [[Protocol#Formal_Protocol|Protocol]]&lt;br /&gt;
* [[Foundation]]&lt;br /&gt;
* [[Framework]]&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
* [[GUI]]&lt;br /&gt;
* [[GNUstep]]&lt;br /&gt;
* [[GDL]]&lt;br /&gt;
* [[GDL2]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
* [[HOM|High Order Messaging]]&lt;br /&gt;
&lt;br /&gt;
== I ==&lt;br /&gt;
* Informal Protocol - see [[Protocol#Informal_Protocol|Protocol]]&lt;br /&gt;
* Instance Method - see [[Method#Instance_Method|Method]]&lt;br /&gt;
* Instance Object - see [[Object#Instance_Object|Object]]&lt;br /&gt;
* [[Instance variable]]&lt;br /&gt;
* [[Interface]]&lt;br /&gt;
* [[Invocation]]&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
&lt;br /&gt;
== K ==&lt;br /&gt;
* [[Key Value Coding]]&lt;br /&gt;
* [[Key Value Observing]]&lt;br /&gt;
* Key window - see [[Window#Key_Window|Window]]&lt;br /&gt;
* KVC - see [[Key Value Coding]]&lt;br /&gt;
&lt;br /&gt;
== L ==&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
* Main Event Loop - see [[Event_Loop#Main_Event_Loop|Event Loop]]&lt;br /&gt;
* Main window - see [[Window#Main_Window|Window]]&lt;br /&gt;
* [[Makefile]]&lt;br /&gt;
* [[Message]], ~action, ~asynchronous, ~event, ~remote, ~synchronous&lt;br /&gt;
* [[Method]], ~class, ~factory, ~instance&lt;br /&gt;
* Modal Event Loop - see [[Event_Loop#Modal_Event_Loop|Event Loop]]&lt;br /&gt;
* [[MVC|Model View Controller (MVC)]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
* NeXTSTEP&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
* [[Object]], ~anonymous, ~class, ~factory, ~instance, ~remote&lt;br /&gt;
* [[Objective-C]]&lt;br /&gt;
* [[OpenStep]] - API standard&lt;br /&gt;
* [[OPENSTEP]] - operating system&lt;br /&gt;
* [[Outlet]]&lt;br /&gt;
&lt;br /&gt;
== P ==&lt;br /&gt;
* [[Protocol]], ~ formal, ~ informal&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
* Remote Message - see [[Message#Remote_Message|Message]]&lt;br /&gt;
* Remote Object - see [[Object#Remote_Object|Object]]&lt;br /&gt;
* [[Responder]], ~ chain, ~ first&lt;br /&gt;
* Responder, first - see [[Responder]]&lt;br /&gt;
* Responder chain - see [[Responder]]&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
* [[Scripting]]&lt;br /&gt;
* [[Service]]&lt;br /&gt;
* [[Application Services|Services, application]]&lt;br /&gt;
* [[Class#Subclass|Subclass]]&lt;br /&gt;
* [[Class#Superclass|Superclass]]&lt;br /&gt;
* Synchronous Message - see [[Message#Synchronous_Message|Message]]&lt;br /&gt;
&lt;br /&gt;
== T ==&lt;br /&gt;
* [[Target-Action]]&lt;br /&gt;
* [[Tool]]&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
&lt;br /&gt;
== V ==&lt;br /&gt;
* [[View]]&lt;br /&gt;
&lt;br /&gt;
== W ==&lt;br /&gt;
* [[Window]], ~ key, ~ main&lt;br /&gt;
&lt;br /&gt;
== X ==&lt;br /&gt;
&lt;br /&gt;
== Y ==&lt;br /&gt;
&lt;br /&gt;
== Z ==&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=2812</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=2812"/>
		<updated>2005-11-03T15:04:10Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: remove TOC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border:1px solid black; background-color:lavender; padding:10pt;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| '''GNUstep''' is a [[Portability|cross-platform]], object-oriented set of [[Frameworks|frameworks]] for desktop application [[Development tools|development]]. The set of frameworks, based on [[OpenStep]] (now [[Cocoa]]), enables developers to rapidly build sophisticated software by employing a large library of reusable software components. GNUstep is already used [[GNUstep in production|in production]] environments at several organizations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
== About GNUstep ==&lt;br /&gt;
&lt;br /&gt;
'''[http://www.gnustep.org GNUstep home page]'''&lt;br /&gt;
&lt;br /&gt;
[[Blogs]] concerning GNUstep&lt;br /&gt;
&lt;br /&gt;
[[Project development|Contact and Project development]]&lt;br /&gt;
&lt;br /&gt;
[[Architecture]]&lt;br /&gt;
&lt;br /&gt;
[[FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Application News ]]&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
[[GNUstep_Installation_Process|GNUstep Installation Process]]&lt;br /&gt;
&lt;br /&gt;
[[Internationalisation]]&lt;br /&gt;
&lt;br /&gt;
[[GNUstep environments]]&lt;br /&gt;
&lt;br /&gt;
[[Wish list]]&lt;br /&gt;
&lt;br /&gt;
[[Artworks]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
[[Development Subprojects]] ([[Themability]], [[Portability]], [[Package management]], [[I18n]], ...)&lt;br /&gt;
&lt;br /&gt;
[[Development tools]]&lt;br /&gt;
&lt;br /&gt;
[[Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Frameworks]]&lt;br /&gt;
&lt;br /&gt;
[[Installation process]]&lt;br /&gt;
&lt;br /&gt;
[[Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Programming topics]] and [[Snippets]]&lt;br /&gt;
&lt;br /&gt;
== [[Glossary]] ==&lt;br /&gt;
&lt;br /&gt;
== About Wiki ==&lt;br /&gt;
&lt;br /&gt;
[http://www.possibility.com/epowiki/Wiki.jsp?page=HowToOrganizeWiki How To Organize Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_development Wiki Dev Doc]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User'sGuide]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_FAQ FAQ]&lt;br /&gt;
&lt;br /&gt;
[http://wikipedia.sourceforge.net WikiPedia]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Scripting_support&amp;diff=1942</id>
		<title>Scripting support</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Scripting_support&amp;diff=1942"/>
		<updated>2005-09-17T11:36:22Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: /* Executing a script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
''Note: if something is not clear, add questions under the discussion tab or ask [[user:Stefan Urbanek|the author]] directly.''&lt;br /&gt;
&lt;br /&gt;
To make a tool or an application scriptable you need to prepare:&lt;br /&gt;
&lt;br /&gt;
* objects for scripting&lt;br /&gt;
* scripting context&lt;br /&gt;
* mechanism for script execution&lt;br /&gt;
&lt;br /&gt;
For applications, there are two possibilities, to make them scriptable. One is custom, that means, that you have to create scripting mechanisms by yourself. The other is automatic, where the developer only needs to add few lines of code and several menu items to his application.&lt;br /&gt;
&lt;br /&gt;
In brief, to add scripting you have to do:&lt;br /&gt;
&lt;br /&gt;
# set-up and provide a scripting context/environment ([[STContect]] or [[STEnvironment]])&lt;br /&gt;
# prepare a conversation with the environment ([[STConversation]])&lt;br /&gt;
# use the conversation to execute a script in a scripting language&lt;br /&gt;
&lt;br /&gt;
=== Objects to be used for scripting ===&lt;br /&gt;
&lt;br /&gt;
What do you offer to users? What should users customise? What should users talk to? As scripting deals with objects, you need to think about the objects you would like to make available to the user.&lt;br /&gt;
&lt;br /&gt;
It is up to developer to prepare a list of object names and ways of getting the objects. &lt;br /&gt;
&lt;br /&gt;
=== Scripting context or environment ===&lt;br /&gt;
&lt;br /&gt;
Like on our speech, we use references to object without any closer specification. How we do know what objects wer are refering to? From the conversation context. It is similar in the scripting language.&lt;br /&gt;
&lt;br /&gt;
A simple context contains a map (or a dictionary, if you like), of object names and actual objects. Related classes: [[STContext]] or [[STEnvironment]].&lt;br /&gt;
&lt;br /&gt;
== Creating scripting environment ==&lt;br /&gt;
&lt;br /&gt;
To prepare a scripting environment.&lt;br /&gt;
&lt;br /&gt;
 #import &amp;lt;StepTalk/STEnvironment.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 STEnvironment *environment;&lt;br /&gt;
 &lt;br /&gt;
 environment = [STEnvironment environmentWithDefaultDescription]&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 description = [STEnvironmentDescription descriptionWithName:name]&lt;br /&gt;
 environment = [STEnvironment environmentWithDescription:description];&lt;br /&gt;
&lt;br /&gt;
Environment serves besides other things also like namespace for objects and you have to register all objects that you would like to have accesible by name:&lt;br /&gt;
&lt;br /&gt;
 [environment setObject:object forName:@&amp;quot;ObjectName&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
like in:&lt;br /&gt;
&lt;br /&gt;
 [environment setObject:MyApplication forName:@&amp;quot;Application&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Executing a script ==&lt;br /&gt;
&lt;br /&gt;
One way to execute scripts is by using a 'conversation' objects. Conversations are made in a environment and using specified language. The language may change during scripting conversation.&lt;br /&gt;
&lt;br /&gt;
 #import &amp;lt;StepTalk/STConversation.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 conversation = [STConversation conversationWithEnvironment: environment language: @&amp;quot;Smalltalk&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
To get names of all available languages:&lt;br /&gt;
&lt;br /&gt;
 STLanguageManager *languageManager;&lt;br /&gt;
 NSArray *languages;&lt;br /&gt;
 NSString *defaultLanguage; &lt;br /&gt;
 &lt;br /&gt;
 languageManager = [STLanguageManager defaultManager];&lt;br /&gt;
 &lt;br /&gt;
 languages = [languageManager availableLanguages];&lt;br /&gt;
 defaultLanguage = [languageManager defaultLanguage];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now when you have opened a conversation in an environment you can run the script string. It is better to guard the execution with an exception handler:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 id        result;&lt;br /&gt;
&lt;br /&gt;
 NS_DURING&lt;br /&gt;
    [conversation interpretScript:string];&lt;br /&gt;
    result = [conversation result];&lt;br /&gt;
 NS_HANDLER&lt;br /&gt;
    /* handle an exception */&lt;br /&gt;
 NS_ENDHANDLER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Note: the result handling will change in future StepTalk releases. The result will be no longer be returned by the direct execution message, but instead will need to be requested separately. There are several reasons for this change, including better handling of remote scripting environments (long distance conversations).''&lt;br /&gt;
&lt;br /&gt;
To change a language of script conversation, just use:&lt;br /&gt;
&lt;br /&gt;
  [conversation setLanguage:@&amp;quot;ObjectiveC&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Automated scripting in applications ==&lt;br /&gt;
&lt;br /&gt;
StepTalk provideas a bundle that allows users to 'script' their applications automatically. With this bundle, it instantly allows users of the application to:&lt;br /&gt;
&lt;br /&gt;
* extend the behaviour of application by adding their own functionality&lt;br /&gt;
* automate tasks in the application&lt;br /&gt;
* create a batch task&lt;br /&gt;
&lt;br /&gt;
The Application Scripting bundle is installed together with StepTalk. ''Note: the bundle needs a refresh, as it is quite out-dated.''&lt;br /&gt;
&lt;br /&gt;
=== Creating a scriptable application ===&lt;br /&gt;
&lt;br /&gt;
As usual, first think of objects you want to provide for scripting. Then create ''ScriptingInfo.plist'' file as described above. For example a file for a Mail application would be:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     STClasses =&lt;br /&gt;
     (&lt;br /&gt;
         MessageComposition,&lt;br /&gt;
         InternetAddress&lt;br /&gt;
     );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Use the [[Project Center]] application to include the file or put this line to your makefile:&lt;br /&gt;
&lt;br /&gt;
 MyApp_RESOURCE_FILES = ScriptingInfo.plist&lt;br /&gt;
&lt;br /&gt;
Then include the bundle loading code. Copy files ''STScriptingSupport.h'' and ''STScriptingSupport.m'' from '''ApplicationScripting/Support''' directory to your project and add them to your project or add the following line to your makefile:&lt;br /&gt;
&lt;br /&gt;
    MyApp_OBJC_FILES += STScriptingSupport.m&lt;br /&gt;
&lt;br /&gt;
Funally, make scripting available to the user:&lt;br /&gt;
&lt;br /&gt;
    #import &amp;quot;STScriptingSupport.h&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
        if([NSApp isScriptingSupported])&lt;br /&gt;
        {&lt;br /&gt;
            [menu addItemWithTitle: @&amp;quot;Scripting&amp;quot;&lt;br /&gt;
                            action: NULL&lt;br /&gt;
                     keyEquivalent: @&amp;quot;&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
            [menu setSubmenu: [NSApp scriptingMenu]&lt;br /&gt;
                     forItem: [menu itemWithTitle:@&amp;quot;Scripting&amp;quot;]];&lt;br /&gt;
        }&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
''FIXME: what is needed to do that with [[Gorm]] in a simple way?''&lt;br /&gt;
&lt;br /&gt;
=== The scripts ===&lt;br /&gt;
&lt;br /&gt;
See: [[Script management]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Scripting_support&amp;diff=1136</id>
		<title>Scripting support</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Scripting_support&amp;diff=1136"/>
		<updated>2005-09-17T11:31:27Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: use language manager&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
''Note: if something is not clear, add questions under the discussion tab or ask [[user:Stefan Urbanek|the author]] directly.''&lt;br /&gt;
&lt;br /&gt;
To make a tool or an application scriptable you need to prepare:&lt;br /&gt;
&lt;br /&gt;
* objects for scripting&lt;br /&gt;
* scripting context&lt;br /&gt;
* mechanism for script execution&lt;br /&gt;
&lt;br /&gt;
For applications, there are two possibilities, to make them scriptable. One is custom, that means, that you have to create scripting mechanisms by yourself. The other is automatic, where the developer only needs to add few lines of code and several menu items to his application.&lt;br /&gt;
&lt;br /&gt;
In brief, to add scripting you have to do:&lt;br /&gt;
&lt;br /&gt;
# set-up and provide a scripting context/environment ([[STContect]] or [[STEnvironment]])&lt;br /&gt;
# prepare a conversation with the environment ([[STConversation]])&lt;br /&gt;
# use the conversation to execute a script in a scripting language&lt;br /&gt;
&lt;br /&gt;
=== Objects to be used for scripting ===&lt;br /&gt;
&lt;br /&gt;
What do you offer to users? What should users customise? What should users talk to? As scripting deals with objects, you need to think about the objects you would like to make available to the user.&lt;br /&gt;
&lt;br /&gt;
It is up to developer to prepare a list of object names and ways of getting the objects. &lt;br /&gt;
&lt;br /&gt;
=== Scripting context or environment ===&lt;br /&gt;
&lt;br /&gt;
Like on our speech, we use references to object without any closer specification. How we do know what objects wer are refering to? From the conversation context. It is similar in the scripting language.&lt;br /&gt;
&lt;br /&gt;
A simple context contains a map (or a dictionary, if you like), of object names and actual objects. Related classes: [[STContext]] or [[STEnvironment]].&lt;br /&gt;
&lt;br /&gt;
== Creating scripting environment ==&lt;br /&gt;
&lt;br /&gt;
To prepare a scripting environment.&lt;br /&gt;
&lt;br /&gt;
 #import &amp;lt;StepTalk/STEnvironment.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 STEnvironment *environment;&lt;br /&gt;
 &lt;br /&gt;
 environment = [STEnvironment environmentWithDefaultDescription]&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 description = [STEnvironmentDescription descriptionWithName:name]&lt;br /&gt;
 environment = [STEnvironment environmentWithDescription:description];&lt;br /&gt;
&lt;br /&gt;
Environment serves besides other things also like namespace for objects and you have to register all objects that you would like to have accesible by name:&lt;br /&gt;
&lt;br /&gt;
 [environment setObject:object forName:@&amp;quot;ObjectName&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
like in:&lt;br /&gt;
&lt;br /&gt;
 [environment setObject:MyApplication forName:@&amp;quot;Application&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Executing a script ==&lt;br /&gt;
&lt;br /&gt;
One way to execute scripts is by using a 'conversation' objects. Conversations are made in a environment and using specified language. The language may change during scripting conversation.&lt;br /&gt;
&lt;br /&gt;
 #import &amp;lt;StepTalk/STConversation.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 conversation = [STConversation conversationWithEnvironment: environment language: @&amp;quot;Smalltalk&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
To get names of all available languages:&lt;br /&gt;
&lt;br /&gt;
 STLanguageManager *languageManager;&lt;br /&gt;
 NSArray *languages;&lt;br /&gt;
 NSString *defaultLanguage; &lt;br /&gt;
 &lt;br /&gt;
 languageManager = [STLanguageManager defaultManager];&lt;br /&gt;
 &lt;br /&gt;
 languages = [languageManager availableLanguages];&lt;br /&gt;
 defaultLanguage = [languageManager defaultLanguage];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now when you have opened a conversation in an environment you can run the script string. It is better to guard the execution with an exception handler:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 id        result;&lt;br /&gt;
 &lt;br /&gt;
 NS_DURING&lt;br /&gt;
     result = [conversation runScriptInString:string];&lt;br /&gt;
 NS_HANDLER&lt;br /&gt;
     /* handle an exception */&lt;br /&gt;
 NS_ENDHANDLER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Note: the result handling will change in future StepTalk releases. The result will be no longer be returned by the direct execution message, but instead will need to be requested separately. There are several reasons for this change, including better handling of remote scripting environments (long distance conversations).''&lt;br /&gt;
&lt;br /&gt;
To change a language of script conversation, just use:&lt;br /&gt;
&lt;br /&gt;
  [conversation setLanguage:@&amp;quot;ObjectiveC&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Automated scripting in applications ==&lt;br /&gt;
&lt;br /&gt;
StepTalk provideas a bundle that allows users to 'script' their applications automatically. With this bundle, it instantly allows users of the application to:&lt;br /&gt;
&lt;br /&gt;
* extend the behaviour of application by adding their own functionality&lt;br /&gt;
* automate tasks in the application&lt;br /&gt;
* create a batch task&lt;br /&gt;
&lt;br /&gt;
The Application Scripting bundle is installed together with StepTalk. ''Note: the bundle needs a refresh, as it is quite out-dated.''&lt;br /&gt;
&lt;br /&gt;
=== Creating a scriptable application ===&lt;br /&gt;
&lt;br /&gt;
As usual, first think of objects you want to provide for scripting. Then create ''ScriptingInfo.plist'' file as described above. For example a file for a Mail application would be:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     STClasses =&lt;br /&gt;
     (&lt;br /&gt;
         MessageComposition,&lt;br /&gt;
         InternetAddress&lt;br /&gt;
     );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Use the [[Project Center]] application to include the file or put this line to your makefile:&lt;br /&gt;
&lt;br /&gt;
 MyApp_RESOURCE_FILES = ScriptingInfo.plist&lt;br /&gt;
&lt;br /&gt;
Then include the bundle loading code. Copy files ''STScriptingSupport.h'' and ''STScriptingSupport.m'' from '''ApplicationScripting/Support''' directory to your project and add them to your project or add the following line to your makefile:&lt;br /&gt;
&lt;br /&gt;
    MyApp_OBJC_FILES += STScriptingSupport.m&lt;br /&gt;
&lt;br /&gt;
Funally, make scripting available to the user:&lt;br /&gt;
&lt;br /&gt;
    #import &amp;quot;STScriptingSupport.h&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
        if([NSApp isScriptingSupported])&lt;br /&gt;
        {&lt;br /&gt;
            [menu addItemWithTitle: @&amp;quot;Scripting&amp;quot;&lt;br /&gt;
                            action: NULL&lt;br /&gt;
                     keyEquivalent: @&amp;quot;&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
            [menu setSubmenu: [NSApp scriptingMenu]&lt;br /&gt;
                     forItem: [menu itemWithTitle:@&amp;quot;Scripting&amp;quot;]];&lt;br /&gt;
        }&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
''FIXME: what is needed to do that with [[Gorm]] in a simple way?''&lt;br /&gt;
&lt;br /&gt;
=== The scripts ===&lt;br /&gt;
&lt;br /&gt;
See: [[Script management]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_environments&amp;diff=1934</id>
		<title>GNUstep environments</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_environments&amp;diff=1934"/>
		<updated>2005-09-08T19:57:11Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: despam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://dromasoftware.com/etoile/mediawiki/index.php?title=Main_Page Étoilé]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/backbone/ Backbone]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Writing_portable_code&amp;diff=1986</id>
		<title>Writing portable code</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Writing_portable_code&amp;diff=1986"/>
		<updated>2005-09-08T19:56:59Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: despam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GNUstep opens up some fairly interesting opportunities to target a number of platforms with the same source code, for example porting Mac OS X Cocoa applications to Linux, the BSDs, other Unices and (ultimately) Windows without significant re-engineering effort or degraded end-user functionality. &lt;br /&gt;
&lt;br /&gt;
Some portability gotchas are listed below (please update when you run into a new one!):&lt;br /&gt;
&lt;br /&gt;
== Porting Applications ==&lt;br /&gt;
&lt;br /&gt;
You can generally convert NIB bundles from NeXTSTEP and OPENSTEP to&lt;br /&gt;
GNUstep using the nib2gmodel tool. &lt;br /&gt;
&lt;br /&gt;
* nib2gmodel Something.nib Something.gmodel&lt;br /&gt;
* Open the gmodel file in Gorm on GNUstep and save it as gorm&lt;br /&gt;
&lt;br /&gt;
The nib2gmodel step must be done on either an OPENSTEP or Cocoa platform.&lt;br /&gt;
&lt;br /&gt;
=== Porting from NeXTSTEP (NX*) to GNUstep ===&lt;br /&gt;
&lt;br /&gt;
For this you should have access to an old OPENSTEP installation, or find a friend who has one, otherwise you're simply better off just rewriting the application from scratch.&lt;br /&gt;
&lt;br /&gt;
There are some scripts which can be used to convert an application from NeXTSTEP to OPENSTEP located in:&lt;br /&gt;
&lt;br /&gt;
   /NextDeveloper/OpenStepConversion/ConversionScripts&lt;br /&gt;
&lt;br /&gt;
They use a scripting language called &amp;quot;tops&amp;quot;.  I haven't been able, as yet, to locate a version of tops for Linux or any other operating system other than Mac OS X or OPENSTEP/Mach or NeXTSTEP.&lt;br /&gt;
&lt;br /&gt;
There are a few conversion applications which basically just use the tops scripts to do the conversion.  They are actually two versions of the same program, but the second one doesn't run on NeXT, so here's both.  These are:&lt;br /&gt;
&lt;br /&gt;
[ftp://next-ftp.peak.org/openstep/mach/apps/devtools/Conversion.0.5.NI.tar.gz]&lt;br /&gt;
[ftp://next-ftp.peak.org/openstep/mach/apps/devtools/ConversionII.1.0.I.tar.gz]&lt;br /&gt;
&lt;br /&gt;
You should be able to point it at the project directory you wish to convert and start the conversion.  The GUI is very straightforward.&lt;br /&gt;
&lt;br /&gt;
You can also run the tops scripts on a Mac simply by saying:&lt;br /&gt;
&lt;br /&gt;
   tops -verbose -scriptfile {scriptfilename} {filestoconvert}&lt;br /&gt;
&lt;br /&gt;
All of the files are converted in place.  You must run all of the tops scripts in the ConversionScripts directory against the application code.  It is considerably simply to use the existing applications.  Unfortunately these scripts do not exist on Mac OS X, otherwise porting the Conversion application might be useful.&lt;br /&gt;
&lt;br /&gt;
When you start the scripts, if you're running them on black hardware you should go get a cup of coffe and watch a movie with your wife or go code something else for a while.   The conversion will take a good long while on an older machine.   I haven't timed it on the Mac, though.  Once this is done, there is still a long way to go.  Read on.&lt;br /&gt;
&lt;br /&gt;
OPENSTEP4.2/Mach had a class called NSCStringText.  This class was primarily for apps which were converted from NeXTSTEP to use as a stop-gap measure in OpenStep.  This is one of the main reasons why it isn't in GNUstep.  You will need to make sure that any classes modified by the scripts to use NSCStringText will use NSText and it's related classes as appropriate.&lt;br /&gt;
&lt;br /&gt;
OPENSTEP4.2/Mac also had some other extensions on the OpenStep standard such as NXStreams.  You will also need to convert any and all instances of NXStream to use NSData instead in order to make your app work with GNUstep.&lt;br /&gt;
&lt;br /&gt;
If your app is fairly small, you shouldn't be in for a great shock, but if your app is heavily reliant on the old Text object from NeXTSTEP, you have a lot of work ahead.  Other gaps which the scripts might leave are problems with NSUserDefaults which it can't fix on it's own.&lt;br /&gt;
&lt;br /&gt;
=== Porting from OPENSTEP (NS*) to GNUstep ===&lt;br /&gt;
&lt;br /&gt;
See the section on Porting from Cocoa.  Basically, porting from OPENSTEP is the same with the exception of the &amp;quot;Don'ts&amp;quot; (as those are not available on OpenStep) and the &amp;quot;Stubling Blocks&amp;quot; sections.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise noted here, follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
=== Porting from GNUstep to Cocoa ===&lt;br /&gt;
&lt;br /&gt;
This should be an easy transition since GNUstep implements most of Cocoa, except for the very Apple specific classes such as the scripting extensions.&lt;br /&gt;
&lt;br /&gt;
Since Gorm does not yet save .nib files, you will need to create the interfaces using IB.   Also there is a gorm reading/parsing framework for Cocoa in the works as well, so please stay tuned.&lt;br /&gt;
&lt;br /&gt;
Will will need to:&lt;br /&gt;
&lt;br /&gt;
* Make a Project Builder project for your app or&lt;br /&gt;
* an Xcode project for your app&lt;br /&gt;
&lt;br /&gt;
Do the following:&lt;br /&gt;
&lt;br /&gt;
* Open Xcode.&lt;br /&gt;
* Choose Application (if your project is an application)&lt;br /&gt;
* Enter the name and location you wish the Project to reside at&lt;br /&gt;
* Copy your files from your GNUstep application into the new project&lt;br /&gt;
* Using the &amp;quot;Add Existing Files&amp;quot; option to add these file to your project.&lt;br /&gt;
&lt;br /&gt;
You should preserve your original directory structure if you want to distribute one package for both GNUstep and Cocoa.&lt;br /&gt;
&lt;br /&gt;
=== Porting from Cocoa to GNUstep ===&lt;br /&gt;
&lt;br /&gt;
Porting from Cocoa to GNUstep has different aspects.&lt;br /&gt;
&lt;br /&gt;
First there is the compatibility of the basic Foundation Kit and Application Kit. We support a lot of classes, but not all of them and the same is true for specific methods, Specifically newly introduced classes and methods may still be missing as GNUstep started out aiming at OpenStep compatibility.&lt;br /&gt;
&lt;br /&gt;
Second you have all the additional frameworks and libraries programmers on Mac OS X take for granted, for some of them free replacements exists, for most they are still missing.&lt;br /&gt;
&lt;br /&gt;
Mac OS X developers should try and avoid CoreFoundation as this will complicate your dependency situation on non-Mac hosts, even if that part of CoreFoundation has actually been ported.&lt;br /&gt;
&lt;br /&gt;
GNUstep Base and the FoundationKit offer many parts of the CoreFoundation functionality in a natural [[Objective-C]] manner.&lt;br /&gt;
&lt;br /&gt;
==== The porting itself ====&lt;br /&gt;
&lt;br /&gt;
short overview:&lt;br /&gt;
* write a makefile &lt;br /&gt;
* convert your NIB files to gmodel&lt;br /&gt;
* provide an Info.plist.&lt;br /&gt;
&lt;br /&gt;
detailed instructions:&lt;br /&gt;
# you need to write a new GNUstep make file for the project (very easy, still there is currently no automatic way to do so) &lt;br /&gt;
# you need to convert the NIB files to GNUstep format. At some point in time GORM will be able to read NIB files, but currently you need to use the gmodel intermediate format for this and for this the above mentioned tools are used.&lt;br /&gt;
&lt;br /&gt;
==== Don'ts ====&lt;br /&gt;
&lt;br /&gt;
Don't use anything we do not provide:&lt;br /&gt;
&lt;br /&gt;
* don't use CoreFoundation&lt;br /&gt;
* don't use KeyChain&lt;br /&gt;
* don't use Carbon&lt;br /&gt;
* don't use Quartz&lt;br /&gt;
* don't use QuickTime&lt;br /&gt;
&lt;br /&gt;
gcc mainline currently doesn't support ObjC++ although it is already in the works somewhat (expected for gcc 4.1). that means:&lt;br /&gt;
&lt;br /&gt;
* don't use WebKit (currently)&lt;br /&gt;
&lt;br /&gt;
gcc mainline also does not support altivec, this is an apple specific extentsion, that means:&lt;br /&gt;
* don't use altivec features or the vecLib.framework (a collection of functions for vector manipulation).&lt;br /&gt;
&lt;br /&gt;
== Stumbling Blocks ==&lt;br /&gt;
&lt;br /&gt;
* Apple's Cocoa.h&lt;br /&gt;
&lt;br /&gt;
it is there to enable pre-compiled headers and speed up compile time thusly. Anyway, it contains just two lines:&lt;br /&gt;
&lt;br /&gt;
 #import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;
 #import &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So you can easily work around this by providing your own or replace your include of &amp;lt;Cocoa/Cocoa.h&amp;gt; with just the above, which will also work on OS-X.&lt;br /&gt;
&lt;br /&gt;
* When you need to distinguish between Cocoa and GNUstep, you may use the following&lt;br /&gt;
&lt;br /&gt;
 #ifdef GNUSTEP&lt;br /&gt;
     ''/* GNUstep code goes here ... */''&lt;br /&gt;
 #else&lt;br /&gt;
     ''/* OS-X Cocoa native code goes here ... */''&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Porting the .nib files ===&lt;br /&gt;
&lt;br /&gt;
First get [http://freshmeat.net/projects/nib2gmodel/ nib2gmodel], follow the included instructions to build and install it.  Once that's done you're ready to begin:&lt;br /&gt;
&lt;br /&gt;
* Run the nib2gmodel program on your nib like so:&lt;br /&gt;
&lt;br /&gt;
   nib2gmodel mygui.nib mygui.gmodel&lt;br /&gt;
&lt;br /&gt;
This should create the .gmodel as a plist.   I recommend that you convert the gmodel to a &amp;quot;normal&amp;quot; plist instead of an XML plist.  You can do that by doing this on OS X:&lt;br /&gt;
&lt;br /&gt;
   pl &amp;lt; mygui.gmodel -output mygui.ser&lt;br /&gt;
   pl &amp;gt; mygui.gmodel -input mygui.ser&lt;br /&gt;
   rm mygui.ser&lt;br /&gt;
&lt;br /&gt;
* Now you can either use the gmodel as it is, or you can convert it to a .gorm file.&lt;br /&gt;
&lt;br /&gt;
==== Gmodel to .gorm conversion ====&lt;br /&gt;
&lt;br /&gt;
NOTE: Conversion from gmodel to .gorm is experimental and will probably remain so for a while.   It currently works in the majority of cases, but there are still improvements which need to be made.&lt;br /&gt;
&lt;br /&gt;
Conversion to a .gorm file is relatively straightforward:&lt;br /&gt;
&lt;br /&gt;
* Start Gorm.app.&lt;br /&gt;
* Choose Gorm-&amp;gt;Document-&amp;gt;Open and find the gmodel you wish to load.&lt;br /&gt;
* Gorm will prompt you to either define the superclass for classes it doesn't know about or to parse the headers. &lt;br /&gt;
&lt;br /&gt;
After you've defined all of the unknown classes, Gorm should complete the conversion.  Once this is done you should save the result to make sure you don't loose your work.&lt;br /&gt;
&lt;br /&gt;
''' ''FIXME: add following:'' '''&lt;br /&gt;
* how to convert Xcode project to GNUstep project (creating a GNUstep [http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/index.html Makefile] or [[ProjectCenter]])&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
=== Do not rely on tools available in development environment ===&lt;br /&gt;
&lt;br /&gt;
All the world is not Linux or FreeBSD or Windows. System constants may be different on different platforms. Paths to command-line tools, the parameters they accept and locations of temporary directories may be different to what you are used to on your platform.&lt;br /&gt;
&lt;br /&gt;
* [[Foundation|GNUstep Base]] and the [[Foundation|FoundationKit]] offer some of this functionality &amp;quot;for free&amp;quot;.&lt;br /&gt;
* Try not to hard code paths and so on into your code, use macros (not recommended), or even better an abstraction mechanism.&lt;br /&gt;
* Avoid hard-coding system constants, or platform-specific ones where Posix or commonly-accepted ones exist (and we're not talking about glibc here :-)&lt;br /&gt;
* Try to avoid advanced features of the linker, such as weak symbols, which may not be present on non-ELF systems.  While this will work perfectly on most systems, it is not portable to all systems, most notably Windows.&lt;br /&gt;
&lt;br /&gt;
[[Category:Project procedures]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Help:Contents&amp;diff=2022</id>
		<title>Help:Contents</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Help:Contents&amp;diff=2022"/>
		<updated>2005-09-08T19:56:38Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: despam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=1943</id>
		<title>StepTalk</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=1943"/>
		<updated>2005-09-06T07:43:59Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;StepTalk is the official GNUstep [[Scripting|scripting]] framework. In fact, StepTalk is more than a scripting framework with an illusion of a single objective environment between objects of scriptable servers or applications. StepTalk, when combined with the dynamism that the Objective-C language provides, goes way beyond mere scripting. It is language independent - it uses [[Scripting language bundle|languages as separate bundles]]. &lt;br /&gt;
&lt;br /&gt;
Author: [[User:Stefan Urbanek|Stefan Urbanek]] - see '''[http://steptalk.blogspot.com/ StepTalk blog]'''.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Goal of StepTalk is to provide an environment for gluing applications together and to provide a framework for communication between users and objects in the applications. Other major goals are:&lt;br /&gt;
&lt;br /&gt;
* simple and quick extensions of applications or tools&lt;br /&gt;
* batch-processing of objects in applications or tools&lt;br /&gt;
* fast prototyping of applications or new application features (play and tune a concept &amp;quot;online&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
It does not mean that the framework should not be used for whole application development, however it was never designed for that purpose. StepTalk application development is a form of very fast prototyping of an application.&lt;br /&gt;
&lt;br /&gt;
The StepTalk package features a framework, set of tools, [[Scripting language bundle|language bundle]], modules and object finders. '''The framework''' provides an application interface for developers to make their products scriptable. For more information about the tools, see [[StepTalk tools]]. Concerning the scripting language, the StepTalk is a '''language independent framework''' It can be extended via &amp;quot;language bundles&amp;quot; to provide and support other scripting languages. An experimental language bundle for Guile is included in the sources package. &lt;br /&gt;
&lt;br /&gt;
The default scripting language in StepTalk is [[Smalltalk]]. This is because Smalltalk is a very simple language and it is easy to learn. There are just a few basic principles that the user has to know to be able to use the language and it is close to the natural language.  [[Smalltalk]] uses a similar approach to that of [[Objective-C]], the language used in GNUstep itself. &lt;br /&gt;
&lt;br /&gt;
'''Object Finders''' are an illusion of single objective environment. Name of an object may me known, but the object itself not. The object may be an application or it may reside on other host. Object Finder is an object that will search for object by specified name. &lt;br /&gt;
&lt;br /&gt;
* '''Distributed Object Finder''' - This finder will try to look for a registered named object. It is possible to specify list of possible hosts where the object may reside and to specify a program that will provide the object if it cannot be found. &lt;br /&gt;
* '''Application Finder''' - Looks for a locally installed application and tries to connect to it. If the application is not running, it will try to launch it.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnustep.org/pub/gnustep/libs/ Source]&lt;br /&gt;
* [http://packages.debian.org/cgi-bin/search_packages.pl?keywords=steptalk&amp;amp;searchon=sourcenames&amp;amp;version=all&amp;amp;release=all&amp;amp;exact=1 Debian packages]&lt;br /&gt;
&lt;br /&gt;
* [http://savannah.gnu.org/cgi-bin/viewcvs/gnustep/gnustep/dev-libs/StepTalk/ Browse CVS]&lt;br /&gt;
&lt;br /&gt;
Get it by CVS:&lt;br /&gt;
&lt;br /&gt;
 export CVS_RSH=&amp;quot;ssh&amp;quot;&lt;br /&gt;
 cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnustep co StepTalk&lt;br /&gt;
&lt;br /&gt;
== The Framework ==&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
* [[STActor]]&lt;br /&gt;
* [[STContext]]&lt;br /&gt;
* [[STConversation]]&lt;br /&gt;
* [[STDistantConversation]]&lt;br /&gt;
* [[STEnvironment]]&lt;br /&gt;
* [[STLanguageManager]]&lt;br /&gt;
* [[STScriptManager]]&lt;br /&gt;
* [[STScriptObject]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
For more information about what should be done in StepTalk see [[StepTalk TODO]].&lt;br /&gt;
&lt;br /&gt;
== Projects using StepTalk ==&lt;br /&gt;
&lt;br /&gt;
[http://www.moltalk.org/ MolTalk] - a computational environment for doing Structural Bioinformatics. It interprets PDB formatted files and creates an object representation of the structure-chain-residue-atom hierarchy. Through the use of MolTalk, the PDB suddenly becomes an object-oriented database. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
See also: [[Scripting]], [http://www.smalltalk.org/ Smalltalk.org]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]] [[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Help:Contents&amp;diff=1078</id>
		<title>Help:Contents</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Help:Contents&amp;diff=1078"/>
		<updated>2005-09-06T06:41:37Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: despam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Release_Checklist&amp;diff=1062</id>
		<title>Release Checklist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Release_Checklist&amp;diff=1062"/>
		<updated>2005-09-06T06:41:23Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: despam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This checklist details each step which needs to be taken in order to prepare a new version of apps and libs in the GNUstep repository for release.&lt;br /&gt;
&lt;br /&gt;
''Special thanks to Larry Coleman, who sent me an e-mail asking what the release criteria was, so he could do his first release of RIGS (he's the new maintainer). He gave me the final impetus to type up this document which I'd been intending to do for a long time.''&lt;br /&gt;
&lt;br /&gt;
== Quick procedure ==&lt;br /&gt;
&lt;br /&gt;
# Make sure it compiles against the latest ''releases'' of GNUstep-core, not just CVS&lt;br /&gt;
# Avoid version inconsistency - use single place for storing the version number and get it from there.&lt;br /&gt;
# Make the tarball with version number in the name ''ProjectName-1.0.0.tar.gz''&lt;br /&gt;
# Send an e-mail to '''both''': info-gnustep@gnu.org and gnustep-announce@gnu.org, optionaly you can send it to the gnustep-discuss@gnu.org&lt;br /&gt;
&lt;br /&gt;
== Detailed procedure ==&lt;br /&gt;
&lt;br /&gt;
1) '''Make sure it compiles against the latest ''RELEASES'' of GNUstep-core''', not just CVS...this is a common problem and it's simply embarassing. If it does not, delay the release until the next GNUstep release that includes the fixes you need. If it is critical that you release a new version, you can always appeal to the release manager for a new release via the gnustep-dev@gnu.org mailing list. You can build a separate $PREFIX/GNUstep-Release dir or something which you can then execute the GNUstep.sh file from this tree, which will make it use those release libs without trouncing on your current (perhaps CVS) GNUstep build.&lt;br /&gt;
&lt;br /&gt;
2) '''Use single place for storing the version number''' and get it from there. Be it a header file, or defined macro in a makefile.&lt;br /&gt;
&lt;br /&gt;
it's very embarressing when you forget to change it somewhere, as has recently happened with the ProjectCenter 0.4.2 release (which was still marked as 0.4.1 in numerous places, including the info panel and framework version :[ )&lt;br /&gt;
&lt;br /&gt;
Original suggestion: ''grep for the version number in the source tree.... and change it everywhere...''&lt;br /&gt;
&lt;br /&gt;
3) Once you're actually ready for a release, '''make the tarball''', RIGS-x.y.z, and upload it to ftp.gnustep.org/pub/incoming. You can do this anonymously.&lt;br /&gt;
&lt;br /&gt;
4) Once the file is uploaded, '''send an e-mail to webmasters@gnustep.org''', (which I am subscribed to, as well as others) and simply request that (A) the file be moved from the incoming directory on the FTP site to /pub/GNUstep/libs and (B) that we add a one-line news item to the GNUstep.org front page with a direct link to the latest tarball on the FTP site, and, OPTIONALLY, (C) add info to http://www.gnustep.org/experience/RIGS.html with what's new in the current version, etc.&lt;br /&gt;
&lt;br /&gt;
5) Once the file has been moved to its permanent FTP directory (but you don't necessarily have to wait for the website to be updated to reflect this), '''send an e-mail to BOTH info-gnustep@gnu.org AND gnustep-announce@gnu.org''' with &amp;quot;ANN: RIGS version x.y.z etc et&amp;quot; in the subject, with a standard release-formatted e-mail (for a decent and recent ANN: example, see http://lists.gnu.org/archive/html/info-gnustep/2005-02/msg00000.html ) and be sure to include notable new changes. It's important to be informative about what has changed and why it's changed. Try to be as succinct as you can. (unlike /this/ e-mail ;-)&lt;br /&gt;
&lt;br /&gt;
6) '''OPTIONAL:''' If you have CVS commit privelages to GNUstep, you also have the choice of updating GNUstep.org yourself via CVS. To check out the entire CVS GNUstep website, run:&lt;br /&gt;
&lt;br /&gt;
CVS_RSH=ssh cvs -z3 -d &amp;lt;username&amp;gt;@savannah.gnu.org:/webcvs/gnustep co gnustep&lt;br /&gt;
&lt;br /&gt;
you can choose to just check out the main index.html page if you'd like. There are a couple of large (~17MB) files on the GNUstep.org website which might take a while to download depending on the speed of your Internet connection.&lt;br /&gt;
&lt;br /&gt;
Don't feel obligated to do step 6. It's actually not going to buy us much until we have a way set up where any gnustep person with CVS commit can post stuff anywhere on the GNUstep ftp site, but until then you will have to email webmasters@gnustep.org to ask us to move stuff from incoming/ to libs/ on the FTP site itself. We are of course more than happy to update the website for you, and since there are webmasters in both europe and the USA, it usually happens fairly quickly. If you do elect to update the website yourself, please be sure you know what you're doing. GNUstep.org pulls from CVS checkouts at the bottom of every hour, so be sure to check that the page updated properly the next time it goes live. In a worst-cast scenario, you might have bogus stuff on the main page for one hour. I do this accidentally from time to time.&lt;br /&gt;
&lt;br /&gt;
[[Category:Project procedures]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Blogs&amp;diff=1042</id>
		<title>Blogs</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Blogs&amp;diff=1042"/>
		<updated>2005-09-05T10:52:11Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is the list of bolgs concerning GNUstep and blogs of GNUstep people:&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Blog&lt;br /&gt;
! Description&lt;br /&gt;
! Owner (#gnustep IRC nick)&lt;br /&gt;
|+&lt;br /&gt;
| [http://camaelon.blogspot.com/ Random thoughts of a Camaelon]&lt;br /&gt;
| programming stuff, free software and gnustep things&lt;br /&gt;
| Nicolas Roard (rIO)&lt;br /&gt;
|+&lt;br /&gt;
| [http://heronsperch.blogspot.com/ Heron's Perch]&lt;br /&gt;
| Mostly Apple, GNUstep and stuff about my personally&lt;br /&gt;
| Gregory Casamento (bheron)&lt;br /&gt;
|+&lt;br /&gt;
| [http://steptalk.blogspot.com/ StepTalk]&lt;br /&gt;
| Talks about software, programming and GNUstep&lt;br /&gt;
| Stefan Urbanek (Stiivi)&lt;br /&gt;
|+&lt;br /&gt;
| [http://stefankst.blogspot.com/ Think Blog]&lt;br /&gt;
| ''(none)''&lt;br /&gt;
| Stefan Kleine Stegemann (stefankst)&lt;br /&gt;
|+&lt;br /&gt;
| [http://gnustep.blogspot.com/ GNUstep News]&lt;br /&gt;
| Not an Official GNUstep News Site&lt;br /&gt;
| ''(unknown)''&lt;br /&gt;
|+&lt;br /&gt;
| [http://multixden.blogspot.com/ The Art is Long]&lt;br /&gt;
| The Den of Multix (aka grey gandalf)&lt;br /&gt;
| Riccardo  (grey_gandalf)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Template:Prettytable&amp;diff=2009</id>
		<title>Template:Prettytable</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Template:Prettytable&amp;diff=2009"/>
		<updated>2005-09-05T10:51:38Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Blogs&amp;diff=1040</id>
		<title>Blogs</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Blogs&amp;diff=1040"/>
		<updated>2005-09-05T10:50:52Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is the list of bolgs concerning GNUstep and blogs of GNUstep people:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! Blog&lt;br /&gt;
! Description&lt;br /&gt;
! Owner (#gnustep IRC nick)&lt;br /&gt;
|+&lt;br /&gt;
| [http://camaelon.blogspot.com/ Random thoughts of a Camaelon]&lt;br /&gt;
| programming stuff, free software and gnustep things&lt;br /&gt;
| Nicolas Roard (rIO)&lt;br /&gt;
|+&lt;br /&gt;
| [http://heronsperch.blogspot.com/ Heron's Perch]&lt;br /&gt;
| Mostly Apple, GNUstep and stuff about my personally&lt;br /&gt;
| Gregory Casamento (bheron)&lt;br /&gt;
|+&lt;br /&gt;
| [http://steptalk.blogspot.com/ StepTalk]&lt;br /&gt;
| Talks about software, programming and GNUstep&lt;br /&gt;
| Stefan Urbanek (Stiivi)&lt;br /&gt;
|+&lt;br /&gt;
| [http://stefankst.blogspot.com/ Think Blog]&lt;br /&gt;
| ''(none)''&lt;br /&gt;
| Stefan Kleine Stegemann (stefankst)&lt;br /&gt;
|+&lt;br /&gt;
| [http://gnustep.blogspot.com/ GNUstep News]&lt;br /&gt;
| Not an Official GNUstep News Site&lt;br /&gt;
| ''(unknown)''&lt;br /&gt;
|+&lt;br /&gt;
| [http://multixden.blogspot.com/ The Art is Long]&lt;br /&gt;
| The Den of Multix (aka grey gandalf)&lt;br /&gt;
| Riccardo  (grey_gandalf)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=1041</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=1041"/>
		<updated>2005-09-05T10:38:24Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border:1px solid black; background-color:lavender; padding:10pt;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| '''GNUstep''' is a [[Portability|cross-platform]], object-oriented set of [[Frameworks|frameworks]] for desktop application [[Development tools|development]]. The set of frameworks, based on [[OpenStep]] (now [[Cocoa]]), enables developers to rapidly build sophisticated software by employing a large library of reusable software components. GNUstep is already used [[GNUstep in production|in production]] environments at several organizations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About GNUstep ==&lt;br /&gt;
&lt;br /&gt;
'''[http://www.gnustep.org GNUstep home page]'''&lt;br /&gt;
&lt;br /&gt;
[[Blogs]] - Blogs concerning GNUtep&lt;br /&gt;
&lt;br /&gt;
[[Project development|Contact and Project development]]&lt;br /&gt;
&lt;br /&gt;
[[Architecture]]&lt;br /&gt;
&lt;br /&gt;
[[FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Application News ]]&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
[[GNUstep_Installation_Process|GNUstep Installation Process]]&lt;br /&gt;
&lt;br /&gt;
[[Internationalisation]]&lt;br /&gt;
&lt;br /&gt;
[[GNUstep environments]]&lt;br /&gt;
&lt;br /&gt;
[[Wish list]]&lt;br /&gt;
&lt;br /&gt;
[[Artworks]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
[[Development Subprojects]] ([[Themability]], [[Portability]], [[Package management]], [[I18n]], ...)&lt;br /&gt;
&lt;br /&gt;
[[Development tools]]&lt;br /&gt;
&lt;br /&gt;
[[Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Frameworks]]&lt;br /&gt;
&lt;br /&gt;
[[Installation process]]&lt;br /&gt;
&lt;br /&gt;
[[Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Programming topics]] and [[Snippets]]&lt;br /&gt;
&lt;br /&gt;
== [[Glossary]] ==&lt;br /&gt;
&lt;br /&gt;
== About Wiki ==&lt;br /&gt;
&lt;br /&gt;
[http://www.possibility.com/epowiki/Wiki.jsp?page=HowToOrganizeWiki How To Organize Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_development Wiki Dev Doc]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User'sGuide]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_FAQ FAQ]&lt;br /&gt;
&lt;br /&gt;
[http://wikipedia.sourceforge.net WikiPedia]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=1057</id>
		<title>StepTalk</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=1057"/>
		<updated>2005-08-31T08:42:08Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;StepTalk is the official GNUstep [[Scripting|scripting]] framework. In fact, StepTalk is more than a scripting framework with an illusion of a single objective environment between objects of scriptable servers or applications. StepTalk, when combined with the dynamism that the Objective-C language provides, goes way beyond mere scripting. It is language independent - it uses [[Scripting language bundle|languages as separate bundles]]. &lt;br /&gt;
&lt;br /&gt;
Author: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
(Not-only) StepTalk blog: [http://steptalk.blogspot.com/]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Goal of StepTalk is to provide an environment for gluing applications together and to provide a framework for communication between users and objects in the applications. Other major goals are:&lt;br /&gt;
&lt;br /&gt;
* simple and quick extensions of applications or tools&lt;br /&gt;
* batch-processing of objects in applications or tools&lt;br /&gt;
* fast prototyping of applications or new application features (play and tune a concept &amp;quot;online&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
It does not mean that the framework should not be used for whole application development, however it was never designed for that purpose. StepTalk application development is a form of very fast prototyping of an application.&lt;br /&gt;
&lt;br /&gt;
The StepTalk package features a framework, set of tools, [[Scripting language bundle|language bundle]], modules and object finders. '''The framework''' provides an application interface for developers to make their products scriptable. For more information about the tools, see [[StepTalk tools]]. Concerning the scripting language, the StepTalk is a '''language independent framework''' It can be extended via &amp;quot;language bundles&amp;quot; to provide and support other scripting languages. An experimental language bundle for Guile is included in the sources package. &lt;br /&gt;
&lt;br /&gt;
The default scripting language in StepTalk is [[Smalltalk]]. This is because Smalltalk is a very simple language and it is easy to learn. There are just a few basic principles that the user has to know to be able to use the language and it is close to the natural language.  [[Smalltalk]] uses a similar approach to that of [[Objective-C]], the language used in GNUstep itself. &lt;br /&gt;
&lt;br /&gt;
'''Object Finders''' are an illusion of single objective environment. Name of an object may me known, but the object itself not. The object may be an application or it may reside on other host. Object Finder is an object that will search for object by specified name. &lt;br /&gt;
&lt;br /&gt;
* '''Distributed Object Finder''' - This finder will try to look for a registered named object. It is possible to specify list of possible hosts where the object may reside and to specify a program that will provide the object if it cannot be found. &lt;br /&gt;
* '''Application Finder''' - Looks for a locally installed application and tries to connect to it. If the application is not running, it will try to launch it.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnustep.org/pub/gnustep/libs/ Source]&lt;br /&gt;
* [http://packages.debian.org/cgi-bin/search_packages.pl?keywords=steptalk&amp;amp;searchon=sourcenames&amp;amp;version=all&amp;amp;release=all&amp;amp;exact=1 Debian packages]&lt;br /&gt;
&lt;br /&gt;
* [http://savannah.gnu.org/cgi-bin/viewcvs/gnustep/gnustep/dev-libs/StepTalk/ Browse CVS]&lt;br /&gt;
&lt;br /&gt;
Get it by CVS:&lt;br /&gt;
&lt;br /&gt;
 export CVS_RSH=&amp;quot;ssh&amp;quot;&lt;br /&gt;
 cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnustep co StepTalk&lt;br /&gt;
&lt;br /&gt;
== The Framework ==&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
* [[STActor]]&lt;br /&gt;
* [[STContext]]&lt;br /&gt;
* [[STConversation]]&lt;br /&gt;
* [[STDistantConversation]]&lt;br /&gt;
* [[STEnvironment]]&lt;br /&gt;
* [[STLanguageManager]]&lt;br /&gt;
* [[STScriptManager]]&lt;br /&gt;
* [[STScriptObject]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
For more information about what should be done in StepTalk see [[StepTalk TODO]].&lt;br /&gt;
&lt;br /&gt;
== Projects using StepTalk ==&lt;br /&gt;
&lt;br /&gt;
[http://www.moltalk.org/ MolTalk] - a computational environment for doing Structural Bioinformatics. It interprets PDB formatted files and creates an object representation of the structure-chain-residue-atom hierarchy. Through the use of MolTalk, the PDB suddenly becomes an object-oriented database. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
See also: [[Scripting]], [http://www.smalltalk.org/ Smalltalk.org]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]] [[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=ApplicationWishlist&amp;diff=2054</id>
		<title>ApplicationWishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=ApplicationWishlist&amp;diff=2054"/>
		<updated>2005-08-30T14:33:17Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Application_wish_list]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Scripting_language_bundle&amp;diff=1944</id>
		<title>Scripting language bundle</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Scripting_language_bundle&amp;diff=1944"/>
		<updated>2005-08-30T14:25:37Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Added proposed changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripting language bundle is, well, a bundle that offers a language for [[StepTalk]]. The bundle provides mechanisms for understanding the language and interpreting it.&lt;br /&gt;
&lt;br /&gt;
Core of a language bundle is a scripting engine. Each language should have its own engine that executes scripts. The engine should take into account a context, where the script will be executed, and the script itself. After the execution, the engine should provide some feedback, for example a result object or it should throw an exception when something went wrong.&lt;br /&gt;
&lt;br /&gt;
Few steps for creating a custom language bundle:&lt;br /&gt;
&lt;br /&gt;
# take a language template from StepTalk sources or create one of your own&lt;br /&gt;
# create your own language engine as a subclass of the [[STEngine]]&lt;br /&gt;
# implement method ''executeCode:inEnvironment:''&lt;br /&gt;
# provide an information list about the bundle&lt;br /&gt;
&lt;br /&gt;
=== Language Template ===&lt;br /&gt;
&lt;br /&gt;
Template for a language bundle can be found [http://stefan.agentfarms.net/Download/GNUstep/MyLanguage-20041021.tar.gz here].&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
Header file for a custom language should look like this:&lt;br /&gt;
&lt;br /&gt;
 #import &amp;lt;StepTalk/STEngine.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 @interface MyLanguageEngine:STEngine&lt;br /&gt;
 {&lt;br /&gt;
     /* ... */&lt;br /&gt;
 }&lt;br /&gt;
 @end&lt;br /&gt;
&lt;br /&gt;
And the implementation:&lt;br /&gt;
&lt;br /&gt;
 #import &amp;quot;MyLanguageEngine.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 @implementation MyLanguageEngine&lt;br /&gt;
 - (id)  executeCode:(NSString *)sourceCode&lt;br /&gt;
       inEnvironment:(STEnvironment *)env&lt;br /&gt;
 {&lt;br /&gt;
     id retval = nil;&lt;br /&gt;
 &lt;br /&gt;
     /* execute the code sourceCode using environment env */&lt;br /&gt;
 &lt;br /&gt;
     /* retval = return value from the interpreter; */&lt;br /&gt;
     return retval;&lt;br /&gt;
 }&lt;br /&gt;
 @end&lt;br /&gt;
&lt;br /&gt;
You may want to use ''[environment objectDictionary]'' to get all environment's named objects.&lt;br /&gt;
&lt;br /&gt;
To translate a selector (for example a symbolic  selector) you can use ''[environment translateSelector:aString forReceiver:anObject]'' which returns a [[NSString]] containing translated selector or nil if the selector should not be sent (because it should be fobidden by the environment). Moreover you should use this method if you want to use restrictions of selectors of the scripting envornment. See [[STEnvironment]] and [[STEnvironmentDescription]] for more information.&lt;br /&gt;
&lt;br /&gt;
If your language can execute scripts from files, you may specify the file type in the MyLanguageInfo.plist. Then script manager and [[StepTalk]] tools can execute files with an appropriate language engine.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     /* Array of file types of your language scripts */&lt;br /&gt;
     STFileTypes = ( &amp;quot;mylang&amp;quot; );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Proposed Changes ==&lt;br /&gt;
&lt;br /&gt;
 - (id)  executeCode:(NSString *)sourceCode&lt;br /&gt;
       inEnvironment:(STEnvironment *)env&lt;br /&gt;
&lt;br /&gt;
is going to be renamed to&lt;br /&gt;
&lt;br /&gt;
 - (id)interpretScript:(NSString *)sourceCode&lt;br /&gt;
             inContext:(STContext *)context&lt;br /&gt;
&lt;br /&gt;
=== STLanguageManager ===&lt;br /&gt;
New class is going to be added: '''STLanguageManager'''&lt;br /&gt;
&lt;br /&gt;
 + defaultManager&lt;br /&gt;
 - registerLanguage:engineClassName:info:&lt;br /&gt;
 - registerLanguagesFromBundle:&lt;br /&gt;
 - availableLanguages&lt;br /&gt;
 - removeLanguage:&lt;br /&gt;
 &lt;br /&gt;
 - createEngineForLanguage:&lt;br /&gt;
 - engineClassForLanguage:&lt;br /&gt;
 &lt;br /&gt;
 - infoForLanguage:&lt;br /&gt;
 - bundleForLanguage:&lt;br /&gt;
 - languageForFileType:&lt;br /&gt;
&lt;br /&gt;
Class STLanguage is going to be removed as well as language related methods from STEngine.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=944</id>
		<title>StepTalk</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=944"/>
		<updated>2005-08-30T14:19:12Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: /* The Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;StepTalk is the official GNUstep [[Scripting|scripting]] framework. In fact, StepTalk is more than a scripting framework with an illusion of a single objective environment between objects of scriptable servers or applications. StepTalk, when combined with the dynamism that the Objective-C language provides, goes way beyond mere scripting. It is language independent - it uses [[Scripting language bundle|languages as separate bundles]]. &lt;br /&gt;
&lt;br /&gt;
Author: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
(Not-only) StepTalk blog: [http://steptalk.blogspot.com/]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Goal of StepTalk is to provide an environment for gluing applications together - one uses StepTalk to make apps cooperate on a single user defined task. Other major goals are:&lt;br /&gt;
&lt;br /&gt;
* simple and quick extensions of applications or tools&lt;br /&gt;
* batch-processing of objects in applications or tools&lt;br /&gt;
* fast prototyping of applications or new application features (play and tune a concept &amp;quot;online&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
It does not mean that the framework should not be used for whole application development, however it was never designed for that purpose. StepTalk application development is a form of very fast prototyping of an application.&lt;br /&gt;
&lt;br /&gt;
The StepTalk package features a framework, set of tools, [[Scripting language bundle|language bundle]], modules and object finders. '''The framework''' provides an application interface for developers to make their products scriptable. For more information about the tools, see [[StepTalk tools]]. Concerning the scripting language, the StepTalk is a '''language independent framework''' It can be extended via &amp;quot;language bundles&amp;quot; to provide and support other scripting languages. An experimental language bundle for Guile is included in the sources package. &lt;br /&gt;
&lt;br /&gt;
The default scripting language in StepTalk is [[Smalltalk]]. This is because Smalltalk is a very simple language and it is easy to learn. There are just a few basic principles that the user has to know to be able to use the language and it is close to the natural language.  [[Smalltalk]] uses a similar approach to that of [[Objective-C]], the language used in GNUstep itself. &lt;br /&gt;
&lt;br /&gt;
'''Object Finders''' are an illusion of single objective environment. Name of an object may me known, but the object itself not. The object may be an application or it may reside on other host. Object Finder is an object that will search for object by specified name. &lt;br /&gt;
&lt;br /&gt;
* '''Distributed Object Finder''' - This finder will try to look for a registered named object. It is possible to specify list of possible hosts where the object may reside and to specify a program that will provide the object if it cannot be found. &lt;br /&gt;
* '''Application Finder''' - Looks for a locally installed application and tries to connect to it. If the application is not running, it will try to launch it.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnustep.org/pub/gnustep/libs/ Source]&lt;br /&gt;
* [http://packages.debian.org/cgi-bin/search_packages.pl?keywords=steptalk&amp;amp;searchon=sourcenames&amp;amp;version=all&amp;amp;release=all&amp;amp;exact=1 Debian packages]&lt;br /&gt;
&lt;br /&gt;
* [http://savannah.gnu.org/cgi-bin/viewcvs/gnustep/gnustep/dev-libs/StepTalk/ Browse CVS]&lt;br /&gt;
&lt;br /&gt;
Get it by CVS:&lt;br /&gt;
&lt;br /&gt;
 export CVS_RSH=&amp;quot;ssh&amp;quot;&lt;br /&gt;
 cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnustep co StepTalk&lt;br /&gt;
&lt;br /&gt;
== The Framework ==&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
* [[STActor]]&lt;br /&gt;
* [[STContext]]&lt;br /&gt;
* [[STConversation]]&lt;br /&gt;
* [[STDistantConversation]]&lt;br /&gt;
* [[STEnvironment]]&lt;br /&gt;
* [[STLanguageManager]]&lt;br /&gt;
* [[STScriptManager]]&lt;br /&gt;
* [[STScriptObject]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
For more information about what should be done in StepTalk see [[StepTalk TODO]].&lt;br /&gt;
&lt;br /&gt;
== Projects using StepTalk ==&lt;br /&gt;
&lt;br /&gt;
[http://www.moltalk.org/ MolTalk] - a computational environment for doing Structural Bioinformatics. It interprets PDB formatted files and creates an object representation of the structure-chain-residue-atom hierarchy. Through the use of MolTalk, the PDB suddenly becomes an object-oriented database. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
See also: [[Scripting]], [http://www.smalltalk.org/ Smalltalk.org]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]] [[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=940</id>
		<title>StepTalk</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk&amp;diff=940"/>
		<updated>2005-08-10T12:20:09Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;StepTalk is the official GNUstep [[Scripting|scripting]] framework. In fact, StepTalk is more than a scripting framework with an illusion of a single objective environment between objects of scriptable servers or applications. StepTalk, when combined with the dynamism that the Objective-C language provides, goes way beyond mere scripting. It is language independent - it uses [[Scripting language bundle|languages as separate bundles]]. &lt;br /&gt;
&lt;br /&gt;
Author: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
(Not-only) StepTalk blog: [http://steptalk.blogspot.com/]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Goal of StepTalk is to provide an environment for gluing applications together - one uses StepTalk to make apps cooperate on a single user defined task. Other major goals are:&lt;br /&gt;
&lt;br /&gt;
* simple and quick extensions of applications or tools&lt;br /&gt;
* batch-processing of objects in applications or tools&lt;br /&gt;
* fast prototyping of applications or new application features (play and tune a concept &amp;quot;online&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
It does not mean that the framework should not be used for whole application development, however it was never designed for that purpose. StepTalk application development is a form of very fast prototyping of an application.&lt;br /&gt;
&lt;br /&gt;
The StepTalk package features a framework, set of tools, [[Scripting language bundle|language bundle]], modules and object finders. '''The framework''' provides an application interface for developers to make their products scriptable. For more information about the tools, see [[StepTalk tools]]. Concerning the scripting language, the StepTalk is a '''language independent framework''' It can be extended via &amp;quot;language bundles&amp;quot; to provide and support other scripting languages. An experimental language bundle for Guile is included in the sources package. &lt;br /&gt;
&lt;br /&gt;
The default scripting language in StepTalk is [[Smalltalk]]. This is because Smalltalk is a very simple language and it is easy to learn. There are just a few basic principles that the user has to know to be able to use the language and it is close to the natural language.  [[Smalltalk]] uses a similar approach to that of [[Objective-C]], the language used in GNUstep itself. &lt;br /&gt;
&lt;br /&gt;
'''Object Finders''' are an illusion of single objective environment. Name of an object may me known, but the object itself not. The object may be an application or it may reside on other host. Object Finder is an object that will search for object by specified name. &lt;br /&gt;
&lt;br /&gt;
* '''Distributed Object Finder''' - This finder will try to look for a registered named object. It is possible to specify list of possible hosts where the object may reside and to specify a program that will provide the object if it cannot be found. &lt;br /&gt;
* '''Application Finder''' - Looks for a locally installed application and tries to connect to it. If the application is not running, it will try to launch it.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.gnustep.org/pub/gnustep/libs/ Source]&lt;br /&gt;
* [http://packages.debian.org/cgi-bin/search_packages.pl?keywords=steptalk&amp;amp;searchon=sourcenames&amp;amp;version=all&amp;amp;release=all&amp;amp;exact=1 Debian packages]&lt;br /&gt;
&lt;br /&gt;
* [http://savannah.gnu.org/cgi-bin/viewcvs/gnustep/gnustep/dev-libs/StepTalk/ Browse CVS]&lt;br /&gt;
&lt;br /&gt;
Get it by CVS:&lt;br /&gt;
&lt;br /&gt;
 export CVS_RSH=&amp;quot;ssh&amp;quot;&lt;br /&gt;
 cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnustep co StepTalk&lt;br /&gt;
&lt;br /&gt;
== The Framework ==&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
* [[STContext]]&lt;br /&gt;
* [[STEnvironment]]&lt;br /&gt;
* [[STScriptManager]]&lt;br /&gt;
* [[STScriptObject]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
For more information about what should be done in StepTalk see [[StepTalk TODO]].&lt;br /&gt;
&lt;br /&gt;
== Projects using StepTalk ==&lt;br /&gt;
&lt;br /&gt;
[http://www.moltalk.org/ MolTalk] - a computational environment for doing Structural Bioinformatics. It interprets PDB formatted files and creates an object representation of the structure-chain-residue-atom hierarchy. Through the use of MolTalk, the PDB suddenly becomes an object-oriented database. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
See also: [[Scripting]], [http://www.smalltalk.org/ Smalltalk.org]&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]] [[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Application_News&amp;diff=799</id>
		<title>Application News</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Application_News&amp;diff=799"/>
		<updated>2005-06-21T06:52:07Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! Date         !! Application and Link  !!  Version&lt;br /&gt;
|-&lt;br /&gt;
| 21. Jun 2005  ||   [ftp://ftp.gnustep.org/pub/gnustep/libs/StepTalk-0.9.0.tar.gz StepTalk]   ||   0.9.0&lt;br /&gt;
|-&lt;br /&gt;
| 8. Jun 2005   ||   [http://www.eskimo.com/~pburns/Dictionaries Jishyo]   ||   0.1&lt;br /&gt;
|-&lt;br /&gt;
| 8. Mar 2005   ||   [http://freshmeat.net/projects/emacs Emacs]    ||   8.0-rc1&lt;br /&gt;
|-&lt;br /&gt;
| 6. Mar 2005   ||   [http://www.gnustep.it/enrico/gworkspace/ GWorkspace]    ||   0.7.0&lt;br /&gt;
|-&lt;br /&gt;
| 2. Mar 2005   ||   [http://freshmeat.net/projects/price PRICE]    ||   0.5&lt;br /&gt;
|-&lt;br /&gt;
| 1. Mar 2005   ||   [http://freshmeat.net/projects/gorm Gorm]    ||   0.9.2&lt;br /&gt;
|-&lt;br /&gt;
|23. Feb 2005   ||   [http://netclasses.aeruder.net/ netclasses]    ||   1.03&lt;br /&gt;
|-&lt;br /&gt;
|23. Feb 2005   ||   [ftp://ftp.gnustep.org/pub/gnustep/libs RIGS]    ||   0.2.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Older News ==&lt;br /&gt;
[[Application_News_2004|2004]], [[Application_News_2003|2003]], [[Application_News_2002|2002]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=772</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=772"/>
		<updated>2005-06-21T06:48:18Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Despam (huh, invisible spam??)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border:1px solid black; background-color:lavender; padding:10pt;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| '''GNUstep''' is a [[Portability|cross-platform]], object-oriented set of [[Frameworks|frameworks]] for desktop application [[Development tools|development]]. The set of frameworks, based on [[OpenStep]] (now [[Cocoa]]), enables developers to rapidly build sophisticated software by employing a large library of reusable software components. GNUstep is already used [[GNUstep in production|in production]] environments at several organizations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About GNUstep ==&lt;br /&gt;
&lt;br /&gt;
[http://www.gnustep.org GNUstep home page]&lt;br /&gt;
&lt;br /&gt;
[[Project development|Contact and Project development]]&lt;br /&gt;
&lt;br /&gt;
[[Architecture]]&lt;br /&gt;
&lt;br /&gt;
[[FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Application News ]]&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
[[GNUstep_Installation_Process|GNUstep Installation Process]]&lt;br /&gt;
&lt;br /&gt;
[[Internationalisation]]&lt;br /&gt;
&lt;br /&gt;
[[GNUstep environments]]&lt;br /&gt;
&lt;br /&gt;
[[Wish list]]&lt;br /&gt;
&lt;br /&gt;
[[Artworks]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
[[Development Subprojects]] ([[Themability]], [[Portability]], [[Package management]], [[I18n]], ...)&lt;br /&gt;
&lt;br /&gt;
[[Development tools]]&lt;br /&gt;
&lt;br /&gt;
[[Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Frameworks]]&lt;br /&gt;
&lt;br /&gt;
[[Installation process]]&lt;br /&gt;
&lt;br /&gt;
[[Scripting]]&lt;br /&gt;
&lt;br /&gt;
== [[Glossary]] ==&lt;br /&gt;
&lt;br /&gt;
== About Wiki ==&lt;br /&gt;
&lt;br /&gt;
[http://www.possibility.com/epowiki/Wiki.jsp?page=HowToOrganizeWiki How To Organize Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_development Wiki Dev Doc]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User'sGuide]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_FAQ FAQ]&lt;br /&gt;
&lt;br /&gt;
[http://wikipedia.sourceforge.net WikiPedia]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=990</id>
		<title>StepTalk TODO</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=990"/>
		<updated>2005-06-21T06:46:10Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: /* 1.0 release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you would like to help [[StepTalk]], just contact me and I will guide you. Requirements: courage only :-)&lt;br /&gt;
&lt;br /&gt;
Contact: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
== 1.0 release ==&lt;br /&gt;
&lt;br /&gt;
* implement STActor (reuse code from STScriptObject and make the class obsolete)&lt;br /&gt;
* implement NSRect object - see STStruct object&lt;br /&gt;
* implement distant conversations&lt;br /&gt;
* create stenvironment tool&lt;br /&gt;
&lt;br /&gt;
=== STEnvironment tool ===&lt;br /&gt;
&lt;br /&gt;
First, changes to the STConversation is needed as follows:&lt;br /&gt;
* method executing code should not return a value&lt;br /&gt;
* script result object should be fetched by method: -(id)result or -(bycopy id)resultByCopy;&lt;br /&gt;
* conversation object should collect error messages - it should hold kind of transcript&lt;br /&gt;
* it would be great if conversation object can send notifications when transcript was updated&lt;br /&gt;
* conversation object should hold last exception raised by the script&lt;br /&gt;
&lt;br /&gt;
Then stand-alone process should be created with following functionality:&lt;br /&gt;
* point of the stand alone process is that it can load any framework it likes and it should provide semi-persistent environment holding intermediate results of a inter-process and inter-application tasks&lt;br /&gt;
* one creates an STDistantEnvironment object - the object is in fact represented by single process that will be launched on -init&lt;br /&gt;
* the environment process will handle all execution requests - connections are created in form of conversations: user makes conversation with the environment&lt;br /&gt;
* environment is &amp;quot;live&amp;quot; until someone requests it to die&lt;br /&gt;
&lt;br /&gt;
To make it more clear about the STEnvironment stand-alone process, here is an analogy:&lt;br /&gt;
* stenvironment process = database instance&lt;br /&gt;
* conversation = database connection&lt;br /&gt;
* StepTalk script = SQL script&lt;br /&gt;
* result = SQL script result (rows, message, ...)&lt;br /&gt;
&lt;br /&gt;
one should be able to do following:&lt;br /&gt;
&lt;br /&gt;
 stenv create experiment&lt;br /&gt;
 stenv execute experiment script.st&lt;br /&gt;
 stenv execute experiment script2.st&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
     env = [STEnvironment distantEnvironmentWithName:@&amp;quot;experiment&amp;quot;];&lt;br /&gt;
     conversation = [STConversation conversationWithEnvironment:env language:nil];&lt;br /&gt;
     [conversation executeScript:aScript];&lt;br /&gt;
     result = [conversation resultByCopy]; /* or .... [conversation result] */ &lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
== Smalltalk ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite Smalltalk compiler (grammar)&lt;br /&gt;
** Remove STBytecodeInterpreter and use only STCompiler. How?&lt;br /&gt;
Simply convert language constructions into 'command' objects like&lt;br /&gt;
SmalltalkStatement, SmalltalkPrimary, SmalltalkMethodSend, ...&lt;br /&gt;
and implement executeInEnvironment:context:receiver:&lt;br /&gt;
        &lt;br /&gt;
* Update application scripting to use STConversation&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* handle 'connection did die' notification for distant objects in STEnvironment&lt;br /&gt;
* fix class-info lookup for proxies in STEnvironment&lt;br /&gt;
* Smalltalk: separate compiler and compilation context&lt;br /&gt;
* create a 'Shell' scripting environment&lt;br /&gt;
* Create ApplicationScripting framework, instead of bundle. It should offer&lt;br /&gt;
passive application scripting (without linking) and active app. scripting&lt;br /&gt;
(linking with the framewotk). Give it some reasonable name, becauase that one&lt;br /&gt;
is already used by Apple&lt;br /&gt;
* Add framework list into environment description&lt;br /&gt;
* Change Modules to Frameworks&lt;br /&gt;
* Fill implementation of STScriptObject, STMethod and related STEngine methods&lt;br /&gt;
* Remove empty directories (Source, Modules/StepTalk)&lt;br /&gt;
* Replace STMethod languageName with map table of method class-&amp;gt;engine class&lt;br /&gt;
&lt;br /&gt;
* integrate with Gorm - use Script objects, make a palette for Gorm with script objects&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Gorm_Manual&amp;diff=718</id>
		<title>Gorm Manual</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Gorm_Manual&amp;diff=718"/>
		<updated>2005-04-27T08:57:52Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: removed spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Guide to the Gorm application ==&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid black; background-color:lavender; padding:10pt;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| &lt;br /&gt;
Documentation authors:&lt;br /&gt;
* Gregory John Casamento &amp;lt;greg_casamento@yahoo.com&amp;gt;&lt;br /&gt;
* Richard Frith-Macdonald &amp;lt;richard@brainstorm.co.uk&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Copyright 1999,2000,2004,2005 Free Software Foundation, Inc.''&lt;br /&gt;
&lt;br /&gt;
''License: FDL 1.2''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gorm Developers ===&lt;br /&gt;
&lt;br /&gt;
*  Gregory John Casamento &amp;lt;greg_casamento@yahoo.com&amp;gt; Is the current maintaner of Gorm.   Has implemented lots of new features and rewritten large portions of the existing code.&lt;br /&gt;
*  Richard Frith-Macdonald &amp;lt;richard@brainstorm.co.uk&amp;gt; wrote the original version of Gorm as part of the GNUstep project.&lt;br /&gt;
*  Pierre-Yves Rivaille &amp;lt;gnustep@rivaille.net&amp;gt; Is also a major contributor to the Gorm application.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Gorm is an application for creating the user interface (and possibly entire&lt;br /&gt;
applications) for a GNUstep application.  Initially a close clone of the old&lt;br /&gt;
NeXTstep 3.3 Interface Builder application, I expect that Gorm will mutate&lt;br /&gt;
beyond the capabilities of that app.&lt;br /&gt;
&lt;br /&gt;
GNUstep is an object-oriented programming framework and a collection of tools&lt;br /&gt;
developed for or using the GNUstep libraries.&lt;br /&gt;
&lt;br /&gt;
You can find out more about GNUstep at [http://www.gnustep.org]&lt;br /&gt;
&lt;br /&gt;
The basic idea behind Gorm is simple - it provides a graphical user interface&lt;br /&gt;
with which to connect together objects from the GNUstep libraries (as well as&lt;br /&gt;
custom-written objects) and set their attributes in an easy to use manner.&lt;br /&gt;
&lt;br /&gt;
The collection of objects is then saved as a document which can either be&lt;br /&gt;
re-loaded into Gorm for further editing, or can be loaded into a running&lt;br /&gt;
GNUstep application in order to provide that application with a user&lt;br /&gt;
interface or some subsystem.&lt;br /&gt;
&lt;br /&gt;
This manual assumes a working knowledge of Objective-C and C.  These are &lt;br /&gt;
necessary prerequisites to understanding some of the technical details and &lt;br /&gt;
examples given here.&lt;br /&gt;
&lt;br /&gt;
This manual is ment to cover basic operation of the Gorm application.  More about the GNUstep development and programming, please refer to the links at the end of this document.&lt;br /&gt;
&lt;br /&gt;
=== Major features ===&lt;br /&gt;
&lt;br /&gt;
*  Drag-and-drop creation of GUI elements from palettes.&lt;br /&gt;
*  Direct on-screen manipulation of GUI elements&lt;br /&gt;
*  Manipulation and examination of objects via inspectors.&lt;br /&gt;
*  Drag-and-drop creation of connections between objects.&lt;br /&gt;
*  Interactive test mode for interfaces/object-networks under development.&lt;br /&gt;
*  Saving data in a format loadable by GNUstep applications.&lt;br /&gt;
*  Run-time loading of additional palettes that may be written using an API&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== First contact ==&lt;br /&gt;
&lt;br /&gt;
To launch the Gorm application, select it in the workspace's file viewer or from the dock. If you are using terminal, then type following on the command line:&lt;br /&gt;
&lt;br /&gt;
    gopen Gorm.app&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
Here is a description of the menu structure and what each menu does -&lt;br /&gt;
&lt;br /&gt;
*  Info: The info menu produces a submenu ...&lt;br /&gt;
**  Info Panel: A panel giving very limited information about Gorm&lt;br /&gt;
**  Preferences: A panel allowing you to set preferences&lt;br /&gt;
**  Help (not implemented)&lt;br /&gt;
**  A panel providing general help on using Gorm&lt;br /&gt;
&lt;br /&gt;
*  Document: The Document menu item produces a submenu ...&lt;br /&gt;
**  Open: This produces an open panel that lets you open a Gorm document.&lt;br /&gt;
You use this if you want to use Gorm to edit an exisiting document.&lt;br /&gt;
**  New Application: This creates a new application document within Gorm, you may then use the Palettes panel to drag new objects into the document.&lt;br /&gt;
**  New Module: Contains a submenu, which also contains:&lt;br /&gt;
***  New Empty: produces an empty document with only NSFirst and NSOwner.&lt;br /&gt;
***  New Inspector: produces a document with NSOwner, NSFirst and a window which is the correct size for an Inspector.&lt;br /&gt;
***  New Palette: produces a document which is like the one by New Inspector, but it's window is the right size for a Palette. &lt;br /&gt;
**  Save: This saves the current document&lt;br /&gt;
**  Save As: This saves the current document to a new file and changes the document name to match the new name on disk.&lt;br /&gt;
**  Save All: This saves all documents currently being edited by Gorm.&lt;br /&gt;
**  Revert To Saved: This removes all changes made to the document sunce the last save, or since the document was opened.&lt;br /&gt;
**  Test Interface: This provides interactive testing of the active document.  To end testing, you need to select the quit menu item.&lt;br /&gt;
**  Miniaturize: This miniaturises the active document (or whatever panel is currently key).&lt;br /&gt;
**  Close: This closes the currenly active document.&lt;br /&gt;
**  Debug: Prints some useful internal information.&lt;br /&gt;
**  Load Sound: Loads a sound into the .gorm file.&lt;br /&gt;
**  Load Image: Loads an image into the .gorm file.&lt;br /&gt;
&lt;br /&gt;
*  Edit: In addition to the usual Cut, Copy, Paste, Delete Select All, this menu also contains:&lt;br /&gt;
&lt;br /&gt;
**  Group: Which produces a submenu&lt;br /&gt;
***  In Splitview: Groups views into an NSSplitView.   Gorm does this based on the relative positions of the views being grouped.  It determines the orientation and the order of th views and then groups them either vertically or horizontally in the order they appear on the screen.&lt;br /&gt;
***  In Box: Simply groups all of the views into one NSBox.&lt;br /&gt;
***  In ScrollView: Simply groups all of the views into one NSScrollView.&lt;br /&gt;
***  Ungroup: Ungroups the contained views.&lt;br /&gt;
&lt;br /&gt;
**  Set Name: This allows the user to set a name for a given object in the Objects view in the main document window.&lt;br /&gt;
&lt;br /&gt;
**  Disable Guideline: This item toggles between Enable Guideline and Disable Guideline.  This allows the user to turn on or off the guides which appear when placing views in a window or view in Gorm.&lt;br /&gt;
&lt;br /&gt;
*  Classes: Contains menus for working with classes.&lt;br /&gt;
** Create Subclass: Creates a subclass of the currently selected class in the current document classes view.&lt;br /&gt;
**  Load Class: Loads a class from a .h file into the current document.&lt;br /&gt;
**  Create Class Files: Generates a .h and .m file from the currently selected class in the current document classes view.&lt;br /&gt;
**  Instantiate: Creates an instance of the selected class in the current document classes view.&lt;br /&gt;
**  Add Outlet/Action: Adds an outlet or an action depending on what is selected in the document classes view.  If the outlet icon is selected, it will add an outlet, if it the action icon is selected it will add an action.&lt;br /&gt;
**  Remove: Removes the currently selected outlet, action or class.&lt;br /&gt;
&lt;br /&gt;
*  Tools: Contains the inspector and the palette menus&lt;br /&gt;
**  Inspector: Shows the inspector&lt;br /&gt;
**  Palette: Shows the palette&lt;br /&gt;
**  Load Palette: Opens a file panel and allows the user to load a palette into Gorm.&lt;br /&gt;
&lt;br /&gt;
*  Windows: Shows currently open windows.&lt;br /&gt;
&lt;br /&gt;
*  Services: Shows currently available services.&lt;br /&gt;
&lt;br /&gt;
*  Hide: Hides the application.&lt;br /&gt;
&lt;br /&gt;
*  Quit: Quits the application.&lt;br /&gt;
&lt;br /&gt;
=== Preferences ===&lt;br /&gt;
&lt;br /&gt;
The preferences panel contains a number of useful customizable options which can be used to modify the behavior of Gorm.&lt;br /&gt;
&lt;br /&gt;
Some of these defaults can be safely modified from the command line by the user.&lt;br /&gt;
*  PreloadHeaders:&lt;br /&gt;
The user can define a set of headers to load when Gorm starts creation of a new .gorm file.  This is useful when the user is building a framework or a set of interfaces for a large application.&lt;br /&gt;
&lt;br /&gt;
*  ShowInspectors:&lt;br /&gt;
Controls whether the inspector shows when Gorm is started.&lt;br /&gt;
&lt;br /&gt;
*  ShowPalettes:&lt;br /&gt;
Controls whether the palettes window shows when Gorm is started.&lt;br /&gt;
&lt;br /&gt;
*  BackupFile:&lt;br /&gt;
Determines if the old .gorm is moved to .gorm~ when the modified version is saved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic Concepts ==&lt;br /&gt;
&lt;br /&gt;
This chapter will explain some of the basic things you need to understand before starting work on a new application.&lt;br /&gt;
&lt;br /&gt;
First you need to understand a few basic concepts. Gorm's main window includes a few standard entries which must be explained before we can proceed. The basic objects are abstract and they are being concretised on the runtime. They are:&lt;br /&gt;
&lt;br /&gt;
* an owner of the object model or the user interface - NSOwner&lt;br /&gt;
* firs responder - an object or a view that will receive actions as first - NSFirst&lt;br /&gt;
* a font manager representation - NSFont&lt;br /&gt;
&lt;br /&gt;
'''NSOwner''' is the class which &amp;quot;owns&amp;quot; the interface.  This is, by default, [[NSApplication]], but it can be any class you like.   You can change it by selecting NSOwner in the document window and going to the &amp;quot;Custom Class&amp;quot; inspector in the inspectors window.  From there, you should see all of the classes which the NSOwner can assume.   We'll discuss more about this later when we go over how to create a new application&lt;br /&gt;
&lt;br /&gt;
'''NSFirst''' is your interface to the responder chain.  NSFirst is representative of the current &amp;quot;first responder&amp;quot; in the application.  When you want a message, such as a changeFont: message, to go to the current first responder from, say, a menu, you connect the menu item to the NSFirst object in the document window.  By doing this, it means that whichever object has first responder status at that time in the application will become the reciever of the &amp;quot;changeFont:&amp;quot; message. &lt;br /&gt;
&lt;br /&gt;
'''NSFont''' represents the NSFontManager object for the application.  This object is a shared singleton.   This means that, for any given app, there should be only one instance of the object.   This object is generally added to the document window when another objec, such as a Font menu item, is added to the interface, which, in turn, requires that this object be added to the document.&lt;br /&gt;
&lt;br /&gt;
=== Responder and responder chain ===&lt;br /&gt;
&lt;br /&gt;
A responder is any subclass of NSResponder.  This includes NSWindow, NSView and all of the NSControl subclasses.&lt;br /&gt;
&lt;br /&gt;
The '''responder chain''' is a sequence of objects which are called to determine where a message sent to the first responder will go.   A message invoked on the first responder will be invoked on the first object in the responder chain which responds to that message.&lt;br /&gt;
&lt;br /&gt;
The object which this message will be called on is determined in the method [NSApplication targetForAction:].  The call sequence is as follows, it will only proceed to the next step in each case if the current step fails to respond to the message which was invoked:&lt;br /&gt;
&lt;br /&gt;
*  The firstResponder of the keyWindow, if one exists. &lt;br /&gt;
*  Iterates through all responders by pulling each in the linked list of responders for the key window.   &lt;br /&gt;
*  It then tries the keyWindow.&lt;br /&gt;
*  Then the keyWindow's delegate&lt;br /&gt;
*  if the application is document based it tries the document controller object for the key window.&lt;br /&gt;
*  then it tries the mainWindow's list of responders (as above)&lt;br /&gt;
*  the mainWindow's delegate&lt;br /&gt;
*  if the app is document based, it tries the document controller for the main window&lt;br /&gt;
*  and finally, it tries the NSApplication delegate.&lt;br /&gt;
&lt;br /&gt;
If all of the options in this list are exhausted, it then gives up and returns nil for the object which is to respond.&lt;br /&gt;
&lt;br /&gt;
== Creating an Application Interface ==&lt;br /&gt;
&lt;br /&gt;
Gorm provides you with prebuilt interface template for an application. Note that to create whole application you would need to use the [[ProjectCenter]] or other development tools. &lt;br /&gt;
&lt;br /&gt;
If you have ProjectCenter create an &amp;quot;Application&amp;quot; project. Create it with the name &amp;quot;FirstApp&amp;quot;. From there you can open the MainMenu.gorm by clicking on interfaces and selecting MainMenu.gorm. If Gorm.app is properly installed, you Gorm should start up.&lt;br /&gt;
&lt;br /&gt;
If you don't have ProjectCenter, you can create the Gorm file by hand. First you need to start Gorm.  You can either do this by doing: &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
You then need to select the Document menu, and then New Application.  This should produce a new document window, with a menu and an empty window.  This should be the same as with the ProjectCenter gorm file since this is the basic starting point for an application.&lt;br /&gt;
&lt;br /&gt;
For the sections below...  only do one or the other, not both. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing the interface ==&lt;br /&gt;
&lt;br /&gt;
=== Adding Controls from the Palette ===&lt;br /&gt;
&lt;br /&gt;
Go to the Gorm menu and select Tools, then Palettes.  This will bring the palette window to the front.  The second palette from the left is the &amp;quot;ControlsPalette&amp;quot;.  Select that one and find the button object (it should have the word &amp;quot;Button&amp;quot; in it).  Drag that to the window and drop it anywhere you like.&lt;br /&gt;
&lt;br /&gt;
Repeat this operation with the text field.  It's the control with &amp;quot;Text&amp;quot; in it.   We are now ready to start making connections between different objects in the document.&lt;br /&gt;
&lt;br /&gt;
=== Making Connections ===&lt;br /&gt;
&lt;br /&gt;
The type of application we are creating is known as a &amp;quot;NSApplication delegate&amp;quot; this means that the MyController object will be set as the delegate of NSApplication.&lt;br /&gt;
&lt;br /&gt;
To make this connection click on NSOwner and hold down the Control button, keep it pressed as you drag from the NSOwner object to the MyController object.  The inspectors window should change to the Connections inspector and should show two outlets &amp;quot;delegate&amp;quot; and &amp;quot;menu&amp;quot;.   Select the &amp;quot;delegate&amp;quot;, at this point you should see a green S and a purple T on the NSOwner and MyController objects respectively, and press the &amp;quot;Connect&amp;quot; button in the inspector.   In the &amp;quot;Connections&amp;quot; section of the inspector you should see an entry which looks similar to &amp;quot;delegate (MyController)&amp;quot; this indicates that the connection has been made.&lt;br /&gt;
&lt;br /&gt;
Now we need to make connections from the controller to the textfield and from the controller to the button.  Select the MyController object and Control-Drag (as before) from the object to the text field, this will make an outlet connection.   You should see the connections inspector again, this time select the &amp;quot;value&amp;quot; outlet and hit Connect. &lt;br /&gt;
&lt;br /&gt;
Next, control-drag from the button to the controller, this will make an action connection.  The connections inspector should again appear.  This time you need to select the &amp;quot;target&amp;quot; outlet, to get the list of actions.  The list should have only one entry, which is &amp;quot;buttonPressed:&amp;quot; since this is the one we added earlier.  Press Connect.  You should see an entry like &amp;quot;buttonPressed: (MyController&amp;quot; in the Connections section of the inspector.&lt;br /&gt;
&lt;br /&gt;
It is also possible to make this connection to NSFirst, but to keep things simple, make it directly to the object.   If you make the connection to buttonPressed: on NSFirst the functionality of the application will be unchanged, but the invocation will take the path described above in the section which describes &amp;quot;The Responder Chain&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Saving the gorm file ===&lt;br /&gt;
&lt;br /&gt;
At this point you must save the .gorm file.  Go to the Gorm menu and click Documents and then select &amp;quot;Save&amp;quot;.  If the document was opened from a pre-existing .gorm, it will save to that same file name.   If it is an UNTITLED .gorm file a file dialog will appear and you will need to select the directory where you want to store the .gorm file and type the name of the .gorm file.  &lt;br /&gt;
&lt;br /&gt;
== Custom classes ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to do create a custom class in Gorm.  I will take you through each step by step.  First click on the classes icon in the toolbar on the top of the Gorm document window.   You should see the view below change to an outline view containing a list of class names.   Once this happens we're ready to create a class.&lt;br /&gt;
&lt;br /&gt;
Select the class you wish to subclass in the outline view.  For our example we will use the simplest: NSObject.  Select it by clicking on the class name once.  Then go to the Classes menu in the main menu and select Create Subclass (you can also type Alt-Shift-c, which will do this as well.  The new class will be created in the list with the name &amp;quot;NewClass&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Using The Outline View ===&lt;br /&gt;
&lt;br /&gt;
Double click on the subclass name to make it editable.  Type the name of the class and hit enter.  For our example, please use the class name MyController.  When you hit enter an alert panel will appear and warn you about breaking connections, simply select OK and continue.&lt;br /&gt;
&lt;br /&gt;
This method of inputting the classes was inspired by IB in OPENSTEP 4.2/Mach which had functionality very similar to this.  For users of that the transition to Gorm will be seamless.&lt;br /&gt;
&lt;br /&gt;
=== Object awakening ===&lt;br /&gt;
&lt;br /&gt;
The method ''awakeFromNib'' is called on any custom object which is unarchived from a nib/gorm file.   This method is called on all objects after the entire archive has been loaded into memory and all connections have been made.   Given all of this, you should not make any assumptions at all about which objects have been called and which have not.  You should not release any objects in this method.&lt;br /&gt;
&lt;br /&gt;
=== Outlets and Actions ===&lt;br /&gt;
&lt;br /&gt;
Too add an outlet, select the round icon with the two horizontal lines in it (it sort of looks like a wall outlet.   This should become depressed.  Here you need to go to the Gorm Menu, under Classes select &amp;quot;Add Outlet/Action&amp;quot;.  Each time you press this menu item another outlet will be added with a name similar to newOutlet, as you add more the number at the end will increase.  For now add only one outlet.&lt;br /&gt;
&lt;br /&gt;
To rename the outlet simply double click it and change it's name like you did the class above to &amp;quot;value&amp;quot; for the sake of our example.&lt;br /&gt;
&lt;br /&gt;
The steps to add on action are precisely the same as adding an outlet, except you must click on the button which looks like a target (a circle with a + inside).   Add an action and name it &amp;quot;buttonPressed:&amp;quot; for the sake of our example.&lt;br /&gt;
&lt;br /&gt;
=== Using The Class Edit Inspector ===&lt;br /&gt;
&lt;br /&gt;
This way is much more inline with the &amp;quot;OPENSTEP/GNUstep&amp;quot; philosophy.   For each object there is an inspector, even for Class objects.&lt;br /&gt;
&lt;br /&gt;
Once you have created the class as described in the previous section &amp;quot;Creating a Class In Gorm&amp;quot;, you must skip to this section to use the inspector.   In the Gorm main menu select Tools and then select &amp;quot;Inspectors&amp;quot;.  This will make certain that the inspectors window is being displayed.   Once the inspectors window is up move the pulldown on the top to &amp;quot;Attributes&amp;quot; and select the class you created which should, at this point, have the name &amp;quot;NewClass&amp;quot;.  You'll notice that the &amp;quot;Class&amp;quot; field at the top which shows the name's background color has turned white, instead of grey.  This indicates that this class name is editable.   Erase &amp;quot;NewClass&amp;quot; from the text field and type &amp;quot;MyController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Adding outlets is very intuitive in the inspector.  Simply select the &amp;quot;Outlets&amp;quot; tab in the tab view and click &amp;quot;Add&amp;quot; to add more outlets, and &amp;quot;Remove&amp;quot; to remove them.  For the sake of our example, add one outlet and name it &amp;quot;value&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Very much like above only with the &amp;quot;Actions&amp;quot; tab, add an action called button pressed.&lt;br /&gt;
&lt;br /&gt;
=== Instantiating The Class ===&lt;br /&gt;
&lt;br /&gt;
In the Classes outline view select the new class you've created, now called MyController and then go to the Gorm menu and select Classes, and then Instantiate.  The document window should shift from the classes view to the objects view.   Amoung the set of objects should be a new object called MyController.&lt;br /&gt;
&lt;br /&gt;
=== Generating .h and .m files from the class. ===&lt;br /&gt;
&lt;br /&gt;
This is different than saving, some people have gotten this confused with the idea of Gorm generating the code for the gui.  Gorm does nothing of the sort (grin).  &lt;br /&gt;
&lt;br /&gt;
Go to the Classes section in the Document window and select the MyController class yet again.  Now go to the Gorm menu and select Classes and the select &amp;quot;Create Class Files&amp;quot;.  This will bring up a file panel and it allow you to select the directory in which to put the files.   It will first create the MyController.m file and then the MyController.h file.  Simply select the directory in which your app will reside and hit okay for both.  You can change the names, but the default ones, which are based on the class name, should be sufficient.  When you look at the .m for this class, you should see the buttonPressed: method with the comment /* insert your code here */ in it.  Delete this comment and add:&lt;br /&gt;
&lt;br /&gt;
    [value setStringValue: @&amp;quot;Hello&amp;quot;];   &lt;br /&gt;
&lt;br /&gt;
The class should look like this after you're done:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
    #include &amp;quot;MyController.h&amp;quot;&lt;br /&gt;
    @implementation MyController&lt;br /&gt;
    - (void) buttonPressed: (id)sender&lt;br /&gt;
    {&lt;br /&gt;
      [value setStringValue: @&amp;quot;Hello&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    @end&lt;br /&gt;
&lt;br /&gt;
You recall, we connected the textfield to the &amp;quot;value&amp;quot; variable.  The call above causes the method setStringValue to be invoked on the textfield you added to the window.  &lt;br /&gt;
&lt;br /&gt;
Also, note that the name of the method is &amp;quot;buttonPressed:&amp;quot;.  This is the action which is bound to the button.  When it is pressed the text in the textfield should change to &amp;quot;Hello&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You now need to build the application either by copying in a GNUmakefile and making the appropriate changes or by using ProjectCenter's build capability, depending on if you use it or not.&lt;br /&gt;
&lt;br /&gt;
This app is available as &amp;quot;SimpleApp&amp;quot; in the Examples directory under the Documentation directory distributed with Gorm.  Hopefully this has helped to demonstrate, albeit on a small scale, the capabilities of Gorm. In later chapters we will cover more advanced application architectures and topics.&lt;br /&gt;
&lt;br /&gt;
== A Simple Application ==&lt;br /&gt;
&lt;br /&gt;
This chapter will describe an application, very much like the previous one, but using a slightly different structure.  This application builds on the previous application and uses WinController as the NSOwner of the app instead of making it the delegate of NSApplication.&lt;br /&gt;
&lt;br /&gt;
=== Adding Menu Items ===&lt;br /&gt;
&lt;br /&gt;
Select the first palette in the palette window, this should be the MenusPalette.   The palette will have a bunch of pre-made menu items on it that you can add.  We want to keep this simple, so grab the one called &amp;quot;Item&amp;quot; and drag it over to the menu in main menu nib (the menu on the screen, not the one in the objects view).  As you have this object over the menu, the copy/paste mouse cursor should appear (it looks something like one box over another box at a 45 degree angle).   Where you drop the menu determines it's position in the menu.  You can always drag it to a new position after you've placed it by simply selecting and dragging up or down.  Once you've placed the menu item, double click on the title and change it to &amp;quot;Open&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can also change the name in the NSMenuItem attributes inspector.  Now you must add openWindow: to MyController and make the connection from the &amp;quot;Open&amp;quot; menu item to NSFirst.   In the connections inspector, find the &amp;quot;openWindow:&amp;quot; action.   You could simply make the connection directly, but this is an exaple to show you that this connection will work as well.   Whichever object has First Responder status will be tested to see if it responds to this method.&lt;br /&gt;
&lt;br /&gt;
The implementation for openWindow: in MyController should simply be:&lt;br /&gt;
&lt;br /&gt;
    - (void) openWindow: (id) sender&lt;br /&gt;
    {&lt;br /&gt;
      winController = [[WinController alloc] init];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Also add the winController attribute and an include to allow WinController to be referenced in the MyController.m file.&lt;br /&gt;
&lt;br /&gt;
=== Making a Controller-based .gorm file ===&lt;br /&gt;
&lt;br /&gt;
Create a new .gorm file as described in the previous section using the &amp;quot;New Module&amp;quot; menu item.  Under &amp;quot;New Module&amp;quot; select &amp;quot;New Empty&amp;quot;.  This should produce a .gorm file with only NSOwner and NSFirst.   From the WindowsPalette (which should be the second palette in the palette window) drag a window to the location where you want it to appear on the screen.   In the window add a button called &amp;quot;Close&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Go through the same steps you went through previously to create MyController, except for adding the outlets/actions, but this time with the name WinController.   Add an outlet called window and an action called &amp;quot;closeWindow:&amp;quot;.   &lt;br /&gt;
&lt;br /&gt;
Now, instead of instantiating the class go back to the objects view and select the NSOwner object.   After that select the &amp;quot;Custom Class&amp;quot; inspector.   Look for the entry for WinController and select it.   You now must connect the &amp;quot;window&amp;quot; outlet to the Window you added previously.&lt;br /&gt;
&lt;br /&gt;
Switch back to the objects view, then Control-Drag not to the window on the screen, but to the window's representation in the objects view.  In the connection inspector select the window outlet and click Ok.&lt;br /&gt;
&lt;br /&gt;
Save the .gorm as using the name Controller.gorm in the project directory. &lt;br /&gt;
&lt;br /&gt;
Generate the Controller.h and Controller.h files as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
=== Add the init method to WinController ===&lt;br /&gt;
&lt;br /&gt;
Add an implementation of the action &amp;quot;closeWindow:&amp;quot; to WinController and also an init which loads the gorm/nib file and declares itself as the owner.  Here's how:&lt;br /&gt;
&lt;br /&gt;
    /* All Rights reserved */&lt;br /&gt;
    #include &amp;lt;AppKit/AppKit.h&amp;gt;&lt;br /&gt;
    #include &amp;quot;WinController.h&amp;quot;&lt;br /&gt;
    @implementation WinController&lt;br /&gt;
    - (id) init&lt;br /&gt;
    {&lt;br /&gt;
      if((self = [super init]) != nil)&lt;br /&gt;
        {&lt;br /&gt;
          if([NSBundle loadNibNamed: @&amp;quot;Controller&amp;quot; owner: self] == NO)&lt;br /&gt;
            {&lt;br /&gt;
              NSLog(@&amp;quot;Problem loading interface&amp;quot;);&lt;br /&gt;
              return nil;&lt;br /&gt;
            }&lt;br /&gt;
          [window makeKeyAndOrderFront: self];&lt;br /&gt;
        }&lt;br /&gt;
      return self;&lt;br /&gt;
    }&lt;br /&gt;
    // close&lt;br /&gt;
    - (void) closeWindow: (id) sender&lt;br /&gt;
    {&lt;br /&gt;
      [window close];&lt;br /&gt;
    }&lt;br /&gt;
    // dealloc&lt;br /&gt;
    - (void) dealloc&lt;br /&gt;
    {&lt;br /&gt;
      [super dealloc];&lt;br /&gt;
      RELEASE(window);&lt;br /&gt;
    }&lt;br /&gt;
    @end &lt;br /&gt;
&lt;br /&gt;
The Controller gorm will be loaded and the connections will be made to the current instance, i.e. window will point to the window object instantianted in the .gorm file and all actions declared in the .gorm file which are attached to the object NSOwner will be resolved on self.&lt;br /&gt;
&lt;br /&gt;
=== Running the App ===&lt;br /&gt;
&lt;br /&gt;
Type the command: &lt;br /&gt;
&lt;br /&gt;
    gopen Controller.app&lt;br /&gt;
&lt;br /&gt;
on the command line in the project directory.   Once the application has started it should look very much like the first application.  Select the &amp;quot;Open&amp;quot; button from the Menu and you should see the second window pop up, now choose close, this will call the method &amp;quot;closeWindow:&amp;quot; which should cause the window to disappear.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advanced Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Restrictions On Your Custom Subclasses ===&lt;br /&gt;
&lt;br /&gt;
The restrictions here are the same as those in Apple's InterfaceBuilder.   In general, you cannot have additional information which is expected to be decoded in an initWithCoder: method from a custom class which uses one of the methods in the previous section.   This is because, by definition, Gorm doesn't know anything about these classes and allowing you to use them in Gorm in this way is a convenience to make it simpler for the developer.  Gorm therefore, must use one of the proxies to encode the class since it cannot encode the class directly.&lt;br /&gt;
&lt;br /&gt;
How can you get your classes into Gorm, you say?   I'm pleased that you asked me that question.  The best way to make your class known to Gorm so that you don't need to worry about the above restriction is to add a palette which contains your class.  In this way, because you're literally linking the class into Gorm, you're making the class and it's structure known to Gorm so that it can encode the class directly.   With the new palette loaded you can load and save classes containing real instances, not proxies, of your class encoded directly in the .gorm file.   How to create a palette is discussed at length in the following section.&lt;br /&gt;
&lt;br /&gt;
=== Graphical Objects In A Palette ===&lt;br /&gt;
&lt;br /&gt;
You are, by now, familiar with the built in palettes which are provided with Gorm.  Palettes are a powerful feature which allows the developer to add his/her own objects to Gorm.  It is possible for a developer to write custom inspectors, editors and palettes for use with Gorm.   A good example of a custom palette is palettetest in the dev-apps/test in the GNUstep distribution.  Assuming you don't have that, however, I will explain precisely what you need to do in order to create a simple palette.   The entire process is very short and suprisingly simple.   First open Gorm and select Gorm-&amp;gt;Document-&amp;gt;New Module-&amp;gt;New Palette.   This will create a palette sized window.   Once that's done go to the classes view in the main document window and find &amp;quot;IBPalette&amp;quot; in the class list.  Create a subclass of that, the name can be whatever you want.  For the purposes of our example we'll call it MyPalette.  Drag a custom view to the window and choose the class you would like to add to the palette from one of your custom classes.&lt;br /&gt;
&lt;br /&gt;
Once you've done this, generate the code for the classes (discussed in previous chapters).   In the code, you'll add a method called &amp;quot;-(void) finishInstantiate&amp;quot; leave it empty for now.   In the makefile for the palette make sure that the library or framework the view comes from is linked with the palette.   Now build the palette.&lt;br /&gt;
&lt;br /&gt;
After the palette is built you're ready to load it into Gorm.  Go to the preferences panel and go to &amp;quot;Palettes&amp;quot;.  This should bring up a table view.  Click on add.   You should see a open dialog open.  Select the palette bundle with this.   If the palette is successfully loaded, you should see the name appear in the list.   One thing to note here.   Once a palette is loaded, it can't be unloaded until you close and restart Gorm.   This is because by loading the palette bundle, the code in the bundle is being linked into Gorm.   This can't be undone, once it's done.&lt;br /&gt;
&lt;br /&gt;
Now, you should see the palette in the set of palettes in the palette window.  Simply scroll over to it and select it's icon.   When you do this, you should see the view that you set up using the custom view displayed as an actual instance.  Note that we used one of the techniques listed above, it is possible to use any of the three for any object you add to your palette.     You can now drag the view from the palette to a new window.&lt;br /&gt;
&lt;br /&gt;
=== Non-Graphical Objects In A Palette ===&lt;br /&gt;
You may recall the creation of a method called &amp;quot;-(void) finishInstantiate&amp;quot; in the previous section.  This section will make full use of that method.  Re-open the palette you created before, but this time add an image view to the window.   Then add to the image view, the icon you want to represent the non-graphical object.   Here you'll need to add an ivar to the MyPalette class in both Gorm and in your source code called, imageView.  Once you've done this make the connection between the image view and it's ivar.&lt;br /&gt;
&lt;br /&gt;
Assuming that the class is called &amp;quot;NonUIObject&amp;quot;, in finishInstantiate, you'll need to add the following line of code:&lt;br /&gt;
&lt;br /&gt;
    -(void) finishInstantiate&lt;br /&gt;
    {&lt;br /&gt;
      id obj = [NonUIObject new];&lt;br /&gt;
      [self associateObject: obj type: IBObjectPboardType with: imageView];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This code has the effect of associating the non-ui object with the ui object you just added to represent it.  When you drag and drop the element which prepresents the object to something, it will copy the object, not the ui element, to the destination.&lt;br /&gt;
&lt;br /&gt;
Congratulations, you now know how Palettes work.&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
See: [[Gorm FAQ]]&lt;br /&gt;
&lt;br /&gt;
== Implementation details ==&lt;br /&gt;
&lt;br /&gt;
This chapter describes some details about implementation of various features of Gorm. You should read it if you are a developer that would like to add custom objects, inspectors or would like to do other Gorm development.&lt;br /&gt;
&lt;br /&gt;
The IB documentation on how object selection is managed and how editors and&lt;br /&gt;
inspectors are used is unclear ... so the author of Gorm gone his own way.&lt;br /&gt;
&lt;br /&gt;
When a document is loaded, the document object creates an editor attached&lt;br /&gt;
to each top-level object in the user interface (NSMenu and NSWindow objects).&lt;br /&gt;
These editors must be aware of their edited objects being clicked upon, and&lt;br /&gt;
clicking on one of these should cause the corresponding editor to become the&lt;br /&gt;
active editor.&lt;br /&gt;
&lt;br /&gt;
The ''active editor'' is responsible for handling selection of the edited object&lt;br /&gt;
(and any objects below it in the object hierarchy).  Upon change of selection,&lt;br /&gt;
the editor is responsible for sending an IBSelectionChangedNotification with&lt;br /&gt;
the selection owner (normally the editor itsself) as the notification owner.&lt;br /&gt;
&lt;br /&gt;
The main application watches for these notifications in order to keep track&lt;br /&gt;
of who has the selection.&lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
&lt;br /&gt;
The connection API is the same as that for [[Interface Builder|IB]], but with the extension that the&lt;br /&gt;
document object must implement [-windowAndRect:forObject:] to return the&lt;br /&gt;
window in which the object is being displayed, and the rectangle enclosing&lt;br /&gt;
the object (in window base coordinates).&lt;br /&gt;
&lt;br /&gt;
This information is needed by Gorm so that it can mark the connection.&lt;br /&gt;
&lt;br /&gt;
The editors mananging the drag-and-drop operation for a connection must call:&lt;br /&gt;
&lt;br /&gt;
    [NSApp -displayConnectionBetween:and:]&lt;br /&gt;
&lt;br /&gt;
to tell Gorm to update its display.  This method sets the values currently returned by:&lt;br /&gt;
&lt;br /&gt;
    [NSApp -connectSource] and &lt;br /&gt;
    [NSApp -connectDestination]&lt;br /&gt;
&lt;br /&gt;
This section will cover some topics which won't be of general interest to most users.   The details in this section pertain to the internal workings of Gorm.&lt;br /&gt;
&lt;br /&gt;
== Gorm file format ==&lt;br /&gt;
&lt;br /&gt;
The current Gorm file format is basically just a set of objects, encoded one after another in a continuous stream with some markers indicating when a new class starts or which class is encoded. &lt;br /&gt;
&lt;br /&gt;
=== The Name Table ===&lt;br /&gt;
&lt;br /&gt;
Each object in the .gorm file has a name assigned to it by the application.  This allows Gorm to refer to the objects by a name once they are loaded rather than an address.  Each name is associated with it's object in a dictionary which preserves the overall structure of the GUI which has been created.   &lt;br /&gt;
&lt;br /&gt;
'''The Custom Class Table''' - This is only used when the user has associated a custom class with an existing instance in the gorm file.  If the user has, for instance, added an NSWindow to the gorm, he/she can use the custom class inspector to select a subclass of NSWindow to change to. &lt;br /&gt;
&lt;br /&gt;
'''Connections Array''' -  This array is used to form the connections after the .gorm file is loaded.  The method [... establishConnection] is never called on either NSNibControlConnector or NSNibOutletConnector objects while in Gorm.   This prevents the connections from having any effect while they are being edited in Gorm itself.   Once they are loaded, the establishConnection method is called and the connections are made.&lt;br /&gt;
&lt;br /&gt;
=== Custom Class Encoding ===&lt;br /&gt;
&lt;br /&gt;
Custom objects are an interesting challenge in Gorm.  By definition, custom classes are not known to Gorm, unless they are in a palette (covered elsewhere).   For classes which are not in a palette instances of these classes in Gorm are encoding in one of three ways:&lt;br /&gt;
&lt;br /&gt;
*  '''Proxy''' - This is a standin object which takes the place of the custom object.   This is usually used when the superclass of the object is a non-graphical object, such as a controller.  The init message is called on this object when it's unarchived.&lt;br /&gt;
*  '''Custom View''' - This is a standin view object similar to the one descrribed above, but it is a subclass of NSView.  When this is used the initWithFrame: message is called on the view instance which is created (based on what view subclass the user selects)&lt;br /&gt;
*  '''Template''' - Probably the most interesting of the three.  This is a standin class which uses an existing instance created in Gorm to build a custom subclass from.   For instance when a window subclass is created, call it MyWindow, a template class called GSWindowTemplate is used to hold the NSWindow created in Gorm as well as the name of the subclass to be created when the class is unarchived outside of Gorm as well as some additional information.   When the classes are unarchived in the running app, the designated initializer for that class will be invoked, except in the case of [[NSControl]] subclasses.  See the Apple documentation for more information.&lt;br /&gt;
&lt;br /&gt;
All custom instances have awakeFromNib invoked on them when they are unarchived from the .gorm file.   This allows the user to do whatever additional setup that needs to be done, such as setting attribute.   Classes which are &amp;quot;known&amp;quot; are, of course, directly encoded into the .gorm file.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[[ProjectCenter]] - GNUstep integrated development environment&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Applications&amp;diff=961</id>
		<title>Applications</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Applications&amp;diff=961"/>
		<updated>2005-04-27T08:57:11Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: removed spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are several lists of applications:&lt;br /&gt;
&lt;br /&gt;
http://freshmeat.net/search/?fourohfour=1&amp;amp;q=gnustep&lt;br /&gt;
&lt;br /&gt;
http://www.gnustep.org/GSWeb/GSApps.woa&lt;br /&gt;
&lt;br /&gt;
http://livecd.gnustep.org&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=FAQ&amp;diff=726</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=FAQ&amp;diff=726"/>
		<updated>2005-04-26T10:57:07Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [http://www.gnustep.org/resources/documentation/User/GNUstep/userfaq_toc.html User FAQ]&lt;br /&gt;
* [http://www.gnustep.org/resources/documentation/User/GNUstep/faq_toc.html Developer FAQ]&lt;br /&gt;
* [[GNUstepIsNotWindowMaker]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here are few FAQ from the old wiki :&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;MrBIOS-TS&amp;gt; WELCOME TO GNUSTEP! Don't ever ask these questions. Before you ask them, here are the answers!&amp;lt;/tongue-in-cheek&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''Q.''' Why don't you just have Gorm output Renaissance files?&amp;lt;br/&amp;gt;&lt;br /&gt;
:'''A.''' Philosophical and architectural incompatibilities.&lt;br /&gt;
&lt;br /&gt;
:'''Q.''' Is there a way to install GNUstep on Mac OS X? Perhaps some howto?&amp;lt;br/&amp;gt;&lt;br /&gt;
:'''Q.''' Is there any way to use gnustep-make and gnustep-base without using openapp/opentool?&amp;lt;br/&amp;gt;&lt;br /&gt;
:'''Q.''' Can GNUstep help with porting applications from MacOS-X? Is there any HOWTO on that? See for example Tamsys http://sourceforge.net/projects/tamsys. How difficult it should be to port it to Linux and GNUstep?&amp;lt;br/&amp;gt;&lt;br /&gt;
:'''A.''' Somehow relevant may be discussion on http://groups.google.com/groups?th=f8a07de1a707dbeb. Is there anything more?&lt;br /&gt;
&lt;br /&gt;
:'''Q.''' Can I deploy my GNUstep application without requiring people to install GNUstep?&lt;br /&gt;
:'''A.''' No. Compare it to running Java applications without people requiring to install Java runtime environment.&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=667</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=667"/>
		<updated>2005-04-22T09:21:05Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: remove spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border:1px solid black; background-color:lavender; padding:10pt;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| '''GNUstep''' is a [[Portability|cross-platform]], object-oriented set of [[Frameworks|frameworks]] for desktop application [[Development tools|development]]. The set of frameworks, based on [[OpenStep]] (now [[Cocoa]]), enables developers to rapidly build sophisticated software by employing a large library of reusable software components. GNUstep is already used [[GNUstep in production|in production]] environments at several organizations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== About GNUstep ==&lt;br /&gt;
&lt;br /&gt;
[http://www.gnustep.org GNUstep home page]&lt;br /&gt;
&lt;br /&gt;
[[Project development|Contact and Project development]]&lt;br /&gt;
&lt;br /&gt;
[[Architecture]]&lt;br /&gt;
&lt;br /&gt;
[[FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Application News ]]&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
[[GNUstep_Installation_Process|GNUstep Installation Process]]&lt;br /&gt;
&lt;br /&gt;
[[Internationalisation]]&lt;br /&gt;
&lt;br /&gt;
[[GNUstep environments]]&lt;br /&gt;
&lt;br /&gt;
[[Wish list]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
[[Development Subprojects]] ([[Themability]], [[Portability]], [[Package management]], [[I18n]], ...)&lt;br /&gt;
&lt;br /&gt;
[[Development tools]]&lt;br /&gt;
&lt;br /&gt;
[[Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Frameworks]]&lt;br /&gt;
&lt;br /&gt;
[[Installation process]]&lt;br /&gt;
&lt;br /&gt;
[[Scripting]]&lt;br /&gt;
&lt;br /&gt;
== [[Glossary]] ==&lt;br /&gt;
&lt;br /&gt;
== About Wiki ==&lt;br /&gt;
&lt;br /&gt;
[http://www.possibility.com/epowiki/Wiki.jsp?page=HowToOrganizeWiki How To Organize Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_development Wiki Dev Doc]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User'sGuide]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_FAQ FAQ]&lt;br /&gt;
&lt;br /&gt;
[http://wikipedia.sourceforge.net WikiPedia]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=I18n&amp;diff=638</id>
		<title>I18n</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=I18n&amp;diff=638"/>
		<updated>2005-04-15T06:37:55Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: minor edits + few questions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Internationalisation (or localisation) touches:&lt;br /&gt;
* '''Input''' - how a user writes a text&lt;br /&gt;
* '''Presentation''' (or output) - how a text is presented to the user&lt;br /&gt;
* Aids - writing aids and processing mechanisms with and without user interaction&lt;br /&gt;
* Localisation of user interface&lt;br /&gt;
&lt;br /&gt;
== Related informations ==&lt;br /&gt;
&lt;br /&gt;
Input method standards:&lt;br /&gt;
&lt;br /&gt;
* XIM&lt;br /&gt;
* IIIMF&lt;br /&gt;
* UIM&lt;br /&gt;
* kinput2&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
* vertical text layout&lt;br /&gt;
* bidi text layout&lt;br /&gt;
* opentype support&lt;br /&gt;
* [http://www.w3.org/TR/css3-text/ CSS3 Text Module]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
* NSTextView&lt;br /&gt;
* Typesetters&lt;br /&gt;
* Opentype supports&lt;br /&gt;
* Word hyphenation&lt;br /&gt;
* Word segmentation&lt;br /&gt;
&lt;br /&gt;
Input:&lt;br /&gt;
&lt;br /&gt;
* NSTextInput protocol&lt;br /&gt;
* NSInputManager&lt;br /&gt;
&lt;br /&gt;
Aid:&lt;br /&gt;
&lt;br /&gt;
* Spell-checking NSSpellChecker&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
I'm trying to form a gnustep-i18n team and list all relevant subjects.&lt;br /&gt;
If you are experienced in this field, please help.&lt;br /&gt;
&lt;br /&gt;
== FIXME ==&lt;br /&gt;
&lt;br /&gt;
* what input method(s) GNUstep currently uses and for what backend? How?&lt;br /&gt;
* what output method(s) is used? How? Why?&lt;br /&gt;
* what aids are available? how they are backed? (for example, what spellchecking backend is used and how?)&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=HowToUseWiki&amp;diff=2006</id>
		<title>HowToUseWiki</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=HowToUseWiki&amp;diff=2006"/>
		<updated>2005-04-05T06:46:37Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Removed spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Cocoa&amp;diff=653</id>
		<title>Cocoa</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Cocoa&amp;diff=653"/>
		<updated>2005-03-24T12:46:02Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From the [http://developer.apple.com/cocoa/ Apple] site: '''Cocoa''' is an object-oriented application environment designed specifically for developing Mac OS X-only native applications. The Cocoa frameworks include a complete set of classes, and for developers starting new Mac OS X-only projects, Cocoa provides the fastest way to full-featured, extensible, and maintainable applications. You can bring applications from UNIX and other platforms to Mac OS X quickly by using Cocoa to build state-of-the-art Aqua user interfaces while retaining most existing core code.&lt;br /&gt;
&lt;br /&gt;
More info can be found at http://developer.apple.com/cocoa/&lt;br /&gt;
&lt;br /&gt;
Predcessor to the Cocoa is [[OpenStep]].&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=OpenStep&amp;diff=927</id>
		<title>OpenStep</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=OpenStep&amp;diff=927"/>
		<updated>2005-03-24T12:42:54Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: reference Cocoa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenStep is an Application Programming Interface (API) for creating applications using the Objective C language. It was published by NeXT Computer Inc. in 1994.&lt;br /&gt;
&lt;br /&gt;
OpenStep consists of three parts:&lt;br /&gt;
* the [[Foundation]]Kit, a library of non-graphical objects;&lt;br /&gt;
* the [[AppKit]], a library of objects useful in creating graphical applications;&lt;br /&gt;
* and [[Display Postscript]], an interface for drawing to the screen using the PostScript graphics language.&lt;br /&gt;
&lt;br /&gt;
The OpenStep specification is available in a couple of different formats from [http://www.gnustep.org/resources/resources.html].&lt;br /&gt;
&lt;br /&gt;
Commercial successor of the OpenStep is Apple's [[Cocoa]].&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=654</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=654"/>
		<updated>2005-03-24T12:42:02Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;border:1px solid black; background-color:lavender; padding:10pt;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| '''GNUstep''' is a [[Portability|cross-platform]], object-oriented set of [[Frameworks|frameworks]] for desktop application [[Development tools|development]]. The set of frameworks, based on [[OpenStep]] (now [[Cocoa]]), enables developers to rapidly build sophisticated software by employing a large library of reusable software components. GNUstep is already used [[GNUstep in production|in production]] environments at several organizations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== About GNUstep ==&lt;br /&gt;
&lt;br /&gt;
[http://www.gnustep.org GNUstep home page]&lt;br /&gt;
&lt;br /&gt;
[[Project development|Contact and Project development]]&lt;br /&gt;
&lt;br /&gt;
[[Architecture]]&lt;br /&gt;
&lt;br /&gt;
[[FAQ]]&lt;br /&gt;
&lt;br /&gt;
[[Application News ]]&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
[[GNUstep_Installation_Process|GNUstep Installation Process]]&lt;br /&gt;
&lt;br /&gt;
[[Internationalisation]]&lt;br /&gt;
&lt;br /&gt;
[[GNUstep environments]]&lt;br /&gt;
&lt;br /&gt;
[[Wish list]]&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
'''[[Development Subprojects]]''' (Themability, Portability, Package management, ...)&lt;br /&gt;
&lt;br /&gt;
[[Development tools]]&lt;br /&gt;
&lt;br /&gt;
[[Applications]]&lt;br /&gt;
&lt;br /&gt;
[[Frameworks]]&lt;br /&gt;
&lt;br /&gt;
[[Installation process]]&lt;br /&gt;
&lt;br /&gt;
[[Scripting]]&lt;br /&gt;
&lt;br /&gt;
== [[Glossary]] ==&lt;br /&gt;
&lt;br /&gt;
== About Wiki ==&lt;br /&gt;
&lt;br /&gt;
[http://www.possibility.com/epowiki/Wiki.jsp?page=HowToOrganizeWiki How To Organize Wiki]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_development Wiki Dev Doc]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User'sGuide]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_FAQ FAQ]&lt;br /&gt;
&lt;br /&gt;
[http://wikipedia.sourceforge.net WikiPedia]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Delegate&amp;diff=938</id>
		<title>Delegate</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Delegate&amp;diff=938"/>
		<updated>2005-03-21T12:20:36Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extend with Delegates: http://cocoadevcentral.com/articles/000075.php&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=NSDocument&amp;diff=806</id>
		<title>NSDocument</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=NSDocument&amp;diff=806"/>
		<updated>2005-03-20T19:50:05Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NSDocument is ...&lt;br /&gt;
&lt;br /&gt;
== Code chunks ==&lt;br /&gt;
&lt;br /&gt;
=== Multiple editors ===&lt;br /&gt;
&lt;br /&gt;
If your document uses multiple editors and each is represented with a single [[NSWindowController]], you can commit all edits like in the following (obvious) code. Requirement is, that each NSWindowController should implement ''commitEditing''.&lt;br /&gt;
&lt;br /&gt;
 - (void)commitEdits&lt;br /&gt;
 {&lt;br /&gt;
    NSWindowController *controller;&lt;br /&gt;
    NSEnumerator       *enumerator;&lt;br /&gt;
    &lt;br /&gt;
    enumerator = [[self windowControllers] objectEnumerator];&lt;br /&gt;
    &lt;br /&gt;
    while( (controller = [enumerator nextObject]) )&lt;br /&gt;
    {&lt;br /&gt;
        if([controller respondsToSelector:@selector(commitEditing)])&lt;br /&gt;
        {&lt;br /&gt;
            [controller commitEditing];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=AppKit&amp;diff=1007</id>
		<title>AppKit</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=AppKit&amp;diff=1007"/>
		<updated>2005-03-20T19:45:58Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: /* Classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GNUstep GUI Library is a library of objects useful for writing graphical applications. For example, it includes classes for drawing and manipulating graphics objects on the screen: [[NSWindow|windows]], [[NSMenu|menus]], [[NSButton|buttons]], [[NSSlider|sliders]], [[NSTextField|text fields]], and [[NSEvent|events]]. There are also many classes that offer operating-system-independent interfaces to [[NSImage|images]], [[NSCursor|cursors]], [[NSColor|colors]], [[NSFont|fonts]], [[NSPasteboard|pasteboards]], printing. There are also workspace support classes such as data links, open/save panels, context-dependent help, spell checking.&lt;br /&gt;
&lt;br /&gt;
It provides functionality that aims to implement the `AppKit' portion of the [[OpenStep]] standard. However the implementation has been written to take advantage of GNUstep enhancements wherever possible.&lt;br /&gt;
&lt;br /&gt;
The GNUstep GUI Library is divided into a front and back-end. The front-end contains the majority of implementation, but leaves out the low-level drawing and event code. Different back-ends will make GNUstep available on various platforms. The default GNU back-end currently runs on top of the X Window System and uses only Xlib calls for graphics. Another backend uses a Display Postscript Server for graphics. Much work will be saved by this clean separation between front and back-end, because it allows different platforms to share the large amount of front-end code. Documentation for how the individual backends work is coverered in a separate document.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* user interface elements (table views, browsers, matrices, scroll views)&lt;br /&gt;
* graphics (WYSIWYG, postscript-like graphics, bezier paths, image handling with multiple representations, graphical contextes)&lt;br /&gt;
* [[Colors|color management]] (calibrated vs. device colors; CMYK, RGB, HSB, gray and named color representations; alpha transparency)&lt;br /&gt;
* [[Text]] system features: rich text format, text attachements, layout manager, typesetter, rules, paragraph styles, font management, [[Spell checking|spell checking]]&lt;br /&gt;
* [[Document architecture|document management]]&lt;br /&gt;
* [[Printing|printing features]]: print operations, print panel and page layout&lt;br /&gt;
* help manager&lt;br /&gt;
* [[Pasteboard|pasteboard]] (aka clip board) services&lt;br /&gt;
* [[Spell checking|spell checker]]&lt;br /&gt;
* [[Workspace|workspace]] bindings for applications&lt;br /&gt;
* [[Drag and drop]] operations&lt;br /&gt;
* [[Application services|services]] sharing among applications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
* [[NSDocument]]&lt;br /&gt;
* [[NSTableView]] &lt;br /&gt;
* [[NSView]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=DevelopmentKit&amp;diff=923</id>
		<title>DevelopmentKit</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=DevelopmentKit&amp;diff=923"/>
		<updated>2005-03-19T13:12:30Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: added &amp;quot;mutable&amp;quot; flag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Develompent Kit Framework is [[ObjectiveC]]/[[GNUstep]] framework for generating Objective C code based projects and sources from applications.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
*  class compositing&lt;br /&gt;
*  objective c source parsing and transforming into development objects (classes, methods, variables,...)&lt;br /&gt;
*  source file generation using templates&lt;br /&gt;
*  project building&lt;br /&gt;
&lt;br /&gt;
Project Page: https://savannah.nongnu.org/projects/develkit/&lt;br /&gt;
&lt;br /&gt;
[http://savannah.nongnu.org/cgi-bin/viewcvs/develkit/ Browse CVS Tree]&lt;br /&gt;
&lt;br /&gt;
Author: [[user:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== dkautogen ===&lt;br /&gt;
Autogenerate ObjectiveC Interface and Implementation methods&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
 dkautogen file1.h file2.h ...&lt;br /&gt;
&lt;br /&gt;
Type 'dkautogen help' for more information.&lt;br /&gt;
&lt;br /&gt;
To each .h and corresponding .m file a category DKGenerated is appended. If there is already such category, then it is replaced.&lt;br /&gt;
&lt;br /&gt;
Instance variable keywords&lt;br /&gt;
&lt;br /&gt;
  hidden         - do not generate accessor methods&lt;br /&gt;
  exposed        - expose accessor methods&lt;br /&gt;
  retained       - object is retained&lt;br /&gt;
  notretained    - object is NOT retained (weak reference)&lt;br /&gt;
  readonly       - instance variable is read only (setter is not generated)&lt;br /&gt;
  mutable        - instance variable is mutable (setter is generated despite &amp;quot;readonly&amp;quot; class default)&lt;br /&gt;
  notarchived    - ignore in archiving&lt;br /&gt;
  object         - instance variable is an object (see below)&lt;br /&gt;
  customaccess   - do not generate implementation of accessor methods, generate interface only&lt;br /&gt;
&lt;br /&gt;
Class keywords (defaults for all instance variables)&lt;br /&gt;
&lt;br /&gt;
  hidden         - all ivars are hidden&lt;br /&gt;
  exposed        - all ivars are exposed (accessors are generated)&lt;br /&gt;
  retained       - all objects are retained&lt;br /&gt;
  notretained    - objects are NOT retained&lt;br /&gt;
  readonly       - all instance variable are read only&lt;br /&gt;
  objects        - treat all unknown types as objects&lt;br /&gt;
  customarchive  - do not generate archiving methods&lt;br /&gt;
  nosuperarchive - do not call archiving in superclass&lt;br /&gt;
  customdealloc  - do not generate -dealloc method&lt;br /&gt;
&lt;br /&gt;
'''Known types'''&lt;br /&gt;
&lt;br /&gt;
All standard C types including [[NSPoint]], [[NSSize]], [[NSRect]] and [[NSRange]] are treated as non-objects. By default only id and Class types are treated as objects.&lt;br /&gt;
&lt;br /&gt;
Generated methods by default: accessors (getter and setter), dealloc methon, initWithCoder:, and encodeWithCoder&lt;br /&gt;
&lt;br /&gt;
'''How to use'''&lt;br /&gt;
&lt;br /&gt;
Attributes are written in same comments used for auto-documentation. They are read from comments after the LAST pipe '|' character in the comment  and they should be separated by spaces. Example:&lt;br /&gt;
&lt;br /&gt;
    NSString *name; /** Object name | object readonly retained */&lt;br /&gt;
&lt;br /&gt;
Class defaults are written immediately before @interface:&lt;br /&gt;
&lt;br /&gt;
    /** This is my class | nosuperarchive retained objects */&lt;br /&gt;
    @interface MyClass : NSObject&lt;br /&gt;
&lt;br /&gt;
Preferences (also usable as switches on commandline with '-' prefix):&lt;br /&gt;
    interfaceTemplate      - path to .h file template&lt;br /&gt;
    implementationTemplate - path to .m file template&lt;br /&gt;
    beginTag               - tag used to mark beginning of generated code&lt;br /&gt;
    endTag                 - tag used to mark end of generated code&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
    dkautogen -implementationTemplate MyTemplate.m SomeClass.h&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
&lt;br /&gt;
* DKBuildMessage&lt;br /&gt;
* DKClass&lt;br /&gt;
* DKFramework&lt;br /&gt;
* DKFrameworkManager&lt;br /&gt;
* DKMethod&lt;br /&gt;
* DKObjectiveCParser&lt;br /&gt;
* DKProjectBuilder&lt;br /&gt;
* DKProject&lt;br /&gt;
* DKSourceGenerator&lt;br /&gt;
* DKTemplateMerger&lt;br /&gt;
* DKVariable&lt;br /&gt;
&lt;br /&gt;
DevelKit reuses class [[AGSParser]] from [[autogsdoc]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_release_procedure&amp;diff=1965</id>
		<title>GNUstep release procedure</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_release_procedure&amp;diff=1965"/>
		<updated>2005-03-17T11:33:54Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Steps for releasing the GNUstep core libraries (as well as others):&lt;br /&gt;
&lt;br /&gt;
1. Make sure news.texi and ReleaseNotes.gsdoc files are updated&lt;br /&gt;
&lt;br /&gt;
2. Update the 'Version' file with the new version&lt;br /&gt;
&lt;br /&gt;
3. Update the documentation and release notes in the main directory:&lt;br /&gt;
&lt;br /&gt;
 cd Documentation&lt;br /&gt;
 make clean; make; make regenerate&lt;br /&gt;
&lt;br /&gt;
4. Add a line in the ChangeLog, like:&lt;br /&gt;
&lt;br /&gt;
 '* Version 1.10.0' as well.&lt;br /&gt;
&lt;br /&gt;
and commit the changed files.&lt;br /&gt;
&lt;br /&gt;
5. Tag the release&lt;br /&gt;
&lt;br /&gt;
 make cvs-tag&lt;br /&gt;
&lt;br /&gt;
6. Make a source distribution&lt;br /&gt;
&lt;br /&gt;
 make cvs-dist&lt;br /&gt;
&lt;br /&gt;
7. Administrative stuff (scripts that I use to make this easier are in brackets):&lt;br /&gt;
&lt;br /&gt;
* Make RPMS or whatever [gstep-distribute]&lt;br /&gt;
* Sign the packages [gstep-sign]&lt;br /&gt;
* Upload packages to ftp.gnustep.org [gstep-update, gstep-upload]&lt;br /&gt;
* Install the documentation and copy it to the web repository [update_documentation]&lt;br /&gt;
* Update the index.html and resources/downloads.php pages with the news.&lt;br /&gt;
* Commit the web repository.&lt;br /&gt;
* Make an announcement on info-gnustep@gnu.org, etc&lt;br /&gt;
&lt;br /&gt;
''Note: gstep-distribute, gstep-update: must be run as root/sudo''&lt;br /&gt;
&lt;br /&gt;
If the packages are used by the GNUstep umbrella package (runtime or development environment), then the ubrella package should be released too.&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
It is desired that the release is made from CVS checkout. The release should correspond to a tagged state in the CVS.&lt;br /&gt;
&lt;br /&gt;
Also it is required that all release test passed. If not, the release should not be created. For more information about the tests see [[Quality assurance]].&lt;br /&gt;
&lt;br /&gt;
Follow standard versioning guidelines.&lt;br /&gt;
&lt;br /&gt;
[[Category:Project procedures]]&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Talk:Roadmap&amp;diff=1964</id>
		<title>Talk:Roadmap</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Talk:Roadmap&amp;diff=1964"/>
		<updated>2005-03-14T14:13:18Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Comments on clarifications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Arobert|Arobert]] writes: ''There are many parts of GUI that are not finished, though they do not come up as often in applications as the parts that are finished.  They are marked in the code by &amp;quot;//FIXME&amp;quot; usually.  One example is handling of scrollbars of multiple widths.  OpenStep provides for both two fixed scrollbar widths (normal and small) and a variable-width option.  Neither are supported in GUI (but are not used that often).''&lt;br /&gt;
&lt;br /&gt;
Is that a &amp;quot;show stopper&amp;quot; for the 1.0 release? [[User:Stefan Urbanek|Stefan Urbanek]] 09:18, 23 Feb 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
''What needs to be done for GNUstep 1.0? Can someone provide a check-list? In the checklist, please provide a severity of the task, whether it is a blocker or if we can live without that.''&lt;br /&gt;
&lt;br /&gt;
There are many parts of GUI that are not finished, though they do not come up as often in applications as the parts that are finished.  They are marked in the code by &amp;quot;//FIXME&amp;quot; usually.  One example is handling of scrollbars of multiple widths.  OpenStep provides for both two fixed scrollbar widths (normal and small) and a variable-width option.  Neither are supported in GUI (but are not used that often).&lt;br /&gt;
&lt;br /&gt;
Base is almost entirely complete, excepting some Number formatting capabilities and maybe a couple of other things listed in the bug tracker.&lt;br /&gt;
&lt;br /&gt;
== Clarifications ==&lt;br /&gt;
&lt;br /&gt;
1) GNUstep RTE shouldn't include -make.&lt;br /&gt;
&lt;br /&gt;
2) It should '''''only''''' include&lt;br /&gt;
    -base&lt;br /&gt;
    -gui&lt;br /&gt;
    -back&lt;br /&gt;
&lt;br /&gt;
   that is all that is needed for the run-time environment so that is all that should be there.&lt;br /&gt;
&lt;br /&gt;
3) The Developer Environment is a little trickier. It needs:&lt;br /&gt;
    -runtime environment&lt;br /&gt;
    -make&lt;br /&gt;
    -Project Center&lt;br /&gt;
    -Gorm&lt;br /&gt;
    -Easy Diff would be good &amp;amp; we have it anyway.&lt;br /&gt;
&lt;br /&gt;
Packaging&lt;br /&gt;
&lt;br /&gt;
It is up to the distros to package for their system. We certainly can provide docs and guides to help make things easier and better but it remains that we're the upstream provider.&lt;br /&gt;
&lt;br /&gt;
Many distros will ''not'' want a GNUstep Developer Environment package per se. They'll want it split into several packages, possibly with a meta-package for convenience. There are too many variations and decisions to be made about packaging for there to be a single distribution, especially in binary format.&lt;br /&gt;
&lt;br /&gt;
Source Distro idea&lt;br /&gt;
&lt;br /&gt;
The only distribution provided by the project itself should be the source distribution. GNUstep Startup is the 'package tool' for this. We want the source distro to be&lt;br /&gt;
- download and untar where-ever&lt;br /&gt;
- cd to Startup and execute InstallGNUstep&lt;br /&gt;
&lt;br /&gt;
For this to work, the Startup system will need to be enhanced to build a more complete environment. It'll need to check to see what is available and what the OS is (for FS layout) and do appropriate things from there.&lt;br /&gt;
Maybe it needs to get information from a simple configuration file which a user can edit to specify what they want?&lt;br /&gt;
&lt;br /&gt;
== Comments on clarifications ==&lt;br /&gt;
&lt;br /&gt;
'''GNUstep RTE''' - Well, i think, that there should be some kind of 'launcher' application too. Some very simple app that can list and launch installed GNUstep applications. Something that can be described as ''computer-human interface to the gnustep environment''&lt;br /&gt;
&lt;br /&gt;
'''Packagers''' - I agree, that packaging should be matter of host operating system. However! GNUstep shuold have mechanisms and/or tools for managing GNUstep 'packages' such as applications and frameworks. The packages belong to the GNUstep Env., not to the host operating system, therefore installing an application can be compared to adding a new macro to the MS Word. Yes, it is very extreme analogy, however GNUstep is stand-alone guest environment interacting with its surroundings. Applications, frameworks and bundles are in fact 'modules' or 'plug-ins' of one environment.&lt;br /&gt;
&lt;br /&gt;
--[[User:Stefan Urbanek|Stefan Urbanek]] 15:13, 14 Mar 2005 (CET)&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Talk:Installation_on_Windows&amp;diff=603</id>
		<title>Talk:Installation on Windows</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Talk:Installation_on_Windows&amp;diff=603"/>
		<updated>2005-03-10T15:06:10Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Are the *-bin.zip files needed? Are not the *-lib files sufficient?&lt;br /&gt;
&lt;br /&gt;
[[User:Stefan Urbanek|Stefan Urbanek]] 16:06, 10 Mar 2005 (CET)&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Installation_on_Windows&amp;diff=593</id>
		<title>Installation on Windows</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Installation_on_Windows&amp;diff=593"/>
		<updated>2005-03-10T15:05:07Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Added more download links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Install MinGW ==&lt;br /&gt;
Download MinGW-3.2.0-rc-3 or later from http://sourceforge.net/projects/mingw Install it into&lt;br /&gt;
&lt;br /&gt;
 C:/xxx/msys/1.0/mingw&lt;br /&gt;
&lt;br /&gt;
(where /xxx/ is the top-level path you want to use, I use Nicola/GNUstep so I install it into C:/Nicola/GNUstep/msys/1.0/mingw) (earlier versions of MinGW won't work)&lt;br /&gt;
&lt;br /&gt;
== Install msys ==&lt;br /&gt;
&lt;br /&gt;
Download MSYS-1.0.10 or later from the same site.  Install it into C:/xxx/msys/1.0&lt;br /&gt;
The postinstall script should ask you for the mingw location, then detect it and be happy that it's there and all is setup properly.&lt;br /&gt;
&lt;br /&gt;
== Install msys developer toolkit ==&lt;br /&gt;
&lt;br /&gt;
Download msysDTK-1.0.1 or later from the same site.  Install it into&lt;br /&gt;
&lt;br /&gt;
 C:/xxx/msys/1.0&lt;br /&gt;
&lt;br /&gt;
Now your MSYS/MinGW system should be setup!  Go around and make sure you know how to use the Unix-like shell.  Log into it and work in it.&lt;br /&gt;
&lt;br /&gt;
== Download gnustep using cvs ==&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep make ==&lt;br /&gt;
&lt;br /&gt;
go in core/make and do&lt;br /&gt;
&lt;br /&gt;
 ./configure --prefix=/C/xxx/GNUstep&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Setup your GNUstep environment ==&lt;br /&gt;
&lt;br /&gt;
(you will need to do the same every time you start up your MSYS shell to do development)&lt;br /&gt;
&lt;br /&gt;
 . /C/xxx/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
Also, set HOMEPATH, HOMEDRIVE and HOME ... add the following lines to your ~/.profile:&lt;br /&gt;
&lt;br /&gt;
 export HOMEDRIVE=C:&lt;br /&gt;
 export HOMEPATH=/home/Nicola&lt;br /&gt;
 export HOME=/C/xxx/msys/1.0/home/Nicola&lt;br /&gt;
 . /C/xxx/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
(obviously replacing 'Nicola' with your Login name) (not sure if this setting of HOMEDRIVE etc is really required, will investigate)&lt;br /&gt;
&lt;br /&gt;
== Install the ObjC runtime  ==&lt;br /&gt;
&lt;br /&gt;
Download gnustep-objc, and compile it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Reinstall GNUstep make (with ObjC this time ==&lt;br /&gt;
&lt;br /&gt;
go in core/make and reconfigure/recompile again so that gnustep-objc is detected:&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
 ./configure&lt;br /&gt;
 make &lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
gnustep-make should have detected your custom libobjc.&lt;br /&gt;
&lt;br /&gt;
== Install ffcall ==&lt;br /&gt;
&lt;br /&gt;
Download ffcall from the GNUstep website, and type:&lt;br /&gt;
&lt;br /&gt;
 ./configure --prefix=$GNUSTEP_SYSTEM_ROOT&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Install additional libs ==&lt;br /&gt;
&lt;br /&gt;
Download the following packages:&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=73290 Download libintl]&lt;br /&gt;
&lt;br /&gt;
 libintl-0.11.5-2.bin.zip&lt;br /&gt;
 libintl-0.11.5-2.lib.zip&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=17090 Download libiconv]&lt;br /&gt;
&lt;br /&gt;
 libiconv-1.8.1-bin.zip &lt;br /&gt;
 libiconv-1.8.1-lib.zip &lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16861 Download zlib]&lt;br /&gt;
&lt;br /&gt;
 zlib-1.2.2-bin.zip&lt;br /&gt;
 zlib-1.2.2-lib.zip&lt;br /&gt;
&lt;br /&gt;
from http://gnuwin32.sourceforge.net, and install them.  To install them, simply unzip them into&lt;br /&gt;
&lt;br /&gt;
 /C/xxx/msys/1.0/mingw.&lt;br /&gt;
&lt;br /&gt;
== Install XML support ==&lt;br /&gt;
&lt;br /&gt;
XML support not working yet, step omitted&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep base ==&lt;br /&gt;
&lt;br /&gt;
go in gnustep-base, and type &lt;br /&gt;
&lt;br /&gt;
 ./configure --disable-xml&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Install addditional GUI libs ==&lt;br /&gt;
&lt;br /&gt;
for the gui, download and install the following packages:&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16348&amp;amp;release_id=218220 Download jpeg]&lt;br /&gt;
&lt;br /&gt;
  jpeg-6b-3-bin.zip&lt;br /&gt;
  jpeg-6b-3-dep.zip&lt;br /&gt;
  jpeg-6b-3-lib.zip&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16351 Download tiff]&lt;br /&gt;
&lt;br /&gt;
  tiff-3.7.1-bin.zip&lt;br /&gt;
  tiff-3.7.1-dep.zip&lt;br /&gt;
  tiff-3.7.1-lib.zip&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16183 Download libpng]&lt;br /&gt;
&lt;br /&gt;
  libpng-1.2.8-bin.zip&lt;br /&gt;
  libpng-1.2.8-dep.zip&lt;br /&gt;
  libpng-1.2.8-lib.zip&lt;br /&gt;
&lt;br /&gt;
The process is always the same: download the zip file from the gnuwin32 website, then unzip them into&lt;br /&gt;
&lt;br /&gt;
 /C/xxx/msys/1.0/mingw.&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep gui ==&lt;br /&gt;
&lt;br /&gt;
go in the gui, and type:&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep back ==&lt;br /&gt;
&lt;br /&gt;
go in back, and type:&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
== Check the installation ==&lt;br /&gt;
&lt;br /&gt;
go in a simple gui application (examples/gui a very good starting point), compile and run it. :-)&lt;br /&gt;
&lt;br /&gt;
''based on a mail from Nicola Pero''&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Installation_on_Windows&amp;diff=584</id>
		<title>Installation on Windows</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Installation_on_Windows&amp;diff=584"/>
		<updated>2005-03-10T15:00:28Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: Added links to packages for download&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Install MinGW ==&lt;br /&gt;
Download MinGW-3.2.0-rc-3 or later from http://sourceforge.net/projects/mingw Install it into&lt;br /&gt;
&lt;br /&gt;
 C:/xxx/msys/1.0/mingw&lt;br /&gt;
&lt;br /&gt;
(where /xxx/ is the top-level path you want to use, I use Nicola/GNUstep so I install it into C:/Nicola/GNUstep/msys/1.0/mingw) (earlier versions of MinGW won't work)&lt;br /&gt;
&lt;br /&gt;
== Install msys ==&lt;br /&gt;
&lt;br /&gt;
Download MSYS-1.0.10 or later from the same site.  Install it into C:/xxx/msys/1.0&lt;br /&gt;
The postinstall script should ask you for the mingw location, then detect it and be happy that it's there and all is setup properly.&lt;br /&gt;
&lt;br /&gt;
== Install msys developer toolkit ==&lt;br /&gt;
&lt;br /&gt;
Download msysDTK-1.0.1 or later from the same site.  Install it into&lt;br /&gt;
&lt;br /&gt;
 C:/xxx/msys/1.0&lt;br /&gt;
&lt;br /&gt;
Now your MSYS/MinGW system should be setup!  Go around and make sure you know how to use the Unix-like shell.  Log into it and work in it.&lt;br /&gt;
&lt;br /&gt;
== Download gnustep using cvs ==&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep make ==&lt;br /&gt;
&lt;br /&gt;
go in core/make and do&lt;br /&gt;
&lt;br /&gt;
 ./configure --prefix=/C/xxx/GNUstep&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Setup your GNUstep environment ==&lt;br /&gt;
&lt;br /&gt;
(you will need to do the same every time you start up your MSYS shell to do development)&lt;br /&gt;
&lt;br /&gt;
 . /C/xxx/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
Also, set HOMEPATH, HOMEDRIVE and HOME ... add the following lines to your ~/.profile:&lt;br /&gt;
&lt;br /&gt;
 export HOMEDRIVE=C:&lt;br /&gt;
 export HOMEPATH=/home/Nicola&lt;br /&gt;
 export HOME=/C/xxx/msys/1.0/home/Nicola&lt;br /&gt;
 . /C/xxx/GNUstep/System/Library/Makefiles/GNUstep.sh&lt;br /&gt;
&lt;br /&gt;
(obviously replacing 'Nicola' with your Login name) (not sure if this setting of HOMEDRIVE etc is really required, will investigate)&lt;br /&gt;
&lt;br /&gt;
== Install the ObjC runtime  ==&lt;br /&gt;
&lt;br /&gt;
Download gnustep-objc, and compile it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Reinstall GNUstep make (with ObjC this time ==&lt;br /&gt;
&lt;br /&gt;
go in core/make and reconfigure/recompile again so that gnustep-objc is detected:&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
 ./configure&lt;br /&gt;
 make &lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
gnustep-make should have detected your custom libobjc.&lt;br /&gt;
&lt;br /&gt;
== Install ffcall ==&lt;br /&gt;
&lt;br /&gt;
Download ffcall from the GNUstep website, and type:&lt;br /&gt;
&lt;br /&gt;
 ./configure --prefix=$GNUSTEP_SYSTEM_ROOT&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Install additional libs ==&lt;br /&gt;
&lt;br /&gt;
Download the following packages:&lt;br /&gt;
&lt;br /&gt;
 libintl-0.11.5-2.bin.zip&lt;br /&gt;
 libintl-0.11.5-2.lib.zip&lt;br /&gt;
&lt;br /&gt;
 libiconv-1.8.1-bin.zip &lt;br /&gt;
 libiconv-1.8.1-lib.zip &lt;br /&gt;
&lt;br /&gt;
 zlib-1.2.2-bin.zip&lt;br /&gt;
 zlib-1.2.2-lib.zip&lt;br /&gt;
&lt;br /&gt;
from http://gnuwin32.sourceforge.net, and install them.  To install them, simply unzip them into&lt;br /&gt;
&lt;br /&gt;
 /C/xxx/msys/1.0/mingw.&lt;br /&gt;
&lt;br /&gt;
== Install XML support ==&lt;br /&gt;
&lt;br /&gt;
XML support not working yet, step omitted&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep base ==&lt;br /&gt;
&lt;br /&gt;
go in gnustep-base, and type &lt;br /&gt;
&lt;br /&gt;
 ./configure --disable-xml&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Install addditional GUI libs ==&lt;br /&gt;
&lt;br /&gt;
for the gui, download and install the following packages:&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16348&amp;amp;release_id=218220 Download jpeg]&lt;br /&gt;
&lt;br /&gt;
  jpeg-6b-3-bin.zip&lt;br /&gt;
  jpeg-6b-3-dep.zip&lt;br /&gt;
  jpeg-6b-3-lib.zip&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16351 Download tiff]&lt;br /&gt;
&lt;br /&gt;
  tiff-3.7.1-bin.zip&lt;br /&gt;
  tiff-3.7.1-dep.zip&lt;br /&gt;
  tiff-3.7.1-lib.zip&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/project/showfiles.php?group_id=23617&amp;amp;package_id=16183 Download libpng]&lt;br /&gt;
&lt;br /&gt;
  libpng-1.2.8-bin.zip&lt;br /&gt;
  libpng-1.2.8-dep.zip&lt;br /&gt;
  libpng-1.2.8-lib.zip&lt;br /&gt;
&lt;br /&gt;
The process is always the same: download the zip file from the gnuwin32 website, then unzip them into&lt;br /&gt;
&lt;br /&gt;
 /C/xxx/msys/1.0/mingw.&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep gui ==&lt;br /&gt;
&lt;br /&gt;
go in the gui, and type:&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
== Install GNUstep back ==&lt;br /&gt;
&lt;br /&gt;
go in back, and type:&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
== Check the installation ==&lt;br /&gt;
&lt;br /&gt;
go in a simple gui application (examples/gui a very good starting point), compile and run it. :-)&lt;br /&gt;
&lt;br /&gt;
''based on a mail from Nicola Pero''&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=768</id>
		<title>StepTalk TODO</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=768"/>
		<updated>2005-03-09T21:48:55Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you would like to help [[StepTalk]], just contact me and I will guide you. Requirements: courage only :-)&lt;br /&gt;
&lt;br /&gt;
Contact: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
== 1.0 release ==&lt;br /&gt;
&lt;br /&gt;
* implement NSRect object - see STStruct object&lt;br /&gt;
* implement distant conversations&lt;br /&gt;
* create stenvironment tool&lt;br /&gt;
&lt;br /&gt;
=== STEnvironment tool ===&lt;br /&gt;
&lt;br /&gt;
First, changes to the STConversation is needed as follows:&lt;br /&gt;
* method executing code should not return a value&lt;br /&gt;
* script result object should be fetched by method: -(id)result or -(bycopy id)resultByCopy;&lt;br /&gt;
* conversation object should collect error messages - it should hold kind of transcript&lt;br /&gt;
* it would be great if conversation object can send notifications when transcript was updated&lt;br /&gt;
* conversation object should hold last exception raised by the script&lt;br /&gt;
&lt;br /&gt;
Then stand-alone process should be created with following functionality:&lt;br /&gt;
* point of the stand alone process is that it can load any framework it likes and it should provide semi-persistent environment holding intermediate results of a inter-process and inter-application tasks&lt;br /&gt;
* one creates an STDistantEnvironment object - the object is in fact represented by single process that will be launched on -init&lt;br /&gt;
* the environment process will handle all execution requests - connections are created in form of conversations: user makes conversation with the environment&lt;br /&gt;
* environment is &amp;quot;live&amp;quot; until someone requests it to die&lt;br /&gt;
&lt;br /&gt;
To make it more clear about the STEnvironment stand-alone process, here is an analogy:&lt;br /&gt;
* stenvironment process = database instance&lt;br /&gt;
* conversation = database connection&lt;br /&gt;
* StepTalk script = SQL script&lt;br /&gt;
* result = SQL script result (rows, message, ...)&lt;br /&gt;
&lt;br /&gt;
one should be able to do following:&lt;br /&gt;
&lt;br /&gt;
 stenv create experiment&lt;br /&gt;
 stenv execute experiment script.st&lt;br /&gt;
 stenv execute experiment script2.st&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
     env = [STEnvironment distantEnvironmentWithName:@&amp;quot;experiment&amp;quot;];&lt;br /&gt;
     conversation = [STConversation conversationWithEnvironment:env language:nil];&lt;br /&gt;
     [conversation executeScript:aScript];&lt;br /&gt;
     result = [conversation resultByCopy]; /* or .... [conversation result] */ &lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
== Smalltalk ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite Smalltalk compiler (grammar)&lt;br /&gt;
** Remove STBytecodeInterpreter and use only STCompiler. How?&lt;br /&gt;
Simply convert language constructions into 'command' objects like&lt;br /&gt;
SmalltalkStatement, SmalltalkPrimary, SmalltalkMethodSend, ...&lt;br /&gt;
and implement executeInEnvironment:context:receiver:&lt;br /&gt;
        &lt;br /&gt;
* Update application scripting to use STConversation&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* handle 'connection did die' notification for distant objects in STEnvironment&lt;br /&gt;
* fix class-info lookup for proxies in STEnvironment&lt;br /&gt;
* Smalltalk: separate compiler and compilation context&lt;br /&gt;
* create a 'Shell' scripting environment&lt;br /&gt;
* Create ApplicationScripting framework, instead of bundle. It should offer&lt;br /&gt;
passive application scripting (without linking) and active app. scripting&lt;br /&gt;
(linking with the framewotk). Give it some reasonable name, becauase that one&lt;br /&gt;
is already used by Apple&lt;br /&gt;
* Add framework list into environment description&lt;br /&gt;
* Change Modules to Frameworks&lt;br /&gt;
* Fill implementation of STScriptObject, STMethod and related STEngine methods&lt;br /&gt;
* Remove empty directories (Source, Modules/StepTalk)&lt;br /&gt;
* Replace STMethod languageName with map table of method class-&amp;gt;engine class&lt;br /&gt;
&lt;br /&gt;
* integrate with Gorm - use Script objects, make a palette for Gorm with script objects&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=580</id>
		<title>StepTalk TODO</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=580"/>
		<updated>2005-03-09T21:47:44Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you would like to help StepTalk, just contact me and I will guide you. Requirements: courage only :-)&lt;br /&gt;
&lt;br /&gt;
Contact: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
== 1.0 release ==&lt;br /&gt;
&lt;br /&gt;
* implement NSRect object - see STStruct object&lt;br /&gt;
* implement distant conversations&lt;br /&gt;
* create stenvironment tool&lt;br /&gt;
&lt;br /&gt;
=== STEnvironment tool ===&lt;br /&gt;
&lt;br /&gt;
First, changes to the STConversation is needed as follows:&lt;br /&gt;
* method executing code should not return a value&lt;br /&gt;
* script result object should be fetched by method: -(id)result or -(bycopy id)resultByCopy;&lt;br /&gt;
* conversation object should collect error messages - it should hold kind of transcript&lt;br /&gt;
* it would be great if conversation object can send notifications when transcript was updated&lt;br /&gt;
* conversation object should hold last exception raised by the script&lt;br /&gt;
&lt;br /&gt;
Then stand-alone process should be created with following functionality:&lt;br /&gt;
* point of the stand alone process is that it can load any framework it likes and it should provide semi-persistent environment holding intermediate results of a inter-process and inter-application tasks&lt;br /&gt;
* one creates an STDistantEnvironment object - the object is in fact represented by single process that will be launched on -init&lt;br /&gt;
* the environment process will handle all execution requests - connections are created in form of conversations: user makes conversation with the environment&lt;br /&gt;
* environment is &amp;quot;live&amp;quot; until someone requests it to die&lt;br /&gt;
&lt;br /&gt;
To make it more clear about the STEnvironment stand-alone process, here is an analogy:&lt;br /&gt;
* stenvironment process = database instance&lt;br /&gt;
* conversation = database connection&lt;br /&gt;
* StepTalk script = SQL script&lt;br /&gt;
* result = SQL script result (rows, message, ...)&lt;br /&gt;
&lt;br /&gt;
one should be able to do following:&lt;br /&gt;
&lt;br /&gt;
 stenv create experiment&lt;br /&gt;
 stenv execute experiment script.st&lt;br /&gt;
 stenv execute experiment script2.st&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
     env = [STEnvironment distantEnvironmentWithName:@&amp;quot;experiment&amp;quot;];&lt;br /&gt;
     conversation = [STConversation conversationWithEnvironment:env language:nil];&lt;br /&gt;
     [conversation executeScript:aScript];&lt;br /&gt;
     result = [conversation resultByCopy]; /* or .... [conversation result] */ &lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
== Smalltalk ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite Smalltalk compiler (grammar)&lt;br /&gt;
** Remove STBytecodeInterpreter and use only STCompiler. How?&lt;br /&gt;
Simply convert language constructions into 'command' objects like&lt;br /&gt;
SmalltalkStatement, SmalltalkPrimary, SmalltalkMethodSend, ...&lt;br /&gt;
and implement executeInEnvironment:context:receiver:&lt;br /&gt;
        &lt;br /&gt;
* Update application scripting to use STConversation&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* handle 'connection did die' notification for distant objects in STEnvironment&lt;br /&gt;
* fix class-info lookup for proxies in STEnvironment&lt;br /&gt;
* Smalltalk: separate compiler and compilation context&lt;br /&gt;
* create a 'Shell' scripting environment&lt;br /&gt;
* Create ApplicationScripting framework, instead of bundle. It should offer&lt;br /&gt;
passive application scripting (without linking) and active app. scripting&lt;br /&gt;
(linking with the framewotk). Give it some reasonable name, becauase that one&lt;br /&gt;
is already used by Apple&lt;br /&gt;
* Add framework list into environment description&lt;br /&gt;
* Change Modules to Frameworks&lt;br /&gt;
* Fill implementation of STScriptObject, STMethod and related STEngine methods&lt;br /&gt;
* Remove empty directories (Source, Modules/StepTalk)&lt;br /&gt;
* Replace STMethod languageName with map table of method class-&amp;gt;engine class&lt;br /&gt;
&lt;br /&gt;
* integrate with Gorm - use Script objects, make a palette for Gorm with script objects&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=579</id>
		<title>StepTalk TODO</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=StepTalk_TODO&amp;diff=579"/>
		<updated>2005-03-09T21:42:18Z</updated>

		<summary type="html">&lt;p&gt;Stefan Urbanek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you would like to help StepTalk, just contact me and I will guide you. Requirements: courage only :-)&lt;br /&gt;
&lt;br /&gt;
Contact: [[User:Stefan Urbanek|Stefan Urbanek]]&lt;br /&gt;
&lt;br /&gt;
== 1.0 release ==&lt;br /&gt;
&lt;br /&gt;
* implement NSRect object - see STStruct object&lt;br /&gt;
* implement distant conversations&lt;br /&gt;
* create stenvironment tool&lt;br /&gt;
&lt;br /&gt;
=== STEnvironment tool ===&lt;br /&gt;
&lt;br /&gt;
First, changes to the STConversation is needed as follows:&lt;br /&gt;
* method executing code should not return a value&lt;br /&gt;
* script result object should be fetched by method: -(id)result or -(bycopy id)resultByCopy;&lt;br /&gt;
* conversation object should collect error messages - it should hold kind of transcript&lt;br /&gt;
* it would be great if conversation object can send notifications when transcript was updated&lt;br /&gt;
* conversation object should hold last exception raised by the script&lt;br /&gt;
&lt;br /&gt;
Then stand-alone process should be created with following functionality:&lt;br /&gt;
* point of the stand alone process is that it can load any framework it likes and it should provide semi-persistent environment holding intermediate results of a inter-process and inter-application tasks&lt;br /&gt;
* one creates an STDistantEnvironment object - the object is in fact represented by single process that will be launched on -init&lt;br /&gt;
* the environment process will handle all execution requests - connections are created in form of conversations: user makes conversation with the environment&lt;br /&gt;
* environment is &amp;quot;live&amp;quot; until someone requests it to die&lt;br /&gt;
&lt;br /&gt;
To make it more clear about the STEnvironment stand-alone process, here is an analogy:&lt;br /&gt;
* stenvironment process = database instance&lt;br /&gt;
* conversation = database connection&lt;br /&gt;
* StepTalk script = SQL script&lt;br /&gt;
* result = SQL script result (rows, message, ...)&lt;br /&gt;
&lt;br /&gt;
one should be able to do following:&lt;br /&gt;
&lt;br /&gt;
 stenv create experiment&lt;br /&gt;
 stenv execute experiment script.st&lt;br /&gt;
 stenv execute experiment script2.st&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
     env = [STEnvironment distantEnvironmentWithName:@&amp;quot;experiment&amp;quot;];&lt;br /&gt;
     conversation = [STConversation conversationWithEnvironment:env language:nil];&lt;br /&gt;
     [conversation executeScript:aScript];&lt;br /&gt;
     result = [conversation resultByCopy]; /* or .... [conversation result] */ &lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
== Smalltalk ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite Smalltalk compiler (grammar)&lt;br /&gt;
** Remove STBytecodeInterpreter and use only STCompiler. How?&lt;br /&gt;
Simply convert language constructions into 'command' objects like&lt;br /&gt;
SmalltalkStatement, SmalltalkPrimary, SmalltalkMethodSend, ...&lt;br /&gt;
and implement executeInEnvironment:context:receiver:&lt;br /&gt;
        &lt;br /&gt;
* Update application scripting to use STConversation&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* handle 'connection did die' notification for distant objects in STEnvironment&lt;br /&gt;
* fix class-info lookup for proxies in STEnvironment&lt;br /&gt;
* Smalltalk: separate compiler and compilation context&lt;br /&gt;
* create a 'Shell' scripting environment&lt;br /&gt;
* Create ApplicationScripting framework, instead of bundle. It should offer&lt;br /&gt;
passive application scripting (without linking) and active app. scripting&lt;br /&gt;
(linking with the framewotk). Give it some reasonable name, becauase that one&lt;br /&gt;
is already used by Apple&lt;br /&gt;
* Add framework list into environment description&lt;br /&gt;
* Change Modules to Frameworks&lt;br /&gt;
* Fill implementation of STScriptObject, STMethod and related STEngine methods&lt;br /&gt;
* Remove empty directories (Source, Modules/StepTalk)&lt;br /&gt;
* Replace STMethod languageName with map table of method class-&amp;gt;engine class&lt;/div&gt;</summary>
		<author><name>Stefan Urbanek</name></author>
	</entry>
</feed>