<?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=Mguesdon</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=Mguesdon"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php/Special:Contributions/Mguesdon"/>
	<updated>2026-04-21T05:03:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6435</id>
		<title>User:Mguesdon</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6435"/>
		<updated>2012-07-31T11:23:39Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manuel Guesdon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Home''': [http://www.orange-concept.com Orange Concept]&lt;br /&gt;
&lt;br /&gt;
'''Email''': mguesdon [at] orange-concept.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUstep Stuff''': [http://www.gnustepweb.org GNUstepWeb] and gdl2&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6434</id>
		<title>User:Mguesdon</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6434"/>
		<updated>2012-07-31T11:10:05Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manuel Guesdon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Home''': [http://www.orange-concept.com Orange Concept]&lt;br /&gt;
&lt;br /&gt;
'''Email''': mguesdon [at] orange-concept.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUstep Stuff''': [http://www.gnustepweb.org GNUstepWeb] and gdl2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $v = &amp;quot;string&amp;quot;;    // sample initialization&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
html text&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
    echo $v;         // end of php code&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6433</id>
		<title>User:Mguesdon</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6433"/>
		<updated>2012-07-31T11:03:26Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manuel Guesdon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Home''': [http://www.orange-concept.com Orange Concept]&lt;br /&gt;
&lt;br /&gt;
'''Email''': mguesdon [at] orange-concept.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUstep Stuff''': [http://www.gnustepweb.org GNUstepWeb] and gdl2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $v = &amp;quot;string&amp;quot;;    // sample initialization&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
html text&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
    echo $v;         // end of php code&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6432</id>
		<title>User:Mguesdon</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6432"/>
		<updated>2012-07-31T11:00:30Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manuel Guesdon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Home''': [http://www.orange-concept.com Orange Concept]&lt;br /&gt;
&lt;br /&gt;
'''Email''': mguesdon [at] orange-concept.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUstep Stuff''': [http://www.gnustepweb.org GNUstepWeb] and gdl2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[a b:c];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6431</id>
		<title>User:Mguesdon</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=6431"/>
		<updated>2012-07-31T10:54:11Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manuel Guesdon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Home''': [http://www.orange-concept.com Orange Concept]&lt;br /&gt;
&lt;br /&gt;
'''Email''': mguesdon [at] orange-concept.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUstep Stuff''': [http://www.gnustepweb.org GNUstepWeb] and gdl2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $v = &amp;quot;string&amp;quot;;    // sample initialization&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
html text&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
    echo $v;         // end of php code&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=5630</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=5630"/>
		<updated>2009-04-30T13:31:37Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Companies which use and/or support GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Note: Please leave a short note about how is the company related to GNUstep. Please sort the list alphabetically.''&lt;br /&gt;
&lt;br /&gt;
== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Mobile Solutions Ltd] has one the most advanced SMS/MMS mobile marketing platforms on the market, and it's all running on GNUstep.&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept] is working mainly on [http://www.gnustepweb.org GNUstepWeb] and [[GDL|GDL2]] for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
* [http://www.goldelico.com/ Golden Delicious Computers] is working on [http://www.quantum-step.com QuantumSTEP] for Embedded Devices&lt;br /&gt;
&lt;br /&gt;
== Companies which use and/or support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
* [http://www.intars.at/ Ayers Application Design &amp;amp; Development]&lt;br /&gt;
* [http://www.ivt.baug.ethz.ch/oev/RailMLEditor_d.html Institut für Verkehrsplanung und Transportsysteme]&lt;br /&gt;
* Microcom ([http://www.cyberpokershop.com CyberPokerShop], [http://www.cyberdvdfilms.com CyberDVDFilms]) &amp;lt;br&amp;gt;uses [http://www.eCommStep.com eCommStep], an eCommerce engine based on [http://www.gnustep.org GNUstep], [http://www.gnustepweb.org GNUstepWeb] and [[GDL2]] to run its shops since may 2003.&lt;br /&gt;
* [http://www.lmet.fr Le Monde en Tique] the famous french Computer Science library uses [http://www.eCommStep.com eCommStep] for it's B2C and B2B e-Commerce web site.&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.seat-1.com seat-1 Software GmbH ], business software for small to medium-sized production, trading and service companies. The software product IntarS is powered by [[GNUstepWeb]] on GNU based operating systems.&lt;br /&gt;
&lt;br /&gt;
* [[Smartsoft]] develops highly customized business applications for MacOSX and Solaris.&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=File:Theming.odp&amp;diff=5527</id>
		<title>File:Theming.odp</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=File:Theming.odp&amp;diff=5527"/>
		<updated>2009-02-17T17:26:39Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Success_Stories&amp;diff=5408</id>
		<title>Success Stories</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Success_Stories&amp;diff=5408"/>
		<updated>2009-01-08T18:54:44Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: added link to &amp;quot;GNUstep in production&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cenon =&lt;br /&gt;
[http://www.cenon.info/ Cenon] is a vector graphics tool with a wide range of applications. It is built upon a modular graphical core, and offers a variety of applications beyond desktop publishing. Cenon can convert, import, and export many graphics formats. The modular concept allows the extension of Cenon for specialized applications.&lt;br /&gt;
&lt;br /&gt;
= RailML Editor =&lt;br /&gt;
The [http://www.ivt.baug.ethz.ch/oev/railmleditor_d.html RailML Editor] was ported to GNUstep from OPENSTEP.  The RailML.org Initiative attempts to facilitate communication between railway applications.  RailML Editor is one of the many applications that follow the railML standard.&lt;br /&gt;
&lt;br /&gt;
= NetMage =&lt;br /&gt;
NetMage is a client-server system developed completely in GNUstep and&lt;br /&gt;
Objective-C and running on GNU/Linux and other flavors of *nix. It is&lt;br /&gt;
used internally by the companies NETLAB and GTS Nextra for collective&lt;br /&gt;
monitoring and administering of long-range synchronous radio&lt;br /&gt;
telecommunications links.&lt;br /&gt;
&lt;br /&gt;
Some screenshots:&lt;br /&gt;
&lt;br /&gt;
1. NetMage with the login screen visible and a list of available&lt;br /&gt;
synchronous networks to connect to:&lt;br /&gt;
http://netdev.netlab.sk/netmage1.png&lt;br /&gt;
&lt;br /&gt;
2. NetMage showing a network of radio links in a synchronous network:&lt;br /&gt;
http://netdev.netlab.sk/netmage2.png&lt;br /&gt;
&lt;br /&gt;
3. NetMage showing the settings of a modular link multiplexer along with&lt;br /&gt;
a list of available interface cards:&lt;br /&gt;
http://netdev.netlab.sk/netmage3.png&lt;br /&gt;
&lt;br /&gt;
Please consider the above screenshots licensed under the FDL - I provide&lt;br /&gt;
them in good faith for the endorsement of GNUstep, not for any profit&lt;br /&gt;
(we don't sell the above mentioned software anyways...).&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
[[GNUstep in production]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=5407</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=5407"/>
		<updated>2009-01-08T18:52:10Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Note: Please leave a short note about how is the company related to GNUstep. Please sort the list alphabetically.''&lt;br /&gt;
&lt;br /&gt;
== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Mobile Solutions Ltd] has one the most advanced SMS/MMS mobile marketing platforms on the market, and it's all running on GNUstep.&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept] is working mainly on [http://www.gnustepweb.org GNUstepWeb] and [[GDL|GDL2]] for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
* [http://www.goldelico.com/ Golden Delicious Computers] is working on [http://www.quantum-step.com QuantumSTEP] for Embedded Devices&lt;br /&gt;
&lt;br /&gt;
== Companies which use and/or support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
* [http://www.intars.at/ Ayers Application Design &amp;amp; Development]&lt;br /&gt;
* [http://www.ivt.baug.ethz.ch/oev/RailMLEditor_d.html Institut für Verkehrsplanung und Transportsysteme]&lt;br /&gt;
* Microcom ([http://www.cyberpokershop.com CyberPokerShop], [http://www.cyberdvdfilms.com CyberDVDFilms]) &amp;lt;br&amp;gt;uses [http://www.eCommStep.com eCommStep], an eCommerce engine based on [http://www.gnustep.org GNUstep], [http://www.gnustepweb.org GNUstepWeb] and [[GDL2]] to run its shops since may 2003.&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.seat-1.com seat-1 Software GmbH ], business software for small to medium-sized production, trading and service companies. The software product IntarS is powered by [[GNUstepWeb]] on GNU based operating systems.&lt;br /&gt;
&lt;br /&gt;
* [[Smartsoft]] develops highly customized business applications for MacOSX and Solaris.&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=4929</id>
		<title>GNUstepWeb</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=4929"/>
		<updated>2007-11-23T19:16:15Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Framework|&lt;br /&gt;
shortdescription = GNUstepWeb is a web application library |&lt;br /&gt;
&lt;br /&gt;
currentversion = [http://gnustep.org] |&lt;br /&gt;
&lt;br /&gt;
releasedate = use SVN |&lt;br /&gt;
&lt;br /&gt;
license = LGPL2|&lt;br /&gt;
&lt;br /&gt;
overview =  GNUstepWeb is a development framework for web applications written in Objective-C which is designed to be source-code compatible with [http://www.apple.com/webobjects/ WebObjects] 4.5 - a product originally developed by NeXT Inc, whose newer versions have been released by Apple and are Java-based. |&lt;br /&gt;
&lt;br /&gt;
features = This library is a component of the [[GNUstep]] project in the dev-libs section and is available in the standard ways - such as the [ftp://ftp.gnustep.org/pub/daily-snapshots/dev-libs.current.tar.bz2 GNUstep ftp site].&lt;br /&gt;
&lt;br /&gt;
David Wetzel recommends using the current version that can be obtained by executing the following [[SVN]] check out in an empty directory&lt;br /&gt;
 svn co http://svn.gna.org/svn/gnustep/libs/gsweb/trunk &lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
maintainer = David Wetzel |&lt;br /&gt;
&lt;br /&gt;
Installation tips =&lt;br /&gt;
* Install GNUstep core and gdl2 components&lt;br /&gt;
* Install Apache 2.x&lt;br /&gt;
* Download svn current version (see above)&lt;br /&gt;
* Install Apache2 / GNUstepWeb adaptor module (see GSWAdaptors/Apache/INSTAL in GNUstepWeb Tree)&lt;br /&gt;
* Setup Adaptor configuration (see GSWAdaptors/Apache/INSTAL)&lt;br /&gt;
* Build and install GNUstepWeb (see INSTALL) in GNUstepWeb Tree&lt;br /&gt;
* Build and install Examples/hello (see Examples/hello/INSTALL)&lt;br /&gt;
* Run hello&lt;br /&gt;
* Point your browser to: http://localhost/GSWeb/hello.gswa.&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
relatedlinks = &lt;br /&gt;
* Apple has [http://developer.apple.com/documentation/LegacyTechnologies/WebObjects/WebObjects_4.5/webobjects.html legacy WebObjects 4.5 documentation] available. Please note that the official site [http://www.gnustepweb.org/ gnustepweb.org] is somewhat out of date.  &lt;br /&gt;
* David Wetzel runs a low-volume mailing list called [http://lists.turbocat.net/mailman/listinfo.cgi/gswhackers gswhackers].&lt;br /&gt;
* [[Creating A Simple GSWeb Application]] is very easy. |&lt;br /&gt;
&lt;br /&gt;
category = [[Category:GNUstepWeb]] [[Category:Networking_Frameworks]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=4928</id>
		<title>GNUstepWeb</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=4928"/>
		<updated>2007-11-23T19:15:22Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Framework|&lt;br /&gt;
shortdescription = GNUstepWeb is a web application library |&lt;br /&gt;
&lt;br /&gt;
currentversion = [http://gnustep.org] |&lt;br /&gt;
&lt;br /&gt;
releasedate = use SVN |&lt;br /&gt;
&lt;br /&gt;
license = LGPL2|&lt;br /&gt;
&lt;br /&gt;
overview =  GNUstepWeb is a development framework for web applications written in Objective-C which is designed to be source-code compatible with [http://www.apple.com/webobjects/ WebObjects] 4.5 - a product originally developed by NeXT Inc, whose newer versions have been released by Apple and are Java-based. |&lt;br /&gt;
&lt;br /&gt;
features = This library is a component of the [[GNUstep]] project in the dev-libs section and is available in the standard ways - such as the [ftp://ftp.gnustep.org/pub/daily-snapshots/dev-libs.current.tar.bz2 GNUstep ftp site].&lt;br /&gt;
&lt;br /&gt;
David Wetzel recommends using the current version that can be obtained by executing the following [[SVN]] check out in an empty directory&lt;br /&gt;
 svn co http://svn.gna.org/svn/gnustep/libs/gsweb/trunk &lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
maintainer = David Wetzel |&lt;br /&gt;
&lt;br /&gt;
Installation tips =&lt;br /&gt;
* Install GNUstep core and gdl2 components&lt;br /&gt;
* Install Apache 2.x&lt;br /&gt;
* Download svn current version (see above)&lt;br /&gt;
* Install Apache 2 &amp;lt;-&amp;gt; GNUstepWeb adaptor module (see GSWAdaptors/Apache/INSTAL in GNUstepWeb Tree)&lt;br /&gt;
* Setup Adaptor configuration (see GSWAdaptors/Apache/INSTAL)&lt;br /&gt;
* Build and install GNUstepWeb (see INSTALL) in GNUstepWeb Tree&lt;br /&gt;
* Build and install Examples/hello (see Examples/hello/INSTALL)&lt;br /&gt;
* Run hello&lt;br /&gt;
* Point your browser to: http://localhost/GSWeb/hello.gswa.&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
relatedlinks = &lt;br /&gt;
* Apple has [http://developer.apple.com/documentation/LegacyTechnologies/WebObjects/WebObjects_4.5/webobjects.html legacy WebObjects 4.5 documentation] available. Please note that the official site [http://www.gnustepweb.org/ gnustepweb.org] is somewhat out of date.  &lt;br /&gt;
* David Wetzel runs a low-volume mailing list called [http://lists.turbocat.net/mailman/listinfo.cgi/gswhackers gswhackers].&lt;br /&gt;
* [[Creating A Simple GSWeb Application]] is very easy. |&lt;br /&gt;
&lt;br /&gt;
category = [[Category:GNUstepWeb]] [[Category:Networking_Frameworks]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Stefanbidi&amp;diff=3613</id>
		<title>User:Stefanbidi</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Stefanbidi&amp;diff=3613"/>
		<updated>2006-09-27T08:45:33Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Custom Skins ==&lt;br /&gt;
In order to test some skins, and maybe learn some CSS in the process, the administrator needs to enable User Style codes.  According to wikimedia.org the default is to ignor User Style code, in order to enable it, the following lines need to be added to '''LocalSettings.php'''&lt;br /&gt;
 $wgAllowUserJs  = true;&lt;br /&gt;
 $wgAllowUserCss = true;&lt;br /&gt;
It would be nice if we had this option! [[User:Stefanbidi|Stefanbidi]]&lt;br /&gt;
&lt;br /&gt;
Done&lt;br /&gt;
[[User:Mguesdon|Mguesdon]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=1114</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=1114"/>
		<updated>2005-08-29T15:05:59Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Companies which use and/or support GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Note: Please leave a short note about how is the company related to GNUstep.''&lt;br /&gt;
&lt;br /&gt;
== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept] is working mainly on [http://www.gnustepweb.org GNUstepWeb] and [[GDL|GDL2]] for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
== Companies which use and/or support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom]&amp;lt;br&amp;gt;uses [http://www.eCommStep.com eCommStep], an eCommerce engine based on [http://www.gnustep.org GNUstep], [http://www.gnustepweb.org GNUstepWeb] and [[GDL2]] to run its shop since may 2003.&lt;br /&gt;
* [http://www.seat-1.com seat-1 Software GmbH ], business software for small to medium-sized production, trading and service companies. The software product IntarS is powered by [[GNUstepWeb]] on GNU based operating systems.&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;br /&gt;
* [http://www.ivt.baug.ethz.ch/oev/RailMLEditor_d.html Institut für Verkehrsplanung und Transportsysteme]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GDL2&amp;diff=2056</id>
		<title>GDL2</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GDL2&amp;diff=2056"/>
		<updated>2005-08-29T14:47:53Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GDL]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=945</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=945"/>
		<updated>2005-08-29T14:44:11Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* G */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Please add mainly GNUstep related terms here.''&lt;br /&gt;
&lt;br /&gt;
== A ==&lt;br /&gt;
* [[AppKit]]&lt;br /&gt;
* [[Application]]&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;
* [[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;
&lt;br /&gt;
== F ==&lt;br /&gt;
* First responder - see [[Responder]]&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;
&lt;br /&gt;
== I ==&lt;br /&gt;
* [[Instance variable]]&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]]&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 window - see [[Window]]&lt;br /&gt;
* [[Makefile]]&lt;br /&gt;
* [[MVC]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
* NeXTSTEP&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
* [[Objective-C]]&lt;br /&gt;
* [[OpenStep]] - API standard&lt;br /&gt;
* [[OPENSTEP]] - operating system&lt;br /&gt;
* Outlet - see FIXME&lt;br /&gt;
&lt;br /&gt;
== P ==&lt;br /&gt;
* [[Protocol]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
* [[Responder]]&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;
&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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GDL&amp;diff=2048</id>
		<title>GDL</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GDL&amp;diff=2048"/>
		<updated>2005-08-29T14:42:37Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GNUstep Database Library&lt;br /&gt;
&lt;br /&gt;
[[EOF]] Compatible library&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=936</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=936"/>
		<updated>2005-08-29T14:42:25Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* G */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Please add mainly GNUstep related terms here.''&lt;br /&gt;
&lt;br /&gt;
== A ==&lt;br /&gt;
* [[AppKit]]&lt;br /&gt;
* [[Application]]&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;
* [[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;
&lt;br /&gt;
== F ==&lt;br /&gt;
* First responder - see [[Responder]]&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;
* [[GDL2]]&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
&lt;br /&gt;
== I ==&lt;br /&gt;
* [[Instance variable]]&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]]&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 window - see [[Window]]&lt;br /&gt;
* [[Makefile]]&lt;br /&gt;
* [[MVC]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
* NeXTSTEP&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
* [[Objective-C]]&lt;br /&gt;
* [[OpenStep]] - API standard&lt;br /&gt;
* [[OPENSTEP]] - operating system&lt;br /&gt;
* Outlet - see FIXME&lt;br /&gt;
&lt;br /&gt;
== P ==&lt;br /&gt;
* [[Protocol]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
* [[Responder]]&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;
&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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Creating_document_based_applications&amp;diff=2025</id>
		<title>Creating document based applications</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Creating_document_based_applications&amp;diff=2025"/>
		<updated>2005-08-29T14:38:40Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: First version; subject to further revisions and changes.&lt;br /&gt;
--[[User:Quineska|ChrisArmstrong]] 07:09, 7 Jul 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
[[OpenStep]] can provide your application a document-based model. It helps to simplify the process of creating such applications. [[GNUstep]] implements this as well; this document aims to provide an overview of what is required in the creation and design of such an application.&lt;br /&gt;
&lt;br /&gt;
It is assumed you are familiar with GNUstep, and have some understanding as how to create [[Gorm]]'s interface files (often referred to as nib's), as well as some understanding of how they work.&lt;br /&gt;
&lt;br /&gt;
Importantly, such applications have certain components that are required, and should be considered as part of their design. When programming, classes that will be used as part of the [[AppKit]] are:&lt;br /&gt;
&lt;br /&gt;
==== NSDocument ====&lt;br /&gt;
&lt;br /&gt;
This class is central to the OpenStep document based model. These application's declare a new instance of a subclass of NSDocument for each “document” that is opened. You will subclass NSDocument to implement this.&lt;br /&gt;
&lt;br /&gt;
Each instance of your NSDocument subclass may have one or more windows associated with it. These are used as an interface for loading and saving a representation of your document type. Each window will have an “NSWindowController” instance associated with it, where NSDocument maintains a list of these.&lt;br /&gt;
&lt;br /&gt;
==== NSDocumentController ====&lt;br /&gt;
&lt;br /&gt;
This class acts a controller. It maintains a list of documents (instances of your NSDocument subclass) and is responsible for loading and instantiating new documents. It is usually not necessary to implement a subclass of this, but often it may be useful to implement special functionality (especially related to opening and creating documents at an application level).&lt;br /&gt;
&lt;br /&gt;
==== NSWindowController ====&lt;br /&gt;
&lt;br /&gt;
As mentioned above, NSWindowController instances are individually associated with one NSWindow instance, in such a way that a document maintains a list of window controllers that are reponsible for rendering the views associated with a document.&lt;br /&gt;
&lt;br /&gt;
You will most likely not have to subclass NSWindowController. Instead, you associate a nib file (the Gorm output) with the subclass of NSDocument, and NSDocumentController will load this nib file for each document that is created or loaded.&lt;br /&gt;
&lt;br /&gt;
For example, a text based application that is used for the editing of plain text files, may subclass NSDocument with a TextDocument class. Each instance of this class would have an NSWindowController instance associated with it, which in turn manages a window instance that is instantiated from a nib file. The NSDocumentController instance, as managed and instantiated by GNUstep, would be responsible for loading and saving documents in your application. It even prompts the user to save their documents when they try to quit the application.&lt;br /&gt;
&lt;br /&gt;
== File Components ==&lt;br /&gt;
&lt;br /&gt;
In building your application you will need to create a number of special files. From scratch, the following should be a rough guide to getting it working. These include the Makefile, your application's property list and the interface files.&lt;br /&gt;
&lt;br /&gt;
=== The Makefile ===&lt;br /&gt;
&lt;br /&gt;
For this type of application, no special makefile is needed: it just has to be a normal application. Project Builder should be able to spit out the required makefile and Gorm files that are needed for a generic application. I believe it is also capable of providing support for document-based applications. Otherwise use the following as a template:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUmakefile'''&lt;br /&gt;
&lt;br /&gt;
 include $(GNUSTEP_MAKEFILES)/common.make&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 APP_NAME = DocumentApp&amp;lt;br&amp;gt;&lt;br /&gt;
 DocumentApp_OBJC_FILES =&amp;lt;br&amp;gt;&lt;br /&gt;
  MyDocument.m &amp;lt;br&amp;gt;&lt;br /&gt;
  main.m&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 DocumentApp_RESOURCES = \ &amp;lt;br&amp;gt;&lt;br /&gt;
  Resources/Info-gnustep.plist \&amp;lt;br&amp;gt;&lt;br /&gt;
  Resources/DocumentApp.gorm \&amp;lt;br&amp;gt;&lt;br /&gt;
  Resources/MyDocument.gorm&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 -include GNUmakefile.preamble&amp;lt;br&amp;gt;&lt;br /&gt;
 include $(GNUSTEP_MAKEFILES)/application.make&amp;lt;br&amp;gt;&lt;br /&gt;
 -include GNUmakefile.postamble&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information as to customising this file, as well as setting up compiler options for third party libraries and includes, see the GNUstep makefile manual.&lt;br /&gt;
&lt;br /&gt;
===The application dictionary===&lt;br /&gt;
&lt;br /&gt;
For those that have edited this file in their project before, it is a dictionary with various values entered. For our purposes, we need an array within the main dictionary, called &amp;quot;NSTypes&amp;quot;. This is a array of unnamed dictionaries, with one dictionary for each type. &lt;br /&gt;
&lt;br /&gt;
I have provided an example for this file below. ProjectBuilder creates one as well. Please note that &amp;quot;TextEdit&amp;quot; does exist as an example application from NEXT I think, and again on MacOS X but I have constructed a much simpler version, used only for plain text files.&lt;br /&gt;
&lt;br /&gt;
Taking a look at the single dictionary entry in the NSTypes array, the following key-value pairs are needed:&lt;br /&gt;
* '''NSDocumentClass:''' This is (string) the subclass name you use in your code, the &amp;quot;objective-c name&amp;quot; of your document subclass. This is used by NSDocumentController's default implementation to create instances of your document type.&lt;br /&gt;
* '''NSName:''' The generic file type (string). This is completely arbitrary, and can be anything you like. For the purpose of conventions, it may be more appropriate not to use the &amp;quot;NS&amp;quot; or &amp;quot;GS&amp;quot; prefix (the latter of which I not sure), and instead use either your own, or no prefix at all.&lt;br /&gt;
* '''NSHumanReadableName:''' The human readable name of your document type (string)? TODO: explain where this is used.&lt;br /&gt;
* '''NSUnixExtensions:''' An array of strings, each containing a file extension connected to this document type on &amp;quot;unix&amp;quot; platforms. TODO: explain how &amp;quot;unix&amp;quot; is interpreted by GNUstep.&lt;br /&gt;
* '''NSDOSExtensions:''' An array of strings, each containing a file extenstion connected to this document type on &amp;quot;DOS&amp;quot; platforms (could be loosely interpreted as any MS platforms GNUstep runs on, i.e. Windows 2000/XP).&lt;br /&gt;
* '''NSRole:''' A string, either &amp;quot;Viewer&amp;quot; or &amp;quot;Editor&amp;quot;, depending on how your document operates on this file type.&lt;br /&gt;
* '''NSIcon:''' A icon name associated with this document type. TODO: Investigate how this works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Info-gnustep.plist'''&lt;br /&gt;
 {&lt;br /&gt;
     ApplicationDescription = &amp;quot;A simple text editor for GNUstep.&amp;quot;;&lt;br /&gt;
     ApplicationName = TextEdit;&lt;br /&gt;
     ApplicationRelease = 0.10;&lt;br /&gt;
     Authors = ( &amp;quot;Christopher Armstrong&amp;quot; );&lt;br /&gt;
     Copyright = &amp;quot;Copyright (C) 2005 Christopher Armstrong&amp;quot;;&lt;br /&gt;
     CopyrightDescription = &amp;quot;Released under GPL.&amp;quot;;&lt;br /&gt;
     FullVersionID = 0.10;&lt;br /&gt;
     NSExecutable = TextEdit;&lt;br /&gt;
     NSMainNibFile = TextEdit.gorm;&lt;br /&gt;
     NSPrincipalClass = NSApplication;&lt;br /&gt;
     NSRole = Application;&lt;br /&gt;
     NSTypes = (&lt;br /&gt;
         {&lt;br /&gt;
                 NSDocumentClass = &amp;quot;TextDocument&amp;quot;;&lt;br /&gt;
                 NSName = &amp;quot;GSTextDocumentType&amp;quot;;&lt;br /&gt;
                 NSHumanReadableName = &amp;quot;Text Document&amp;quot;;&lt;br /&gt;
                 NSUnixExtensions = ( &amp;quot;txt&amp;quot;, &amp;quot;&amp;quot; );&lt;br /&gt;
                 NSDOSExtensions = ( &amp;quot;txt&amp;quot; );&lt;br /&gt;
                 NSRole = Editor;&lt;br /&gt;
         }&lt;br /&gt;
     );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more information on property list files, consult [[Property Lists]].&lt;br /&gt;
&lt;br /&gt;
=== Interface files ===&lt;br /&gt;
&lt;br /&gt;
Two interface files are needed: one for your main application, and another that will be instantiated with each instance of your document subclass. These both should be listed as resources in your makefile, (as shown the GNUmakefile example above). It may be helpful to name the document nib file after your class.&lt;br /&gt;
&lt;br /&gt;
==== Application Interface File ====&lt;br /&gt;
&lt;br /&gt;
The application one should just be a menu (though it could be more if necessary). When constructing it, take the following into account:&lt;br /&gt;
&lt;br /&gt;
* Use a standard Gorm template for an Application.&lt;br /&gt;
* Delete the window instance in the &amp;quot;Objects&amp;quot; pane (unless you need a main window, which is beyond the scope of this document).&lt;br /&gt;
* Set NSOwner's class to &amp;quot;NSDocumentController&amp;quot;. This is the custom class option of NSOwner in the property inspector. This ensures that the openDocument:, newDocument: messages, as sent to NSFirst, get picked up by NSDocumentController. Do not instantiate it (I believe you can't anyway).&lt;br /&gt;
* If you intend to subclass NSDocumentController, subclass it in the Classes pane. To make sure that this class is instantiated and used, make sure you instantiate it in Gorm or in your main.m file, and set NSOwner to be your subclass.&lt;br /&gt;
* Drag a Document menu from the palette onto your main menu. This already has the proper outlet and action linkage for each relevant message to be directed to NSFirst. Generic messages (such as openDocument:, not associated with any document instance) are forwarded to the shared instance of NSDocumentController (see it's reference documentation). When a document is active, more specific messages (such as close: or saveDocument:) are forwarded to the relevant document instance of your NSDocument subclass.&lt;br /&gt;
* Add any appropriate menus such as &amp;quot;Info&amp;quot; and &amp;quot;Format&amp;quot; which may be relevant to your application.&lt;br /&gt;
&lt;br /&gt;
==== Document Interface File(s) ====&lt;br /&gt;
&lt;br /&gt;
The document interface file is a window containing the view(s) required for the implementation of one instance of your document type. For example, in the case of a TextDocument type, a window instance with a NSTextView drawn on it is used for each document window. This interface file is instantiated every time a person creates a new document (the newDocument: message is sent to NSDocumentController) or opens an existing document (openDocument:).&lt;br /&gt;
&lt;br /&gt;
You will need to:&lt;br /&gt;
* '''Subclass NSDocument''' with your document type in Gorm. This is done in a couple of ways, see [[Gorm_Manual#Custom_classes|custom classes]]. It is up to you whether or not you let Gorm generate the class files, but make sure you add the appropriate outlets to your class in the source files (otherwise, I think your your program may segfault).&lt;br /&gt;
* '''Set NSOwner:''' Set your subclass as NSOwner's Custom class using the Property Inspector. ''DO NOT INSTANTIATE IT.''&lt;br /&gt;
&lt;br /&gt;
Another thing that you may want to consider is custom outlets. If you place certain views or controls on your window (including the window itself), you may want to refer to them directly in your code, e.g. the NSTextView in our TextEdit example is accessed directly, so that we can save it's contents to a file. To enable this, we add outlets to our class (see [[Gorm_Manual#Custom_classes|custom classes]]). We then connect NSOwner to the appropriate controls/views, and select the outlets in the Connections Property Inspector (see [[Gorm_Manual#Editing_the_interface|editing the interface]]).&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Various things need to be done at a code level, to ensure that your NSDocument subclass is properly instantiated. This section aims to tell you what is necessary.&lt;br /&gt;
&lt;br /&gt;
=== NSDocument subclass ===&lt;br /&gt;
&lt;br /&gt;
When creating your subclass, you may have chosen to have Gorm create the class files. If not, you should create two files for your subclass: a header (.h) file and an implementation file (.m). The header file should take the following layout (we're using the TextEdit example again):&lt;br /&gt;
&lt;br /&gt;
 #ifndef TEXTDOCUMENT_H&lt;br /&gt;
 #define TEXTDOCUMENT_H &amp;lt;br&amp;gt;&lt;br /&gt;
 #include &amp;lt;AppKit/AppKit.h&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
 @class NSDocument; &amp;lt;br&amp;gt;&lt;br /&gt;
 /* The document type string, as specified in the property list [[#The_application_dictionary|NSTypes array]] */ &amp;lt;br&amp;gt;&lt;br /&gt;
 NSString * GSTextDocumentType = &amp;quot;GSTextDocumentType&amp;quot;;&lt;br /&gt;
 @interface TextDocument : NSDocument&lt;br /&gt;
 {&lt;br /&gt;
 @protected&lt;br /&gt;
     /* Outlets we added in our Gorm nib file */&lt;br /&gt;
     id * textView;&lt;br /&gt;
 }&lt;br /&gt;
 /* Basic methods used for loading and saving document data (respectively). */&lt;br /&gt;
 - (BOOL) loadDataRepresentation:(NSData*)representation ofType:(NSString*)type;&lt;br /&gt;
 - (NSData*) dataRepresentationOfType: (NSString*)type; &amp;lt;br&amp;gt;&lt;br /&gt;
 /* Information and events handling of GUI related changes */&lt;br /&gt;
 - (NSString*) windowNibName;&lt;br /&gt;
 - (void) windowControllerDidLoadNib:(NSWindowController*)windowController; &amp;lt;br&amp;gt;&lt;br /&gt;
 @end&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firstly, take note that we inherit from NSDocument. As a result, we need to override some methods for a basic (but working) implementation. &lt;br /&gt;
&lt;br /&gt;
==== loadDataRepresentation:ofType: and dataRepresentationOfType: ====&lt;br /&gt;
&lt;br /&gt;
The methods, loadDataRepresent:ofType: and dataRepresentationOfType: are used by NSDocumentController to load and save our files. The first method is called when the user trys to open a document (NSDocumentController gets the file name and copies it's data using an open panel). The method is passed the raw data in this file, as well as a string representing its type. It is important to note that this type string is the same one used in your property list. It is used by NSDocumentController to tell you what type it thinks you should open the data with. If this is not possible, or if there is an error trying to parse the data, your method returns FALSE/NO. Otherwise, you should store a local, meaningful representation of the data, which you can insert into your document window a little later (and return TRUE/YES).&lt;br /&gt;
&lt;br /&gt;
For example, in terms of the TextEdit example:&lt;br /&gt;
 - (BOOL) loadDataRepresentation:(NSData*) representation ofType:(NSString*)type&lt;br /&gt;
 {&lt;br /&gt;
    /*Check type information */&lt;br /&gt;
    if ([representation equalTo:GSTextDocumentType]==NO)&lt;br /&gt;
        return NO;&lt;br /&gt;
    /* Clean out our old representation if it still exists */&lt;br /&gt;
    if (fileContents) RELEASE(fileContents); &amp;lt;br&amp;gt;&lt;br /&gt;
    /* Allocate room for the new data, and try to initialise a string with it. */&lt;br /&gt;
    self-&amp;gt;fileContents = [NSString alloc];&lt;br /&gt;
    fileContents = [fileContents initWithBytes: [representation bytes]&lt;br /&gt;
                         length: [representation length]&lt;br /&gt;
                       encoding: NSASCIIStringEncoding]; &amp;lt;br&amp;gt;&lt;br /&gt;
    /* If this can't be done, return NO */&lt;br /&gt;
    if (!fileContents)&lt;br /&gt;
        return NO; &amp;lt;br&amp;gt;&lt;br /&gt;
    /* Otherwise, set our TextView to the string data. */&lt;br /&gt;
    [self-&amp;gt;textView setString: fileContents];&lt;br /&gt;
    return YES;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If this is not sufficient, or if your program can open the data in a more efficient manner, it may be worth looking into overriding -initWithContentsOfFile:ofType: and -initWithContentsOfURL:ofType:. Again, see the GUI manual for more details.&lt;br /&gt;
&lt;br /&gt;
dataRepresentationOfType: is used to save the data. Your method is expected to return an instance of NSData that contains what should be saved to a file, for the type specified. Again, the ''type'' variable should be checked to ensure that you can write data of that type. Return nil if the file cannot be saved as that type.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 - (NSData*) dataRepresentationOfType:(NSString*)type&lt;br /&gt;
 {&lt;br /&gt;
     if ([type equalTo:GSTextDocumentType]==NO)&lt;br /&gt;
         return nil; &amp;lt;br&amp;gt;&lt;br /&gt;
     NSData stringData =  [[textView string] dataUsingEncoding:NSASCIIStringEncoding];  &lt;br /&gt;
     return stringData; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If a more sophisticated save implementation is needed, consult the documentation for information on the writeTo* methods.&lt;br /&gt;
&lt;br /&gt;
==== windowNibName ====&lt;br /&gt;
&lt;br /&gt;
This method must be overriden to return the a string of the name of your nib file (without the file extension). More complex implementations will use other methods to load the interface files. TODO: information on what methods need to be overriden.&lt;br /&gt;
&lt;br /&gt;
==== windowControllerDidLoadNib: ====&lt;br /&gt;
&lt;br /&gt;
Use this method to add code that should be run as soon as ''windowController'' has been initialised. Your document may have many window controllers; each window controller taking possession of one window.&lt;br /&gt;
&lt;br /&gt;
In the TextEdit example, this method is used to copy the ''fileContents'' variable to the text view. It otherwise initialises the document window. &lt;br /&gt;
&lt;br /&gt;
Also note that you can override windowControllerWillLoadNib: to perform pre-interface loading initialisation.&lt;br /&gt;
&lt;br /&gt;
==== makeWindowControllers ====&lt;br /&gt;
&lt;br /&gt;
This is an optional method to override, which must be used if you have multiple window controllers per document. It is responsible for creating each window controller from it's interface file and then adding it to the document. Use the addWindowController: method.&lt;br /&gt;
&lt;br /&gt;
==== Other considerations ====&lt;br /&gt;
&lt;br /&gt;
* You need a way to notify NSDocument that your document has changed, so that NSDocumentController can enable the menu item to allow saving. This is done by a call to the updateChangeCount: method. For example, the TextDocument class adds itself as a delegate to the textView, for any notification of changes. It then calls updateChangeCount: in the delegate's method.&lt;br /&gt;
&lt;br /&gt;
* You may also wish to add a close: method (not the close method already in NSDocument, see below) to respond to the menu item permitting your document to close. This could perform cleanup operations before a call to [self close] is made e.g.&lt;br /&gt;
&lt;br /&gt;
 - (void) close:(id)sender /* Note this is not the method found in NSDocument (they differ by a parameter) */&lt;br /&gt;
 {&lt;br /&gt;
     [self close];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== NSDocumentController ===&lt;br /&gt;
&lt;br /&gt;
This class can optionally be subclassed, to implement some specific functionality. For example, programs handling multiple document types may override newDocument: to create a window so that the user can select which document type to create.&lt;br /&gt;
&lt;br /&gt;
You should use separate implementation files and add the .m file to GNUmakefile.&lt;br /&gt;
&lt;br /&gt;
=== NSWindowController ===&lt;br /&gt;
&lt;br /&gt;
This class can also be optionally subclassed, to implement functionality specific to a window controller for a document type. You may need to override makeWindowControllers: in the NSDocument subclass in order to make sure your specific window controller is instantiated.&lt;br /&gt;
&lt;br /&gt;
You should use separate implemenation files and add the .m file to GNUmakefile.&lt;br /&gt;
&lt;br /&gt;
== Optional Additions ==&lt;br /&gt;
&lt;br /&gt;
=== Custom NSDocumentController and NSWindowController implementations ===&lt;br /&gt;
&lt;br /&gt;
See [[#NSWindowController|NSWindowController]] and [[#NSDocumentController|NSDocumentController]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_As_a_Product&amp;diff=1995</id>
		<title>GNUstep As a Product</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_As_a_Product&amp;diff=1995"/>
		<updated>2005-08-29T14:37:16Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Marketing Objective-C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ideas about how to market GNUstep&lt;br /&gt;
&lt;br /&gt;
== The GNUstep as a Product ==&lt;br /&gt;
&lt;br /&gt;
There are several definitions of GNUstep. One is [http://www.gnustep.org/ here] (Home), [http://www.gnustep.org/information/aboutGNUstep.html here] (Intro),[http://wiki.gnustep.org/index.php/Introduction%20to%20GNUstep here] (Wiki Intro) and [http://wiki.gnustep.org/index.php/GNUstepIsNotWM here] (GS vs WM).&lt;br /&gt;
&lt;br /&gt;
There are many uses for GNUstep, but we have to agree on single definition of a single product that will be provided at the beginning. Of course there are many flavours of GNUstep installations, but there should be only one or two introduced.&lt;br /&gt;
&lt;br /&gt;
The product definition should contain:&lt;br /&gt;
* what it is&lt;br /&gt;
* what it offers&lt;br /&gt;
* references to something known and recognised (comparison is good for understanding)&lt;br /&gt;
* strengths of gnustep&lt;br /&gt;
* use few buzzwords, but very, very decently&lt;br /&gt;
&lt;br /&gt;
GNUstep by its nature IS some kind of environment, as it is not bunch of libraries, because it requires its own filesystem storage (for resources, for example) and running servers (daemons). We can call this more complex set of components an environment. As there are not many applications for GNUstep right now, the best product that can be done from GNUstep is &amp;quot;GNUstep Development Environment&amp;quot;. Sugestion for general description of the environment:&lt;br /&gt;
&lt;br /&gt;
'''GNUstep''': ''GNUstep is a cross-platform, object oriented environment composed of frameworks, tools, and servers (daemons). It is very similar to the Cocoa frameworks from Apple, and tries to maintain compatibility with Cocoa wherever it is desired and possible. The frameworks provide classes for containers, distributed objects, object archiving, file management, text system, font management, image composition, WYSIWYG PostScript graphics, and more.''&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! Product/Package&lt;br /&gt;
! Description&lt;br /&gt;
! Contents&lt;br /&gt;
|+&lt;br /&gt;
| '''Runtime Environment'''&lt;br /&gt;
| Core that forms an environment in which GNUstep applications, tools and servers can be run.&lt;br /&gt;
| GNUstep Core, Workspace application, Terminal application, example services&lt;br /&gt;
|+&lt;br /&gt;
| '''Development Environment'''&lt;br /&gt;
| Collection of core applications for worskpace management, object relationship modelling, source code editing, terminal emulation and set of core development frameworks (Foundation and Application Kits) &lt;br /&gt;
| Components from the Runtime Environment + Gorm, ProjectCenter, EasyDiff&lt;br /&gt;
|+&lt;br /&gt;
| '''Framework Collection''' [2] &lt;br /&gt;
| Object oriented solutions for web application development, database (Oracle, MySQL, Postgresql,...) connectivity and object abstraction, language independent scripting&lt;br /&gt;
| GSWeb, GDL2, StepTalk&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] No user applications are included, as it is an development environment.&lt;br /&gt;
&lt;br /&gt;
[2] feel free to replace the word Production with something better''.&lt;br /&gt;
&lt;br /&gt;
== Distribution and installation ==&lt;br /&gt;
&lt;br /&gt;
Any product has to be distributed. Current possible distribution channels are:&lt;br /&gt;
&lt;br /&gt;
* Direct distribution from GNUstep website through .tar.gz source or binaries&lt;br /&gt;
* MS Windows executable&lt;br /&gt;
* Debian based linux distributions with .deb packages&lt;br /&gt;
* RPM packaging based distributions&lt;br /&gt;
&lt;br /&gt;
Installation should be as easy as:&lt;br /&gt;
&lt;br /&gt;
# Download&lt;br /&gt;
# Launch installer (doubleclicking in hosting environment is prefered)&lt;br /&gt;
# Configure&lt;br /&gt;
# Run!&lt;br /&gt;
&lt;br /&gt;
For Linux distributions with native packaging systems, there should be meta package containing several gnustep packages according to the gnustep products/solutions.&lt;br /&gt;
&lt;br /&gt;
For other Linux distributions, installation should be either guarded by executable package or by providing instructions that can be moved by Copy &amp;amp; Paste into a terminal window.&lt;br /&gt;
&lt;br /&gt;
For MS Windows, the installer should create full binary installation of the gnustep environment that is ready to launch. It should place a GNUstep icon on the desktop or into the start menu. Launching ''GNUstep development session'' is same as launching GWorkspace.app or Terminal.app&lt;br /&gt;
&lt;br /&gt;
== Using GNUstep Development Environment ==&lt;br /&gt;
&lt;br /&gt;
User should be able to use GNUstep D.E. by clicking on an icon or picking a menu item. For the time being, the main entry to the environment should be GWorkspace or Terminal.app. No .cshrc or .bashrc fiddling should be required.&lt;br /&gt;
&lt;br /&gt;
Having GNUstep useable from user's preffered terminal is for advanced users. Instructions for required 'sourcing' and 'setting env variables' should be given at the end of the installation and should be explicitly marked as instructions for advanced users.&lt;br /&gt;
&lt;br /&gt;
Alternative for the development nevironment, there should be a very simple 'dock application' with preconfigured entries for GWorkspace, Terminal.app, Gorm.app and ProjectCenter.app. Nothing fancy, simple window with matrix of buttons with icons.&lt;br /&gt;
&lt;br /&gt;
GWorkspace should be preconfigured to contain icons for System/Applications, Local/Applications, System/Documentation and Local/Documentation on the shelf.&lt;br /&gt;
&lt;br /&gt;
== Goals and how to get there ==&lt;br /&gt;
First a list of the primary goals:&lt;br /&gt;
* Get more app developers&lt;br /&gt;
* Get more app users&lt;br /&gt;
&lt;br /&gt;
Why do we want them:&lt;br /&gt;
* More testing of the GNUstep-core&lt;br /&gt;
* More bug fixes of GNUstep-core&lt;br /&gt;
* More applications that use GNUstep-core&lt;br /&gt;
&lt;br /&gt;
How to attract developers:&lt;br /&gt;
* Good documentation&lt;br /&gt;
* Easy to use tools&lt;br /&gt;
* Complete development set&lt;br /&gt;
&lt;br /&gt;
How to attract users:&lt;br /&gt;
* Apps&lt;br /&gt;
* Apps&lt;br /&gt;
* Apps&lt;br /&gt;
&lt;br /&gt;
Where do we &amp;quot;hire&amp;quot; developers:&lt;br /&gt;
* See the list below&lt;br /&gt;
&lt;br /&gt;
developers already know some kind of language, so we have to address them from their starting point. You want to be able to point e.g. a Java programmer to a document that targets the Java programmer to use [[Objective-C]].&lt;br /&gt;
&lt;br /&gt;
Where do we find users:&lt;br /&gt;
* See the list below&lt;br /&gt;
* Make sure GNUstep is incorporated in as many distro's as possible&lt;br /&gt;
&lt;br /&gt;
How are we gonna approach developers?&lt;br /&gt;
How are we gonna approach users?&lt;br /&gt;
&lt;br /&gt;
== Marketing [[Objective-C]] ==&lt;br /&gt;
Working with a language that is not familiar to most programmers requires a lot of marketing. The first idea was to create a list that shows the highlights of the language then create documents that tell e.g. a Java programmer how to do things in [[Objective-C]], and also for C programmes, C++ programmers etc. So an article per programming language.&lt;br /&gt;
&lt;br /&gt;
== Other notes ==&lt;br /&gt;
&lt;br /&gt;
[[Release procedure]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_As_a_Product&amp;diff=933</id>
		<title>GNUstep As a Product</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_As_a_Product&amp;diff=933"/>
		<updated>2005-08-29T14:36:47Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Goals and how to get there */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ideas about how to market GNUstep&lt;br /&gt;
&lt;br /&gt;
== The GNUstep as a Product ==&lt;br /&gt;
&lt;br /&gt;
There are several definitions of GNUstep. One is [http://www.gnustep.org/ here] (Home), [http://www.gnustep.org/information/aboutGNUstep.html here] (Intro),[http://wiki.gnustep.org/index.php/Introduction%20to%20GNUstep here] (Wiki Intro) and [http://wiki.gnustep.org/index.php/GNUstepIsNotWM here] (GS vs WM).&lt;br /&gt;
&lt;br /&gt;
There are many uses for GNUstep, but we have to agree on single definition of a single product that will be provided at the beginning. Of course there are many flavours of GNUstep installations, but there should be only one or two introduced.&lt;br /&gt;
&lt;br /&gt;
The product definition should contain:&lt;br /&gt;
* what it is&lt;br /&gt;
* what it offers&lt;br /&gt;
* references to something known and recognised (comparison is good for understanding)&lt;br /&gt;
* strengths of gnustep&lt;br /&gt;
* use few buzzwords, but very, very decently&lt;br /&gt;
&lt;br /&gt;
GNUstep by its nature IS some kind of environment, as it is not bunch of libraries, because it requires its own filesystem storage (for resources, for example) and running servers (daemons). We can call this more complex set of components an environment. As there are not many applications for GNUstep right now, the best product that can be done from GNUstep is &amp;quot;GNUstep Development Environment&amp;quot;. Sugestion for general description of the environment:&lt;br /&gt;
&lt;br /&gt;
'''GNUstep''': ''GNUstep is a cross-platform, object oriented environment composed of frameworks, tools, and servers (daemons). It is very similar to the Cocoa frameworks from Apple, and tries to maintain compatibility with Cocoa wherever it is desired and possible. The frameworks provide classes for containers, distributed objects, object archiving, file management, text system, font management, image composition, WYSIWYG PostScript graphics, and more.''&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! Product/Package&lt;br /&gt;
! Description&lt;br /&gt;
! Contents&lt;br /&gt;
|+&lt;br /&gt;
| '''Runtime Environment'''&lt;br /&gt;
| Core that forms an environment in which GNUstep applications, tools and servers can be run.&lt;br /&gt;
| GNUstep Core, Workspace application, Terminal application, example services&lt;br /&gt;
|+&lt;br /&gt;
| '''Development Environment'''&lt;br /&gt;
| Collection of core applications for worskpace management, object relationship modelling, source code editing, terminal emulation and set of core development frameworks (Foundation and Application Kits) &lt;br /&gt;
| Components from the Runtime Environment + Gorm, ProjectCenter, EasyDiff&lt;br /&gt;
|+&lt;br /&gt;
| '''Framework Collection''' [2] &lt;br /&gt;
| Object oriented solutions for web application development, database (Oracle, MySQL, Postgresql,...) connectivity and object abstraction, language independent scripting&lt;br /&gt;
| GSWeb, GDL2, StepTalk&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] No user applications are included, as it is an development environment.&lt;br /&gt;
&lt;br /&gt;
[2] feel free to replace the word Production with something better''.&lt;br /&gt;
&lt;br /&gt;
== Distribution and installation ==&lt;br /&gt;
&lt;br /&gt;
Any product has to be distributed. Current possible distribution channels are:&lt;br /&gt;
&lt;br /&gt;
* Direct distribution from GNUstep website through .tar.gz source or binaries&lt;br /&gt;
* MS Windows executable&lt;br /&gt;
* Debian based linux distributions with .deb packages&lt;br /&gt;
* RPM packaging based distributions&lt;br /&gt;
&lt;br /&gt;
Installation should be as easy as:&lt;br /&gt;
&lt;br /&gt;
# Download&lt;br /&gt;
# Launch installer (doubleclicking in hosting environment is prefered)&lt;br /&gt;
# Configure&lt;br /&gt;
# Run!&lt;br /&gt;
&lt;br /&gt;
For Linux distributions with native packaging systems, there should be meta package containing several gnustep packages according to the gnustep products/solutions.&lt;br /&gt;
&lt;br /&gt;
For other Linux distributions, installation should be either guarded by executable package or by providing instructions that can be moved by Copy &amp;amp; Paste into a terminal window.&lt;br /&gt;
&lt;br /&gt;
For MS Windows, the installer should create full binary installation of the gnustep environment that is ready to launch. It should place a GNUstep icon on the desktop or into the start menu. Launching ''GNUstep development session'' is same as launching GWorkspace.app or Terminal.app&lt;br /&gt;
&lt;br /&gt;
== Using GNUstep Development Environment ==&lt;br /&gt;
&lt;br /&gt;
User should be able to use GNUstep D.E. by clicking on an icon or picking a menu item. For the time being, the main entry to the environment should be GWorkspace or Terminal.app. No .cshrc or .bashrc fiddling should be required.&lt;br /&gt;
&lt;br /&gt;
Having GNUstep useable from user's preffered terminal is for advanced users. Instructions for required 'sourcing' and 'setting env variables' should be given at the end of the installation and should be explicitly marked as instructions for advanced users.&lt;br /&gt;
&lt;br /&gt;
Alternative for the development nevironment, there should be a very simple 'dock application' with preconfigured entries for GWorkspace, Terminal.app, Gorm.app and ProjectCenter.app. Nothing fancy, simple window with matrix of buttons with icons.&lt;br /&gt;
&lt;br /&gt;
GWorkspace should be preconfigured to contain icons for System/Applications, Local/Applications, System/Documentation and Local/Documentation on the shelf.&lt;br /&gt;
&lt;br /&gt;
== Goals and how to get there ==&lt;br /&gt;
First a list of the primary goals:&lt;br /&gt;
* Get more app developers&lt;br /&gt;
* Get more app users&lt;br /&gt;
&lt;br /&gt;
Why do we want them:&lt;br /&gt;
* More testing of the GNUstep-core&lt;br /&gt;
* More bug fixes of GNUstep-core&lt;br /&gt;
* More applications that use GNUstep-core&lt;br /&gt;
&lt;br /&gt;
How to attract developers:&lt;br /&gt;
* Good documentation&lt;br /&gt;
* Easy to use tools&lt;br /&gt;
* Complete development set&lt;br /&gt;
&lt;br /&gt;
How to attract users:&lt;br /&gt;
* Apps&lt;br /&gt;
* Apps&lt;br /&gt;
* Apps&lt;br /&gt;
&lt;br /&gt;
Where do we &amp;quot;hire&amp;quot; developers:&lt;br /&gt;
* See the list below&lt;br /&gt;
&lt;br /&gt;
developers already know some kind of language, so we have to address them from their starting point. You want to be able to point e.g. a Java programmer to a document that targets the Java programmer to use [[Objective-C]].&lt;br /&gt;
&lt;br /&gt;
Where do we find users:&lt;br /&gt;
* See the list below&lt;br /&gt;
* Make sure GNUstep is incorporated in as many distro's as possible&lt;br /&gt;
&lt;br /&gt;
How are we gonna approach developers?&lt;br /&gt;
How are we gonna approach users?&lt;br /&gt;
&lt;br /&gt;
== Marketing Objective-C ==&lt;br /&gt;
Working with a language that is not familiar to most programmers requires a lot of marketing. The first idea was to create a list that shows the highlights of the language then create documents that tell e.g. a Java programmer how to do things in Objective-C, and also for C programmes, C++ programmers etc. So an article per programming language.&lt;br /&gt;
&lt;br /&gt;
== Other notes ==&lt;br /&gt;
&lt;br /&gt;
[[Release procedure]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Gorm_Manual&amp;diff=1000</id>
		<title>Gorm Manual</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Gorm_Manual&amp;diff=1000"/>
		<updated>2005-08-29T14:35:40Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Overview */&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;
[[Image:GormFull.png|right|thumbnail|Gorm 0.10.2 running on Linux showing the main windows and the inspector.]]&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;
== 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;
[[Image:GormMenu.png|right|thumbnail|Gorm's menu in detail.]]&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;
* first 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;
[[Image:GormDocument.png|thumb|The document window of Gorm showing NSOwner and NSFirst.]]&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;br /&gt;
&lt;br /&gt;
== Links ==&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Writing_portable_code&amp;diff=1079</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=1079"/>
		<updated>2005-08-29T14:35:09Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Porting from Cocoa to GNUstep */&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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepIsNotWindowMaker&amp;diff=1954</id>
		<title>GNUstepIsNotWindowMaker</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepIsNotWindowMaker&amp;diff=1954"/>
		<updated>2005-08-29T14:34:03Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GNUstep is NOT [[Window Maker]] ===&lt;br /&gt;
In order to prevent misinformation ...&lt;br /&gt;
&lt;br /&gt;
=== GNUstep is NOT a window manager ===&lt;br /&gt;
&lt;br /&gt;
Why is this confusion floating around? [[Window Maker]] is the most often-used NeXT-looking application on a non-NeXT system.  [[Window Maker]] also uses a derivation of the GNUstep logo.  [[Window Maker]] is the official GNUstep window manager, but GNUstep applications also work with any window manager, although you're most likely, currently, to have a more cohesive desktop experience if you use the two in conjunction.&lt;br /&gt;
&lt;br /&gt;
=== What is GNUstep ? ===&lt;br /&gt;
&lt;br /&gt;
[[GNUstep]] is an advanced, cross-platform, object oriented environment composed of frameworks, tools and servers (daemons). It is very close to the [http://developer.apple.com/cocoa/ Cocoa] frameworks from [http://www.apple.com Apple] and tries to maintain compatibility with Cocoa wherever it is desired and possible. The roots of the GNUstep application interface are same as the roots of Cocoa: Ne XT and [[OpenStep]].&lt;br /&gt;
&lt;br /&gt;
=== Relation to [[Window Maker]] ===&lt;br /&gt;
&lt;br /&gt;
[[Window Maker]] is a window manager, not a workspace manager nor a file browser. It is nothing more.&lt;br /&gt;
[[Window Maker]] and GNUstep share almost no libraries or functionality. [[Window Maker]] is written in C, and GNUstep is written in [[Objective-C]].   [[Window Maker]] does make certain things easier for GNUstep, but it is not GNUstep itself, although it is a part of the project.&lt;br /&gt;
&lt;br /&gt;
=== The Importance of this difference ===&lt;br /&gt;
&lt;br /&gt;
In many people's minds the environment and the frameworks used to create programs merges.  [[Window Maker]] can be used with QT or GNOME apps, just as easily as it can be used with GNUstep.   Similarly GNUstep applications can run using KWM (KDE's preferred Window Manager) or Enlightenment (GNOME's old, old preferred Window Manager -- since then they went through Sawfish and now Metacity).  This misconception can make one lose sight of the powerful programming frameworks underneath.&lt;br /&gt;
&lt;br /&gt;
=== Please note ===&lt;br /&gt;
&lt;br /&gt;
[[Window Maker]] is an excellent window manager and none of the preceeding should be construed to imply otherwise.&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Foundation&amp;diff=1958</id>
		<title>Foundation</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Foundation&amp;diff=1958"/>
		<updated>2005-08-29T14:32:51Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GNUstep base library contains a powerful set of non-graphical [[Objective-C]] classes that can readily be used in your programs. At present there are approximately 70 different classes available, including classes to handle [[NSStrng|strings]] and [[NSArray|arrays]], [[NSDate|dates]] and times, [[NSConnection|distributed objects]], URLs and file systems (to name but a few).&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Collections]] (arrays, sets, dictionaries) and enumerators&lt;br /&gt;
* [[File management]]&lt;br /&gt;
* [[Archiving|object archiving]]&lt;br /&gt;
* advanced calendar [[Date|date]] manipulation&lt;br /&gt;
* [[Distributed Objects]] and inter-process communication&lt;br /&gt;
* [[URL]] handling&lt;br /&gt;
* [[Notifications]] (and distributed notifications)&lt;br /&gt;
* easy [[Threading|multi-threading]]&lt;br /&gt;
* [[Timer]]s&lt;br /&gt;
* [[Lock]]s&lt;br /&gt;
* [[Exception handling]]&lt;br /&gt;
&lt;br /&gt;
== Classes ==&lt;br /&gt;
&lt;br /&gt;
[[NSArray]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=OpenStep&amp;diff=999</id>
		<title>OpenStep</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=OpenStep&amp;diff=999"/>
		<updated>2005-08-29T14:32:11Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=1973</id>
		<title>GNUstepWeb</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=1973"/>
		<updated>2005-08-29T14:31:27Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GNUstepWeb is a library which was designed to be compatible with [[WebObjects]] 4.x (developed by NeXT (now Apple) Inc.).&lt;br /&gt;
&lt;br /&gt;
This library is a logic extension of the [[GNUstep]] project. I hope it can help [[Objective-C]], [[OpenStep]] and [[WebObjects]] to become standards.&lt;br /&gt;
&lt;br /&gt;
See: http://www.gnustepweb.org/&lt;br /&gt;
&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=926</id>
		<title>GNUstepWeb</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepWeb&amp;diff=926"/>
		<updated>2005-08-29T14:30:22Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GNUstepWeb is a library which was designed to be compatible with WebObjects 4.x (developed by NeXT (now Apple) Inc.).&lt;br /&gt;
&lt;br /&gt;
This library is a logic extension of the GNUstep project. I hope it can help [[Objective-C]], OpenStep and WebObject to become standards.&lt;br /&gt;
&lt;br /&gt;
See: http://www.gnustepweb.org/&lt;br /&gt;
&lt;br /&gt;
[[Category:Frameworks]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Smalltalk&amp;diff=1948</id>
		<title>Smalltalk</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Smalltalk&amp;diff=1948"/>
		<updated>2005-08-29T14:29:12Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Smalltalk is pure object oriented language with environment. In the context of the GNUstep, the Smalltalk is a ''[[Scripting language bundle]]'' for the [[StepTalk]] scripting framework.&lt;br /&gt;
&lt;br /&gt;
Note that the language bundle offers Smalltalk language only, that sits on top of the [[Objective-C]] object environment. Therefore, some classes and mechanisms known from Smalltalk are not (yet) available.&lt;br /&gt;
&lt;br /&gt;
== The Language ==&lt;br /&gt;
&lt;br /&gt;
The language has very straightforward and easy to learn syntax. It is said, that the syntax was inspired somehow by the english grammar.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
&lt;br /&gt;
The language is based on sending messages to objects, like:&lt;br /&gt;
&lt;br /&gt;
 anObject message&lt;br /&gt;
&lt;br /&gt;
Here are few examples that you should try, for example by using the [[StepTalk shell]].&lt;br /&gt;
For example to see current date, just send message ''date'' to the object ''NSDate'':&lt;br /&gt;
&lt;br /&gt;
 NSDate date&lt;br /&gt;
&lt;br /&gt;
To assign a result to a variable:&lt;br /&gt;
&lt;br /&gt;
 date := NSDate date&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 a := 10.&lt;br /&gt;
 b := 20.&lt;br /&gt;
 result := a + b.&lt;br /&gt;
&lt;br /&gt;
=== Literals and basic operations ===&lt;br /&gt;
&lt;br /&gt;
In a script you should have literal objects: strings, arrays, numbers and selectors.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+&lt;br /&gt;
| Strings || 'This is a string' 'This is another \'String\' with apostrophes'&lt;br /&gt;
|+&lt;br /&gt;
| Array || #(1 2 3)  #('one' 'two' 'three')&lt;br /&gt;
|+&lt;br /&gt;
| Numbers || 1 2 0.1 -1.1e10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To join two strings use , (comma), like:&lt;br /&gt;
&lt;br /&gt;
 'This is ', 'a string'&lt;br /&gt;
&lt;br /&gt;
To get an object from an array (indexed from 0):&lt;br /&gt;
&lt;br /&gt;
 #('one' 'two' 'three') @ 1&lt;br /&gt;
&lt;br /&gt;
To do computations with numbers:&lt;br /&gt;
&lt;br /&gt;
 1 + 1&lt;br /&gt;
&lt;br /&gt;
Important note: Smalltalk does not take into account operator priority, so you have to enclose an expression into parentheses. Try:&lt;br /&gt;
&lt;br /&gt;
 1 + 2 * 3&lt;br /&gt;
 1 + (2 * 3)&lt;br /&gt;
&lt;br /&gt;
You should use operators: + - * /&lt;br /&gt;
&lt;br /&gt;
=== Blocks ===&lt;br /&gt;
&lt;br /&gt;
Instead of explaining what blocks enclosed by [ ... ]  are, try following examples, line by line, and you will get the idea:&lt;br /&gt;
&lt;br /&gt;
 ( 1 = 1 ) ifTrue: [ Transcript showLine: 'Yes']&lt;br /&gt;
 ( 2 &amp;lt; 1 ) ifFalse: [ Transcript showLine: 'No']&lt;br /&gt;
 ( 1 &amp;gt;= 4 ) ifTrue: [ Transcript showLine: 'Yes'] ifFalse: [ Transcript showLine: 'No']&lt;br /&gt;
&lt;br /&gt;
=== Cycles ===&lt;br /&gt;
&lt;br /&gt;
Cycles are created using blocks:&lt;br /&gt;
&lt;br /&gt;
 1 to: 10 do: [ :i | Transcript showLine: (i description) ]&lt;br /&gt;
 0 to: 100 step: 10 do: [ :i | Transcript showLine: (i description) ]&lt;br /&gt;
&lt;br /&gt;
Other possibilities are:&lt;br /&gt;
&lt;br /&gt;
 conditionBlock whileTrue: toDoBlock.&lt;br /&gt;
 conditionBlock whileFalse: toDoBlock.&lt;br /&gt;
&lt;br /&gt;
like:&lt;br /&gt;
&lt;br /&gt;
 a := 0 . [ a &amp;lt; 10 ] whileTrue: [ a := a + 1 . Transcript showLine: (a description) ]&lt;br /&gt;
&lt;br /&gt;
=== Array iteration ===&lt;br /&gt;
&lt;br /&gt;
 array := #('one' 'two' 'three').&lt;br /&gt;
 array do: [ :item | Transcript showLine: item ]&lt;br /&gt;
 array select: [ :item | item hasPrefix:'t' ]&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+&lt;br /&gt;
| do: || Evaluate block for each object in array and return last evaluated expression&lt;br /&gt;
|+&lt;br /&gt;
| select: || Create new array which will contain those objects from receiver, for which value of block was true&lt;br /&gt;
|+&lt;br /&gt;
| reject: || Create new array which will contain those objects from receiver, for which value of block was false&lt;br /&gt;
|+&lt;br /&gt;
| collect:|| Create new array from block return values.&lt;br /&gt;
|+&lt;br /&gt;
| detect: || Return first object for which block evaluation result is true. Othervise return nil.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== More information and examples ==&lt;br /&gt;
&lt;br /&gt;
More examples are included in the StepTalk source distribution in Examples directory, please refer to that place.&lt;br /&gt;
&lt;br /&gt;
For more information, please refer to the Documentation directory. For language reference see Smalltalk.txt file.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=DevelopmentKit&amp;diff=1932</id>
		<title>DevelopmentKit</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=DevelopmentKit&amp;diff=1932"/>
		<updated>2005-08-29T14:28:43Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Develompent Kit Framework is [[Objective-C]]/[[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 [[Objective-C]] 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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=935</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Glossary&amp;diff=935"/>
		<updated>2005-08-29T14:20:37Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* O */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Please add mainly GNUstep related terms here.''&lt;br /&gt;
&lt;br /&gt;
== A ==&lt;br /&gt;
* [[AppKit]]&lt;br /&gt;
* [[Application]]&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;
* [[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;
&lt;br /&gt;
== F ==&lt;br /&gt;
* First responder - see [[Responder]]&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;
&lt;br /&gt;
== H ==&lt;br /&gt;
&lt;br /&gt;
== I ==&lt;br /&gt;
* [[Instance variable]]&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]]&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 window - see [[Window]]&lt;br /&gt;
* [[Makefile]]&lt;br /&gt;
* [[MVC]]&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
* NeXTSTEP&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
* [[Objective-C]]&lt;br /&gt;
* [[OpenStep]] - API standard&lt;br /&gt;
* [[OPENSTEP]] - operating system&lt;br /&gt;
* Outlet - see FIXME&lt;br /&gt;
&lt;br /&gt;
== P ==&lt;br /&gt;
* [[Protocol]]&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
* [[Responder]]&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;
&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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Objective-C&amp;diff=1167</id>
		<title>Objective-C</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Objective-C&amp;diff=1167"/>
		<updated>2005-08-29T14:10:57Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Objective-C Language&lt;br /&gt;
&lt;br /&gt;
Some resources:&lt;br /&gt;
# [http://www.objc.info Objective-C portal]&lt;br /&gt;
# Apple Site: [http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ The Objective-C Programming Language]&lt;br /&gt;
# [http://www.toodarkpark.org/computers/objc/ Object-Oriented Programming and the Objective-C Language]&lt;br /&gt;
# [http://www.faqs.org/faqs/computer-lang/Objective-C/faq/ Objective-C FAQ]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=FAQ&amp;diff=1122</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=FAQ&amp;diff=1122"/>
		<updated>2005-08-29T14:05:14Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &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. Unfortunately this link is broken now. Dredge around in the google discussion group, I guess. I couldn't find anything helpful.&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;br /&gt;
&lt;br /&gt;
:'''Q.''' How can I get more information on Objective-C ?&lt;br /&gt;
:'''A.''' Here: [[Objective-C]]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=FAQ&amp;diff=921</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=FAQ&amp;diff=921"/>
		<updated>2005-08-29T14:03:41Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &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. Unfortunately this link is broken now. Dredge around in the google discussion group, I guess. I couldn't find anything helpful.&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;br /&gt;
&lt;br /&gt;
:'''Q.''' How can I get more information on Objective-C ?&lt;br /&gt;
:'''A.''' [Objective-C Here]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=376</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=376"/>
		<updated>2005-02-20T20:06:37Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Note: Please leave a short note about how is the company related to GNUstep.''&lt;br /&gt;
&lt;br /&gt;
== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept]&amp;lt;br&amp;gt;is working mainly on [http://www.gnustepweb.org GNUstepWeb] and gdl2 for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
== Companies which use and support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom]&amp;lt;br&amp;gt;uses [http://www.eCommStep.com eCommStep], an eCommerce engine based on [http://www.gnustep.org GNUstep], [http://www.gnustepweb.org GNUstepWeb] and gdl2 to run its shop since may 2003.&lt;br /&gt;
* [http://www.seat-1.com seat-1 Software GmbH ], business software for small to medium-sized production, trading and service companies. The software product IntarS is powered by GNUstepWeb on GNU based operating systems.&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=248</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=248"/>
		<updated>2005-02-17T23:57:24Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Companies which use and support GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept]&amp;lt;br&amp;gt;is working mainly on [http://www.gnustepweb.org GNUstepWeb] and gdl2 for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
== Companies which use and support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom&amp;lt;br&amp;gt;use [http://www.eCommStep.com eCommStep], an eCommerce engine based on [http://www.gnustep.org GNUstep], [http://www.gnustepweb.org GNUstepWeb] and gdl2 to run its shop [http://www.cyberdvdfilms.com CyberDVDFilms] since may 2003.&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=226</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=226"/>
		<updated>2005-02-17T23:56:56Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Companies which use and support GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept]&amp;lt;br&amp;gt;is working mainly on [http://www.gnustepweb.org GNUstepWeb] and gdl2 for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
== Companies which use and support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom&amp;lt;br&amp;gt;&lt;br /&gt;
use [http://www.eCommStep.com eCommStep], an eCommerce engine based on [http://www.gnustep.org GNUstep], [http://www.gnustepweb.org GNUstepWeb] and gdl2 to run its shop [http://www.cyberdvdfilms.com CyberDVDFilms] since may 2003.&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=225</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=225"/>
		<updated>2005-02-17T23:52:27Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Corporations &amp;amp; Companies actively developing for GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept]&amp;lt;br&amp;gt;is working mainly on [http://www.gnustepweb.org GNUstepWeb] and gdl2 for it's eCommerce engine: [http://www.eCommStep.com eCommStep]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
== Companies which use and support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom/CyberDVDFilms]&lt;br /&gt;
* Orillion&lt;br /&gt;
* [http://www.theinternetco.net/ The Internet Company]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Help:Editing&amp;diff=1941</id>
		<title>Help:Editing</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Help:Editing&amp;diff=1941"/>
		<updated>2005-02-17T23:49:39Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See: http://meta.wikimedia.org/wiki/Help:Editing&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=1940</id>
		<title>User:Mguesdon</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=User:Mguesdon&amp;diff=1940"/>
		<updated>2005-02-17T11:35:45Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Manuel Guesdon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Home''': [http://www.orange-concept.com Orange Concept]&lt;br /&gt;
&lt;br /&gt;
'''Email''': mguesdon [at] orange-concept.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''GNUstep Stuff''': [http://www.gnustepweb.org GNUstepWeb] and gdl2&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=202</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=202"/>
		<updated>2005-02-17T11:30:06Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Corporations &amp;amp; Companies actively developing for GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
== Companies which use and support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom/CyberDVDFilms]&lt;br /&gt;
* Orillion&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=190</id>
		<title>GNUstep in production</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstep_in_production&amp;diff=190"/>
		<updated>2005-02-17T11:29:44Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: /* Companies which use and support GNUstep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Corporations &amp;amp; Companies actively developing for GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sbuilders.com/ Software Builders]&lt;br /&gt;
* [http://www.orange-concept.com/ Orange Concept]&lt;br /&gt;
* [http://www.brainstorm.co.uk/ Brainstorm Computer Solutions]&lt;br /&gt;
* [http://www.turbocat.de/ Turbocat's Development]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Companies which use and support GNUstep ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberdvdfilms.com Microcom/CyberDVDFilms]&lt;br /&gt;
* Orillion&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=GNUstepWiki:Bureaucrat_log&amp;diff=1897</id>
		<title>GNUstepWiki:Bureaucrat log</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=GNUstepWiki:Bureaucrat_log&amp;diff=1897"/>
		<updated>2005-02-06T01:41:42Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: Rights for user &amp;quot;Aperez&amp;quot; set &amp;quot;+sysop +bureaucrat&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;01:41, 6 Feb 2005 [[User:Mguesdon|Mguesdon]] Rights for user &amp;quot;Aperez&amp;quot; set &amp;quot;+sysop +bureaucrat&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=4</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=4"/>
		<updated>2005-02-05T20:38:51Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=3</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=3"/>
		<updated>2005-02-05T20:37:25Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://meta.wikimedia.org/wiki/MediaWiki_development Wiki Dev Doc]&lt;br /&gt;
[http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User'sGuide]&lt;br /&gt;
[http://wikipedia.sourceforge.net WikiPedia]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.gnustep.org/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2005-02-05T20:33:00Z</updated>

		<summary type="html">&lt;p&gt;Mguesdon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://meta.wikimedia.org/wiki/MediaWiki_development WikiDoc]&lt;/div&gt;</summary>
		<author><name>Mguesdon</name></author>
	</entry>
</feed>