Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/.cvsignore4
-rw-r--r--doc/Makefile.am37
-rw-r--r--doc/MonoIcon.pngbin0 -> 448 bytes
-rw-r--r--doc/README17
-rw-r--r--doc/ado-net240
-rw-r--r--doc/anoncvs70
-rwxr-xr-xdoc/asp-net121
-rw-r--r--doc/books37
-rw-r--r--doc/c-sharp207
-rw-r--r--doc/ccvs194
-rw-r--r--doc/class-library190
-rw-r--r--doc/class-status.in51
-rw-r--r--doc/classlib-doc62
-rw-r--r--doc/contact13
-rw-r--r--doc/contributing227
-rw-r--r--doc/crypto275
-rw-r--r--doc/devel-faq190
-rw-r--r--doc/documentation62
-rw-r--r--doc/download597
-rwxr-xr-xdoc/embedded-api281
-rw-r--r--doc/faq1231
-rwxr-xr-xdoc/firebird175
-rw-r--r--doc/gcc-frontend9
-rw-r--r--doc/gtk-sharp147
-rw-r--r--doc/hackers31
-rwxr-xr-xdoc/ibmdb2132
-rw-r--r--doc/ideas112
-rw-r--r--doc/index2152
-rwxr-xr-xdoc/java66
-rw-r--r--doc/jit-debug23
-rw-r--r--doc/jit-debug-sample86
-rw-r--r--doc/jit-debug-sample270
-rwxr-xr-xdoc/languages142
-rw-r--r--doc/mailing-lists211
-rw-r--r--doc/mbas54
-rw-r--r--doc/mono-beginning34
-rw-r--r--doc/mono-beginning-windows.xml1065
-rw-r--r--doc/mono-beginning.xml1294
-rwxr-xr-xdoc/mono-build-w32.sh186
-rwxr-xr-xdoc/mono-build.sh232
-rw-r--r--doc/mono-contribution-howto551
-rw-r--r--doc/monodoc-xml755
-rwxr-xr-xdoc/mysql270
-rwxr-xr-xdoc/odbc175
-rwxr-xr-xdoc/oledb142
-rwxr-xr-xdoc/oracle146
-rw-r--r--doc/papers96
-rw-r--r--doc/passport298
-rw-r--r--doc/pending14
-rw-r--r--doc/pending-classes.in246
-rwxr-xr-xdoc/plans15
-rw-r--r--doc/porting63
-rw-r--r--doc/postgresql492
-rw-r--r--doc/ppc33
-rwxr-xr-xdoc/projects24
-rw-r--r--doc/rationale173
-rw-r--r--doc/release-notes/mono-0.346
-rw-r--r--doc/release-notes/mono-0.443
-rw-r--r--doc/resources235
-rw-r--r--doc/resources-pending30
-rw-r--r--doc/roadmap12
-rw-r--r--doc/runtime169
-rwxr-xr-xdoc/sqlclient147
-rwxr-xr-xdoc/sqlite112
-rw-r--r--doc/status40
-rwxr-xr-xdoc/sybase134
-rw-r--r--doc/tds-providers164
-rwxr-xr-xdoc/tdsclient137
-rw-r--r--doc/team2
-rw-r--r--doc/testing186
-rw-r--r--doc/thanks6
-rw-r--r--doc/todo1
-rw-r--r--doc/tools67
-rw-r--r--doc/web/.cvsignore2
-rw-r--r--doc/web/commands63
-rwxr-xr-xdoc/web/deploy/.cvsignore1
-rw-r--r--doc/web/deploy/cm/c.gifbin0 -> 150 bytes
-rw-r--r--doc/web/deploy/cm/cormissing.css182
-rw-r--r--doc/web/deploy/cm/cormissing.js392
-rw-r--r--doc/web/deploy/cm/d.gifbin0 -> 137 bytes
-rw-r--r--doc/web/deploy/cm/e.gifbin0 -> 861 bytes
-rw-r--r--doc/web/deploy/cm/en.gifbin0 -> 111 bytes
-rw-r--r--doc/web/deploy/cm/f.gifbin0 -> 90 bytes
-rw-r--r--doc/web/deploy/cm/i.gifbin0 -> 90 bytes
-rw-r--r--doc/web/deploy/cm/m.gifbin0 -> 101 bytes
-rw-r--r--doc/web/deploy/cm/n.gifbin0 -> 65 bytes
-rw-r--r--doc/web/deploy/cm/p.gifbin0 -> 111 bytes
-rw-r--r--doc/web/deploy/cm/r.gifbin0 -> 73 bytes
-rw-r--r--doc/web/deploy/cm/s.gifbin0 -> 127 bytes
-rw-r--r--doc/web/deploy/cm/sc.gifbin0 -> 70 bytes
-rw-r--r--doc/web/deploy/cm/se.gifbin0 -> 73 bytes
-rw-r--r--doc/web/deploy/cm/sm.gifbin0 -> 76 bytes
-rw-r--r--doc/web/deploy/cm/st.gifbin0 -> 101 bytes
-rw-r--r--doc/web/deploy/cm/sx.gifbin0 -> 73 bytes
-rw-r--r--doc/web/deploy/cm/tb.gifbin0 -> 49 bytes
-rw-r--r--doc/web/deploy/cm/tm.gifbin0 -> 64 bytes
-rw-r--r--doc/web/deploy/cm/tp.gifbin0 -> 67 bytes
-rw-r--r--doc/web/deploy/cm/y.gifbin0 -> 92 bytes
-rw-r--r--doc/web/deploy/images/bgsquares.gifbin0 -> 4963 bytes
-rw-r--r--doc/web/deploy/images/bgsquares.pngbin0 -> 4643 bytes
-rw-r--r--doc/web/deploy/images/bgsquares.xcf.gzbin0 -> 2775 bytes
-rw-r--r--doc/web/deploy/images/mono.gifbin0 -> 3079 bytes
-rw-r--r--doc/web/deploy/images/mono.pngbin0 -> 4495 bytes
-rw-r--r--doc/web/deploy/images/pixel.gifbin0 -> 49 bytes
-rw-r--r--doc/web/deploy/images/pixel.pngbin0 -> 156 bytes
-rw-r--r--doc/web/htmlify33
-rw-r--r--doc/web/icaza.pl76
-rw-r--r--doc/web/images/bgsquares.gifbin0 -> 4963 bytes
-rw-r--r--doc/web/images/bgsquares.pngbin0 -> 4644 bytes
-rw-r--r--doc/web/images/bgsquares.xcf.gzbin0 -> 2775 bytes
-rwxr-xr-xdoc/web/images/mono-new.gifbin0 -> 6198 bytes
-rw-r--r--doc/web/images/mono.gifbin0 -> 3079 bytes
-rw-r--r--doc/web/images/mono.pngbin0 -> 4496 bytes
-rw-r--r--doc/web/images/pixel.gifbin0 -> 49 bytes
-rw-r--r--doc/web/images/pixel.pngbin0 -> 157 bytes
-rwxr-xr-xdoc/web/images/xml.gifbin0 -> 429 bytes
-rw-r--r--doc/web/makefile152
-rwxr-xr-xdoc/web/mono-rss.cs103
-rwxr-xr-xdoc/web/process.pl89
-rwxr-xr-xdoc/web/rss.cs262
-rwxr-xr-xdoc/web/src/.cvsignore1
-rw-r--r--doc/web/template.html.in93
-rw-r--r--doc/winforms120
123 files changed, 16920 insertions, 0 deletions
diff --git a/doc/.cvsignore b/doc/.cvsignore
new file mode 100644
index 00000000000..6d3ceb93234
--- /dev/null
+++ b/doc/.cvsignore
@@ -0,0 +1,4 @@
+Makefile.in
+Makefile
+all-docs
+pending-classes.in
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 00000000000..4df74ba2f02
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,37 @@
+WEB_FILES= \
+ ado-net anoncvs asp-net books ccvs c-sharp class-library contact contributing devel-faq documentation download \
+ embedded-api faq firebird gcc-frontend hackers ideas index \
+ java jit-debug languages mailing-lists monodoc-xml mysql odbc \
+ oledb papers \
+ passport plans porting postgresql ppc projects rationale \
+ resources roadmap runtime sqlclient sqlite sybase tdsclient \
+ tds-providers team status team testing thanks tools \
+ porting anoncvs monodoc-xml winforms
+
+OTHERS= pending resources-pending todo mono-build.sh mono-build-w32.sh
+
+EXTRA_DIST = $(WEB_FILES) README $(OTHERS)
+
+all-docs: $(WEB_FILES)
+ cat rationale roadmap c-sharp tools class-library \
+ runtime documentation download faq contributing \
+ resources status > all-docs
+
+class-status: class-status.in pending-classes Makefile.am
+ cat class-status.in pending-classes > class-status
+
+pending-classes:
+
+#pending-classes: pending-classes.in Makefile.am
+# echo "This is a list of pending classes, and links to their documentation on MSDN.Microsoft.com<p><p>" > pending-classes
+# for i in `cat pending-classes.in`; do x=`echo $$i | sed s/\\\.//g`; link=`echo http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf@@@ClassTopic.asp | sed "s/@@@/$$x/"`; echo " <a href=\"$$link\">$$i</a><br>" >> pending-classes; done
+
+
+webit: dummy
+ (cd web; make && make push)
+
+push-notes:
+ scp release-notes/mono* www@www:/web/cvsmodules/mono/archive
+
+dummy:
+
diff --git a/doc/MonoIcon.png b/doc/MonoIcon.png
new file mode 100644
index 00000000000..c670edb5011
--- /dev/null
+++ b/doc/MonoIcon.png
Binary files differ
diff --git a/doc/README b/doc/README
new file mode 100644
index 00000000000..333d133943f
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,17 @@
+To edit the website appearance:
+
+cd doc/web
+edit template.html.in
+make
+
+To edit website content:
+
+cd doc (this directory)
+edit files carefully
+cd web
+make
+
+To publish changes:
+
+cd web
+make push
diff --git a/doc/ado-net b/doc/ado-net
new file mode 100644
index 00000000000..0f40c246db8
--- /dev/null
+++ b/doc/ado-net
@@ -0,0 +1,240 @@
+* ADO.NET
+
+ <p>Mono's ADO.NET Developers:
+ <ul>
+ <li>rodrigo -AT- ximian.comNOSPAM - <b>Rodrigo Moya</b> - coordinator
+ for the ADO.NET implementation and works on the OLE DB provider</li>
+ <li>danmorg -AT- sc.rr.comNOSPAM - <b>Daniel Morgan</b> - works on
+ the MySQL, PostgreSQL, and Oracle providers</li>
+ <li>tim -AT- timcoleman.comNOSPAM - <b>Tim Coleman</b> - works on
+ the Microsoft SQL Server, Sybase, and TDS providers</li>
+ <li>brianlritchie -AT- hotmail.comNOSPAM - <b>Brian Ritchie</b> - works on
+ the ODBC provider and the ProviderFactory</li>
+ <li>vladimir -AT- pobox.comNOSPAM - <b>Vladimir Vukicevic</b> - works on
+ the SQL Lite provider</li>
+ <li>cleared -AT- rogers.comNOSPAM - <b>Christopher Bockner</b> - works on
+ the IBM DB2 provider</li>
+ <li>vi64pa -AT- koti.soon.fiNOSPAM - <b>Ville Palo</b> - works on XML stuff in System.Data
+ including DataSet, XmlDataDocument, and has done lots of testing</li>
+ </ul>
+
+* Action plan
+
+ <p>The current plan to implement ADO.NET is as follows:
+
+ <ul>
+ <li>Either create ADO.NET providers or modify pre-exiting ADO.NET providers to
+ work with Mono</li>
+
+ <ul>
+ <li>Create ADO.NET Providers
+
+ <ul>
+ <li><a href="http://www.go-mono.com/ibmdb2.html">IBM DB2 Universal Database</a></li>
+ <li><a href="http://www.go-mono.com/mysql.html">MySQL</a></li>
+ <li><a href="http://www.go-mono.com/odbc.html">ODBC</a></li>
+ <li><a href="http://www.go-mono.com/oracle.html">Oracle</a></li>
+ <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a></li>
+ <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a></li>
+ <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a></li>
+ <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a></li>
+ <li><a href="http://www.go-mono.com/sybase.html">Sybase</a></li>
+ <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a></li>
+ <li>Providers which we do not have, but we would like to have. Currently,
+ some of these databases are supported via the ODBC or OLEDB providers.</li>
+ <ul>
+ <li><a href="http://msdn.microsoft.com/library/en-us/dnsql2k/html/sqlxml_intromanagedclasses.asp?frame=true">Managed Classes for SqlXml</a> which is
+ a .NET data provider for retrieving XML data from a Microsoft SQL Server 2000 database. The System.Data.SqlClient provider
+ in Mono can be used as a starting point at mcs/class/System.Data/System.Data.SqlClient.</li>
+ <li><a href="http://www.hughes.com.au/">miniSQL</a></li>
+ <li><a href="http://www.sleepycat.com/">BerkeleyDB (Sleepycat)</a></li>
+ <li><a href="http://www.sapdb.org/">SapDB</a></li>
+ <li>Microsoft Access - could be done by creating C# bindings to <a href="http://mdbtools.sourceforge.net">MDB Tools</a></li>
+ <li>dbase or xbase type database files</li>
+ <li>Others are welcome</li>
+ </ul>
+ </ul></li>
+ <br>
+ <li>Modify Pre-existing ADO.NET Providers to work with Mono. This may
+ require fixing or implementing areas of Mono too.
+ <ul>
+ <li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a></li>
+ <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> is a
+ PostgreSQL Managed data provider written
+ in 100% C#, does not require a client library, and works on Mono</li>
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a
+ MySQL Manager data provider written in 100% C#, does not
+ require a client library, and works on Mono</li>
+ </ul>
+ </li>
+ </ul>
+ <br>
+ <li>Create Tools for Configuration, Testing, and Entering SQL Queries
+ <ul>
+ <li><b>SQL# CLI - a command-line tool</b> written in C# to
+ execute SQL commands,
+ test connection strings, and connect to various ADO.NET
+ providers in Mono. The SQL# CLI can be found in
+ mcs/tools/SqlSharp/SqlSharpCli.cs</li>
+
+ <li><p><b>SQL# GUI - a GUI tool</b> written in C# to
+ execute SQL commands.
+ Currently, there is SQL# For GTK# which
+ can be found at
+ mcs/tools/SqlSharp/gui/gtk-sharp
+ It has a SQL editor with
+ syntax hi lighting of SQL keywords. This will be
+ moving to its own cvs modeul sqlsharpgtk.</li>
+
+ <li><b>Configuration Command-Line and GUI Tools for ADO.NET</b>.
+ These tools have not been started. The tools would be written in
+ C# and run on Mono. The
+ configuration tool can be used to do the following:
+ <ul>
+ <li>setup DSNs for the ODBC and OLE-DB
+ providers and configurations for
+ their underlying libraries (unixODBC and libgda)</li>
+ <li>setup configurations for the Mono.Data.ProviderFactory
+ that Brian Ritchie created</li>
+ <li>setup native database client library configurations too, such as,
+ freetds.conf for Microsoft SQL Server and Sybase</li>
+ </ul>
+ </li>
+ </ul>
+</ul>
+
+* Current Status
+
+ <p>Variouls ADO.NET Providers have been created: PostgreSQL, MySQL, Sybase, SQL Lite,
+ Microsoft SQL Server, OLE DB, ODBC, and TDS Generic. See their respective web page for
+ more information.
+
+ <p>Constraints need lots of work
+
+ <p>TypeDataSetGenerator needs to be stubbed and implemented.
+
+ <p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
+ DataColumnCollection, DataRowCollection, and others</b> need more work. There are
+ many classes that are just stubs and need to be implemented.
+
+ <p><b>XML support in System.Data</b> needs work. This involves working on
+ the classes: DataSet, XmlDataDocument, and the method ExecuteXmlReader() that
+ exists in a provider's class that implements IDbCommand, and others.
+ Stuart Caborn has started the XML support in a DataSet. Tim Coleman started
+ XML support in the ExecuteXmlReader() in a SqlCommand. Ville Palo has been
+ heavily modifying DataSet, XmlDataDocument, and other classes for reading
+ and writing XML.
+
+ <p><b>ADO.NET Provider Factory</b> has been started by Brian Ritchie. The
+ Provider Factory is way to dynamically create
+ connections, commands, parameters, and data adapters based on configuration information. The
+ provider factory also provides utility functions needed by a lot of
+ providers but are not exposed via the provider. The ProviderFactory
+ is found at mcs/class/Mono.Data and includes a test named test.cs for it in
+ mcs/class/Mono.Data/Test. Also, take a look at the sample .config file for the
+ test.exe application named test.exe.config. The .config file is automatically
+ read when you use the Mono.Data.ProviderFactory or Mono.Data.DataTools.
+
+ <p><b>Integration with ASP.NET</b> has not been started, such as, data binding
+ to a System.Web.UI.WebControls.DataGrid. This may involve implementing many classes
+ in System.Web and System.Data. If you want to help,
+ contact Gonzalo Paniagua Javier. Here is information about using ADO.NET in ASP.NET:
+ <ul>
+ <li>Take a look at xsp in cvs and look at the examples in test: dbpage1.aspx
+ and dbpage2.aspx:
+ <ul>
+ <li>Notice that the namespace System.Data is imported via <b>import</b></li>
+ <li>A NameValueCollection is gotten using ConfigurationSettings.AppSetings. These
+ settings are gotten from the file server.exe.config which is a XML file. The XML
+ file has a section appSettings. In the appSettings section, you have keys
+ for DBProviderAssembly, DBConnectionType, and DBConnectionString.
+ <ul>
+ <li><b>DBProviderAssembly</b> is the assembly of the ADO.NET provider.
+ For example:
+ "Mono.Data.PostgreSqlClient"</li>
+ <li><b>DBConnectionType</b> is the System.Type of the class that
+ implements System.Data.IDbConnection that is found
+ in the DBProviderAssembly.
+ For example:
+ "Mono.Data.PostgreSqlClient.PgConnection"</li>
+ <li><b>DBConnectionString</b> is the ConnectionString to set to the
+ IDbConnection object to use in opening a connection to a data source.
+ For Example:
+ "hostaddr=127.0.0.1;user=monotest;password=monotest;dbname=monotest"</li>
+ </ul>
+ <li>The function GetConnectionData() gets the database provider assembly, connection type,
+ and connection string parameters if they exist; otherwise, it uses default values. This is
+ done during the loading of the web page.</li>
+ <li>With the connection parameters, the assembly is loaded, the connection type is verified that
+ it implements IDbConnection and an instance of the class can be created, creates a instance
+ of the class, sets the connection string, and opens the connection.</li>
+ </ul>
+ </li>
+ </ul>
+
+ <p><b>Integration with Windows.Forms</b> has not been started, such as, data binding
+ to a System.Windows.Forms.DataGrid. This may involve implementing many classes
+ in System.Windows.Forms and System.Data.
+
+ <p><b>Integration with <a href="http://gtk-sharp.sourceforge.net/">GTK#</a></b>
+ has not been started, such as, data binding
+ to a GtkTreeView. This may involve creating new classes
+ to go between the glist data model and the ADO.NET data model.
+ Mike Kestner would be the best person to ask for help on GTK#.
+
+ <p><b>Integration with QT#</b> has not been started. Any information on
+ how this can be done is appreciated. Adam Treat would be the best
+ person to ask about QT#.
+
+ <p><b>Building System.Data</b>
+
+ <p>The System.Data.dll gets built with the rest of the class library.
+ To compile the System.Data.dll assembly separately, you need:
+
+ <b>On Unix</b>
+
+ <ul>
+ * update your mono sources. Be sure you have latest mcs.exe
+ and .dll's, since there have been many fixes needed for
+ compilation on Linux.
+
+ * compile System.Data.dll:
+<pre>
+ cd mcs/class/System.Data<br>
+ mcs --target library -o \
+ System.Data.dll @list
+</pre>
+ </ul>
+
+ <b>On Windows</b>
+
+ <ul>
+ * update your mono sources. Be sure you have latest mcs.exe
+ and .dll's. You can use the same method as Linux,
+ or you can use NAnt.
+
+ * To use NAnt:
+
+<pre>
+ cd mcs/class/System.Data
+ ../../nant/NAnt.exe
+</pre>
+
+ * This will automatically copy the System.Data.dll to Test.
+ If you need to do a clean for the System.Data.dll assembly,<br><br>
+
+<pre>
+ cd mcs/class/System.Data
+ ../../nant/NAnt.exe clean
+</pre>
+ </ul>
+
+* Testing
+
+<ul>
+ <li>Testing connection-oriented classes are done via the provider specific tests
+
+ <li><a href="http://www.go-mono.com/testing.html">Testing non-connection classes</a> are
+ done via mono's modified version of NUnit.</li>
+
+</ul>
diff --git a/doc/anoncvs b/doc/anoncvs
new file mode 100644
index 00000000000..2e72173b458
--- /dev/null
+++ b/doc/anoncvs
@@ -0,0 +1,70 @@
+* Anonymous CVS access
+
+ Anonymous access to the Mono is available currently from three
+ servers (anoncvs-spain-1.go-mono.com,
+ anoncvs-spain-2.go-mono.com and anoncvs-us-1.go-mono.com).
+
+ You can also use `anoncvs.go-mono.com', and that will pick a
+ server automatically for you.
+
+ Sources are currently being updated every hour.
+
+** Checking out the sources
+
+ To check out the sources for the first time from the
+ repository, use this command:
+
+<pre>
+ export CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono
+ cvs login
+ cvs -z3 co mcs mono gtk-sharp
+</pre>
+
+ That will get you the compiler and class libraries (mcs), the
+ interpreter and JITer (mono) and the Gtk# bindings.
+
+ The server is located in Spain.
+
+** Updating the sources
+
+ To update your sources every day, you use this command:
+
+<pre>
+ export CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono
+ cvs -z3 update -dP mcs mono gtk-sharp
+</pre>
+
+** Thanks
+
+ Thanks to <a href="http://www.hispalinux.es">HispaLinux</a>
+ for providing this Anon CVS server. The server is located in
+ Spain.
+
+ Special thanks to Jesus Climent, Rodrigo Moya, Juantomás
+ García and Ismael Olea for making this happen.
+
+<a name="#mirror">
+** Becoming an AnonCVS mirror
+
+ To become an AnonCVS mirror, you currently need about 40
+ megabytes of free disk space and bandwidth that you do not
+ mind sharing (you probably want enough to spare).
+
+ I need to be able to rsync to your machine from the main CVS
+ server. The preferred method to rsync is to setup ssh in your
+ machine.
+
+ The requirements are:
+ <ul>
+ * An account where we can ssh into.
+
+ * rsync.
+
+ * AnonCVS setup with the same paths as the rest of the
+ servers.
+
+ * Currently, about 40 megabytes of disk space, but this
+ will likely grow as the project evolves.
+
+ * A sysadmin contact e-mail address.
+ </ul>
diff --git a/doc/asp-net b/doc/asp-net
new file mode 100755
index 00000000000..01ce341ee29
--- /dev/null
+++ b/doc/asp-net
@@ -0,0 +1,121 @@
+* ASP.NET
+
+ ASP.NET support is divided in two pieces:
+ <ul>
+ * Web Forms (Web Applications infrastructure).
+
+ * Web Services (the SOAP-based rpc system).
+ </ul>
+
+ There is work underway for both systems. The Web Forms
+ support is more advanced at this point, and various ".aspx"
+ programs can be run using the Mono runtime (embedded into
+ either the XSP server or the mod_mono Apache module).
+
+ We are now working bug fixing and adding missing features
+ after making the whole pipeline compatible with MS.
+
+ Tim started work on the Web Services. Although we have a
+ SoapFormatter as part of the remoting infrastructure already
+ (contributed by Jesus), most people will be using the ASP.NET
+ Web Services support. Work for the supporting class libraries
+ just started recently.
+
+** HttpRuntime
+
+ Patrik has authored most of the HttpRuntime support (both on
+ the System.Web and on the foundation).
+
+ We are currently working on this.
+
+** XSP
+
+ This is where initial development of the .aspx/.ascx/.asax compiler
+ to C# took place. That compiler is now integrated in System.Web classes
+ mostly under System.Web.Compilation namespace.
+
+ We added a new web server that works with mono and MS runtime and is
+ being used to debug our classes. It resides in xsp/server. A couple of
+ classes of this new server can be reused/extended to make an apache
+ module/cgi using mono (MonoWorkerRequest and MonoApplicationHost).
+
+ There is also a bunch of .aspx pages to test the server along with
+ a few user controls under xsp/test.
+
+ You can check it out from CVS and run 'make install' to test it.
+
+** Controls
+
+ A lot of work has been put in the various classes that
+ implement the controls (UI.HtmlControls and UI.WebControls),
+ but they have been coded mostly in the dark, and without being
+ able to test them in real life: Gaurav and Leen worked very
+ hard on this namespace.
+
+ We can now render all HtmlControls and almost all WebControls.
+ DataGrid and DataList controls are being finished by Gaurav.
+ Xml control needs some work on System.Xml related to XSL.
+
+** Extending ASP.NET
+
+ Currently you have to reference in your ASP.NET the control
+ and all of its properties, which works fine if you have a GUI
+ designer, but is harder for people used to develop using text
+ editors.
+
+ Since we have a parser, we could extend this parser to allow
+ people to still use ASP.NET controls, using a simpler syntax.
+ For example people doing blogs and editing their templates
+ over the web probably do not want to use direct ASP.NET but a
+ wrapper around it.
+
+* Web Forms: The pieces (historical)
+
+ There are a couple of components to the puzzle:
+
+ <ul>
+ * .aspx page parser (converts .aspx to C# code).
+
+ * System.Web.HttpRuntime support.
+
+ * Web controls (System.Web.UI.HtmlControls and
+ System.Web.UI.WebControls).
+
+ * Underlying infrastructure for the controls (System.Web.UI).
+
+ * HttpRuntime.ProcessRequest is the core of the ASP.NET
+ implementation.
+ </ul>
+
+
+ Gonzalo has been working on an ASP.NET parser that takes .aspx
+ files and generated the code required to run them (the code lives in
+ module `xsp' along with a little web server for testing).
+
+ Most of the runtime support was written by Patrik Torstensson
+ (now at Intel). This was interesting, because in order to implement
+ some of its features, Patrik had to go into the runtime/JIT engine and
+ he spent a few weeks doing work there.
+
+ The classes for running ASP.NET are being actively written.
+ Gaurav, Leen and Patrik worked in the core of the classes
+ required to run ASP.NET web application as well as a small
+ embeddable web server.
+
+ Duncan got our System.Web assembly to compile.
+
+** How to Help
+
+ Testing and fixing HtmlControls, WebControls and validators is an
+ easy way to help.
+
+ In the CVS module XSP you can find a small web server used for
+ testing and a directory containing sample aspx pages.
+
+ You have some documentation under doc directory and in the README
+ file of each directory. They explain how to test our System.Web.
+ Testing is really easy!
+
+ As the server also works with MS runtime, you can use it to check
+ what the expected results are.
+
diff --git a/doc/books b/doc/books
new file mode 100644
index 00000000000..d5933e79836
--- /dev/null
+++ b/doc/books
@@ -0,0 +1,37 @@
+* C# Books
+
+ A Programmer's Introduction to C# - Second Edition: Eric Gunnerson
+
+* Remoting
+
+ <a href="http://www.dotnetremoting.cc/book/AdvancedDotNetRemoting.asp">
+ Advanced .NET Remoting: Ingo Rammer</a>
+
+* Compiler Implementation
+
+ Compilers - Principles, Techniques, and Tools: Alfred V. Aho, Ravi Sethi,
+ Jeffrey D. Ullman
+
+ Advanced Compiler Design Implementation: Steven S. Muchnick
+
+ Modern Compiler Implementation in C: Andrew W. Appel
+
+ A Retargetable C Compiler - Design and Implementation: C. Fraser, David
+ Hanson
+
+* Reference Manuals
+
+ <a
+ href="http://developer.intel.com/design/pentium/manuals/24319101.pdf">Intel
+ Architecture Software Developer's Manual, Volume 2 - Instruction Set Reference Manual</a>
+
+ <a
+ href="http://www.caldera.com/developers/devspecs/abi386-4.pdf">System V ABI
+ - i386 Architecture Processor Supplement</a>
+
+ <a
+ href="http://www.caldera.com/developers/devspecs/mipsabi.pdf">System V ABI -
+ MIPS Processor supplement</a>
+
+ <a href="http://www.sparc.org/standards/V8.pdf">The SPARC Architecture
+ Manual Version 8</a> \ No newline at end of file
diff --git a/doc/c-sharp b/doc/c-sharp
new file mode 100644
index 00000000000..9d3499732e6
--- /dev/null
+++ b/doc/c-sharp
@@ -0,0 +1,207 @@
+* MCS: The Ximian C# compiler
+
+ MCS is currently able to compile itself and many more C#
+ programs (there is a test suite included that you can use).
+ It is routinely used to compile Mono, roughly half a million
+ lines of C# code.
+
+ We are in feature completion mode right now. There are still
+ a couple of areas that are not covered by the Mono compiler, but
+ they are very very few at this point (security attributes),
+ you can also browse the MCS <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FMCS&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">bugs</a> from Bugzilla.
+
+ A test suite is maintained to track the progress of
+ the compiler and various programs are routinely compiled and
+ ran.
+
+** Slides
+
+ Slides for the Mono C# Compiler presentation at .NET ONE are
+ available <a
+ href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/Mono_C_Sharp_Overview_1007.sxi">here</a>
+ in StarOffice format.
+
+** Obtaining MCS
+
+ The Mono C# compiler is part of the `mcs' module in the Mono CVS
+ you can get it from our <a href="anoncvs.html">Anonymous CVS</a> server,
+ or you can get nightly <a href="download.html">download page</a>.
+
+** Running MCS
+
+ MCS is written in C# and uses heavily the .NET APIs. MCS runs
+ on Linux with the Mono runtime and on Windows with both the
+ .NET runtime and the Mono runtime.
+
+** Reporting Bugs in MCS
+
+ When you report a bug, try to provide a small test case that would
+ show the error so we can include this as part of the Mono C# regression
+ test suite.
+
+ If the bug is an error or a warning that we do not flag, write
+ a sample program called `csXXXX.cs' where XXXX is the code number
+ that is used by the Microsoft C# compiler that illustrates the
+ problem. That way we can also do regression tests on the invalid
+ input.
+
+** Phases of the compiler
+
+ The compiler has a number of phases:
+
+ <ul>
+ * Lexical analyzer: hand-coded lexical analyzer that
+ provides tokens to the parser.
+
+ * The Parser: the parser is implemented using Jay (A
+ Berkeley Yacc port to Java, that I ported to C#).
+ The parser does minimal work and syntax checking,
+ and only constructs a parsed tree.
+
+ Each language element gets its own class. The code
+ convention is to use an uppercase name for the
+ language element. So a C# class and its associated
+ information is kept in a "Class" class, a "struct"
+ in a "Struct" class and so on. Statements derive
+ from the "Statement" class, and Expressions from the
+ Expr class.
+
+ * Parent class resolution: before the actual code
+ generation, we need to resolve the parents and
+ interfaces for interface, classe and struct
+ definitions.
+
+ * Semantic analysis: since C# can not resolve in a
+ top-down pass what identifiers actually mean, we
+ have to postpone this decision until the above steps
+ are finished.
+
+ * Code generation: The code generation is done through
+ the System.Reflection.Emit API.
+ </ul>
+
+** CIL Optimizations.
+
+ The compiler performs a number of simple optimizations on its input:
+ constant folding (this is required by the C# language spec) and
+ can perform dead code elimination.
+
+ Other more interesting optimizations like hoisting are not possible
+ at this point since the compiler output at this point does not
+ generate an intermediate representation that is suitable to
+ perform basic block computation.
+
+ Adding an intermediate layer to enable the basic block
+ computation to the compiler should be a simple task, but we
+ are considering having a generic CIL optimizer. Since all the
+ information that is required to perform basic block-based
+ optimizations is available at the CIL level, we might just skip
+ this step altogether and have just a generic IL optimizer that
+ would perform hoisting on arbitrary CIL programs, not only
+ those produced by MCS.
+
+ If this tool is further expanded to perform constant folding
+ (not needed for our C# compiler, as it is already in there)
+ and dead code elimination, other compiler authors might be
+ able to use this generic CIL optimizer in their projects
+ reducing their time to develop a production compiler.
+
+** History
+
+ MCS was able to parse itself on April 2001, MCS compiled itself
+ for the first time on December 28 2001. MCS became self hosting
+ on January 3rd, 2002.
+
+ The Mono Runtime and the Mono execution engine were able to make
+ our compiler self hosting on March 12, 2002.
+
+** Questions and Answers
+
+Q: Why not write a C# front-end for GCC?
+
+A: I wanted to learn about C#, and this was an exercise in this
+ task. The resulting compiler is highly object-oriented, which has
+ lead to a very nice, easy to follow and simple implementation of
+ the compiler.
+
+ I found that the design of this compiler is very similar to
+ Guavac's implementation.
+
+ Targeting the CIL/MSIL byte codes would require to re-architecting
+ GCC, as GCC is mostly designed to be used for register machines.
+
+ The GCC Java engine that generates Java byte codes cheats: it does
+ not use the GCC backend; it has a special backend just for Java, so
+ you can not really generate Java bytecodes from the other languages
+ supported by GCC.
+
+Q: If your C# compiler is written in C#, how do you plan on getting
+ this working on a non-Microsoft environment.
+
+ We will do this through an implementation of the CLI Virtual
+ Execution System for Unix (our JIT engine).
+
+ Our JIT engine is working for the purposes of using the compiler.
+ The supporting class libraries are being worked on to fully support
+ the compiler.
+
+Q: Do you use Bison?
+
+A: No, currently I am using Jay which is a port of Berkeley Yacc to
+ Java that I later ported to C#. This means that error recovery is
+ not as nice as I would like to, and for some reason error
+ productions are not being caught.
+
+ In the future I want to port one of the Bison/Java ports to C# for
+ the parser.
+
+Q: Should someone work on a GCC front-end to C#?
+
+A: I would love if someone does, and we would love to help anyone that
+ takes on that task, but we do not have the time or expertise to
+ build a C# compiler with the GCC engine. I find it a lot more fun
+ personally to work on C# on a C# compiler, which has an intrinsic
+ beauty.
+
+ We can provide help and assistance to anyone who would like to work
+ on this task.
+
+Q: Should someone make a GCC backend that will generate CIL images?
+
+A: I would love to see a backend to GCC that generates CIL images. It
+ would provide a ton of free compilers that would generate CIL
+ code. This is something that people would want to look into
+ anyways for Windows interoperation in the future.
+
+ Again, we would love to provide help and assistance to anyone
+ interested in working in such a project.
+
+Q: What about making a front-end to GCC that takes CIL images and
+ generates native code?
+
+A: I would love to see this, specially since GCC supports this same
+ feature for Java Byte Codes. You could use the metadata library
+ from Mono to read the byte codes (ie, this would be your
+ "front-end") and generate the trees that get passed to the
+ optimizer.
+
+ Ideally our implementation of the CLI will be available as a shared
+ library that could be linked with your application as its runtime
+ support.
+
+ Again, we would love to provide help and assistance to anyone
+ interested in working in such a project.
+
+Q: But would this work around the GPL in the GCC compiler and allow
+ people to work on non-free front-ends?
+
+A: People can already do this by targeting the JVM byte codes (there
+ are about 130 compilers for various languages that target the JVM).
+
+Q: Why are you writing a JIT engine instead of a front-end to GCC?
+
+A: The JIT engine and runtime engine will be able to execute CIL
+ executables generated on Windows.
+
+You might also want to look at the <a href="faq.html#gcc">GCC</a>
+section on the main FAQ
diff --git a/doc/ccvs b/doc/ccvs
new file mode 100644
index 00000000000..0363baa368d
--- /dev/null
+++ b/doc/ccvs
@@ -0,0 +1,194 @@
+* CVS Access
+
+ If you are an active Mono developer, you can get a CVS account
+ that hosts the Mono source code. This web page contains
+ details about how to use the CVS server as well as the
+ policies to use it.
+
+ If you are not a developer, but want to track the development, please
+ see the <a href="anoncvs.html">AnonCVS</a> instructions.
+
+ Send an e-mail to miguel with your public OpenSSH key for this
+ purpose. Please specify if the key was generated with SSH version 1
+ or version 2.
+
+* Policies
+
+ Here are some policies about the use of the Mono CVS server.
+
+** Code License
+
+ If you are about to commit code to a module, the code that is
+ being commited should be released under the same license as
+ the code that the module has.
+
+ Check the license if you are unsure, but it is basically:
+ class libraries X11; compiler and tools: GPL; runtime: LGPL.
+
+ If in doubt, check with the maintainers of the module, or send
+ mail to mono-hackers-list@ximian.com.
+
+** Commiting code.
+
+ If you are the maintainer for a piece of code, feel free to
+ commit code, and delegate the work to others.
+
+ Use ChangeLog entries so we can keep textual descriptions of
+ your work, and use the contents of your ChangeLog file as the
+ CVS commit message (ie, paste the contents of this into the
+ editor buffer).
+
+ If you are making changes to someone else's code, please make
+ sure you get in touch with the maintainer of that code before
+ applying patches. You want to avoid commiting conflicting
+ work to someone else's code.
+
+ Please do not commit code that would break the compile to the
+ CVS, because that normally wastes everybody's time. Two things
+ are important in this step: trying to build your sources and making
+ sure that you add all the new files before you do a commit.
+
+
+* Using CVS.
+
+ This is a small tutorial for using CVS.
+
+** Generating an SSH key
+
+ If you are using SSH version 2, please generate your key using:
+
+<pre>
+ ssh-keygen -t rsa
+</pre>
+
+ And mail me the id_rsa.pub file.
+
+ If you are using SSH version 1, run:
+<pre>
+ ssh-keygen
+</pre>
+
+ And mail me your identity.pub file.
+
+ If you are using SSH from SSH Communications Security (they offer
+ a free SSH client for personal use), you have to use OpenSSH to
+ convert your public key to the required format. You have to use
+ OpenSSH's ssh-keygen program and write the following:
+
+<pre>
+ ssh-keygen -i -f id_XXX.pub > my_public_key.pub
+</pre>
+
+ where the file id_XXX.pub is your public key file,
+ normally located under ~/.ssh/ or ~/.ssh2/.
+ Send to miguel the my_public_key.pub file.
+
+ The *exact* format for this file must be:
+
+<pre>
+ ssh-rsa XXXXX....
+</pre>
+
+ You will need CVS and SSH. Windows users can get both by
+ installing Cygwin (<a
+ href="http://www.cygwin.com">http://www.cygwin.com</a>)
+
+ Unix users will probably have those tools installed already.
+
+** Checking out the sources
+
+ To check out the sources for the first time from the
+ repository, use this command:
+
+<pre>
+ export CVS_RSH=ssh
+ export CVSROOT=username@mono-cvs.ximian.com:/cvs/public
+ cvs -z3 co mcs mono
+</pre>
+
+** Updating your sources
+
+ Every day people will be making changes, to get your latest
+ updated sources, use:
+
+<pre>
+ cvs -z3 update -Pd mcs mono
+</pre>
+
+ Note: The '-z3' enables compression for the whole cvs action.
+ The '-Pd' makes the update operation (P)rune directories that
+ have been deleted and get new (d)irectories added to the
+ repository.
+
+** Making patches
+
+ Usually you will want to make a patch to contribute, and let
+ other people review it before commiting it. To obtain such a
+ "patch", you type:
+
+<pre>
+ cd directory-you-want-to-diff
+ cvs -z3 diff -u > file.diff
+ mail mono-list@ximian.com < file.diff
+</pre>
+
+** Keeping track of changes.
+
+ We provide two e-mail based mechanisms to keep track of
+ changes to the code base:
+
+ <ul>
+ * <a href="mailto:mono-patches-request@ximian.com">
+ mono-patches@ximian.com</a>: This mailing list receives
+ in patch form all the changes that are being made to the
+ CVS.
+
+ * <a href="mailto:mono-cvs-list-request@ximian.com">
+ mono-cvs-list@ximian.com</a>: This mailing list only
+ receives the CVS commit logs with a list of files
+ modified.
+ </ul>
+
+ We hope to offer LXR and Bonsai in the future as well.
+
+** Commiting your work
+
+ Once you get approval to commit to the CVS, or if you are
+ commiting code that you are the maintainer of, you will want
+ to commit your code to CVS.
+
+ To do this, you have to "add" any new files that you created:
+
+<pre>
+ cvs add new-file.cs
+</pre>
+
+ And then commit your changes to the repository:
+
+<pre>
+ cvs commit file-1.cs file-2.cs
+</pre>
+
+* The Mailing Lists
+
+ To keep track of the various development and changes to the
+ CVS tree, you can subscribe to the mono-cvs-list@ximian.com.
+ To subscribe, send an email message to
+ mono-cvs-list-request@ximian.com and in the body of the
+ message put `subscribe'.
+
+ This will send you an email message every time a change is
+ made to the CVS repository, together with the information that
+ the author of the changes submitted.
+
+ You might also want to track the live changes, subscribe to
+ the <a
+ href="mailto:mono-patches-request@ximian.com">mono-patches@ximian.com</a>
+ to receive the patches as they are checked into CVS.
+
+** Recommendations
+
+ To build the sources, most of the type trying the `make' command
+ is enough. In some cases (the class libraries) we use nant, so
+ you need to run nant manually.
+
diff --git a/doc/class-library b/doc/class-library
new file mode 100644
index 00000000000..95b56cacf9d
--- /dev/null
+++ b/doc/class-library
@@ -0,0 +1,190 @@
+* The Class Library
+
+ The Class Library should be compatible with Microsoft's .NET
+ implementation.
+
+ Please see the <a href="class-status.html">Class Status</a>
+ page for a status of who is working on which classes.
+
+ We will write as much code as possible in C#. We may need to
+ interface with code written in C to gain access to the
+ functionality of libraries like libart, Gtk+, and libc.
+
+** Contributing
+
+ We welcome contributions to the the Class Library. To get
+ started, check the status page for information about which
+ APIs are being worked on, and how to get in touch with
+ individual maintainers.
+
+ If you want to work on a class, first check the <a
+ href="download.html">Classes Distribution</a> to see if it is
+ not implemented yet, if not, check the <a
+ href="class-status.html">Class Status</a> to see if someone is
+ already working on it, and maybe contact them.
+
+ If nobody is working on it, mail <a
+ href="mailto:mono-list@ximian.com">mono-list@ximian.com</a>
+ with the class you want to implement and CC <a
+ href="mailto:miguel@ximian.com">miguel@ximian.com</a>.
+
+ You can also track live the activities of the Mono CVS module
+ by subscribing to the <a
+ href="http://lists.ximian.com/mailman/listinfo/mono-cvs-list">mono-cvs-list</a>
+
+
+** Missing features
+
+ Our class libraries miss some features, for example, most classes
+ do not implement the serialization bits at all, it would be a good
+ contribution to add this to each class.
+
+ This is a simple task, but it needs to be done in a compatible way
+ with the Microsoft.NET classes: using the same arguments to serialize
+ and reincarnate data.
+
+** Layout
+
+ The Class Library resides in the `mcs' module in the directoy
+ `class'.
+
+ Each directory in the directory represents the assembly where
+ the code belongs to, and inside each directory we divide the
+ code based on the namespace they implement.
+
+ There are two cases when we should consider portability: when
+ we are dealing with a couple of classes only that differ from
+ system to system (Consider System.Net and System.IO for Win32
+ and Unix). In those cases we will just place the files for
+ example on <t>corlib/System/System.IO/Unix-Console.cs</t> and
+ <t>corlib/System/System.IO/Win32-Console.cs</t>.
+
+ For classes that might differ more (for example, the
+ implementation of Windows.Forms), we might have different
+ directories altogether: <t>System.Windows.Forms/Win32</t>,
+ <t>System.Windows.Forms/Gtk+</t> and
+ <t>System.Windows.Forms/Cocoa</t>.
+
+** Using existing components from GNOME.
+
+ Our current plan is to implement the GUI tools on top of
+ Gtk+. The only obstacle here is that applications from Windows
+ might expect to be able to pull the HWND property from the
+ widgets and use PInvoke to call Windows functions.
+
+** Class Library and Win32 dependencies.
+
+ There are a few spots where the Win32 foundation is exposed to
+ the class library (for example, the HDC and HWND properties in
+ the GDI+). Casual inspection suggests that these can be
+ safely mapped to Gdk's GC and GdkWindow pointers without
+ breaking anything.
+
+ The only drawback is that support for PInvoke of Win32 code
+ won't be available. An alternate solution would be to use
+ portions of Wine, or even to use Wine as our toolkit.
+
+*** Initial GDI+ and WinForms implementation
+
+ The initial implementation will use Gtk+ as the underlying
+ toolkit. Since GTK+ has already been ported to many windowing
+ systems other than X (including frame buffer, Win32, and BeOS)
+ its use should cover most applications for most users.
+
+*** Database access
+
+ We will implement ADO.NET functionality by reusing <a
+ href="http://www.gnome-db.org">GNOME-DB</a>. This is an ideal
+ choice, since GNOME-DB was implemented precisely to provide an
+ ADO-like system for GNOME.
+
+*** Component Integration
+
+ We will provide a new namespace to use GNOME specific features
+ as well as a namespace to host Bonobo interfaces and classes
+ in Mono.
+
+** Licensing
+
+ The class library is being licensed under the terms of the
+ <a
+ href="http://www.opensource.org/licenses/mit-license.html">MIT
+ license.</a> This is the same license used by the X11 window
+ system.
+
+** Class Library testing
+
+ We need to write regression tests that will verify
+ the correctness of the class library, compiler, and JIT
+ engine.
+
+ Please write your regression tests using <a
+ href="http://nunit.sourceforge.net">NUnit</a>
+
+** Coding conventions
+
+ Please follow the conventions on the ECMA specification (On
+ the Annex Partition) for your coding your libraries.
+
+ Use 8 space tabs for writing your code (hopefully we can keep
+ this consistent). If you are modifying someone else's code, try
+ to keep the coding style similar.
+
+ For a rationale on 8 space tabs, read Linus Torvald's Coding
+ Style guidelines in the Linux kernel source for a rationale.
+
+*** Missing implementation bits
+
+ If you implement a class and you are missing implementation bits,
+ please put in the code the word "TODO" and a description of what
+ is missing to be implemented.
+
+*** Tagging buggy code
+
+ If there is a bug in your implementation tag the problem by using
+ the word "FIXME" in the code, together with a description of the
+ problem.
+
+ Do not use XXX or obscure descriptions, because otherwise people
+ will not be able to understand what you mean.
+
+*** Tagging Lame specs
+
+ Sometimes the specification will be lame (consider Version.ToString (fieldCount)
+ where there is no way of knowing how many fields are available, making the API
+ not only stupid, but leading to unreliable code).
+
+ In those cases, use the keyword "LAMESPEC".
+
+** Namespaces
+
+ We are using a number of namespaces in the class libraries for
+ private classes when we need them, you are encouraged to use these:
+
+<pre>
+Mono
+ .Languages // General Compiler classes
+ .CSharp // Specific C# parsing/tokenizing classes
+ .MonoBASIC // Specific VB.NET/MonoBASIC parsing/tokenizing classes
+ .Python // Specific Python parsing/tokenizing classes
+ .Runtime
+ .LateBind // General latebinding-support for MonoBASIC/Python
+ .MonoBASIC // Specific runtime classes for MonoBASIC programs
+ .Python // Specific runtime classes for Python programs
+ .Web
+ .UI
+ .Utils // Gaurav utility classes
+</pre>
+
+** FAQ
+
+Frequently asked questions about the class library:
+
+Q: I am writing a new class that overrides one of the system classes,
+ and I am getting a 1595 warning from the compiler. Should we use a
+ different namespace?
+
+A: There is a quick solution to the problem, you can pass the command
+ line argument /nowarn:1595 and this will effectively let you use
+ your implementation of the code, while overriding the ones from the
+ system assemblies. \ No newline at end of file
diff --git a/doc/class-status.in b/doc/class-status.in
new file mode 100644
index 00000000000..8fb7114daa5
--- /dev/null
+++ b/doc/class-status.in
@@ -0,0 +1,51 @@
+* Status of the various pieces of the class library
+
+ Classes in Mono are organized by the assembly that they belong to.
+
+ Here is the status of the different assemblies:
+ <ul>
+ <li><a href="http://www.go-mono.com/class-status-corlib.html">corlib</a>: The core library.
+ <li><a href="http://www.go-mono.com/class-status-System.html">System</a>.
+ <li><a href="http://www.go-mono.com/class-status-System.Xml.html">System.Xml</a>.
+
+ <li><a
+ href="http://www.go-mono.com/class-status-System.Data.html">System.Data</a>:
+ Database access functionality (also check the <a href="ado-net.html">Mono ADO.NET status</a> pages).
+
+ <li><a href="http://www.go-mono.com/class-status-System.Drawing.html">System.Drawing</a>.
+
+ <li><a
+ href="http://www.go-mono.com/class-status-System.Web.html">System.Web</a>:
+ ASP.NET classes, also check the <a href="asp-net.html">Mono ASP.NET status pages</a>
+
+ <li><a href="http://www.go-mono.com/class-status-System.Web.Services.html">System.Web.Services</a>.
+
+ <li><a
+ href="http://www.go-mono.com/class-status-Microsoft.VisualBasic.html">Microsoft.VisualBasic</a>:
+ Support runtime for Visual Basic applications
+
+ <li><a
+ href="http://www.go-mono.com/class-status-System.Windows.Forms.html">Windows.Forms</a>:
+ there is also a <a
+ href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mailing
+ list available</a>
+
+ <li><a href="http://www.go-mono.com/class-status-System.EnterpriseServices.html">EnterpriseServices</a>.
+
+ <li><a
+ href="http://www.go-mono.com/class-status-System.Runtime.Serialization.Formatters.Soap.html">System.Runtime.Serialization.Formatters.Soap</a>.
+
+
+ </ul>
+
+* List of not-implemented classes
+
+ Pick from the list of assemblies in the menu on the left to
+ view the current status of that assembly.
+
+ The tree shows items that are either missing or that have TODO
+ attributes associated with them.
+ You can use the checkboxes to show only missing or only TODO items.
+
+ Clicking on a name will take you to the <a href="http://msdn.microsoft.com/">MSDN documentation</a> for that item.
+ CTRL-Clicking will take you to the <a href="http://cvs.hispalinux.es/cgi-bin/cvsweb/?cvsroot=Mono">mono CVS tree</a>.
diff --git a/doc/classlib-doc b/doc/classlib-doc
new file mode 100644
index 00000000000..19f92d6dfcf
--- /dev/null
+++ b/doc/classlib-doc
@@ -0,0 +1,62 @@
+* Class Library Documentation
+
+** Summary
+
+ While using inline XML tags to document classes is certainly
+ convenient, properly verbose documentation quickly overwhelms
+ the code, making the source quite difficult to read. Furthermore,
+ multilingual documentation makes for significant additional text.
+
+ With these considerations in mind, Mono will use external XML files
+ for type documentation, rather than documenting the source inline.
+
+ Several tools will be created for managing, verifying, generating,
+ and updating class library documentation, including:
+
+ <ul>
+ <li><a href="#monodoc">MonoDoc - A graphical documentation editor and viewer.</a></li>
+ <li><a href="#mkmaster">MkMaster - A command line tool to feed stub information to MonoDoc.</a></li>
+ <li><a href="#aspnet">An ASP.NET documentation editor.</a></li>
+ <li><a href="#xsltool">An xsl tool to convert monodoc xml to html documentation.</a></li>
+ </ul>
+
+** XML Documentation Files and Formats
+
+
+*** Monodoc XML
+ This XML is Mono's documentation format. Documentation and a DTD/Schema
+ for Monodoc XML is located in cvs and can be found <a href="http://go-mono.org/monodoc.dtd">here</a>.
+
+ This XML could be generated by MonoDoc or the ASP.NET client.
+
+ More about the XML format <a href="http://go-mono.org/monodoc-xml.html">here</a>.
+** Documentation Tools
+
+*** <a name="monodoc">MonoDoc</a>
+ A graphical documentation editor and viewer. Currently, MonoDoc
+ consists of a Qt# application and is in heavy development.
+
+*** <a name="mkmaster">MkMaster</a>
+ This tool creates the Master.xml file that MonoDoc uses as a reference
+ for documentation generation. This is a reflection engine that is used
+ to gather metadata from assemblies and create an xml representation.
+
+*** <a name="aspnet">ASP.NET</a>
+ This tool is planned.
+
+*** <a name="xsltool">An XSL converter</a>
+ This tool is planned. If someone wants to step forward and adopt this
+ project, it would be very helpful ;)
+
+** Status and Roadmap
+
+*** 16, September 2002
+
+A preliminary version of MonoDoc is in Mono's cvs. It is under heavy development.
+Once this is complete we will start documenting the API!
+
+** Get Involved
+
+ Help us develop Mono's documentation tools! Subscribe to
+ <a href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mono-docs-list</a>
+ and wade right in.
diff --git a/doc/contact b/doc/contact
new file mode 100644
index 00000000000..d9bbda12540
--- /dev/null
+++ b/doc/contact
@@ -0,0 +1,13 @@
+* Contacting the Mono team.
+
+ You can contact the general forum of discussion by sending
+ e-mail to <a href="mailto:mono-list@ximian.com">mono-list@ximian.com</a>
+
+ You can contact me (Miguel de Icaza) by sending e-mail to <a
+ href="mailto:miguel@ximian.com">miguel@ximian.com</a>. My web
+ page is <a
+ href="http://primates.ximian.com/~miguel">http://primates.ximian.com/~miguel"</a>
+
+ You can also <a
+ href="http://www.ximian.com/about_us/contact/">reach Ximian.</a>
+
diff --git a/doc/contributing b/doc/contributing
new file mode 100644
index 00000000000..3a363d85ebf
--- /dev/null
+++ b/doc/contributing
@@ -0,0 +1,227 @@
+* Contributing to the Mono project
+
+ Mono has not been completed yet. It is a project under
+ active development and with a vibrant community. If you are
+ looking at ways of helping the project, you have come to the
+ right web page.
+
+ There are three different philosophical approaches to helping
+ the Mono project, the selfish way, the altruistic or the
+ educational way.
+
+ The <b>selfish</b> way is packed with adventure. You start by
+ building your own software, and start using the compiler and
+ tools that come with Mono. Eventually you will run into
+ missing features, or a bug in the software. Since we ship all
+ the source code for Mono, you can start tracking down the
+ problem. Depending on how much time you have to devote to the
+ problem you could: <a href="http://bugzilla.ximian.com">File a
+ bug report</a>; track down the problem and provide a better
+ <a href="http://bugzilla.ximian.com">bug report</a>; fix the
+ bug and provide a patch (you can <a
+ href="mailto:mono-list@ximian.com">post it</a> to the <a
+ href="http://lists.ximian.com/mailman/listinfo/mono-list">mono
+ mailing list</a>; or discuss the solution on the mailing
+ list. Ideally you will also write a <a
+ href="testing.html">regression test</a> so the bug does not
+ get re-introduced in the future.
+
+ The <b>altruistic</b> is probably the easiest because you get
+ to pick a piece of Mono that you might want to work on. You
+ can pick an unfinished <a href="class-library.html">class</a> (from our <a
+ href="class-status.html">class status page</a>); help with the
+ <a href="documentation.html">documentation effort</a> (<a
+ href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mailing
+ list for the documentation effort</a>); fix existing <a
+ href=http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FRuntime&component=CORLIB&component=misc&component=System&component=System.Web&component=System.XML&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">runtime
+ bugs</a>; <a
+ href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FMCS&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time&form_name=query">compiler
+ bugs</a>; help with the <a href="tools.html">tools</a> or
+ writing <a href="testing.html">tests</a> that help make Mono
+ more robust or help with the <a
+ href="http://www.go-mono.com/winforms.html">Winforms
+ effort</a>.
+
+ The <b>educational</b> way is an interesting one, because you
+ pick a technology you are interested in, and work on that
+ technology to learn the technology.
+
+ Those are just broad things that need to be worked on, but
+ something that would help tremendously would be to help with
+ small duties in the project that need to be addressed.
+
+ You can see what needs to be done in the class libraries <a href="class-status.html">here</a>
+
+* IRC Channel
+
+ Many developers get together on the <b>#mono</b> irc channel
+ on the <b>irc.gnome.org</b> server.
+
+** To start contributing
+
+ As a programmer, you can contribute in three different scenarios to Mono:
+
+ <ul>
+ * If you only have Linux/Unix.
+ * If you only have Windows.
+
+ * If you have both Linux and Windows.
+ </ul>
+
+ You might also want to check our <a href="#setup">common
+ setups</a> section that describes some common setups that people
+ use while working on Mono.
+
+*** Contributing to the class library, regression tests or the compiler
+
+ This only requires Windows currently.
+
+ To start developing classes or to contribute to the compiler,
+ you only need Windows and the .NET Framework 1.0 SDK. Please notice
+ that you do not need Visual Studio (although you can use it if
+ you want). The .NET Framework SDK requires some version of
+ Windows XP or Windows NT. If you are running Windows 98, 95
+ or Me, you could use instead the <a
+ href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/829/msdncompositedoc.xml">.NET Redist package</a>, but it
+ lacks the documentation browser and the ildasm program (C#, VB, JScript and IL
+ assembler are included).
+
+ You can get it <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a>
+
+ If you are new to .NET, writing regression tests is a good way
+ of starting to contribute: it will help you get used to C# as
+ well as getting comfortable with the .NET APIs.
+
+ This helps because at this point you might be the best
+ qualified person to fix a problem found by the regression
+ test, or you might have a new class to implement in the .NET
+ world that only has a test suite.
+
+ To get started writing tests see the <a href="testing.html">Test Suite</a>
+ section. <a href="mono-contribution-howto.html">Here</a> there is a good All-In-One introduction to the art of writing tests.
+
+
+*** Contributing to the runtime engine
+
+ This only requires Linux, currently some tasks are easier if you
+ have access to Windows as well.
+
+ Here are a few things you can do:
+ <ul>
+ * Port the runtime to other architectures.
+ * Port the runtime to other operating systems.
+ * Finish the IL code verifier in the runtime.
+ * Hack the JIT, improve the code generator, add new
+ pattern rules, improve the register allocator.
+ * Implement the debugging interfaaces
+ </ul>
+
+** Bug reporting
+
+ If you find bugs in Mono, please make sure you enter a bug
+ report so we can keep track of problems in Mono.
+
+ To enter bug reports go to <a href="http://bugzilla.ximian.com">
+ http://bugzilla.ximian.com</a> and enter bug reports against
+ your favorite component (Mono, Runtime, C# compiler).
+
+ You can review the list of current bugs by going <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FMCS&product=Mono%2FRuntime&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&order=%27Importance%27&form_name=query">here</a>
+
+** Small tasks
+
+ A few smaller tasks are here, dropped in no particular order:
+ <ul>
+ * <b>Mono/doc and web site:</b> They need to be
+ packaged up in the official `distribution'
+
+ * Adding serialization support to all the classes.
+
+ We have many classes, but we have not implemented in
+ many cases the serialization and re-incarnation support in
+ them (this is pretty straight forward code, and simple,
+ but there is a lot to be done here).
+ </ul>
+
+* Emacs support
+
+ Brad Merryl's C# mode for Emacs is available: <a
+ href="http://www.cybercom.net/~zbrad/DotNet/Emacs/">http://www.cybercom.net/~zbrad/DotNet/Emacs/</a>
+
+* Books on C# and DotNet.
+
+ <ul>
+ * Dotnet Books (<a href="http://www.dotnetbooks.com">http://www.dotnetbooks.com</a>)
+
+ * Dotnet Resources (<a href="http://www.dotnetexperts.com/resources/">
+ http://www.dotnetexperts.com/resources</a>)
+
+ * O'Reilly C# Essentials (<a href="http://www.oreilly.com/catalog/csharpess/">
+ http://www.oreally.com/catalog/csharpess</a>)
+
+ * O'Really .NET Essentials (<a href="http://www.oreilly.com/catalog/dotnetfrmess/">
+ http://www.oreally.com/catalog/dotnetfrmess</a>)
+ </ul>
+
+<a name="setup">
+* Common Setups
+
+ People running both Linux and Windows while contributing to
+ Mono use a number of tricks to increase their productivity.
+
+ Scenarios:
+
+ <ul>
+ * <b>Linux host and Windows host</b>
+
+ The Windows file system is shared (right click on
+ your hard drive icon, and select sharing, allow this
+ to be shared).
+
+ The Windows machine has the required build tools
+ (cygwin, and the .NET framework). On the Windows
+ machine, you want to setup the ssh server (run the
+ ssh-host-config program to configure your ssh) and
+ run it (from a cygwin terminal, type: /usr/sbin/sshd).
+
+ From the Linux side, you want to mount the Windows
+ file system, using something like this:
+
+<tt><pre>
+ mount -t smbfs -o uid=miguel,username="Miguel de Icaza" "//quack/c$" /mnt
+</pre></tt>
+
+ In the above example, my Linux user name is
+ `miguel', and this will allow this user to have
+ read/write access to the share.
+
+ The host name is `quack', and the name of the share
+ is `c$' (that is the C: partition).
+
+ The file system is accessible on /mnt.
+
+ You can perform your cvs update and cvs commits from
+ the /mnt directory, and run Emacs or your favorite
+ Linux text editor on the Unix side in this way.
+
+ Then from another terminal, you can ssh into your
+ Windows box using ssh, like this: ssh "Miguel de Icaza@quack"
+ </ul>
+
+* Special Note
+
+ If you have looked at Microsoft's implementation of .NET or
+ their shared source code, you may not be able to contribute
+ to Mono. Details will follow when we know more about this.
+
+ In general be careful when you are implementing free software
+ and you have access to proprietary code. We need to make sure
+ that we are not using someone else's copyrighted code
+ accidentally.
+
+ Please do not use the <b>ildasm</b> program to disassemble
+ proprietary code when you are planning to reimplement a class
+ for Mono. If you have done this, we might not be able to use
+ your code.
+
+ Please stick to published documentation for implementing any
+ classes.
diff --git a/doc/crypto b/doc/crypto
new file mode 100644
index 00000000000..5a5ca7f6830
--- /dev/null
+++ b/doc/crypto
@@ -0,0 +1,275 @@
+* Cryptography
+
+ In the .NET framework cryptography can be found under a number of
+ namespaces in several assemblies.
+
+** Assembly: corlib
+
+*** Namespace: <b>System.Security.Cryptography</b>
+
+ Thanks to the work of many people this namespace is almost complete.
+
+**** Status
+ <ul>
+ * Every classes are present.
+
+ * Most classes have their unit tests. Some tests like <code>
+ SymmetricAlgorithmTest</code> are generated by an external
+ tool.
+ </ul>
+
+**** TODO
+ <ul>
+ * Support for adding/modifying algorithms and OID using the
+ <code>machine.config</code> configuration file (in progress).
+
+ * RNGCryptoServiceProvider is currently only working on Linux.
+ The current implementation reside in Mono's runtime and use
+ the <code>/dev/[u]random</code> device (which do not exists
+ under Windows). A Windows alternative is in the work...
+
+ * Keypair persistance for RSA and DSA. This persistance must
+ somehow be linked with X509 certificate stores (in planning).
+
+ * <code>PasswordDeriveBytes</code> is currently limited to
+ generating keys with the maximum length equals to the hash
+ output (as specified in PKCS #5). However the framework
+ implementation allows for longer keys to be generated. Also
+ the algorithms used by CryptDeriveKey (used by Windows
+ applications) are unknown.
+
+ * Analyse the current coverage of the unit tests on the
+ cryptographic classes and complete the unit tests.
+
+ * Optimizations (performance) on most class are possible. Some
+ have been done using the Community Edition of BoundChecker
+ (a free VisualStudio addon) - recommanded!
+ </ul>
+
+**** Notes
+ <ul>
+ * All cryptographic algorithms are entirely managed, including
+ classes named <code>*CryptoServiceProvider</code>, with the
+ exception of <code>RNGCryptoServiceProvider</code> (which
+ resides in the runtime).
+ </ul>
+
+
+*** Namespace: <b>System.Security.Cryptography.X509Certificates</b>
+
+**** Status
+ <ul>
+ * X.509 certificates are parsed using 100% managed code.
+
+ * Software Publisher Certificates (SPC) used by Authenticode
+ (tm) to sign assemblies are supported (extraction from PE
+ files) but <b>not</b> validated.
+
+ * Tests are generated from a set of existing certificates
+ (about a dozen) each having different properties. Another
+ set of certificates (more than 300) are used for a more
+ complete test (but isn't part of the test suite for size
+ and time consideration).
+ </ul>
+
+**** TODO
+ <ul>
+ * Authenticode(tm) support is incomplete. We can extract the
+ certificates from PE files but cannot validate the signature
+ nor the certificate chain (and we're still missing some trust
+ anchors).
+
+ * Integration with CryptoAPI (on Windows) isn't possible as
+ long as the <code>X509Certificate(IntPtr)</code> constructor
+ isn't completed.
+ </ul>
+
+**** Notes
+ <ul>
+ * <b>There's no validation of the certificates</b> done in this
+ class (this isn't a restriction of Mono!). This means that
+ certificate signatures and validity dates are <b>never</b>
+ checked!
+
+ * The newer X509Certificate class included in Microsoft's Web
+ Service Enhancement (WSE) is a little better (as it includes
+ CryptoAPI's validation) when <code>IsCurrent</code> is called.
+
+ * Microsoft implementation of <code>X509Certificate</code> is
+ done by using CryptoAPI. From the exceptions thrown
+ Authenticode(tm) support is done via COM.
+ </ul>
+
+<hr>
+** Assembly: System.Security
+
+*** Namespace: <b>System.Security.Cryptography.Xml</b>
+
+ This namespace implements the <a href="http://www.w3.org/TR/xmldsig-core/">
+ XML Digital Signature</a> specification from
+ <a href="http://www.w3.org/">W3C</a>.
+
+**** Status
+ <ul>
+ * All classes are present but some are only stubbed.
+
+ * Most classes have their unit tests.
+
+ * This assembly is present in CVS but only available when
+ building using NAnt (i.e. makefile are missing).
+ </ul>
+
+**** TODO
+ <ul>
+ * All the transforms needs to be done. But this requires far
+ more XML knowledge than crypto. Note: Most tests runs because
+ the feeded XML is pre-c14n (by hand in the code) before
+ signing (not because the transforms works).
+
+ * Makefile for building under non-Windows operating systems.
+ </ul>
+
+<hr>
+** Assembly: Mono.Security.Win32
+
+ This assembly goal is to provide maximum compatibility with CryptoAPI
+ to application running with Mono's runtime on the Windows operating
+ system.
+
+ <b>This assembly should NEVER be used directly by any application</b>.
+ The classes should only be used by modifying the <code>machine.config
+ </code> configuration file (and then only if this increased
+ compatibility is required by an application).
+
+*** Namespace: Mono.Security.Cryptography
+
+**** Status
+ <ul>
+ * A RNGCryptoServiceProvider built on top of CryptoAPI.
+
+ * Not (yet) commited in CVS - i'm still playing with the base
+ classes so I can easily add other CryptoAPI-based algorithms.
+ </ul>
+
+**** TODO
+ <ul>
+ * Unmanaged versions of hash algorithms (SHA1 and MD5).
+ * Unmanaged versions of symmetric encryption algorithms
+ (like DES, TripleDES, RC2 and others present in CryptoAPI).
+ * Unmanaged versions of asymmetric algorithms (like DSA and
+ RSA) which persist their keypair into the specified CSP.
+ </ul>
+
+<hr>
+** Assembly: Microsoft.Web.Services
+
+ Microsoft Web Service Enhancement (WSE), known as Web Service
+ Development Kit (WSDK) in it's beta days, is an add-on the .NET
+ framework that implements WS-Security (and other WS-* specifications).
+ It also includes improved support for XML Signature (replacing and/or
+ extending <code>System.Security.Cryptography.Xml</code>) and X509
+ certificates.
+
+ Note: WSE is distributed as an add-on because the WS-Security
+ specification isn't yet completed by
+ <a href="http://www.oasis-open.org/committees/wss/">OASIS</a>.
+
+ <b>There are some licensing issues to consider before stating to
+ implement WS-Security. All contributors must sign an agreement with
+ Microsoft before commiting anything related to WS-Security into CVS.
+ </b>
+
+*** Namespace: Microsoft.Web.Services.Security
+
+**** Status
+ <ul>
+ * Nothing (yet) commited in CVS.
+ </ul>
+
+*** Namespace: Microsoft.Web.Services.Security.X509
+
+**** Status
+ <ul>
+ * Nothing (yet) commited in CVS.
+ </ul>
+
+**** TODO
+ <ul>
+ * We need to define certificate stores (for both users and
+ machines). These sames stores must be linked with asymmetric
+ keypairs. This could also be used to store the SPC roots.
+ </ul>
+
+<hr>
+** Other stuff
+
+ There are other, not so visible, uses of cryptography both inside and
+ outside the class library - such as:
+
+ <ul>
+ * SSL/TLS for secure communication (investigation under way).
+
+ * Assembly signing (and verification) using StrongNames.
+
+ * Assembly signing (and verification) using Authenticode(tm).
+ </ul>
+
+
+*** Tools
+
+ There are many tools in the .NET framework that indirectly interacts
+ with some cryptographic classes. Mono will eventually need these tools.
+
+**** Status
+
+ The following tools are complete:
+ <ul>
+ * <code>secutil</code> is a tool to extract certificates and
+ strongnames from assemblies in a format that can be easily
+ re-used in source code (C# or VB.NET syntax).
+
+ * <code>cert2spc</code> is a tool to transform multiple X.509
+ certificates (a chain) into a Software Publisher Certificate
+ (SPC) - which is a long name for a simple PKCS#7 file.
+ </ul>
+
+**** TODO
+ The following tools are still missing or incomplete:
+ <ul>
+ * <code>monosn</code> is a clone of the <code>sn</code> to manage
+ strongnames. This tools is part of the runtime (not the class
+ library) and as such is written in C.
+
+ * <code>signcode</code> and <code>chktrust</code> for signing
+ and validating Authenticode(tm) signatures on assemblies.
+
+ * <code>makecert</code> to create X.509 test certificates that
+ can be used (once transformed in SPC) to sign assemblies.
+
+ * Other tools like a, GUI-based, certificate manager...
+ </ul>
+
+ Note that many of the tools requires the class library and/or the
+ runtime to be ready for them.
+
+<hr>
+** How to Help
+
+ Complete any of the TODO (and feel good about it ;-).
+
+ Add missing unit tests to classes or methods.
+
+ Write some documentation on the cryptographic classes for MonkeyGuide
+ (as I'm not a good writer, at least in English, but you must be a good
+ reader if you got to this part).
+
+ Optimization can also be done on algorithms as crypto is never fast
+ enough. Just be sure to test every optimization (using the unit test)
+ carefully - it's so fast to break an algorithm ;-).
+
+ Contact Sebastien Pouliot (<a href="mailto:spouliot@videotron.ca">home</a>
+ , <a href="mailto:spouliot@motus.com">work</a>) if you need additional
+ informations about the status of the cryptographic classes.
+
+<hr>
+Last reviewed: January 19, 2003 (post mono 0.18)
diff --git a/doc/devel-faq b/doc/devel-faq
new file mode 100644
index 00000000000..9ca89285219
--- /dev/null
+++ b/doc/devel-faq
@@ -0,0 +1,190 @@
+* Developer FAQ
+
+** New classes
+
+Q: Should we write classes which are not part of the .NET or ECMA specs?
+
+A: Yes. The ECMA and .NET specifications are far from complete, and
+ to produce a complete platform we will need a number of other
+ classes and components.
+
+ Any new classes that are not part of .NET or ECMA should be
+ designed to be reusable on anyone's CLI implementation. So that
+ Windows developers can also use any new classes that we come up
+ with.
+
+ We have a few existing <a href="ideas.html">Ideas on missing
+ classes</a>
+
+** Language Compatibility
+
+Q: What is the magic that allow multiple languages to co-exist?
+
+A: From Fergus Henderson:
+
+<i><blockquote>
+There are different levels of interoperability.
+The ECMA spec defines different categories of
+CLS (Common Language Specification) conformance.
+There are also some useful categories that don't
+correspond to any of the levels defined in the ECMA spec.
+In increasing degree of difficulty, your language implementation
+can
+
+ <ul>
+ * (a) just generate IL
+
+ * (b) be a CLS "consumer", which means that it can read in
+ meta-data describing component interfaces,
+ and that it provides a way to declare variables of
+ CLS-complaint types and to call CLS-complaint methods.
+
+ * (c) be a CLS "extender", which means that it can in addition
+ derive from CLS-compliant classes
+ and implement CLS-compliant interfaces
+
+ * (d) be able to produce components with *any* CLS-compliant
+ component interface.
+ </ul>
+
+Supporting some of these may require extending your language. However,
+you can get quite a lot of interoperability by just putting appropriate
+functionality in your compiler, without extending your language.
+
+For some things, e.g. ASP.NET, your language implementation also needs to be
+able to
+
+ <ul>
+ * (e) consume CodeDom trees. CodeDom trees are an abstract
+ representation of programs in a form similar to a C# parse
+ tree, with embedded code snippets (unparsed strings).
+ Given a CodeDom tree, with the snippets in your language,
+ your language implementation needs to generate a (i) .NET
+ assembly and possibly also (ii) a source file in your language.
+
+ * (f) produce CodeDom trees. For some applications,
+ your language implementation also needs to be able to
+ round-trip from CodeDom -> your language -> CodeDom.
+ </ul>
+
+and for some things it needs to
+
+ <ul>
+ * (g) generate *verifiable* IL
+ </ul>
+
+So when you hear all the hype about how language XYZ is a
+".NET language", make sure you ask which of these different
+things are supported.
+
+[For the record, Mercury currently supports (a). We're working on
+(b) and (g), and on parts of (c) and (e). We're never going to do (f), I very
+strongly doubt we'll ever do (d), and for (c) we might only ever support
+implementing interfaces, not deriving from classes.]
+
+</blockquote></i>
+
+** PInvoke
+
+Q: What are the two major initiatives to implement PInvoke?
+
+A: Fergus Henderson answers:
+
+<i><blockquote>
+Many of the .NET APIs will need to be implemented using code that calls C/Unix
+APIs, such as stat(). The standard way of interfacing with native code from
+.NET code is to use "PInvoke". However, there is a difficulty: many of
+these APIs are defined in terms of types such as C's `long' or `size_t'
+or the Posix `struct stat' whose representation varies depending on the
+platform (architecture/OS/C compiler). There's no *portable* way of
+accessing those from .NET managed code.
+
+So, there are a couple of different approaches.
+One possibility is to access such routines by writing a wrapper, e.g. in C,
+that provides the same functionality without using types with a system-dependent
+representation. The wrapper can then be directly accessed from portable
+.NET code. The .NET code remains both source- and binary-portable;
+the wrapper code is source-portable, but needs to be compiled
+seperately for each target platform. The drawback of this approach is
+that you have to write a lot of cumbersome wrapper code.
+
+Another possibility is to extend the .NET VM with support for an
+additional custom attribute, e.g. "[PosixType]". The VM would then
+represent types tagged with this attribute in the same way that the
+underlying system represents those types. With this approach, no
+wrapper code would be needed. A drawback of this approach is that it
+pushes quite a bit of complexity into the VM; the VM would have to know
+the native representation of all types annotated with this attribute.
+Another drawback is that code using this extension might not work on
+different VMs.
+
+There have also been some other suggestions, but those are the two that
+I think are the best.
+</blockquote></i>
+
+Q: What is the problem implementing PInvoke?
+
+A: Again, from Fergus Henderson:
+
+<i><blockquote>
+There's no problem implementing PInvoke as specified in the ECMA
+specs and/or MS documentation. It's just that PInvoke by itself
+doesn't solve all of the problems; in particular it doesn't solve
+the problem of C types whose representation is different on different
+systems.
+</blockquote></i>
+
+** CVS use
+
+Q: Why do we keep ChangeLogs and make the CVS commit messages be the
+ same? One could be generated from the other
+
+A: There are a number of reasons for keeping ChangeLog files as well as
+ CVS commit files:
+
+ <ul>
+ * Offline programming: when people are traveling, CVS logs are
+ not available.
+
+ * Slow CVS access: Many people work over modem lines (very
+ typical for contributors in Europe, Asia, Latin America)
+ using CVS is slow and might not be available to you (cvs
+ server down, no anoncvs server available).
+
+ * ChangeLogs travel in a released tarball package, so it is
+ possible to study the rationale of changes even after a
+ project is long "released", or you only have the sources for
+ the code.
+
+ * ChangeLog are not metadata for each file, they are live
+ files that you can browse in the package that is being
+ distributed.
+ </ul>
+
+Making the CVS commit message be the same as the ChangeLog has other
+benefits:
+
+ <ul>
+ * You can track down with `cvs log' what things were changed,
+ and match those to meaningful reports on the intentions of
+ the commit.
+
+ * When reading the commits-list, you can get a glimpse of the
+ changes without having to diff out or cvs update your tree.
+
+ * You can read off-line the changes that are being made
+ (asyncrouns operation).
+ </ul>
+
+This mechanism works very well for GNOME and other projects.
+
+Q: Should I use any of the special RCS keywords like $Id: devel-faq,v 1.1 2001/07/31 21:13:05 miguel Exp $, $Author: miguel $,
+ $Date: 2001/07/31 21:13:05 $, or $Revision: 1.1 $?
+
+A: Please avoid using those in the source code in the CVS. They
+ are not really useful, and they cause a lot of conflicts when
+ people have separate CVS trees.
+
+ It was a nightmare with the Linux kernel when two people had their
+ private CVS trees and were submitting patches to the core.
+
diff --git a/doc/documentation b/doc/documentation
new file mode 100644
index 00000000000..4ed2e6a6639
--- /dev/null
+++ b/doc/documentation
@@ -0,0 +1,62 @@
+* Documentation
+
+ Although most of the concepts from Microsoft.NET can
+ be applied to the completed Mono platform, we do need to
+ have a complete set of free documentation written specifically
+ for Mono.
+
+ The documentation license we have chosen is the GNU Free
+ Documentation License (FDL), the standard for most documents
+ in the free software world.
+
+ We need documentation on a number of topics:
+
+ <ul>
+
+ * The development tools (compilers, assembler tools,
+ language reference, design time features).
+
+ * Frequently Asked Question compilations.
+
+ * HOWTO documents.
+
+ * The Class Libraries
+
+ * Tutorials on Mono and the specifics of running it.
+
+ * A guide to Mono as compared to the Microsoft.NET
+ Framework SDK
+
+ </ul>
+
+** Class Library documentation
+
+ We are moving to a new setup for documenting the class libraries,
+ and you can read about it <a href="classlib-doc.html">here</a>.
+
+ A few words of warning and advice for class documentors:
+
+ A well-documented API can ease hours of frustration; as Mono
+ matures, robust and complete class library documentation will
+ become increasingly important. As you write API documentation,
+ whether it is embedded in source files or in external Monodoc XML,
+ please keep the following in mind:
+
+ Plagarism, even if it's unintentional, is a Bad Thing(TM).
+ Microsoft's .NET Framework Class Library documentation is an
+ excellent resource for understanding the behavior and properties of
+ a type, and a lot of hard work went in to creating this (copyrighted)
+ resource. Please don't copy from Microsoft's reference when
+ documenting a type.
+
+ To avoid this, I (<a href="mailto:jbarn@httcb.net">jbarn@httcb.net</a>)
+ suggest that you read the complete Microsoft documentation for a type,
+ ponder it for a while, and write the Mono documentation in your own
+ words. While it's certainly okay to refer to the Microsoft
+ documentation to clarify your understanding of behavior or properties,
+ please don't open the Microsoft docs and refer to them for each member
+ you document.
+
+ There's a lot of domain expertise among the class library contributors;
+ let's put the same personal stamp on the class library documentation
+ that we have on the class libraries themselves. \ No newline at end of file
diff --git a/doc/download b/doc/download
new file mode 100644
index 00000000000..c11670fe83b
--- /dev/null
+++ b/doc/download
@@ -0,0 +1,597 @@
+* Software Availability
+
+ The Virtual Execution System is available in package `mono'.
+ Currently this contains a metadata library and the
+ disassembler. Please refer to our <a
+ href="runtime.html">Runtime</a> description for more details
+ on this part of the project.
+
+ The software is also available on the `Mono' channel in <a href="http://www.ximian.com/products/redcarpet/">Red Carpet</a>.
+
+ Some useful links: <a
+ href="http://www.go-mono.org/mono-beginning.html">Resources/Beginning
+ section</a>, the <a
+ href="http://www.go-mono.org/faq.html">FAQ</a>.
+
+ <table>
+ <tbody>
+ <tr bgcolor="#DDDDDD">
+ <td>
+ <b>Release 0.18</b><br>
+ <a href="archive/mono-0.18">Release notes</a><br>
+ Jan 12th, 2003
+ </td>
+ <td>
+ <table cellspacing="1" cellpadding="3">
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source Code</b>
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/mcs-0.18.tar.gz">Mono Class Libraries and C# Compiler.</a>
+ <li><a href="archive/mono-0.18.tar.gz">Mono Runtime</a>
+ <li><a href="archive/gc6.1.tar.gz">Boehm GC 6.1</a>
+ <li><a href="archive/xsp-0.2.tar.gz">XSP web server</a> <b><font color="#dd0000">New!</font></b>
+ </ul>
+ </td>
+ </tr>
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source RPMs</b><br>
+ (No RPMS for XSP).
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/libgc-6.1-1.src.rpm">libgc-6.1-1.src.rpm</a>
+ <li><a href="archive/mono-0.18-1.src.rpm">mono-0.18-1.src.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ </tr>
+ <tr>
+ <td bgcolor="#999999">
+ <b>Red Hat 7.3/x86</b>
+ <ul>
+ <li><a href="archive/redhat-73-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-73-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-73-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a>
+ <li><a href="archive/redhat-73-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a>
+ </ul>
+ </td>
+ <td bgcolor="#999999">
+ <b>Red Hat 7.2/x86</b>
+ <ul>
+ <li><a href="archive/redhat-72-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-72-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-72-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a>
+ <li><a href="archive/redhat-72-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#999999">
+ <b>Red Hat 7.1/x86</b>
+ <ul>
+ <li><a href="archive/redhat-71-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-71-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-71-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a>
+ <li><a href="archive/redhat-71-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a>
+ </ul>
+ </td>
+ <td bgcolor="#999999">
+ <b>Mandrake 8.2/x86</b>
+ <ul>
+ <li><a href="archive/mandrake-82-i386/libgc-6.1-1.i586.rpm">libgc-6.1-1.i586.rpm</a>
+ <li><a href="archive/mandrake-82-i386/libgc-devel-6.1-1.i586.rpm">libgc-devel-6.1-1.i586.rpm</a>
+ <li><a href="archive/mandrake-82-i386/mono-0.18-1.i586.rpm">mono-0.18-1.i586.rpm</a>
+ <li><a href="archive/mandrake-82-i386/mono-devel-0.18-1.i586.rpm">mono-devel-0.18-1.i586.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+<!-- <td bgcolor="#999999"> -->
+<!-- <b>SuSE 8.0/x86</b> -->
+<!-- <ul> -->
+<!-- <li><a href="archive/suse-80-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a> -->
+<!-- <li><a href="archive/suse-80-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a> -->
+<!-- <li><a href="archive/suse-80-i386/mono-0.17-1.i386.rpm">mono-0.17-1.i386.rpm</a> -->
+<!-- <li><a href="archive/suse-80-i386/mono-devel-0.17-1.i386.rpm">mono-devel-0.17-1.i386.rpm</a> -->
+<!-- </ul> -->
+<!-- </td> -->
+ <td bgcolor="#999999">
+ <b>Red Hat 8.0/x86</b>
+ <ul>
+ <li><a href="archive/redhat-80-i386/libgc-6.1-1.i386.rpm">libgc-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-80-i386/libgc-devel-6.1-1.i386.rpm">libgc-devel-6.1-1.i386.rpm</a>
+ <li><a href="archive/redhat-80-i386/mono-0.18-1.i386.rpm">mono-0.18-1.i386.rpm</a>
+ <li><a href="archive/redhat-80-i386/mono-devel-0.18-1.i386.rpm">mono-devel-0.18-1.i386.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#999999">
+<!-- <b>Windows Setup Wizard (NT/2000/XP)</b> -->
+<!-- <ul> -->
+<!-- <li><a href="archive/mono-0.17-stable.exe">Mono-Setup</a> -->
+<!-- </ul> -->
+<!-- </td> -->
+ <td bgcolor="#999999">
+ <b>Debian packages</b>
+ <ul>
+ <li><a href="http://www.atoker.com/mono/">Alp's web site</a>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <tr bgcolor="#CCCCC">
+ <td>
+ <b>Regression Tests</b><br>
+ </td>
+ <td>
+ You can get binaries for the Mono Regression Test
+ Suite <a href="archive/mono-tests.tar.gz">here</a>
+ </td>
+ </tr>
+ </tr>
+ </tbody>
+ </table>
+
+
+<br>
+* Older Releases:
+
+ We provide binaries for older releases until we have packages for the new release.
+
+ <table>
+ <tbody>
+ <tr bgcolor="#DDDDDD">
+ <td>
+ <b>Release 0.17</b><br>
+ <a href="archive/mono-0.17">Release notes</a><br>
+ Dec 9th, 2002.
+ </td>
+ <td>
+ <table cellspacing="1" cellpadding="3">
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source Code</b>
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/mcs-0.17.tar.gz">Mono Class Libraries and C# Compiler.</a>
+ <li><a href="archive/mono-0.17.tar.gz">Mono Runtime</a>
+ <li><a href="archive/gc6.1.tar.gz">Boehm GC 6.1</a>
+ </ul>
+ </td>
+ </tr>
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source RPMs</b><br>
+ (No RPMS for XSP).
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/libgc-6.1-1.src.rpm">libgc-6.1-1.src.rpm</a>
+ <li><a href="archive/mono-0.17-2.src.rpm">mono-0.17-2.src.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="#999999">
+ <b>Windows Setup Wizard (NT/2000/XP)</b>
+ <ul>
+ <li><a href="archive/mono-0.17-stable.exe">Mono-Setup</a>
+ </ul>
+ </td>
+ <td bgcolor="#999999">
+ <b>Debian packages</b>
+ <ul>
+ <li><a href="http://www.atoker.com/mono/">Alp's web site</a>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tr>
+ </tbody>
+ </table>
+
+ <table>
+ <tbody>
+ <tr bgcolor="#DDDDDD">
+ <td>
+ <b>Release 0.16</b><br>
+ <a href="archive/mono-0.16">Release notes</a><br>
+ Oct 1st, 2002.
+ </td>
+ <td>
+ <table cellspacing="1" cellpadding="3">
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source Code</b>
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/mcs-0.16.tar.gz">Mono Class Libraries and C# Compiler.</a>
+ <li><a href="archive/mono-0.16.tar.gz">Mono Runtime</a>
+ <li><a href="archive/gc6.1.tar.gz">Boehm GC 6.1</a>
+ </ul>
+ </td>
+ </tr>
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source RPMs</b>
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/libgc-6.1-1.src.rpm">libgc-6.1-1.src.rpm</a>
+ <li><a href="archive/mono-0.16-1.src.rpm">mono-0.16-1.src.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ </tr>
+ <tr>
+ <td bgcolor="#999999">
+ <b>Linux s390</b>
+ <ul>
+ <li><a href="archive/s390/glib2-2.0.6-13.s390.rpm">glib2-2.0.6-13.s390.rpm</a>
+ <li><a href="archive/s390/glib2-devel-2.0.6-13.s390.rpm">glib2-devel-2.0.6-13.s390.rpm</a>
+p <li><a href="archive/s390/libgc-6.1alpha5-1.s390.rpm">libgc-6.1alpha5-1.s390.rpm</a>
+ <li><a href="archive/s390/libgc-devel-6.1alpha5-1.s390.rpm">libgc-devel-6.1alpha5-1.s390.rpm</a>
+ <li><a href="archive/s390/mono-0.16-1.s390.rpm">mono-0.16-1.s390.rpm</a>
+ <li><a href="archive/s390/mono-devel-0.16-1.s390.rpm">mono-devel-0.16-1.s390.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ </tr>
+ </tr>
+ </tbody>
+ </table>
+
+ <table>
+ <tbody>
+ <tr bgcolor="#DDDDDD">
+ <td>
+ <b>Release 0.15</b><br>
+ <a href="archive/mono-0.15">Release notes</a><br>
+ Aug 23rd, 2002.
+ </td>
+ <td>
+ <table cellspacing="1" cellpadding="3">
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source Code</b>
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/mcs-0.15.tar.gz">Mono Class Libraries and C# Compiler.</a>
+ <li><a href="archive/mono-0.15.tar.gz">Mono Runtime</a>
+ <li><a href="archive/gc6.1alpha5.tar.gz">Boehm GC 6.1alpha5</a>
+ </ul>
+ </td>
+ </tr>
+ <tr bgcolor="#BBBBBB">
+ <td>
+ <b>Source RPMs</b>
+ </td>
+ <td>
+ <ul>
+ <li><a href="archive/libgc-6.1alpha5-1.src.rpm">libgc-6.1alpha5-1.src.rpm</a>
+ <li><a href="archive/mono-0.15-1.src.rpm">mono-0.15-1.src.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ </tr>
+
+ <tr bgcolor="#999999">
+ <td>
+ <b>Windows (win95 friendly)</b>
+ <ul>
+ <li><a href="archive/mono-w32-Aug_28_2002.zip">Mono-w32</a>
+ </ul>
+ </td>
+ <td bgcolor="#999999">
+ <b>Red Hat null-8.0/x86</b>
+ <ul>
+ <li><a href="archive/redhat-null-i386/libgc-6.1alpha5-1.i386.rpm">libgc-6.1alpha5-1.i386.rpm</a>
+ <li><a href="archive/redhat-null-i386/libgc-devel-6.1alpha5-1.i386.rpm">libgc-devel-6.1alpha5-1.i386.rpm</a>
+ <li><a href="archive/redhat-null-i386/mono-0.15-1.i386.rpm">mono-0.15-1.i386.rpm</a>
+ <li><a href="archive/redhat-null-i386/mono-devel-0.15-1.i386.rpm">mono-devel-0.15-1.i386.rpm</a>
+ </ul>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+** Binaries for other platforms.
+
+ Already daily volunteer's made binaries:
+
+ <ul>
+ * <a href="http://www.debianplanet.org/mono/">DebianPlanet</a>
+ * <a href="http://www.superin.formativ.net/mono/mono.htm">Windows</a> (works without cygwin!)
+ </ul>
+
+* Snapshots
+
+<a name="snapshots">
+
+ <a href="http://www.go-mono.com/snapshots">Nightly snapshots</a> of
+ the CVS repository are made every day at 10pm EST (Boston
+ Time). These are not guaranteed to build, they are just a
+ snapshot of the tree.
+
+ The <a href="anoncvs.html">anoncvs</a> mirrors provided by
+ Hispalinux are updated every six hours.
+
+* Compiling the code
+
+ There are a number of ways of compiling Mono
+
+ <ul>
+ <li>From the <a href="#scripts">scripts</A>
+
+ <LI><a href="#install">Manually</a> for the first time.
+
+ <li>Manually, <a href="#upgrade">while upgrading</a> to CVS
+ </ul>
+
+ (which is an easy way to get the latest CVS information)
+
+<a name="scripts">
+* Compiling with scripts
+
+ There are scripts to help build mono for both Unix and Windows. Get
+ <a href="mono-build.sh">mono-build.sh</a> for Unix, or <a
+ href="mono-build-w32.sh">mono-build-w32.sh</a> for Windows.
+ These scripts automate the installation of GLIB and pkgconfig
+ (building from source on Unix, and using binary packages
+ provided by the GIMP for Windows project on Windows.) To use
+ the script, follow these simple steps:
+
+ <ul>
+ * Save the script for your platform somewhere (e.g. /usr/local/bin)
+ * Make the script executable (i.e chmod 755 /usr/local/bin/mono-build.sh)
+ * Create a directory to hold the mono source, and the compiled binaries (e.g. mkdir ~/mono)
+ * Change to the new directory (i.e. cd ~/mono)
+ * run the script (i.e. /usr/local/bin/mono-build.sh)
+ </ul>
+
+ The script requires wget on either platform, and building the
+ software requires make, gcc, automake, autoconf, and libtool.
+ You should install these packages from your distribution or
+ with the cygwin installer. You should also take care of setting
+ the right environment variables as the PKG_CONFIG_FLAGS, etc.
+
+ The script will download required packages from
+ www.go-mono.com and do a cvs checkout of mono in the current
+ directory. <b>IMPORTANT!:</b> The cvs server chosen defaults to
+ anonymous cvs;
+ set your CVSROOT environment variable before running the script to
+ select a particular cvs server.
+
+<a name="install">
+** Building the software manually
+
+ You will need to obtain the Mono dependencies first: <a
+ href="http://www.gtk.org">glib 2.x</a> and
+ <a href="http://www.freedesktop.org/software/pkgconfig">pkg-config</a>.
+
+*** Building on Linux
+
+ <ul>
+ Unpack the Mono runtime distribution:
+ <pre>
+ tar xzvf mono-X.XX.tar.gz
+ cd mono-X.XX
+
+ </pre>
+ <p>
+
+ Then configure, compile and install:
+
+ <pre>
+
+ ./configure --prefix=/usr/local
+ make
+ make install</pre>
+
+ This will give you a runtime, C# compiler and runtime
+ libraries.
+
+ If you want to recompile the runtime and the compiler,
+ follow these steps, first unpack the MCS package:
+
+ <pre>
+ tar xzvf mcs-X.XX.tar.gz
+
+ cd mcs-X.XX
+ </pre>
+
+ Then use the following command to compile and install:
+
+ <pre>
+
+ make -f makefile.gnu install prefix=/usr/local
+ </pre>
+
+ You can change /usr/local to something else if you want.
+ </ul>
+
+
+*** On Windows, to install and work on the compiler and the class libraries:
+
+**** Install Cygwin and the GNU build tools, Microsoft's .NET Framework SDK and the precompiled GLIB 2.0 and pkg-config libraries.
+
+ <ul>
+
+ * Install <a href="http://www.cygwin.com">Cygwin</a>.
+
+ * Install <a href="http://msdn.microsoft.com/downloads">
+ Microsoft .NET Framework SDK</a>.
+
+ * Change to the /usr/local directory
+ of your Cygwin installation.<br>
+ Unzip the precompiled packages listed above.
+
+ </ul>
+ <ul>
+
+ * If you downloaded the Mono
+ <a href="http://www.go-mono.com/snapshots">nightly snapshot
+ </a>, untar the snapshot.
+
+ * Change directories to "mcs".
+
+ * Compile:
+
+ <pre>
+ make
+ </pre>
+ </ul>
+
+*** On Windows, to compile the mono runtime:
+
+ <ul>
+
+ * If you downloaded the Mono
+ <a href="http://www.go-mono.com/snapshots">nightly snapshot
+ </a>, untar the snapshot.
+
+ * Change directories to "mono".
+
+ * Configure, compile and install:
+ <pre>
+ ./configure --prefix=c:/mono
+ make
+ make install
+ </pre>
+
+ </ul>
+
+* Software resources and notes
+
+ The required and additional software can be downloaded here:
+
+ * Microsoft's .NET Framework SDK from
+ <a href="http://msdn.microsoft.com/downloads">
+ msdn.microsoft.com/downloads</a>.
+
+ * Cygwin and the GNU Make tools from
+ <a href="http://www.cygwin.com">www.cygwin.com</a>.
+ Some people observed problems with autoconf 2.52. Installing
+ autoconf 2.13 helped in those cases.
+
+ * Precompiled GLIB 2.0 and pkg-config packages (and
+ their dependencies) by the <a href="http://www.gimp.org/~tml/gimp/win32//index.html">GIMP for Windows</a> project from
+ <a href="http://www.go-mono.com/archive/pkgconfig-0.11-20020310.zip">http://www.go-mono.com/archive/pkgconfig-0.11-20020310.zip</a><br>
+ <a href="http://www.go-mono.com/archive/glib-2.0.4-20020703.zip">http://www.go-mono.com/archive/glib-2.0.4-20020703.zip</a> <br>
+ <a href="http://www.go-mono.com/archive/glib-dev-2.0.4-20020703.zip">http://www.go-mono.com/archive/glib-dev-2.0.4-20020703.zip</a> <br>
+ <a href="http://www.go-mono.com/archive/libiconv-1.7.zip">http://www.go-mono.com/archive/libiconv-1.7.zip</a> <br>
+ <a href="http://www.go-mono.com/archive/libiconv-dev-1.7.zip">http://www.go-mono.com/archive/libiconv-dev-1.7-20020101.zip</a> <br>
+ <a href="http://www.go-mono.com/archive/libintl-0.10.40-20020101.zip">http://www.go-mono.com/archive/libintl-0.10.40-20020101.zip</a><br>
+
+
+ * Download the Mono source code from the
+ <a href="#feb-11">packaged versions</a> or
+ the <a href="http://www.go-mono.com/snapshots">
+ nightly snapshots</a> or the <a href="anoncvs.html">
+ Anonymous CVS</a>. The nightly snapshots are done every
+ night at 10pm EST (Boston Time). The nightly snapshots are
+ not guaranteed to build, but most of the time they should.
+
+
+ </ul>
+
+
+*** Notes on compiling GLIB 2.0 and pkg-config from source:
+
+
+ <ul>
+
+ * Some people observed problems with autoconf 2.52. Installing
+ autoconf 2.13 helped in those cases (don't forget to do a
+ `make maintainer-clean' after the update).
+
+ * Download, compile and install <a href="http://www.freedesktop.org/software/pkgconfig">pkg-config</a> from source.
+ (I had to change line 674 of
+ <nobr><tt>pkg-config-0.8.0/glib-1.2.8/gstrfuncs.c</tt></nobr> from
+ <nobr><tt>extern char *strsignal (int sig);</tt></nobr> to
+ <nobr><tt>extern const char *strsignal (int sig);</tt></nobr>.
+
+<pre>
+tar xzvf pkg-config-0.8.0.tar.gz
+cd pkg-config-0.8.0
+./configure --prefix=/usr
+make
+make install
+</pre>
+
+ * Download, compile and install <a href="ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.7.tar.gz">libiconv</a> from source.<br>
+ If you dont have MS Visual C/C++ 4.0 or 5.0 or 6.0 you can also try
+ the binary package available at <a
+ href="http://www.gimp.org/win32/libiconv-dev-20001007.zip">
+ http://www.gimp.org/win32/libiconv-dev-20001007.zip</a>.
+
+
+ * Download, compile and install the
+ <a href="ftp://ftp.gtk.org/pub/gtk/v2.0/glib-2.0.6.tar.gz">
+ glib 2.0</a> from source.
+
+ </ul>
+
+<a name="upgrading">
+** Upgrading
+
+ To upgrade your Mono installation from CVS, it is very
+ important that you update your Mono and MCS modules from CVS
+ at the same time. Failure to do so might result in a
+ problematic installation as the runtime and the class
+ libraries will be out of sync.
+
+ Run the following commands to update your CVS tree (more
+ details in <a href="ccvs.html">Cvs and Mono</a> and the <A
+ href="anoncvs.html">AnonCVS and Mono</a> pages).
+
+ <pre>
+ (cd mono; cvs update -dP .)
+ (cd mcs; cvs update -dP .)
+ </pre>
+
+ Once you have updated your sources, remove any cached
+ assemblies or old binaries from the Mono "runtime" directory,
+ and then compile each component:
+
+ <pre>
+ (cd mono/runtime; rm *exe *dll)
+ (cd mono; make)
+ (cd mcs; make)
+ </pre>
+
+ Now you can install the result:
+
+ <pre>
+ (cd mono; make install)
+ </pre>
+
+ Notice that following the above procedure does not require you
+ to manually install the software in the `mcs' directory, as
+ the relevant files will be copied by the `mono' makefiles.
diff --git a/doc/embedded-api b/doc/embedded-api
new file mode 100755
index 00000000000..12e0c30450b
--- /dev/null
+++ b/doc/embedded-api
@@ -0,0 +1,281 @@
+* Embedding the Mono runtime, preliminary version
+
+ This document describes how to embed the Mono runtime in your
+ application, and how to invoke CIL methods from C, and how to
+ invoke C code from CIL
+
+ Slides for Paolo's presentation at .NET ONE on the embedding
+ API are available here: <a
+ href="http://primates.ximian.com/~lupus/slides/embed">Hosting the Mono
+ Runtime</a>. You can also get his <a
+ href="http://primates.ximian.com/~lupus/slides/embed/Mono-0.01.tar.gz">sample
+ Mono module for Perl</a>
+
+ Authors: Paolo Molaro, Miguel de Icaza.
+
+* Embedding the runtime.
+
+ Embedding the runtime consists of various steps:
+
+ <ul>
+ * Compiling and linking the Mono runtime
+
+ * Initializing the Mono runtime
+
+ * Optionally expose C code to the C#/CIL universe.
+
+ </ul>
+
+ These are discussed in detail next.
+
+** Compiling and Linking
+
+ To embed the runtime, you have to link your code against the
+ Mono runtime libraries. To do this, you want to pass the
+ flags returned by pkg-config to your compiler:
+
+ <pre>
+ pkg-config --cflags --libs mono
+ </pre>
+
+ Like this:
+
+ <pre>
+ gcc sample.c `pkg-config --cflags --libs mono`
+ </pre>
+
+ You can separate the compilation flags from the linking flags, for
+ instance, you can use the following macros in your makefile:
+
+ <pre>
+ CFLAGS=`pkg-config --cflags mono`
+ LDFLAGS=`pkg-config --libs mono`
+ </pre>
+
+** Initializing the Mono runtime
+
+ To initialize the runtime, call mono_jit_init, like this:
+
+ <pre>
+ MonoDomain *domain;
+
+ domain = mono_jit_init ("domain-name");
+ </pre>
+
+ That will return a MonoDomain where your code will be
+ executed. You can create multiple domains. Each domain is
+ isolated from the other domains and code in one domain will
+ not interfere with code in other domains. This is useful if
+ you want to host different applications in your program.
+
+ Then you can load an assembly containing code into the domain:
+
+ <pre>
+ MonoAssembly *assembly;
+
+ assembly = mono_domain_assembly_open (domain, "file.dll");
+ if (!assembly)
+ error ();
+ </pre>
+
+ In the above example, the contents of `file.dll' will be
+ loaded into the domain. This only loads the code, but it will
+ not execute anything yet. You can replace `file.dll' with
+ another transport file, like `file.exe'
+
+ To start executing code, you must invoke a method in the
+ assembly, or if you have provided a static Main method (an
+ entry point), you can use the convenience function:
+
+ <pre>
+ retval = mono_jit_exec (domain, assembly, argc - 1, argv + 1);
+ </pre>
+
+ If you want to invoke a different method, look at the
+ `Invoking Methods in the CIL universe' section later on.
+
+** Shutting down the runtime
+
+ To shutdown the Mono runtime, you have to clean up all the
+ domains that were created, use this function:
+
+ <pre>
+ mono_jit_cleanup (domain);
+ </pre>
+
+** Applications that use threads.
+
+ The Boehm GC system needs to catch your calls to the pthreads
+ layer, so in each file where you use pthread.h you should
+ include the <gc/gc.h> file.
+
+* Exposing C code to the CIL universe
+
+ The Mono runtime provides two mechanisms to expose C code to
+ the CIL universe: internal calls and native C code. Internal
+ calls are tightly integrated with the runtime, and have the
+ least overhead, as they use the same data types that the
+ runtime uses.
+
+ The other option is to use the Platform Invoke (P/Invoke) to
+ call C code from the CIL universe, using the standard P/Invoke
+ mechanisms.
+
+ To register an internal call, use this call in the C code:
+
+ <pre>
+ mono_add_internal_call ("Hello::Sample", sample);
+ </pre>
+
+ Now, you need to declare this on the C# side:
+
+ <pre>
+ using System;
+ using System.Runtime.CompilerServices;
+ </pre>
+
+
+ <pre>
+ class Hello {
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ extern static string Sample ();
+ }
+ </pre>
+
+ Since this routine returns a string, here is the C definition:
+
+ <pre>
+ static MonoString*
+ Sample ()
+ {
+ return mono_string_new (mono_domain_get (), "Hello!");
+ }
+ </pre>
+
+ Notice that we have to return a `MonoString', and we use the
+ `mono_string_new' API call to obtain this from a string.
+
+* Invoking Methods in the CIL universe
+
+ Calling a method in the CIL universe from C requires a number of steps:
+
+ <ul>
+ * Obtaining the MonoMethod handle to the method.
+
+ * The method invocation.
+ </ul>
+
+** Obtaining a MonoMethod
+
+ To get a MonoMethod there are several ways.
+
+ You can get a MonoClass (the structure representing a type)
+ using:
+
+ <pre>
+ MonoClass *
+ mono_class_from_name (MonoImage *image, const char* name_space, const char *name);
+ </pre>
+
+ and then loop in the returned class method array until you get
+ the one you're looking for. There are examples of such
+ searches as static functions in several C files in
+ metadata/*.c: we need to expose one through the API and remove
+ the duplicates.
+
+ The other, simpler, way is to use the functions in
+ debug-helpers.h: there are examples of their use in monograph,
+ mint and the jit as well. You basically use a string
+ description of the method, like:
+
+ <pre>
+ "System.Object:GetHashCode()"
+ </pre>
+
+ and create a MonoMethodDesc out of it with:
+
+ <pre>
+ MonoMethodDesc* mono_method_desc_new (const char *name, gboolean include_namespace);
+ </pre>
+
+ You can then use:
+
+ <pre>
+ MonoMethod* mono_method_desc_search_in_class (MonoMethodDesc *desc, MonoClass *klass);
+ MonoMethod* mono_method_desc_search_in_image (MonoMethodDesc *desc, MonoImage *image);
+ </pre>
+
+ to search for the method in a class or in an image. You would
+ tipically do this just once at the start of the program and
+ store the result for reuse somewhere.
+
+** Invoking a Method
+
+ There are two functions to call a managed method:
+
+ <pre>
+ MonoObject*
+ mono_runtime_invoke (MonoMethod *method, void *obj, void **params,
+ MonoObject **exc);
+ and
+ MonoObject*
+ mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params,
+ MonoObject **exc);
+ </pre>
+
+ obj is the 'this' pointer, it should be NULL for static
+ methods, a MonoObject* for object instances and a pointer to
+ the value type for value types.
+
+ The params array contains the arguments to the method with the
+ same convention: MonoObject* pointers for object instances and
+ pointers to the value type otherwise. The _invoke_array
+ variant takes a C# object[] as the params argument (MonoArray
+ *params): in this case the value types are boxed inside the
+ respective reference representation.
+
+ From unmanaged code you'll usually use the
+ mono_runtime_invoke() variant.
+
+ Note that this function doesn't handle virtual methods for
+ you, it will exec the exact method you pass: we still need to
+ expose a function to lookup the derived class implementation
+ of a virtual method (there are examples of this in the code,
+ though).
+
+ You can pass NULL as the exc argument if you don't want to
+ catch exceptions, otherwise, *exc will be set to the exception
+ thrown, if any. if an exception is thrown, you can't use the
+ MonoObject* result from the function.
+
+ If the method returns a value type, it is boxed in an object
+ reference.
+
+ We have plans for providing an additional method that returns
+ an unmanaged->managed thunk like this:
+
+ <pre>
+ void* mono_method_get_unmanaged_thunk (MonoMethod *method);
+ </pre>
+
+ You'll be able to store the returned pointer in a function
+ pointer with the proper signature and call that directly from
+ C:
+
+ <pre>
+ typedef gint32 (*GetHashCode) (MonoObject *obj);
+
+ GetHashCode func = mono_method_get_unmanaged_thunk (System_Object_GetHashCode_method);
+
+ gint32 hashvalue = func (myobject);
+ </pre>
+
+ It may not be possible to manage exceptions in that case,
+ though. I need to think more about it.
+
+* Samples
+
+ See the sample programs in mono/sample/embed for examples of
+ embedding the Mono runtime in your application.
+
+
diff --git a/doc/faq b/doc/faq
new file mode 100644
index 00000000000..7836e3aa6ba
--- /dev/null
+++ b/doc/faq
@@ -0,0 +1,1231 @@
+<a href="#basics">Basics</a><br>
+<a href="#ximian">The Ximian Role in the Mono project</a><br>
+<a href="#gnome">Mono and GNOME</a><br>
+<a href="#gui">Building GUI applications with Mono</a><br>
+<a href="#msft">Mono and Microsoft</a><br>
+<a href="#platforms">Mono platforms</a><br>
+<a href="#pnpproject">Mono and the Portable.NET Project</a><br>
+<a href="#webservices">Web Services</a><br>
+<a href="#asp">Mono and ASP.NET</a><br>
+<a href="#ado">Mono and ADO.NET</a><br>
+<a href="#monodoc">MonoDoc</a><br>
+<a href="#devel">Development Tools and Issues</a><br>
+<a href="#java">Mono and Java</a><br>
+<a href="#extending">Extending Mono</a><br>
+<a href="#portability">Portability</a><br>
+<a href="#reuse">Reusing Existing Code</a><br>
+<a href="#gcc">Mono and GCC</a><br>
+<a href="#performance">Performance</a><br>
+<a href="#licensing">Licensing</a><br>
+<a href="#patents">Patents</a><br>
+<a href="#etc">Miscellaneous Questions</a><br>
+<a href="#problems">Mono Common Problems</a><br>
+
+A <a
+href="http://www.es.gnome.org/documentacion/articulos/mono-puf/mono-puf/">Spanish
+translation</a> is also available
+
+<a name="basics"></a>
+** Basics
+
+Q: What is Mono exactly?
+
+A: The Mono Project is an open development initiative sponsored by
+ Ximian that is working to develop an open source, Unix
+ version of the Microsoft .NET development platform. Its objective
+ is to enable Unix developers to build and
+ deploy cross-platform .NET Applications. The project will
+ implement various technologies developed by Microsoft that have now
+ been submitted to the ECMA for standardization.
+
+Q: What is the difference between Mono and the .NET Initiative?
+
+A: The ".NET Initiative" is a somewhat nebulous company-wide effort by
+ Microsoft, one part of which is a cross-platform development
+ framework. Mono is an implementation of the development framework,
+ but not an implementation of anything else related to the .NET
+ Initiative, such as Passport, software-as-a-service, or
+ corporate re-branding.
+
+Q: What technologies are included in Mono?
+
+A: Mono contains a number of components useful for building new
+ software:
+
+ <ul>
+ * A Common Language Infrastructure (CLI) virtual
+ machine that contains a class loader, Just-in-time
+ compiler, and a garbage collecting runtime.
+
+ * A class library that can work with any language
+ which works on the CLR.
+
+ * A compiler for the C# language. In the future we
+ might work on other compilers that target the Common
+ Language Runtime.
+ </ul>
+
+
+ Windows has compilers that target the virtual machine from <a
+ href="http://msdn.microsoft.com/net/thirdparty/default.asp#lang">a
+ number of languages:</a> Managed C++, Java Script, Eiffel,
+ Component Pascal, APL, Cobol, Perl, Python, Scheme,
+ Smalltalk, Standard ML, Haskell, Mercury and Oberon.
+
+ The CLR and the Common Type System (CTS) enables applications and
+ libraries to be written in a collection of different languages that
+ target the byte code
+
+ This means for example that if you define a class to do algebraic
+ manipulation in C#, that class can be reused from any other
+ language that supports the CLI. You could create a class in C#,
+ subclass it in C++ and instantiate it in an Eiffel program.
+
+ A single object system, threading system, class libraries, and
+ garbage collection system can be shared across all these languages.
+
+Q: Where can I find the specification for these technologies?
+
+A: You can find the information here:
+
+
+ C# <a href="http://www.ecma.ch/ecma1/STAND/ecma-334.htm">http://www.ecma.ch/ecma1/STAND/ecma-334.htm</a>
+
+ CLI <a href="http://www.ecma.ch/ecma1/STAND/ecma-335.htm">http://www.ecma.ch/ecma1/STAND/ecma-335.htm</a>
+
+Q: Will you implement the .NET Framework SDK class libraries?
+
+A: Yes, we will be implementing the APIs of the .NET Framework SDK
+ class libraries.
+
+Q: Will you offer an ECMA-compliant set of class libraries?
+
+A: Eventually we will. Our current focus is on inter-operating
+ with the Microsoft SDK, but we will also offer an ECMA compliant
+ set of libraries.
+
+Q: What does the name "Mono" mean?
+
+A: Mono is the word for `monkey' in Spanish. We like monkeys.
+
+Q: Is Mono usable?
+
+A: The JIT engine is usable on Intel x86 machines. An interpreter
+ can be used on other non-Intel x86 machines.
+
+ The class libraries are mature enough to run some real applications
+ (the compiler for instance, and every day more and more applications
+ are natively developed with Mono).
+
+Q: When will you ship it?
+
+A: Different parts of Mono will achieve usability at different stages,
+ once we are comfortable with the compiler, we will release "Mono Core",
+ which contains everything needed to develop applications with the base
+ class libraries, this will happen soon and in the meantime you can
+ download daily snapshots of our work. Also the full ASP.NET support is
+ close to completion.
+
+ Other higher level class libraries (ASP.NET, ADO.NET, WinForms) will
+ be released when they become stable.
+
+Q: What major components will you include in Mono?
+
+A: Hopefully everything that Microsoft ships on their Framework
+ (ADO.NET, ASP.NET, WinForms), and we encourage third party developers to
+ create reusable components that work on both Mono and Windows.
+
+Q: How can I contribute?
+
+A: Check the <a href="contributing.html">contributing</a> section.
+
+Q: Aren't you just copying someone else's work?
+
+A: We are interested in providing the best tools for programmers to
+ develop applications for Free Operating Systems. We also want to help
+ provide the interoperability that will allow those systems to fit in
+ with other standards.
+
+ For more background, read the <a href="http://www.go-mono.com/rationale.html">Mono
+ Project white paper</a>.
+ the project.
+
+Q: Miguel said once that Mono was being implemented in COBOL. Is that true?.
+
+A: No. It was a joke.
+
+
+<a name="ximian"></a>
+
+** The Ximian Role in the Mono Project
+
+Q: Why is Ximian working on .NET?
+
+A: Ximian is interested in providing the best tools for programmers to
+ develop applications for Free Operating Systems.
+
+ For more information, read the project <a
+ href="rationale.html">rationale</a> page.
+
+Q: Will Ximian be able to take on a project of this size?
+
+A: Of course not. Ximian a supporter of the Mono project, but the only way
+ to implement something of this size is for the entire free software
+ community to get involved. Visit the <a href="contributing.html">contributing</a>
+ page if you'd like to help out.
+
+Q: What pieces will Ximian be working on?
+
+A: We will devote most of our resources to work on the pieces which are
+ on the critical path to release a development and execution
+ environment. Once the project is at a stage where it is useful in
+ the real world, it will achieve a critical mass of developers to
+ improve it further.
+
+Q: Will Ximian offer Mono commercially?
+
+A: When Mono is ready to be shipped Ximian will offer a commercial
+ support and services for Mono.
+
+Q: Does Ximian provide consulting services around Mono?
+
+A: Yes, Ximian does provide consulting services around Mono to
+ make it suitable to your needs. Porting the runtime engine,
+ customizing it, working on specific classes or tuning the code
+ for your particular needs.
+
+Q: Will you wait until Mono is finished?
+
+A: Mono will ship on various stages as they mature. Some people
+ require only a subset of the technologies, those will ship first.
+
+ More advanced features will take more time to develop. A support
+ time line will be available in June 2002.
+
+<a name="gnome"></a>
+** Mono and GNOME
+
+Q: How is Mono related to GNOME?
+
+A: In a number of ways. This project was born out of the need of
+ providing improved tools for the GNOME community, and will use
+ existing components that have been developed for GNOME when they
+ are available. For example, we plan to use Gtk+ and Libart to
+ implement Winforms and the Drawing2D API and are considering
+ GObject support.
+
+Q: Has the GNOME Foundation or the GNOME team adopted Mono?
+
+A: Mono is too new to be adopted by those groups. We hope that the
+ tools that we will provide will be adopted by free software
+ programmers including the GNOME Foundation members and the GNOME
+ project generally.
+
+Q: Should GNOME programmers switch over to Mono now?
+
+A: It is still far to early for discussions of "switching over." No
+ pieces of Mono will be ready within the next six months, and a
+ complete implementation is roughly one year away.
+
+ We encourage GNOME developers to continue using the existing tools,
+ libraries and components. Improvements made to GNOME will have an
+ impact on Mono, as they would be the "back-end" for various classes.
+
+Q: Will Mono include compatibility with Bonobo components? What is the
+ relationship between Mono and Bonobo?
+
+A: Yes, we will provide a set of classes for implementing and using
+ Bonobo components from within Mono. Mono should allow you to write
+ Bonobo components more easily, just like .NET on Windows allows you
+ to export .NET components to COM.
+
+Q: Does Mono depend on GNOME?
+
+A: No, Mono does not depend on GNOME. We use a few packages produced by
+ the GNOME team like the `glib' library.
+
+Q: But will I be able to build GNOME applications?
+
+A: Yes, we will enable people to write GNOME applications using Mono.
+
+Q: Do you have C# bindings for GNOME?.
+
+A: Yes, we currently bind libgnome, libgnomecanvas, and libgnomeui --
+ although I dare say I have no idea how functional the bindings are
+ outside of what I tested in the sample app. I imagine other libraries
+ under the GNOME framework will be added on an as-needed (and as-requested)
+ basis...although a truly good bonobo binding will have to wait on the CORBA
+ remoting support which has been started recently.
+
+<a name="gui"></a>
+** GUI applications
+
+Q: Will Mono enable GUI applications to be authored?
+
+A: Yes, you will be able to build GUI applications. Indeed, that is our
+ main focus. We will provide both the Windows.Forms API and the Gtk# API.
+
+Q: What is the difference between Gtk# and System.Windows.Forms?
+
+A: Gtk# is a set of bindings for the Gtk+ toolkit for C# (and other
+ CIL-enabled languages). System.Windows.Forms is an API defined
+ by Microsoft to build GUI applications.
+
+Q: Will I be able to run my smart clients on systems powered by Mono?
+
+A: As long as your applications are 100% .NET and do not make use
+ of P/Invoke to call Win32 functions, your smart client applications
+ will run on Mono platforms.
+
+Q: Where can I learn more about Gtk#?
+
+A: The following <a href="http://gtk-sharp.sourceforge.net>link</a> sends you to the page of the project.
+
+Q: What can I do with Gtk#?.
+
+A: Gtk# is becoming very usable and you can create applications and
+ applets like those you see in a GNOME desktop environment. It's
+ easy to install so it's worth a try.
+
+Q: How can I compile my HelloWorld.cs which uses Gtk#?.
+
+A: Try: mcs --unsafe -o HelloWorld.exe -r glib-sharp -r pango-sharp -r
+ atk-sharp -r gdk-sharp -r gtk-sharp -r gdk-imaging-sharp
+ HelloWorld.cs
+
+Q: Is there any way how to connect DataAdapter to some GTK# controls?
+
+A: There is a sample file called `DbClient' in gtk-sharp/samples that you
+ might to look at. It is a sample program in Gtk# that adds/updates/deletes
+ information on a Postgress database. When we have the new table/tree widgets,
+ I am sure someone would write an adapter for System.Data (in Gtk2 the
+ tree/list widgets are written using a view/model, so you only need to write
+ a model that maps to the database). You can have a look at
+ gtk-sharp/sample/DbClient, where there is a GTK# application that uses
+ System.Data. It does not use DataAdapter, but DataReader though.
+
+Q: Do you have an estimate for when Windows.Forms will be released?
+
+A: We do not know, volunteers are working on this, but there is no set
+ date yet. The current approach is using the Wine Library to implement
+ it.
+
+<a name="msft"></a>
+** Mono and Microsoft
+
+Q: Is Microsoft helping Ximian with this project?
+
+A: There is no high level communication between Ximian and Microsoft
+ at this point, but engineers who work on .NET or the ECMA groups
+ have been very friendly, and very nice to answer our questions, or
+ clarify part of the specification for us.
+
+ Microsoft is interested in other implementations of .NET and are
+ willing to help make the ECMA spec more accurate for this purpose.
+
+ Ximian was also invited to participate in the ECMA committee
+ meetings for C# and the CLI.
+
+Q: Is Microsoft or Corel paying Ximian to do this?
+
+A: No.
+
+Q: Do you fear that Microsoft will change the spec and render Mono
+ useless?
+
+A: No. Microsoft proved with the CLI and the C# language that it was
+ possible to create a powerful foundation for many languages to
+ inter-operate. We will always have that.
+
+ Even if changes happened in the platform which were undocumented,
+ the existing platform would a value on its own.
+
+Q: Are you writing Mono from the ECMA specs?
+
+A: Yes, we are writing them from the ECMA specs and the published
+ materials in print about .NET.
+
+Q: If my applications use Mono, will I have to pay a service fee?
+
+A: No. Mono is not related to Microsoft's initiative of
+ software-as-a-service.
+
+Q: Is the Mono Project is related to the Microsoft Hailstorm effort? Is
+ Ximian endorsing Hailstorm?
+
+A: No. The Mono Project is focused on providing a compatible set of
+ tools for the Microsoft .NET development platform. It does not
+ address, require, or otherwise endorse the MS Passport-based
+ Hailstorm single sign-on system that is part of Windows XP and
+ other services.
+
+Q: Will Mono or .NET applications depend on Microsoft Passport?
+
+A: No. MS Passport is unrelated to running .NET compatible applications
+ produced with the Mono tools. The only thing you will need is a
+ just-in-time compiler (JIT).
+
+Q: What is a 100% .NET application?
+
+A: A `100% .NET application' is one that only uses the APIs defined
+ under the System namespace and does not use PInvoke. These
+ applications would in theory run unmodified on Windows, Linux,
+ HP-UX, Solaris, MacOS X and others.
+
+Q: If Microsoft will release a port of their .NET platform under the
+ `Shared Source' license, why should I bother with anything else?
+
+A: The Shared Source implementation will be expensive and its uses
+ will be tightly restricted, especially for commercial use. We are
+ working towards an implementation that will grant a number of
+ important rights to recipients: use for any purpose,
+ redistribution, modification, and redistribution of modifications.
+
+ This is what we call <a
+ href="http://www.gnu.org/philosophy/free-sw.html">Free Software</a>
+
+Q: Is Mono a free implementation of Passport?
+
+A: No. Mono is just a runtime, a compiler and a set of class
+ libraries.
+
+Q: Will the System.Web.Security.PassportIdentity class mean
+ that my software will depend on Passport?
+
+A: No. Applications may use that API to contact a Passport site, but
+ are not required to do so.
+
+ As long as your application does not use Passport, you will not
+ need Passport.
+
+Q: Will Mono running on Linux make Passport available for Linux?
+
+A: No. However, the Passport toolkit for Linux-based web servers is
+ available from Microsoft.
+
+Q: Will Mono allow me to run Microsoft Office on Linux?
+
+A: No, it will not. Microsoft Office is a Windows application. To
+ learn more about running Windows applications on Intel Unix systems
+ refer to <a href="http://www.winehq.com">the Wine Project</a>.
+
+Q: Will I be able to compile a Microsoft VB.NET application and execute
+ the resultant MSIL file under MONO on Linux without converting to C#
+ and recompiling?
+
+A: Once we have a complete VisualBasic runtime, yes.
+
+Q: Can mono run the WebMatrix?
+
+A: No. That requires System.Windows.Forms support which is not
+ currently implemented.
+
+Q: Does mono have something like Passport?
+ Will mono have a server side Passport/Similar framework for XSP as well as client classes?
+
+A: Not yet, but the client side API for authentication is not the problem.
+ We will likely have a lot of other authentication APIs, like the Liberty
+ Alliance APIs. The problem is people on the web provider end that might use
+ this for authentication.
+
+<a name="platforms"></a>
+** Mono Platforms
+
+Q: What operating systems does Mono run on?
+
+A: Mono is known to run on Linux, Unix and Windows systems.
+
+Q: What architectures does Mono support?
+
+A: Mono today ships with a Just-in-Time compiler for x86-based
+ systems. It is tested regularly on Linux, FreeBSD and Windows
+ (with the XP/NT core).
+
+ There is also an interpreter, which is slower that runs on the
+ s390, SPARC and PowerPC architectures.
+
+Q: Can Mono run on Windows 9x, or ME editions?
+
+A: Mono requires Unicode versions of Win32 APIs to run,
+ and only a handful of *W functions is supported under Win9x.
+
+ There is Microsoft Layer for Unicode that provides implementation
+ of these APIs on 9x systems.
+
+ Unfortunately it uses linker trick for delayed load that is not
+ supported by ld, so some sort of adapter is necessary.
+
+ You will need MSLU and one of the following libs to link Mono to
+ unicows.dll <a
+ href="http://mono.eurosoft.od.ua/files/unimono.zip">http://mono.eurosoft.od.ua/files/unimono.zip</a>
+ or alternatively search the net for "libunicows".
+
+ No changes to Mono source code required, the only thing is to make
+ sure that linker will resolve imports to adapter library instead of
+ Win32 libs. This is achieved by inserting -lunimono before
+ -lkerner32/user32 in the linker's specs file.
+
+
+<a name="pnpproject"></a>
+** Mono and Portable.NET
+
+Q: What are the differences between Mono and Portable.NET?
+
+A: Most of Mono is being written using C#, with only
+ a few parts written in C (The JIT engine, the runtime, the
+ interfaces to the garbage collection system).
+
+ It is easier to describe what is unique about Mono:
+ <ul>
+ <li> A Just-in-Time compiler engine. This is important for
+ making your applications fast.
+
+ <li> A self-hosting C# compiler written in C#, which is clean, easy
+ to maintain.
+
+ <li> Focus on the .NET Framework: we are tracking down the .NET
+ Framework API definition, as we believe it is the API people
+ will be most familiar with.
+
+ <li> A multi-platform runtime engine: both a JIT engine and an
+ interpreter exist. The JIT engine runs currently on x86
+ systems, while the interpreter works on SPARC, StrongARM,
+ s390 and PowerPC systems.
+
+ <li> Supports Linux, Windows and Solaris at this point.
+
+ <li> The JIT engine is written using a portable instruction
+ selector which not only generates good code (we are told
+ that we are faster than Rotor, but it is hard to tell) but
+ is also the foundation to re-target the JIT engine to other
+ systems.
+
+ The system employed is described in various compiler
+ books and it is very similar to what is described in the
+ book that covers LCC, the ANSI C retargetable C compiler.
+
+ <li> The JIT engine supports in-lining, constant folding and propagation,
+
+ <li> Full support for remoting in the runtime, but the class
+ libraries are still behind.
+
+ <li> The C# compiler, the JIT engine and the class libraries are
+ mature enough that the whole system is self-hosting. This means that
+ we develop Mono completely with itself at this point.
+
+ <li> We are not yet done, and there is a lot of work left to be
+ done
+
+ <li> We have a great community of developers, without which Mono
+ would not be possible.
+
+ <li> We are working on an ahead of time compilation mode to
+ pre-compile code for the target architecture (this is part
+ of our new code generation effort).
+ </ul>
+
+<a name="webservices"></a>
+** Web Services
+
+Q: How is Mono related to Web Services?
+
+A: Mono is only related to Web Services in that it will implement the
+ same set of classes that have been authored in the .NET Framework
+ to simplify and streamline the process of building Web Services.
+
+ But most importantly, Mono is an Open Source implementation of the
+ .NET Framework.
+
+Q: Can I author Web Services with Mono?
+
+A: You will be able to write Web Services on .NET that run on Mono and
+ vice-versa.
+
+Q: If Mono implements the SDK classes, will I be able to write and
+ execute .NET Web Services with it?
+
+A: Yes. When the project is finished, you will be able to use the
+ same technologies that are available through the .NET Framework SDK
+ on Windows to write Web Services.
+
+Q: What about Soup? Can I use Soup without Mono?
+
+A: Soup is a library for GNOME applications to create SOAP servers and
+ SOAP clients, and can be used without Mono. You can browse the
+ source code for soup using <a
+ href="http://cvs.gnome.org/bonsai">GNOME's Bonsai</a>.
+
+Q: Can I use CORBA?
+
+A: Yes. The CLI contains enough information about a class that
+ exposing it to other RPC systems (like CORBA) is really simple, and
+ does not even require support from an object.
+
+ We will be implementing CORBA inter-operation as an extension to the
+ Mono classes so that we can integrate with Bonobo, just like
+ Microsoft provides COM inter-operation classes and support
+ mechanisms.
+
+Q: Can I serialize my objects to other things other than XML?
+
+A: Yes, although the serializing tools have not yet been planned, and
+ you would probably have to implement them yourself.
+
+Q: Will Mono use ORBit?
+
+A: No. Mono will be using a new implementation of CORBA that isn't still started.
+
+<a name="monodoc"></a>
+** MonoDoc
+
+Q: What is MonoDoc?
+
+A: MonoDoc is a graphical documentation editor and viewer. Currently, MonoDoc
+ consists of a Gtk# application and is in heavy development. There is also a
+ Qt# version of it.
+
+
+<a name="devel"></a>
+** Development Tools and Issues
+
+Q: Will it be possible to use the CLI features without using byte codes
+ or the JIT?
+
+A: Yes. The CLI engine will be made available as a shared library.
+ The garbage collection engine, the threading abstraction, the
+ object system, the dynamic type code system and the JIT will be
+ available for C developers to integrate with their applications if
+ they wish to do so.
+
+Q: Will you have new development tools?
+
+A: With any luck, Free Software enthusiasts will contribute tools to
+ improve the developer environment. These tools could be developed
+ initially using the Microsoft implementation of the CLI and then
+ executed later with Mono.
+
+Q: What kind of rules make the Common Intermediate Language useful for
+ JITers?
+
+A: The main rule is that the stack in the CLI is not a general purpose
+ stack. You are not allowed to use it for other purposes than
+ computing values and passing arguments to functions or return
+ values.
+
+ At any given call or return instruction, the types on the stack
+ have to be the same independently of the flow of execution of your
+ code.
+
+Q: Is it true that the CIL is ideal for JITing and not efficient for
+ interpreters?
+
+A: The CIL is better suited to be JITed than JVM byte codes, but you
+ can interpret them as trivially as you can interpret JVM byte
+ codes.
+
+Q: Isn't it a little bit confusing to have the name of "XSP" (the same
+ as in the Apache Project) for the ASP.NET support in Mono?.
+
+A: In Mono, xsp is just the name of the C# code generator for ASP.NET
+ pages. In the Apache Project, it is a term for the "eXtensible Server
+ Pages" technology so as they are very different things, they don't
+ conflict.
+
+Q: What about using something like Jabber instead of the System.Messaging
+ namespace?.
+
+A: In short, MSMQ is not something like Jabber, but asynchronous messaging
+ through queues. Useful queues do more than serialize messages, they are
+ also platform bridges.
+
+Q: Are you supporting XMLDocument and relatives?.
+
+A: Currently, we aren't implementing them yet. It would require updates to
+ most of the XmlNode derivatives so it's not a trivial task. We are
+ currently focusing on getting XPath support working.
+
+Q: Is there any plan to develop an aspx server for Mono?.
+
+A: The web server turned out to be very simple compared to the rest of the
+ work. Gonzalo has got the page generator mostly done (a module called
+ xsp, who has nothing to do with the XSP term used in the Apache Project).
+ Patrik has done a lot of the work to get the ProcessRequest to work.
+ You can try to help in the final touches to the System.Web classes and
+ writing regression tests for the widgets we have.
+
+Q: Is there any way I can develop the class libraries using Linux yet?
+
+A: Yes. Some class libraries can be developed on Linux. Search for
+ Paolo's post (he lists which classes can be compiled fine now).
+
+Q: Is there any way I can install a known working copy of mono in /usr,
+ and an experimental copy somewhere else, and have both copies use
+ their own libraries? (I'm still not very good at library paths in
+ Linux)
+
+A: Yes. Just use two installation prefixes.
+
+Q: How should I write tests or a tests suite?
+
+A: If you do a test suite for C#, you might want to keep it
+ independent of the Mono C# compiler, so that other compiler
+ implementations can later use it.
+
+Q: Would it be too terrible to have another corlib signed as mscorlib?
+
+A: We rename corlib to mscorlib also when saving the PE files, in fact,
+ the runtime can execute program created by mono just fine.
+
+Q: Is there a relatively straightforward way to repeat the steps taken
+ by Paolo to get Mono completely self-hosted on Linux?
+
+A: To build the compiler and class libraries in Linux, run:
+ <ul><li>make -f makefile.gnu. To install them, run: </li>
+ <li>make -f makefile.gnu install prefix=/opt/mono</li>
+ </ul>
+
+ If you want to produce and distribute a monocharge tarball, run:
+ make -f makefile.gnu dist
+ Of course you have to run these in the top level mcs directory.
+
+Q: Is it possible to build a C# file to some sort of intermediate format which
+ can linked into a final module, like the traditional .c -> .o -> .so path?
+
+A: You could do: mcs /target:module file1.cs, mcs /target:module file2.cs,
+ mcs /target:exe file1.dll file2.dll /out:mybin.exe
+
+Q: Is there any plans for implementing remoting in the near future?, When will
+ work in System.Runtime.Remoting.dll start?
+
+A: The remoting infrastructure is in place. Some of the channels and
+ formatters are not.
+
+Q: I'm wondering if there are any plans to start using nant to build the
+ class lib + test lib. i think that every project need/should use an
+ automated build process and nant + a couple of tools enables this. is
+ the problem that the compiler can't run nant yet?
+
+A: Maybe well be doing some sort of automated build process + testing when
+ the summer finish.
+
+Q: My C code uses the __stdcall which is not availble on Linux, how can I
+ make the code portable Windows/Unix across platforms?
+
+A: Replace the __stdcall attribute with the STDCALL macro, and include this
+ in your C code for newer gcc versions:
+
+ #ifndef STDCALL
+ #define STDCALL __attribute__((stdcall))
+ #endif
+
+<a name="asp">
+** Mono and ASP.NET
+
+Q: Is Mono supporting ASP.NET?
+
+A: Yes. The development of the support for ASP.NET comes in various stages,
+ here is what Gonzalo has been working on: 1. The Parser. 2. Getting the
+ parser to generate output compatible with ASP.NET. 3. Running the sample
+ output with the real Microsoft runtime but using our generated page. 4.
+ Running the sample with our classes with the .NET runtime. 5. Running
+ our sample code with our classes with our runtime. This is the process
+ we are following. Currently Gonzalo has reached point 5.
+
+Q: Do I need install cygwin to work on ASP.NET in mono or Linux is enough since
+ it is self host right now.
+
+A: Linux is enough.
+
+Q: Any plan to make ASP.NET in mono works with Apache in Linux?.
+
+A: Yes, we have plans to do so, but we need to wait for Patrik's patches to
+ HttpRuntime. Once that is there, writing a mod_mono should be trivial
+ (look at mono/samples/embed for a sample embedded application).
+
+<a name="ado">
+** Mono and ADO.NET
+
+Q: What is the status of ADO.NET support?. Could I start migrating
+ applications from MS.NET to Mono?.
+
+A: You could start right now using the ADO.NET support in mono, of course,
+ if you want to help filling the missing gaps while you develop your app
+ :-) Well, what I mean is that we're not that far to having full ADO.NET
+ support in Mono, and we've got a lot of working things, so if we could
+ get more help, we'd finish it really soon :-)
+
+Q: In developing the data architecture for the application are there and
+ objects I should stay away from in order to insure the smoothest possible
+ transition (minimum code rewrite) to Mono's ADO.NET implementation? (For
+ example, strongly typed datasets versus untyped datasets, etc...)
+
+A: We are implementing all the classes in Microsoft .NET's System.Data, so
+ you can be sure that things will work the same in Mono as with the Microsoft
+ implementation.
+
+Q: Does Mono can to connect to Sybase by using Mono.Data.*?
+
+A: Yes. use Mono.Data.SybaseClient. First of all you have to create a
+ SybaseConnection, and then, from it, use it as any other
+ IDbConnection-based class.
+
+<a name="java">
+** Mono and Java
+
+Q: Why don't you use Java? After all, there are many languages that
+ target the Java VM.
+
+A: You can get very good tools for doing Java development on free
+ systems right now. <a href="http://www.redhat.com">Red Hat</a> has
+ contributed a <a href="http://gcc.gnu.org">GCC</a> <a
+ href="http://gcc.gnu.org/java">front-end for Java</a> that can take
+ Java sources or Java byte codes and generate native executables; <a
+ href="http://www.transvirtual.com">Transvirtual</a> has implemented
+ <a href="http://www.kaffe.org">Kaffe</a> a JIT engine for Java;
+ Intel also has a Java VM called <a
+ href="http://www.intel.com/research/mrl/orp">ORP</a>.
+
+ The JVM is not designed to be a general purpose virtual machine.
+ The Common Intermediate Language (CIL), on the other hand, is
+ designed to be a target for a
+ wide variety of programming languages, and has a set of rules
+ designed to be optimal for JITers.
+
+Q: Could Java target the CLI?
+
+A: Yes, Java could target the CLI. We have details on a <a
+ href="ideas.html#guavac">project</a> that someone could take on to
+ make this happen.
+
+ Microsoft has an implementation of the Java language called J# that
+ can target the CIL execution engine.
+
+Q: Is it possible to write a JVM byte code to CIL converter?
+
+A: Yes, it is possible. Here are a few starting point:
+
+ <ul>
+ * A byte code representation is really a flattened forest of
+ trees. Look at the Mono JIT engine to see how we compute
+ the basic blocks (this is used to figure out the "trees").
+
+ The forest is just an array of trees.
+
+ Indeed, run the JIT engine with -d (mono -d prog.exe) and
+ you will see how these trees look like.
+
+ You will have to do something similar for Java.
+
+ * Each "forest of trees" has a meaning. This meaning can now
+ be translated into the equivalent "meaning" in CLR-land.
+ </ul>
+
+Q: Could mono become a hybrid CIL/java platform?
+
+A: No. It is quite far from the philosophy of the project. The idea of Mono
+ is, to have only _one_ VM, on which all can run. And if there existing a
+ binary-converter from Java-.class to IL and if there existing something
+ like J-Sharp on Mono, you can write programs in Java, which than can run
+ on Mono. You do not need two bindings (like your example: GTK-Sharp _and_
+ Java-Gnome). You need only _one_ of it (GTK-Sharp). Thats the idea of Mono.
+ An other point is, that there are no people, who use Open Source-JVMs. They
+ all prefer Suns original. But for Unix there don't exist a .NET-Framework.
+ So it is possible, that in the future Mono is the standard .NET for Unixes.
+
+Q: Do you plan to implement a Javascript compiler?
+
+A: Yes. Eto Demerzal has started a Rhino port to C#.
+ After this is completed, we will begin developing
+ the JavaScript compiler.
+
+Q: Can Mono or .NET share system classes (loaded from mscore.dll and other
+ libs) or will it behave like Sun's Java VM?
+
+A: What you can do with mono is to load different applications in their own
+ application domain: this is a feature of the CLR that allows sandboxing
+ applications inside a single process space. This is usualy exploited to
+ compartmentalize different parts of the same app, but it can also be
+ effectively used to reduce the startup and memory overhead.
+ Using different appdomains the runtime representation of types and
+ methods is shared across applications.
+
+<a name="extending"></a>
+** Extending Mono
+
+Q: Would you allow other classes other than those in the
+ specification?
+
+A: Yes. The Microsoft class collection is very big, but it is by no
+ means complete. It would be nice to have a port of `Camel' (the
+ Mail API used by Evolution inspired by Java Mail) for Mono
+ applications.
+
+ You might also want to look into implementing CORBA for Mono. Not
+ only because it would be useful, but because it sounds like a fun
+ thing to do, given the fact that the CLI is such a type rich
+ system.
+
+ For more information on extending Mono, see our <a
+ href="ideas.html">ideas</a> page.
+
+Q: Do you plan to Embrace and Extend .NET?
+
+A: Embracing a good technology is good. Extending technologies in
+ incompatible ways is bad for the users, so we do not plan on
+ extending the technologies.
+
+ If you have innovative ideas, and want to create new classes, we
+ encourage you to make those classes operate correctly well in both
+ Mono and .NET.
+
+Q: Is there any way I can develop the class libraries using Linux yet?
+
+A: Yes. Some class libraries can be developed on Linux. Search for
+ Paolo's post (he lists which classes can be compiled fine now).
+
+Q: Is there any way I can install a known working copy of mono in /usr,
+ and an experimental copy somewhere else, and have both copies use
+ their own libraries? (I'm still not very good at library paths in
+ Linux)
+
+A: Yes. Just use two installation prefixes.
+
+
+<a name="portability"></a>
+** Portability
+
+Q: Will Mono only work on Linux?
+
+A: Currently, we are doing our work on Linux-based systems and
+ Windows. We do not expect many Linux-isms in the code, so it
+ should be easy to port Mono to other UNIX variants.
+
+Q: What about Mono on non Linux-based systems?
+
+A: Our main intention at Ximian is to be able to develop GNOME
+ applications with Mono, but if you are interested in providing a
+ port of the Winforms classes to other platforms (frame buffer or
+ MacOS X for example), we would gladly integrate them, as long
+ they are under an open source license.
+
+Q: What operating systems/CPUs do you support
+
+A: Mono currently runs on Linux, Windows, Solaris and FreeBSD.
+ There is a JIT engine available for x86 processors that can
+ generate code and optimizations tailored for a particular CPU.
+
+ Interpreters exist for the SPARC, PowerPC and StrongARM CPUs.
+
+Q: Does Mono run on Windows?
+
+A: Yes. You can get pre-compiled
+ binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a>
+
+Q: Does Mono run on Linux?
+
+A: Yes. You can get pre-compiled
+ binaries from <a href="http://www.go-mono.com/download.html">http://www.go-mono.com/download.html</a>
+
+Q: Will I require Cygwin to run mono?
+
+A: No. Cygwin is only required to build Mono.
+
+Q: Will Mono depend on GNOME?
+
+A: It will depend only if you are using a particular assembly (for
+ example, for doing GUI applications). If you are just interested
+ in Mono for implementing a `Hello World Enterprise P2P Web
+ Service', you will not need any GNOME components.
+
+Q: Is anyone working on porting Mono to IA-64?
+
+A: Nobody is working on such port.
+
+Q: If I were about to start a Mono port to IA-64,would the same lburg code
+ generator work for IA-64 also? or anything else need to be used for code
+ generation(as the processor architecture is totally different from IA32)
+
+A: The lburg approach can be use for any processor architecture. But you might
+ think in another better approach.
+
+Q: Do you plan to port Rhino to C#?.
+
+A: Eto Demerzal has started a Rhino port to C#.
+
+Q: Has anyone succeeded in building a Mac version of the C# environment.
+ If so can you explain how?
+
+A: You could try to check with the Darwin people, or the Fink people.
+ Mono/C# is self hosting on Linux/PPC which is the hard part, so it
+ should be relatively simple to get it to work on MacOS
+
+<a name="reuse"></a>
+** Reusing Existing Code
+
+Q: What projects will you reuse or build upon?
+
+A: We want to get Mono in the hands of programmers soon. We are
+ interested in reusing existing open source software.
+
+Q: What about Intel's research JIT framework, ORP?
+
+A: At this time, we are investigating whether we can use elements of
+ ORP for Mono. ORP is a research JIT engine that has a clearly
+ defined API that splits the JIT from the GC system and the actual
+ byte code implementation.
+
+ We are using some pieces of ORP (Their code generation interface)
+ and we use it as a source of inspiration for optimizations. Paolo
+ and Dietmar consider ORP as being one of the best JIT engines out
+ there (and their research work and papers are very useful if you are
+ interested in JIT technology).
+
+Q: What about using GNU Lightning?
+
+A: We are not using GNU Lightning. Our JIT is using an instruction
+ selector based on tree-pattern matching, and a code generation
+ interface that is very tied to the current architecture.
+
+Q: Will I be able to use Microsoft SQL Server 2000 or will I need to switch
+ to a specific Open Source Database. Will I need to recode?
+
+A: There should not be any need to recode.
+
+Q: What do I need to watch out for when programming in VB.NET so that I'm
+ sure to be able to run those apps on Linux?
+
+A: Not making any PInvoke or DLL calls should and not using anything in
+ the Microsoft.* namespaces should suffice. Also do not use any
+ Methods/Classes marked as "This type/method supports the .NET Framework
+ infrastructure and is not intended to be used directly from your code."
+ even if you know what these classes/methods do.
+
+Q: Will built-in reporting be supported for crystal reports? This is a
+ heavily used part of our system.
+
+A: Probably not. Crystal Reports are propriety. Someone may try to emulate
+ the behavior, but no-one has yet volunteered.
+
+Q: Who about writing to the registry? As I understand it, Linux does not have
+ a counterpart to the registry. Should I avoid relying on that feature?
+
+A: Try to avoid it. Although there would be a emulation for registry in
+ Mono too. GNOME does have a registry like mechanism for configuration. But
+ Even if gnome has a configuration system similar to the registry, the keys
+ will not be equal, so you will probably end up having to do some runtime
+ detection, and depending on this load an assembly that has your
+ platform-specific hacks.
+
+Q: System.Data.SqlClient with FreeTDS, will you port parts of these to C# and
+ use them?
+
+A: if their license is compatible with mono's, yes, we'd think about porting
+ them. If not, we'll continue with the plan of using FreeTDS.
+
+<a name="gcc"></a>
+** Mono and GCC
+
+Q: Are you working on a GCC front-end to C#? A GCC back-end that will
+ generate CIL images? What about making a front-end to GCC that
+ takes CIL images and generates native code?
+
+A: We are currently seeking volunteers for those projects.
+ Visit the <a href="contributing.html">contributing</a> section if
+ you are interested.
+
+Q: But would this work around the GPL in the GCC compiler and allow
+ people to work on non-free front-ends?
+
+A: People can already do this by targeting the JVM byte codes (there
+ are about 130 compilers for various languages that target the JVM).
+
+Q: Why are you writing a JIT engine instead of a front-end to GCC?
+
+A: We want the JIT engine and runtime engine because they will be able
+ to execute CIL executables generated on Windows, and so no recompilation
+ will be necessary.
+
+<a name="performance"></a>
+** Performance
+
+Q: How fast will Mono be?
+
+A: We can not predict the future, but a conservative estimate is that
+ it would be at least `as fast as other JIT engines'.
+
+ We would like to ship various JIT engines with Mono, just like
+ Microsoft has done with their .NET development platform. We could
+ provide a faster, JIT for fast load times but lower performance,
+ and an and an optimizing JIT that would be slower at generating
+ code but produce more optimal output.
+
+ The CIL has some advantages over the Java byte code: it is really
+ an intermediate representation and there are a number of
+ restrictions on how you can emit CIL code that simplify creating
+ better JIT engines.
+
+ For example, on the CIL, the stack is not really an abstraction
+ available for the code generator to use at will. Rather, it is a
+ way of creating a postfix representation of the parsed tree. At
+ any given call point or return point, the contents of the stack are
+ expected to contain the same object types independently of how the
+ instruction was reached.
+
+<a name="licensing"></a>
+** Licensing
+
+Q: Will I be able to write proprietary applications that run with
+ Mono?
+
+A: Yes. The licensing scheme is planned to allow proprietary
+ developers to write applications with Mono.
+
+Q: What license or licenses are you using for the Mono Project?
+
+A: The C# Compiler is released under the terms of the <a
+ href="http://www.opensource.org/licenses/gpl-license.html">GNU GPL</a>. The runtime
+ libraries are under the <a
+ href="http://www.opensource.org/licenses/lgpl-license.html">GNU
+ Library GPL</a>. And the class libraries are released
+ under the terms of the <a
+ href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a>
+ license.
+
+ The Mono runtime and the Mono C# Compiler are also available under
+ a proprietary license for those who can not use the LGPL and the
+ GPL in their code.
+
+ For licensing details, contact <a
+ href="mailto:mono-licensing@ximian.com">mono-licensing@ximian.com</a>
+
+
+Q: I would like to contribute code to Mono under a particular
+ license. What licenses will you accept?
+
+A: We will have to evaluate the licenses for compatibility first,
+ but as a general rule, we will accept the code under the same
+ terms of the "container" module.
+
+<a name="patents"></a>
+** Patents
+
+Q: Could patents be used to completely disable Mono (either submarine
+ patents filed now, or changes made by Microsoft specifically to
+ create patent problems)?
+
+A: No. First, its basic functional capabilities have pre-existed too
+ long to be held up by patents. The basic components of Mono are
+ technologically equivalent to Sun's Java technology, which has been
+ around for years.
+
+ Mono will also implement multi-language and
+ multi-architecture support, but there are previous technologies
+ such as UCSD p-code and ANDF that also support multiple languages
+ using a common intermediate language. The libraries are similar
+ to other language's libraries, so again, they're too similar to
+ be patentable in large measure.
+
+ However, if Microsoft does patent some technology, then our plan is
+ to either (1) work around it, (2) chop out patented pieces, (3)
+ find prior art that would render the patent useless.
+
+ Not providing a patented capability would weaken the
+ interoperability, but it would still provide the free software /
+ open source software community with good development tools, which
+ is the primary reason for developing Mono.
+
+<a name="etc"></a>
+** Miscellaneous Questions
+
+Q: You say that the CLI allows multiple languages to execute on the
+ same environment. Isn't this the purpose of CORBA?
+
+A: The key difference between CORBA (and COM) and the CLI is that the
+ CLI allows "data-level interoperability" because every
+ language/component uses the same data layout and memory management.
+
+ This means you can operate directly upon the data types that someone
+ else provides, without having to go via their interfaces. It also
+ means you don't have to "marshal" (convert) parameters (data
+ layouts are the same, so you can just pass components directly) and
+ you don't have to worry about memory management, because all
+ languages/components share the same garbage collector and address
+ space. This means much less copying and no need for reference
+ counting.
+
+Q: Will you support COM?
+
+A: The runtime will support XPCOM on Unix systems and COM on Windows.
+ Most of the code for dynamic trampolines exists already.
+
+Q: Will Ximian offer certifications on Mono or related technologies?.
+
+A: It's possible. But there is no plan about this. So the short answer is no.
+
+Q: Are there any Boehm's GC binaries?
+
+A: Yes. You can find RPMs <a href="http://java.thn.htu.se/~toor/">here</a>, though
+ if your distribution provides the correct packages, you should use those.
+ The suggested version of the Boehm GC is 6.1.
+
+Q: How can I report a bug?
+
+A: The best thing is to track down the bug and provide a simple test to
+ reproduce the bug. You can then add the bug to the
+ <a href="http://bugzilla.ximian.com/enter_bug.cgi">bugtracking system</a>.
+
+ Please provide information about what version of mono you're using
+ and any relevant details to be able to reproduce the bug. Note that
+ bugs reported on the mailing-list may be easily forgotten, so it's
+ better to file them in the <a href="http://bugzilla.ximian.com/enter_bug.cgi">bug tracking system</a>.
+
+Q: Does mcs support the same command line options as the MS C#
+ compiler?
+
+A: The Mono C# compiler now supports the same command line
+ arguments as the Microsoft C# compiler does.
+
+Q: How about getting searchable archives on lists.ximian.com?
+
+A: You can perform a search on the mono-related mailing lists
+ <a href="http://www.go-mono.com/mailing-lists.html">here</a>.
+
+Q: When using mono from cvs or from a snapshot, I get an error messaage
+ saying that Mono and the runtime are out of sync. How do I fix that?
+
+A: If you use mono from cvs, you need to be prepared for changes in the
+ runtime internals. This means that you should keep a working setup
+ before blindling updating (a working setup may just be the last released
+ tarball or a recent binary snapshot).
+ Usually, compiling corlib with mcs before recompiling the C runtime does
+ the right thing (but occasionally you may need to do it the other
+ way around).
+
+Q: Why are you going for a GtkHtml implementation?
+
+A: GtkHTML is just a lightweight HTML rendering engine that does not
+ support CSS, so we need it to look decent for those of us that will
+ be using the documentation in our day-to-day work on Linux. The
+ Web-based interfaces lack the agility that you get from a native GUI
+ tool to browse your documentation. Probably later on, we will write
+ scripts and generate a full documentation set that is web-browsable,
+ but we need a command-line and GUI tools that we can use natively on
+ Linux when disconnected from the Web (and that has better
+ interactions than a web page).
+
+Q: Is there a command-line tool that allows me to access .NET interactively?
+
+A: There are several but one that is free software and uses MCS is the one
+ Dennis Lu from Rice University is working on; a REPL C# interpreter.
+
+Q: Is it possible to use Visual C++ with Mono?.
+
+A: Well, It's possible to run VC++ generated apps under Mono though.
+
+<a name="problems"></a>
+** Mono Common Problems
+
+ If you are having problems compiling or running Mono software
+ or if you think that you found a bug, etc. Please visit the
+ <a href="http://geneura.ugr.es/~jaime/deploy/mono-common-problems.html">Mono Common Problems</a> document and try there.
+
diff --git a/doc/firebird b/doc/firebird
new file mode 100755
index 00000000000..8e1f73ef126
--- /dev/null
+++ b/doc/firebird
@@ -0,0 +1,175 @@
+* Firebird and Interbase Data Provider
+
+<ul>
+ <li>Does not exist in Mono, but is a separate project</li>
+
+ <li><a href="http://firebird.sourceforge.net/index.php">Firebird Relational Database</a> is
+ an independent project which uses source code based on the Interbase source code released
+ by Borland under the Interbase Public License</li>
+
+ <li>Both the Firebird Relational Database and the Firebird .NET Data Provider can be
+ downloaded from <a href="http://sourceforge.net/projects/firebird/">here</a></li>
+
+ <li>The Firebird .NET Data provider has been made
+ available by Carlos Guzmán Álvarez (aka "Carlos G.A."), who has also made a
+ number of contributions to the OdbcJdbc code</li>
+
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Currently, it is able to connect to Firebird and Interbase databases
+ and execute commands</li>
+
+ <li>The new data
+ provider/driver is written in C# and provides a high-performance native
+ implementation of the GDS32/API functions. This means that .Net developers
+ will be able to access Firebird databases without the need of Firebird
+ client install</li>
+
+ <li>In support of the new module, a new mailing list
+ <a href="http://lists.sourceforge.net/lists/listinfo/firebird-net-provider">firebird-net-provider</a> has
+ been created. Please use this list for any
+ questions that you may have about the provider</li>
+
+ <li>Stuff that works:
+ <ul>
+ <li>Currently implemented classes:
+ <ul>
+ <li>Connection and Connection Pooling</li>
+ <li>Command</li>
+ <li>Transaction</li>
+ <li>CommandBuilder</li>
+ <li>DataAdapter</li>
+ <li>DataReader</li>
+ <li>Error</li>
+ <li>ErrorCollection</li>
+ <li>Exception</li>
+ <li>Parameter</li>
+ <li>ParameterCollection</li>
+ <li>Transaction</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+</ul>
+
+** Action Plan
+
+<ul>
+ <li>Bug fixing</li>
+ <li>Improving API reference documentation</li>
+ <li>Full testing with Firebird 1.5</li>
+ <li>Test with Mono ( http://www.go-mono.com )
+ <ul>
+ <li>Status : Started</li>
+ </ul>
+ </li>
+
+ <li>Support for array datatype
+ <ul>
+ <li>Status : Started</li>
+ <li>Comments: See Interbase API reference documentation</li>
+ <li>Add new file FbArray.cs for array fields management</li>
+ </ul>
+ </li>
+
+ <li>Support for Stored Procs calls that have returns values
+ <ul>
+ <li>Status : Pending.</li>
+ <li>Comments: Modify the isc_dsql_prepare method of GDS implementation for
+ allow to return the output parameters.</li>
+ </ul>
+ </li>
+
+ <li>Implementation of FbClientPermission and FbClientPermissionAttribute
+ <ul>
+ <li>Status : Pending</li>
+ <li>Comments: See if these are really needed for Firebird</li>
+ </ul>
+ </li>
+
+ <li>Improve Logger implementation
+ <ul>
+ <li>Status: Pending</li>
+ </ul>
+ </li>
+
+</ul>
+
+** Testing
+
+<ul>
+ <li>Need a working mono and mcs</li>
+ <li>Need access to a Firebird Relational Database or you can download
+ it from <a href="http://firebird.sourceforge.net">here</a></li>
+ <li>Get the Firebird .NET data provider from here as
+ <a href="http://lists.sourceforge.net/lists/listinfo/firebird-net-provider">firebird-net-provider</a>. Make
+ sure the Firebird .NET data provider binary assembly FirebirdSql.Data.Firebird.dll is
+ installed in the same place as the mono class libraries.</li>
+ <li>C# Example for Mono's System.Data.OleDb:
+<pre>
+ using System;
+ using System.Data;
+ using FirebirdSql.Data.Firebird;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Database=C:\\PROGRAM FILES\\FIREBIRD\\EXAMPLES\\EMPLOYEE.GDB;" +
+ "User=SYSDBA;" +
+ "Password=masterkey;" +
+ "Dialect=3;" +
+ "Server=localhost";
+ IDbConnection dbcon = new FbConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql = "SELECT * FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ object dataValue = myReader.GetValue(0);
+ string sValue = dataValue.ToString();
+ Console.WriteLine("Value: " + sValue);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r FirebirdSql.Data.Firebird.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r FirebirdSql.Data.Firebird.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+
+</ul>
+
diff --git a/doc/gcc-frontend b/doc/gcc-frontend
new file mode 100644
index 00000000000..2b15346db69
--- /dev/null
+++ b/doc/gcc-frontend
@@ -0,0 +1,9 @@
+* The GCC front-end
+
+ The GCC front-end will accept input in a binary file with
+ codes in the Common Intermediate Language (CIL), and generate
+ native code.
+
+ This will allow pre-compilation and full optimization to take
+ place before a program is executed.
+
diff --git a/doc/gtk-sharp b/doc/gtk-sharp
new file mode 100644
index 00000000000..1f286e59c52
--- /dev/null
+++ b/doc/gtk-sharp
@@ -0,0 +1,147 @@
+* Gtk#
+
+ <a href="http://gtk-sharp.sourceforge.net">Gtk#</a> (Gtk
+ sharp) is a set of C# language bindings for the
+ <a href="http://www.gtk.org">Gtk+</a> toolkit and other
+ libraries that are part of the
+ <a href="http://www.gnome.org">GNOME</a> platform .
+
+** API of Gtk#
+
+ The API is browsable
+ <a href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">here</a>
+
+** Where to learn more.
+
+ Visit the official site for the <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.
+ The <a href="http://www.go-mono.org/faq">Mono FAQ</a> has some useful
+ information too.
+
+** GTK# On Linux
+
+<p>Where to get distributions of GTK# for Linux: TODO
+
+<p>Buidling on Linux:
+
+<ul>
+ <li>Get GTK# source from <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.</li>
+ <li>run ./autogen.sh --prefix=my_mono_installation_prefix</li>
+ <li>make</li>
+ <li>make install</li>
+</ul>
+
+** GTK# On Windows
+
+<p>There is a Windows Installer for GTK# <a href="http://www.sport-huettn.de/mono/gtk-sharp-0.6-stable-2.exe">here</a>.
+
+<p>If you want to build GTK# yourself on Windows:
+
+<p>To build gtk# under windows, you will need the following:
+
+<ul>
+ <li>cygwin from <a href="http://www.cygwin.com/">here</a> When installing Cygwin via setup.exe,
+ by default binutils and other tools do not get installed; you have to make
+ sure to select these items. Just make
+ sure Base and Development are set to Install.</li>
+ <li>Mono 0.17 or later from <a href="http://www.go-mono.com/download.html">here</a>
+ You can use Windows Setup Wizard (NT/2000/XP).</li>
+ <li>GTK+ 2.0 (and dependencies). You can obtain gtk+ 2.0 by either of the
+following:
+ <ul>
+ <li>You can get a Windows Installer at:
+ <a href="http://www.dropline.net/jade/download.html">here</a> </li>
+ <li>or get the separate binary and dev/lib packages at
+ at <a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a> </li>
+ <li>or binary package from Dev-C++ site <a href="http://www.bloodshed.net/dev/packages/gtk.html">here</a> </li>
+ <li>or get Gtk4Win <a href="http://wingtk.sourceforge.net/index.html">here</a> </li>
+ <li>or the source at <a href="http://www.gtk.org/">here</a> </li>
+ </ul>
+ </li>
+ <li>binary distriubtion of a current web browser
+ like Internet Explorer 4.0, Mozilla 1.0, or Netscape 7.0 which
+ includes things like msvcrt.dll.</li>
+ <li>Microsoft .NET Framework at
+ <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a> </li>
+
+<p>If you are running Windows 95/98/ME, then you will need Unicode support.
+Look in
+mono-list archives for information about how to get
+Mono to work on Windows 9x.
+<a href="http://lists.ximian.com/archives/public/mono-list/2002-December/004158.html">here</a>
+
+<p>Environment Variables to set:
+<ul>
+<li>PATH - set to your mono installation bin and lib path.
+ For example, my mono installation prefix is:
+<pre>
+F:/cygwin/home/DanielMorgan/mono/install
+</pre>
+ <p>So, I would set my PATH in the Windows Control Panel as:
+<pre>
+F:/cygwin/home/DanielMorgan/mono/install/bin;F:/cygwin/home/DanielMorgan/mono/install/lib</li>
+</pre>
+</li>
+<li>LD_LIBRARY_PATH - set to your mono installation lib path</li>
+<li>PKG_CONFIG_PATH - set to your mono installation lib/pkgconfig path, such
+ as,
+<pre>
+ F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig</li>
+</pre>
+
+ <p>If you got the gtk-sharp source, cd to the gtk-sharp directory, type:
+<pre>
+ ./autogen.sh --prefix=~/mono/install
+</pre>
+
+ <p>Set your --prefix= to whatever your mono installation prefix is located.
+ This will take awhile to go through the ./autogen.sh and ./configure...
+
+ <p>After that it finishes succesfully, you run make with the makefile.win32
+ like:
+<pre>
+ make -f makefile.win32
+</pre>
+
+ <p>After that finishes succesfully, you can copy to your mono installation lib
+ path like:
+<pre>
+ cp */*.dll ~/mono/install/lib
+</pre>
+</ul>
+
+<p>The pkg-config files for
+gtk+ 2.0 and dependencies will need to be set correctly if they haven't
+already been.
+
+<p>Look in your mono installation/lib/pkgconfig, such as,
+<pre>
+F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig
+</pre>
+
+<p>You will find files like: gtk+-2.0.pc
+
+<p>Edit the line that says
+
+<pre>
+ prefix=something
+</pre>
+
+<p>And set it to your mono installation prefix, such as,
+
+<pre>
+ prefix=F:/cygwin/home/DanielMorgan/mono/install
+</pre>
+
+<p>Do this for all the .pc files in that directory. If there are not any, then
+you will need to create them. Or get them from somewhere like the dev
+packages at
+<a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a>
+
+
+** GTK# On Solaris
+
+ TODO
+
+** GTK# On AIX
+
+ TODO
diff --git a/doc/hackers b/doc/hackers
new file mode 100644
index 00000000000..5220e5a13b7
--- /dev/null
+++ b/doc/hackers
@@ -0,0 +1,31 @@
+* Mono Hackers Hall Of Fame
+
+Without the help, the skills and the time of many passionate developers outside of
+the Ximian Mono team, Mono would not be where it is today.
+
+Many of them do it for fun, some do it because they really want a nice CLR they
+can hack on, some do it because they need a working solution to some development
+issues and mono is the ideal tool for the job.
+
+Some of them may start contributing because they want a mention in the
+<b>Mono Hackers Hall Of Fame</b>! Whatever the cause, join us in a big<br>
+<h1 align="center">Thank you!</h1>
+
+* Mono Hackers
+
+** Sergey Chaban
+
+Sergey has been a long time contributor to the project, from the early
+work on the class libraries that were critical to Mono's origin: every
+time you use a Hashtable in Mono, it runs Sergey's code, to the
+low-level optimizations on the JIT engine and to his work on ILASM and
+the PEToolkit. And countless other things.
+
+** Nick Drochak
+
+The first, deserved, entry in the <b>Mono Hackers Hall Of Fame</b> is for
+Nick Drochak, who joined us in the first days of Mono and built the testing
+infrastructure for the C# assemblies, fixed tons of bugs and even adventured
+himself in the lands of the C runtime. His work is invaluable for keeping
+Mono on the right track through the daily changes in the codebase.
+
diff --git a/doc/ibmdb2 b/doc/ibmdb2
new file mode 100755
index 00000000000..3c149563380
--- /dev/null
+++ b/doc/ibmdb2
@@ -0,0 +1,132 @@
+* IBM DB2 Data Provider
+<ul>
+ <li>Exists in namespace DB2ClientCS and assembly Mono.Data.DB2Client</li>
+
+ <li>The source code exists at mcs/class/Mono.Data.DB2Client</li>
+
+ <li>Requires the Call Level Interface to IBM DB2 shared library. This
+ is db2cli.dll on Windows. The IBM DB2 CLI API is very similar to the ODBC API. If
+ you take a look at Mono's System.Data.Odbc ODBC provider, you will see the
+ DllImport's have similiar function names.</li>
+
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a> can be downloaded from IBM.</li>
+
+ <li>IBM DB2 Provider created by Christopher Bockner.</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Compiles on Windows and Linux. Works on Windows. Still needs to be tested on Linux.</li>
+
+ <li>Able to connect to IBM DB2</li>
+
+ <li>Able to execute DML, such as, CREATE TABLE via ExecuteNonQuery()</li>
+
+</ul>
+
+** Action Plan
+
+<ul>
+ <li>Still needs work to get it to retrieve data via ExecuteReader() and
+ use the data reader to read data.</li>
+
+</ul>
+
+** Testing
+
+In order to test.
+<ul>
+ <li>Have working mono and mcs setup</li>
+
+ <li>Have access to an IBM DB2 database. If you do not have access, download the
+ <a href="http://www-3.ibm.com/software/data/db2/">IBM DB2</a> software. There
+ are versions for Windows, Linux, AIX, and Sun Solaris.</li>
+
+ <li>Make sure the assembly Mono.Data.DB2Client.dll was built and installed
+ where the other class libraries are installed.</li>
+
+ <li>If you do not have the source to mcs, get the source from
+ <a href="http://www.go-mono.com/download">here</a></li>
+
+ <li>In mcs/class/Mono.Data.DB2Client/Test/DBConnTest, you will find
+ a DBConnTest.cs.</li>
+
+ <li>To build DBConnTest:
+ <ul>
+ <li>On Unix:</li>
+<pre>
+mcs DBConnTest.cs -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>On Windows via Cygwin:
+<pre>
+mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe DBConnTest.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>To run it on mono:
+<pre>
+mono DBConnTest.exe database userid password
+</pre>
+ </li>
+ </ul>
+ </li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.DB2Client;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "DSN=sample;UID=db2admin;PWD=mypass";
+ IDbConnection dbcon = new DB2ClientConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "CREATE TABLE mono_db2_test1 ( " +
+ " testid varchar(2), " +
+ " testdesc varchar(16) " +
+ ")";
+ dbcmd.ConnectionString = sql;
+ dbcmd.ExecuteNonQuery();
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
diff --git a/doc/ideas b/doc/ideas
new file mode 100644
index 00000000000..0a97cdcc4d2
--- /dev/null
+++ b/doc/ideas
@@ -0,0 +1,112 @@
+* Ideas
+
+ There are many pending classes that need to be implemented. Those have
+ the highest impact in the Mono project: the sooner they are done,
+ the sooner we can start using this platform to create new and
+ exciting applications.
+
+ That being said, if you are not very excited about working on class
+ libraries, here is a list of other related projects or tools that might
+ be useful to the Mono project.
+
+ Here are a few ideas of tools, classes and projects that you
+ could start. More are forthcoming.
+
+<a name="runtime">
+** Runtime
+
+ We need a verifier that can be run on an executable (assembly)
+ and tells whether the metadata for the executable is correct
+ or not. It should report any anomalies.
+
+ For a list of anomalies in assemblies, check the various assertions
+ that are described on the ECMA documentation.
+
+ This will help test our generated executables and can be also
+ used as an external verifier.
+
+<a name="classes">
+** Classes
+
+ <ul>
+TODO=jxta,The JXTA Peer to Peer foundation
+ * Implement a JXTA protocol implementation:
+ <a href="http://www.jxta.org">http://www.jxta.org</a>
+
+TODO=camel,Mail API
+ * Implement a Mail API, similar to Camel or JavaMail (Camel has
+ significant architecture features that are required on a real
+ mailer).
+
+ You can check the current C
+ <a href="http://cvs.gnome.org/bonsai/rview.cgi?dir=evolution%2Fcamel">
+ Camel implementation</a>.
+
+ Such an implementation could be used both with
+ Microsoft .NET and Mono.
+
+TODO=multimedia
+ * Interfacing to Multimedia systems. You might want
+ to look into the Quicktime API. I know <a
+ href="mailto:vladimir@ximian.com">Vladimir</a> has
+ researched the problem before
+
+ </ul>
+
+<a name="projects">
+** Projects
+
+ <ul>
+TODO=xmlStorage,
+ * Implement an xmlStorageSystem for the CLI:
+ <a href="http://www.soapware.org/xmlStorageSystem">
+ http://www.soapware.org/xmlStorageSystem</a>
+
+TODO=guavac,Java compiler for .NET
+ * You could take one of the existing Java compilers
+ (Guavac comes to mind as it is so nice) and modify
+ it to generate .NET code rather than JVM byte
+ codes.
+
+ This should be a pretty straightforward task.
+ Guavac has the advantage of being written in C++ and
+ it could be compiled with the Microsoft Managed C++
+ compiler and produce a .NET executable with it.
+
+TODO=CORBA,CORBA implementation
+ * Build a CORBA interoperability engine for the CLR.
+ You do not need to do all of the work, just talking
+ the protocol will get us a long way (<a
+ href="http://www.omg.org">The OMG site</a> has the
+ CORBA specs).
+
+ Get in touch with David Taylor (dtaylo11 at bigpond
+ dot net dot au) as he has been working on this
+ project.
+
+TODO=Bonobo,Bonobo for Mono
+ * Once CORBA is done, implement the Bonobo interfaces
+ to allow people to use Bonobo components in Mono and
+ Mono components with Bonobo. The best of both worlds!
+
+TODO=moniker,Object Naming System with Monikers
+ * A naming space for Mono. An object naming space is
+ a very powerful tool. Bonobo implements a moniker
+ system that is more powerful than the original
+ moniker concept that was pioneered by COM/OLE in the
+ Microsoft world.
+
+ Our implementation builds on a concept, and we have
+ made it simpler, more powerful, more extensible and
+ a much better mechanism than the equivalent monikers
+ on Windows.
+
+ Implementing Mono monikers would benefit both
+ Windows users using .NET and Mono users on Unix and
+ Windows.
+
+ Here is <a
+ href="http://primates.ximian.com/~miguel/monikers.html">an
+ overview of the moniker system</a> in Bonobo.
+
+ </ul>
diff --git a/doc/index b/doc/index
new file mode 100644
index 00000000000..6732073f671
--- /dev/null
+++ b/doc/index
@@ -0,0 +1,2152 @@
+<link rel="alternate" type="application/rss+xml" title="RSS" href="index.rss"/>
+
+<table>
+ <tr>
+ <td>
+ <a href="http://www.ximian.com">Ximian</a> announced the
+ launch of the Mono project, an effort to create an open source
+ implementation of the .NET Development Framework.
+
+ Mono includes: <a href="c-sharp.html">a compiler</a> for the
+ C# language, a <a href="runtime.html">runtime</a> for the
+ Common Language Infrastructure (also referred as the CLR) and a
+ set of <a href="class-library.html">class libraries</a>. The
+ runtime can be <a href="embedded-api.html">embedded</a> into your
+ application.
+
+ Mono has implementations of both <a href="ado-net">ADO.NET</a>
+ and <a href="asp-net">ASP.NET</a> as part of its distribution.
+
+ You can read our <a href="rationale.html">rationale</a> for
+ this project. If you have questions about the project, please
+ read our list of <a href="faq.html">Frequently Asked
+ Questions</a> or <a href="mailto:mono-list@ximian.com">contact us.</a>
+
+ You might also want to <a href="download.html">Download the
+ source</a> for our work so far. Grab a <a
+ href="snapshots">snapshot</a> of our current work, or <a
+ href="http://cvs.hispalinux.es/cgi-bin/cvsweb/?hidenonreadable=1&f=u&logsort=date&sortby=file&hideattic=1&cvsroot=Mono">browse
+ the sources</a>
+
+ You might want to <a
+ href="mailing-lists.html">subscribe</a> to our mono-list
+ and mono-announce-list
+
+ You can contact the team at: <a
+ href="mailto:mono-list@ximian.com">mono-list@ximian.com</a>
+ </td>
+ <td>
+ <table border=1>
+ <tr>
+ <td colspan="3">
+ <b><center>Mono Status</center></b>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a href="c-sharp.html">C# Compiler</a></b>
+ </td>
+ <td>
+ <b>Self hosting on Linux</b><br>
+ Self hosting on .NET.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b>JIT</b>
+ </td>
+ <td>
+ Linux/x86 working.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b>Interpreter</b>
+ </td>
+ <td>
+ Working:<br>
+ Linux/x86, Linux/PPC, S390<br>
+ In progress:<br>
+ StrongARM, SPARC.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a href="class-status.html">Classes</a></b>
+ </td>
+ <td>
+ All assemblies compile.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ RSS feed:
+ </td>
+ <td>
+ <a href="index.rss"><img src="images/xml.gif"></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+@item Jan, 17th: DB2 provider, MacOS X
+
+ Christopher Bockner has contributed a DB2 System.Data client.
+
+ MacOS X support on the runtime has been integrated into the
+ distribution, and MCS works with it.
+
+ Zoltan has managed to get <a
+ href="http://radio.weblogs.com/0109845/">IKVM</a> (a Java VM
+ for .NET) to run with Mono. The HelloWorld.class runs with
+ the Mono runtime.
+
+@item Jan, 13th, 2003: Mono 0.18 released
+
+ Mono 0.18 has been released. Check out the <a
+ href="archive/mono-0.18">release notes</a> for an overview of
+ the changes. You can get it <a href="download.html">here</a>.
+
+@item Jan 10th, 2003: Mono Weekly News.
+
+ A new issue of the <a
+ href="http://lists.ximian.com/archives/public/mono-list/2003-January/004903.html">Mono
+ Weekly News</a> has been published.
+
+ Check out the <a href="crypto.html">Crypto status</a> page
+ that Sebastien has put together.
+
+@item Jan 3rd, 2003: Glade#, Code Coverage, Apache, MBas, Debugger.
+
+ Rachel has made Glade# use attributes so binding C# widgets to
+ the designed widgets is now easier than ever. Alp has
+ improved this to use implicit names as well.
+
+ Martin's Mono debugger now has support for multi-thread
+ debugging. Special feature: breakpoints can be defined in a
+ per-thread basis now.
+
+ Daniel López has checked in his Apache module to integrate
+ Mono and Mono's ASP.NET support as an Apache module. Gonzalo
+ has folded his new Mono hosting classes into this module (they
+ are now shared between XSP and mod_mono). You can get the
+ mod_apache from CVS (module name: mod_mono).
+
+ Mono Basic improvements: Marco has added support for more
+ statements on the grammar.
+
+ Zoltan has <a href="http://www.nexus.hu/vargaz2/">posted</a>
+ his Code Coverage analysis tool for Mono.
+
+@item Dec 17th, 2002: Mono: Commercial uses.
+
+ <a href="http://www.tipic.com">Tipic</a> today <a
+ href="http://www.ximian.com/about_us/press_center/press_releases/index.html?pr=tipic_mono">announced</a>
+ their work on porting their Instant Messaging Server platform
+ to run on Mono.
+
+ <a href="http://www.winfessor.com">Winfessor</a> also <a
+ href="http://www.winfessor.com/press.asp">announced</a> the
+ availability of their Jabber SDK to run on Mono.
+
+ Also two weeks ago we mentioned <a
+ href="http://www.openlinksw.com">OpenLink Software's</a> <a
+ href="http://www.ximian.com/about_us/press_center/press_releases/index.html?pr=openlink_mono">announcement</a>
+ of their product, also using Mono.
+
+@item Dec 10th, 2002: Gtk# 0.6 released; Mono 0.17 packages for Windows and Debian.
+
+ Mike Kestner <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-December/003961.html">announced
+ Gtk# 0.6</a>. This new release includes many new features and
+ bug fixes, and is the perfect companion to the <a
+ href="archive/mono-0.17">Mono 0.17</a> release.
+
+ Johannes has contributed a Windows-ready package of Mono 0.17,
+ and its available from our <a
+ href="download.html">download</a> page.
+
+ Alp Toker has <a href="http://www.atoker.com/mono/">Debian packages</a>
+
+@item Dec 9th, 2002: Mono 0.17 has been released
+
+ Mono 0.17 has been released. Check out the <a
+ href="archive/mono-0.17">release notes</a> for a more detailed
+ list. You can get it <a href="download.html">here</a>.
+
+ Many new features as well as plenty of bug fixes. Many new
+ System.Data providers and a more mature System.Web (ASP.NET)
+ which can now be hosted in any web server. A simple <a
+ href="archive/xsp-0.2.tar.gz">test web server</a> to host
+ asp.net has been released as well.
+
+ This version also integrates Neale's s390 port.
+
+ This release also includes a new exception handling system
+ that uses the gcc exception information that vastly improves
+ our internalcall speed (15% faster mcs compilation times).
+
+@item Dec 8th, 2002: VB.NET, Oracle Provider.
+
+ Marco has got the Mono Basic compiler up to speed (support for
+ classes, modules, expressions, object creation, method
+ invocation, local variables, and some statements). The
+ compiler is based on the work from Rafael Teixeira on MCS.
+
+ Screenshots: <a
+ href="http://modgb.sourceforge.net/monobasic_snap.png">in
+ Windows doing Windows.Forms</a> and in Linux doing <a
+ href="images/gtk-vb.png">VB with Gtk#</a> (courtesy of Alp).
+
+ Daniel Morgan has checked in his Oracle provider to the CVS
+ repository as well.
+
+@item Nov 27th, 2002: Press release, tutorials, Windows Forms, ADO.NET, Magazine.
+
+ <a
+ href="http://www.business2.com/articles/mag/0,1640,45454,FF.html">The
+ Penguin Takes Flight</a>: an article written by Erick
+ Schonfeld appears on the December issue of <a
+ href="http://www.business2.com/">Business 2.0</a> magazine.
+
+ <a href="http://www.openlinksw.com">OpenLink</a> and <a
+ href="http://www.ximian.com">Ximian</a> made <a
+ href="http://www.ximian.com/about_us/press_center/press_releases/index.html?pr=openlink_mono">joint
+ announcement</a> on the plans of OpenLink to ship their <a
+ href="http://www.openlinksw.com/virtuoso/index.htm">Virtuoso</a>
+ server on Unix using Mono.
+
+ Martin Willemoes's <a href="gnometutorial">GNOME.NET
+ tutorial</a> is now available from the main Mono site. This
+ tutorial is a collaborative effort to teach developers how to
+ use Mono to create Mono applications using <a href="http://gtk-sharp.sf.net">Gtk#</a>
+
+ Dennis Hayes has posted and <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-December/003800.html">update</a>
+ on the work to get Windows.Forms working on Mono. There is a
+ new test application that people can use to test their
+ controls. If you are interested in working on Windows.Forms,
+ you can participate in the <a
+ href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mono-winforms
+ mailing list</a>
+
+ Brian Ritchie has been working on an ADO.NET <a
+ href="http://brianritchie.webhop.net/ideas/adocodegen.aspx">data
+ layer</a> and an <a
+ href="http://brianritchie.webhop.net/ideas/appserver.aspx">application
+ server</a> for Mono.
+
+ Dan Morgan has checked in his Oracle provider, and Tim Coleman
+ continues to work on the TDS implementation of the data classes.
+
+ The rest of the team has been working on bug fixing in the
+ runtime, the compiler, and the class libraries. Also,
+ compilation speed has increased recently by performing a
+ number of simple optimizations in the compiler.
+
+@item Nov 19th, 2002: Crypto update; Books; Gtk# Datagrid; .NET ONE Slides
+
+ Sebastien has got DSA and RSA signatures <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-November/003497.html">working</a>
+ as well as RSA <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-November/003502.html">encryption</a>.
+ We now distribute Chew Keong TAN's BigInteger classes.
+
+ Brian has contributed a System.Data multiplexor in Mono, it
+ can be found in the Mono.Data assembly. The details of this
+ new technology are <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-November/003400.html">here</a>.
+ It works in Mono and the .NET Framework.
+
+ Larry O'Brien has announced the candidate book for <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-November/003500.html">
+ Thinking in C#</a>. The book is Mono-friendly.
+
+ Another book that covers mono (available in German only) is <a
+ href="http://www.databecker.de/frames.php?PHPSESSD=4948515556575049525459495248485949485348&PHPSESSID=6cc68dbcfbcbacd7b82a984b0700d5d6&t=2">
+ here</a>.
+
+ Dan Morgan has implemented a DataGrid widget for Gtk#, you can
+ see Windows screenshots for it <a
+ href="images/GtkSharpDataGridScreenshot.png">here</a> and <a
+ href="images/SqlSharpGtkScreenshot4.png">here</a>.
+
+ Slides from the Mono developers for the .NET ONE conference are available now:
+ <ul>
+ <li><a
+ href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/DotNetOneKeynote.sxi">
+ Mono Keynote presentation</a>
+
+ <li><a href="http://primates.ximian.com/~lupus/slides/embed/">Hosting the Mono Runtime</a><br>
+ The simple embedding of Mono in Perl is available <a
+ href="http://primates.ximian.com/~lupus/slides/embed/Mono-0.01.tar.gz">here</a>
+
+ <li><a href="http://primates.ximian.com/~lupus/slides/jit/">The Mono JIT compiler</a>
+
+ <li><a href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/Mono_C_Sharp_Overview_1007.sxi">
+ Mono C# Compiler Overview</a>
+ </ul>
+
+ A couple of other presentations from Miguel's trip to Europe
+ are available <a
+ href="http://primates.ximian.com/~miguel/slides-europe-nov-2002/">here</a>
+ in Open Office file format.
+
+@item Nov 8th, 2002: Mono s390, Database work, new JIT updates.
+
+ Neale Ferguson has contributed <a href="download.html">RPM
+ packages</a> of Mono for the Linux/s390.
+
+ Tim Coleman posted an <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-November/003329.html">update</a>
+ on the improvements in the System.Data
+
+ The new JIT engine can run 72 out of our 154 tests for the
+ virtual machine, and it also got exception support this week.
+
+@item Nov 1st, 2002: TDS, Crypto, Gtk#, Winforms, bug fixes.
+
+ Tim's SqlClient is <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-November/003161.html">now
+ capable</a> of communicating with the Microsoft SQL server
+ using the TDS protocol. A screenshot showing a sample client
+ running with <a href="http://gtk-sharp.sf.net">Gtk#</a> on
+ Windows is shown <a
+ href="images/SqlSharpGtkSceenshot3.png">here</a>
+
+ Sebastien has made all symetric ciphers functional on all
+ supported modes; All the classes in Security.Cryptography are
+ present and the X590 certificates are now in too. Jackson has
+ been working on the Security classes.
+
+ Many bug fixes all over the place: class libraries (Dick,
+ Piers, Ville, Zoltan, Gonzalo, Dan, Atsushi, Nick, Phillip),
+ compiler, runtime engine. A big thank goes for everyone who
+ has been providing bug reports for us to track down.
+
+ Gaurav has been working on multiple WebControls. Gonzalo migrated
+ the ASP.NET engine to use POST for interaction.
+
+ In the Gtk# land saw the integration of gda, gnome-db and GStreamer
+ bindings.
+
+ Windows.Forms classes now build on Linux and Windows, check
+ out the status pages for areas of collaboration.
+
+@item Oct 24th, 2002: S390 support, XSP/ASP.NET, Win32 contributors, TDS.
+
+ Today Neal Ferguson's support for the IBM S390 was checked
+ into CVS.
+
+ The XSP processor has been fully integrated into the
+ System.Web assembly, and Gonzalo has finished the hosting
+ interfaces in Mono. This means that it is possible to embed
+ ASP.NET with the same APIs used in Windows, and is possible to
+ easily embed it with Apache for example. The XSP module has
+ now become a shell for testing the System.Web classes.
+
+ We are looking for contributors that know Win32 to contribute
+ to the Windows.Forms implementation. If you want to help
+ write some controls using the Win32 API, get in touch with our new <a
+ href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mono-winforms-list@ximian.com
+ list</a> mailing list.
+
+ Tim's TDS System.Data set of classes can now talk to SQL
+ servers using the TDS protocol (version 4.2) with
+ connection pooling. Currently it can connect, run
+ transactions, update/insert/delete, and read some types. A
+ data adapter is also coming soon.
+
+@item Oct 21th, 2002: Crypto, Winforms list, Database, GConf, Debugger.
+
+ Sebastien Poliot has made a lot of progress, he reports that
+ DES and TripleDES have been fixed; Rijndael and CFB modes
+ still have problems in some configurations and some areas that
+ are not supported by the .NET framework.
+
+ Last week we created a new <a
+ href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mailing
+ list</a> to discuss the Mono Winforms implementation.
+
+ Tim has started a full C# implementation of the TDS protocol
+ and the providers, and Brian continues his work on his ODBC
+ binding.
+
+ Rachel Hestilow has also checked in a binding for GConf. This
+ binding <a
+ href="http://toxic.magnesium.net/~hestilow/gconfsharp/intro.html">is
+ unique</a> in that it uses some features in the CLI to support
+ complex data types, and allows the user to keep only one
+ representation of the types instead of two (the master types
+ is defined in CLI-land). Also Property Editors (<a
+ href="http://primates.ximian.com/~miguel/shots/gconf-shot.png">shot</a>)
+ simplify the creation of user interfaces that bind their
+ configuration to backend keys, following the <a
+ href="http://developer.gnome.org/projects/gup/hig/1.0/">GNOME
+ Human Interface Guidelines.</a>
+
+ Martin is now on vacation, but before leaving he produced a
+ number of documents detailing the state of the debugger. The
+ major missing feature is full support for debugging unmanaged
+ applications (it requires dwarf-2 handlers for types). We
+ will do some polishing of the user interface (<a
+ href="http://primates.ximian.com/~miguel/shots/debugger-4.png">new
+ shot</a>) to expose the existing and rich functionality to the
+ users and try to release a preview of the debugger at the same
+ time as Mono 0.17.
+
+@item Oct 14th, 2002: Crypto, Database work, Debugger, Documentation.
+
+ Brian, Daniel and Rodrigo have been busy working on the ODBC
+ provider for Mono. Daniel posted some <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-October/002755.html">updates</a>.
+ Brian posted <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-October/002758.html">details
+ about the ODBC.NET</a> provider.
+
+ Also Sebastien Pouliot has been improving the various
+ cryptographic classes in Mono, something that we had not done
+ in quite some time. We are looking for a way to handle
+ big-nums. We need either a managed or unmanaged set of
+ classes for handling large numbers, and some volunteers to
+ expose this functionality to C# (Either as an internal
+ assembly, or as a set of P/Invoke, Internal call wrappers).
+
+ Martin has got our debugger to support adding breakpoints at
+ file/line combos. This was more complex than generic
+ breakpoints in routines, because these breakpoints are set on
+ routines that probably have not been JITed just yet. Martin's
+ focus now is on stabilizing our debugger and aim for a public
+ release of it.
+
+ We have also imported the ECMA documentation into a separate
+ module, and with the help from Scott Bronson we will have the
+ necessary XSLT tools to finish our native documentation
+ browser for Mono. This together with the work from Adam will
+ be the foundation for the <a href="classlib-doc.html">Mono
+ Documentation Tools</a>.
+
+@item Oct 9th, 2002: Various Mono updates.
+
+ Brian Ritchie, Daniel Morgan, Rodrigo Moya and Ville Palo have
+ been working on various database providers. The MySQL has
+ seen a lot of work, and a new ODBC provider is now on CVS and
+ more extensive regression tests have been checked in.
+
+ Dick Porter is our background hero and keeps fixing the
+ low-level bugs in the portability layer. Now the Mono handle
+ daemon should be a lot more robust and will no longer leave IPC
+ regions. Gonzalo Paniagua has initiated the migration of XSP
+ into the System.Web class libraries now that we have a
+ complete HttpRuntime implementation. This means that you are
+ able to embed the ASP.NET processor into any web server you
+ want. This also includes support for the system-wide
+ configuration file `machine.config'.
+
+ Martin Baulig has been busy with the Mono Debugger, you can see how
+ it looks <a
+ href="http://primates.ximian.com/~miguel/debugger-1.png">here</a>
+ and <a
+ href="http://primates.ximian.com/~miguel/debugger-2.png">here</a>.
+ Now local variables and breakpoints are supported, and we are
+ working on the UI elements to simplify their use (as seen on
+ the screenshot).
+
+ <a href="http://gtk-sharp.sf.net">Gtk#</a> has seen a lot of
+ activity specially as we start to build larger applications.
+ Vladimir Vukicevic, Kristian Rietveld, Rachel Hestilow, Mike
+ Kestner and Miguel de Icaza have been busy improving it.
+ mPhoto which is a Photo management application for Mono and
+ Gtk# is seen <a
+ href="http://primates.ximian.com/~miguel/shots/mphoto-2.jpg">here</a>.
+
+ Chris Toshok the man behind LDAP in Evolution continues to
+ work on the Mono.LDAP# implementation.
+
+ Dietmar Maurer and Paolo Molaro are still busy working on our
+ new optimized JIT/ATC engine and are making great progress.
+ The code base has been designed to ease the implementation of
+ more advanced compiler optimizations, and optimizations can be
+ chosen individually so they can be tuned for a particular
+ processor, or use profile-based information to improve the
+ performance.
+
+@item Oct 1st, 2002: Mono 0.16 released; Debugger updates.
+
+ Mono 0.16 has been released. Source and RPMs are <a
+ href="download.html">available</a>. The release notes are <a
+ href="archive/mono-0.16">here</a>.
+
+ Martin's debugger can debug both managed and unmanaged code.
+ Recently Martin added support for locals, parameters, and
+ breakpoints on top of the existing infrastructure (his
+ debugger supported instruction-level and source-code level
+ single-stepping).
+
+@item Sep 19th, 2002: Mono Survey.
+
+ Help us plan for the future of Mono by filing out the <a
+ href="http://primates.ximian.com/~miguel/monosurvey">First Mono
+ Survey</a>
+
+@item Sep 17th, 2002: Mono Hackers Hall of Fame: Sergey Chaban
+
+ The <a href="hackers.html">Mono Hackers Hall Of Fame</a>
+ continues to show our appreciation to the excellent
+ contributors that made <b>mono::</b> a successful free
+ software project.
+
+ This time the Hall of Fame welcomes Sergey Chaban. Sergey has
+ been a long time contributor to the project, from the early
+ work on the class libraries that were critical to Mono's
+ origin: every time you use a Hashtable in Mono, it runs
+ Sergey's code, to the low-level optimizations on the JIT
+ engine and to his work on ILASM and the PEToolkit.
+
+
+@item Sep 16th, 2002: Documentation Tools, ILASM, Debugger, Mono LDAP, Winforms
+
+ Adam Treat has started moving the documentation universe again. We
+ have a new strategy to document our APIs (given that we have
+ chosen <a href="classlib-doc.html">not to document the code
+ inline</a>). This includes the use of a master reference file
+ that will hold the entry points to document. All master files
+ for our assemblies have been checked into CVS now.
+
+ Sergey Chaban's Mono.PEToolkit and ILASM tools have been
+ checked into CVS. Although ILASM is old and will soon be
+ updated, we wanted to get the build issues sorted out.
+
+ Martin Baulig's Mono Debugger is still on its early stages,
+ but you can run and run step by step your C# code and C code
+ (including the Mono runtime). Dwarf-2 is required to compile
+ your code. The regular step, step-into, and assembly-level
+ step and step-into are supported. And comes with a Gtk#
+ UI. The debugger is written mostly in C# with some C glue
+ code. Most of the work is on the engine, we will be working
+ on making a good UI in the future.
+
+ Chris Toshok of the Hungry Programmer's fame has checked in
+ Mono.Directory.LDAP, a C# wrapper for the LDAP libraries.
+ This is the substrate for implementing the
+ System.DirectoryServices assembly.
+
+ Andrew has also continued with some of the cryptographic
+ classes implementation.
+
+ After much public debate, we have chosen a new <a
+ href="winforms.html">strategy to implement winforms</a>.
+ Implementing a Gtk, Qt or Aqua based version of Winforms was
+ going to be almost as complex as implementing Wine itself. So
+ the new strategy is to only roll out a WineLib-based
+ implementation.
+
+@item Sep 4th, 2002: .NET One 2002 Program available
+
+ The <a
+ href="http://www.sigs-datacom.de/sd/kongresse/dotnet_2002/index.htm">.NET
+ ONE 2002</a> conference in Frankfurt is now available. Paolo
+ will be talking about the Mono JIT and embedding the Mono
+ runtime in your Windows and Linux applications. Mike Kestner
+ will talk about <a href="http://gtk-sharp.sf.net">Gtk#</a> and
+ the automatic binding generator used by Gtk# and Miguel will
+ be talking about the Mono project on Monday's keynote and on
+ the Mono C# compiler on Tuesday.
+
+@item Sep 3rd, 2002: Apache integration
+
+ <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-September/001862.html">Sterling</a>
+ announced an Apache module that hosts
+ Mono, and allows CIL code to run from within Apache, giving the
+ module access to the Apache runtime. This uses the Mono embedding
+ API.
+
+@item Aug 24th, 2002: Gtk# 0.4 released
+
+ Shortly after <a href="download.html">Mono 0.15</a> was
+ released a fresh version of <a
+ href="http://gtk-sharp.sf.net">Gtk#</a> was <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-August/001702.html">announced</a>.
+
+@item Aug 23rd, 2002: Mono 0.15 released
+
+ Mono 0.15 has been released. Source and RPMs are <a
+ href="download.html">available</a>. The release notes are <a
+ href="archive/mono-0.15">here</a>
+
+@item Aug 21th, 2002: Portable.NET encodings integrated into Mono.
+
+ Rhys Weatherley has contributed the Portable.NET encoders to
+ the Mono class libraries. This is a great step towards
+ cooperation between these projects. Thanks to Paolo for doing the
+ merger on our side.
+
+ His encoders are more complete than the iconv-based approach
+ that mono used, which was unreliable under certain
+ circumstances.
+
+@item Aug 20th, 2002: Remoting work, Resources, SPARC checkins, ADO.NET
+
+ <b>San Francisco</b>: August 14th. Linux World Expo.
+
+ Mark Crichton has checked in his patches to get the SPARC port
+ on par with the PPC port.
+
+ Dick has checked-in the resource reader and resource writers
+ to the class libraries, and Dietmar checked in the C# support
+ code for the remoting infrastructure.
+
+ More work on System.Data: the LibGDA (our OleDB backend) based
+ providers are quickly maturing, and recently they executed
+ their first query.
+
+@item Aug 13th, 2002: MCS news, Gtk# progress, Windows.Forms, ADO.NET
+
+ Martin Baulig has been fixing all the known bugs in the C#
+ compiler and now has moved into improving the compilation
+ speed and the generated code quality of MCS. Today we got a
+ 50% speedup in the bootstrap of MCS going from 24 seconds to 12 seconds.
+
+ Gtk# has been making a lot of progress, some interesting
+ corner cases are now supported:, you can now create canvas items as
+ well as using the tree widget. Here is a shot of <a
+ href="images/mocil.png">MonoCIL</a>.
+
+ On the runtime front, focus has been on improving remoting
+ support, exception handling, as well as completing the support
+ for structure marshaling.
+
+ Patrik is also back in action: the HttpRuntime infrastructure
+ is rapidly improving, and Gonzalo is working into moving XSP
+ into our main class library and providing the missing pieces
+ to integrate with Patrik's code.
+
+ Dennis and his team are working on a WineLib-based
+ implementation of Windows Forms to guarantee that the corner
+ cases of Windows.Forms can be handled, and we are back on track again.
+
+ A lot more work on the ADO.NET and WebServices has also been
+ checked into CVS.
+
+@item Aug 1st, 2002: Mono Hackers Hall of Fame
+
+ The <a href="hackers.html">Mono Hackers Hall Of Fame</a> has been started
+ to show our appreciation to the excellent contributors that made <b>mono::</b>
+ a successful free software project.
+
+ The first, deserved, entry goes to
+ Nick Drochak, who joined us in the first days of Mono and built the testing
+ infrastructure for the C# assemblies, fixed tons of bugs and even adventured
+ himself in the lands of the C runtime. His work is invaluable for keeping
+ Mono on the right track through the daily changes in the codebase.
+
+@item Looking for volunteers
+
+ We are looking for volunteers to help complete various pieces
+ of Mono and help move the project forward, we need
+ contributions to:
+
+ <ul>
+ * More tests to the existing class libraries.
+
+ * Finish existing class libraries, check our <a
+ href="class-status.html">class status</a> pages to see
+ all the missing things. There are open tasks all over
+ the place: XML, Database access, enterprise services,
+ configuration, ASP.NET, Drawing APIs, and more.
+
+ * Since we have now ASP.NET running, we would like to
+ create an ASP.NET application to maintain our class
+ library documentation.
+
+ We have some special needs (read them <a
+ href="classlib-doc.html">here</a>). There is a
+ prototype written using Windows.Forms, but we believe
+ it will be faster to have this done using ASP.NET (and
+ it is also a nice way of stress testing it).
+
+ * Support for the VB runtime: we need contributions
+ to make our VB runtime mature enough to host
+ applications compiled with the VB.NET to run with
+ Mono.
+
+ * We need people to help write the documentation: you
+ can start editing our XML files by hand, and once we
+ have the ASP.NET tool, upgrade to that.
+ </ul>
+
+@item July 31st, 2002: Flow Analysis
+
+ Martin has checked into CVS the data flow analysis patch for
+ MCS, this means that we now correctly implement definite
+ assignment in the C# language.
+
+@item Jul 31st, 2002: Most ASP.NET controls render, Gtk# structs.
+
+ Gonzalo <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-August/001234.html">posted
+ an update</a> on the ASP.NET widgets that are still pending. Patrik is back, and he is
+ working with Gonzalo to streamline the pipeline
+
+ Rachel quietly committed to Gtk-Sharp support for marshaling
+ structures (very important for Gtk#). This uses extensively
+ the new marshaling code that Dietmar added to the runtime.
+
+ Dietmar is also now sharing more code for P/Invoke using his
+ intermediate representation. Another step to share more code, and
+ simplify the porting and maintenance process.
+
+@item Jul 27th, 2002: NGEN tool for Mono.
+
+ Zoltan <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-July/001117.html">announced</a>
+ the availability of his CIL to C compiler. This allows your Mono assemblies to be pre-compiled
+ and optimized by GCC in your platform, increasing the speed significantly of your code.
+
+@item Jul 26th, 2002: Mono 0.13 has been released.
+
+ <b>Mono 0.13 has been released!</b> (details <a
+ href="archive/mono-0.13">here</a>). Get
+ your sources for the <a
+ href="archive/mono-0.13.tar.gz">runtime</a> and
+ <a href="archive/mcs-0.13.tar.gz">compiler and class libraries</a>.
+ <p>
+ Alp made Debian packages and they are <a
+ href="http://www.atoker.com/mono/">here</a>. Cristophe made
+ packages for Red Hat and they are <a
+ href="http://mono.baselabs.org/software">here</a>.
+ And Windows packages have been <a href="http://www.superin.formativ.net/mono/mono.htm">contributed</a>
+
+@item Jul 23rd, 2002: Mono Verifier, System.Web.Services, ASP.NET samples.
+
+ Mono now has a verifier. It is used by the runtime, or you can invoke it manually to
+ verify an image by using the `pedump' tool.
+
+ Tim Coleman has started work on the System.Web.Services
+ assembly (you can also track the status here on the web page).
+ Contact him if you want to help in this assembly or with the
+ associated web service tools.
+
+ Various samples for ASP.NET have landed in CVS.
+
+@item Jul 20th, 2002: Spanish Mono Tutorial.
+
+ A Spanish tutorial on using Mono is <a
+ href="http://mono.es.gnome.org/tutoriales/mono-linux/">here</a>.
+ Also the <a
+ href="http://mono.es.gnome.org/tutoriales/mono-puf/">FAQ</a>
+ has been translated as well.
+
+@item Jul 19th, 2002: File handle redirection, Embeddable Mono and Mono Linux compilation.
+
+ Dick's code for file handle redirection is complete and has
+ now landed on the CVS repository.
+
+ The Mono runtime can now be embedded into your application
+ (also known as "CLR hosting"). See the sample in
+ mono/samples/embed. This allows your application to link with
+ the Mono runtime, then your C code can call into the C#/CIL
+ universe and back.
+
+ Peter Williams and Martin contributed some Makefiles to
+ compile all of Mono on Linux. Details are <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-July/000916.html">here</a>.
+
+@item Jul 17th, 2002
+
+ The first documentary on Ximian's development team is now
+ available online, from young director <a
+ href="mailto:erik.pukinskis@uconn.edu">Erik Pukinskis</a>: <a
+ href="http://www.ximian.com/devzone/projects/codemonkey.html">"Code
+ Monkey At Work"</a>.
+
+ A Tutorial on getting Mono installed from sources is now <a
+ href="http://www.go-mono.com/mono-beginning/x70.html">online</a>.
+
+ More progress on the ASP.NET front: user defined controls are
+ now being rendered, as well as many of the sample programs
+ from www.asp.net. Gonzalo's work can be found on module XSP
+ (this implements the .aspx compiler).
+
+ Sergey Chaban has got Gtk# working on Windows, you can see
+ some screenshots: <a href="sshots/Gtksharp-1.jpg">sample apps</a> and
+ <a href="sshots/Gtksharp-2.jpg">running with a Russian charset</a>.
+
+@item Jul 16th, 2002
+
+ Paolo today got mono to complete host itself on Linux. This
+ means that we can now compile the `corlib' using the Mono C#
+ compiler and the Mono runtime.
+
+ Compiling the corlib was rather tricky, because the types that
+ the compiler uses during the compilation process will come
+ from the source code it is compiling.
+
+ After a few months of work, we have finally fleshed out all
+ the remaining bugs. Now the next step is to update the makefiles
+ to compile with the Mono tool-chain.
+
+ A recapitulation:
+ <ul>
+ * The Mono C# compiler was able to compile itself on December 28th, 2001.
+ The resulting image contained errors though.
+
+ * The Mono C# compiler was able to self-compile in on
+ January 3rd, 2002. Becoming a self-hosting compiler on Windows.
+
+ * The Mono runtime matured enough by March 12, 2002 that it
+ was able to bootstrap the Mono C# compiler on Linux using our interpreter.
+ This means that our development tool was self sufficient.
+
+ * On March 26th, the JIT engine was fixed, so we could use this to
+ run the compiler on Linux.
+
+ * Martin fixed the remaining bugs in the compiler that stopped it from
+ compiling the `corlib'. The resulting image still contained errors though.
+
+ * On July 8th, Radek got the PowerPC port to bootstrap
+ the C# compiler. This is important, because it exposed
+ various tricky issues in a big-endian system.
+
+ * Today: we can bootstrap the compiler using libraries
+ and the compiler compiled with itself on Linux. The process is complete.
+ </ul>
+
+ In the meantime, Dietmar has quietly implemented the remaining
+ pieces of Marshalling in the Mono runtime. This is very
+ important for the Gtk# guys to move on with their bindings.
+
+ To make things more interesting, he replaced most of the
+ architecture specific code generation for trampolines
+ (delegates, invocations, function and p/invoke trampolines) to
+ use CIL. This CIL is then compiled on the flight by the JIT
+ Compiler engine. By doing this, we have reduced the burden to
+ port the JITer to new architectures, and that our trampoline
+ code is cross platform.
+
+@item Jul 9th, 2002
+
+ Ajay was the first to notice <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-July/000641.html">
+ Mono's first birthday</a>.
+
+ In a year, we have achieved plenty:
+ <ul>
+ * 94 contributors with CVS access (84 non-Ximian developers).
+ * A complete CLI implementation:
+ <ul>
+ <li> A fast and performing x86 JIT engine (inlining, constant propagation).
+ <li> An interpreter for other systems (PPC, Sparc, StrongArm).
+ </ul>
+ * A self-hosting C# compiler, which can compile its class libraries.
+ * 37,140 file changes in CVS.
+ * 92,000 lines of C code.
+ * 437,000 lines of C# code (compiler, classes, tests)
+ * A working core for ASP.NET and ADO.NET.
+ * Major subsystems are functional: RegularExpressions,
+ System.XML, XML.Schema, System.Data, System.Web.
+ * The Gtk# project, which is maturing rapidly.
+ </ul>
+
+ Thanks to everyone who has made Mono possible with their
+ feedback, regression tests, their comments, their help on the mailing
+ list, code contributions, complete classes, bug reporting, the
+ countless hours of bug hunting. This project would not have
+ been possible without every contribution.
+
+ It has been a great year for everyone involved in the
+ project. I think we have built a new and exciting community.
+
+ Now we have a solid foundation to build on, so this next year
+ looks even more exciting: not only because we will see more
+ Mono applications, but we will begin using Mono as an
+ `library' to be linked with applications that want to get
+ scripting-like features; Gtk# is our ticket to create nice
+ GNOME applications; And we will be developing CORBA bindings
+ to integrate with other object systems.
+
+ Also, for those interested in optimizations and tuning, this
+ year we will get to play with more advanced optimizations and
+ all kinds of interesting research ideas for improving Mono
+ code generation.
+
+ A special thanks to the Mono developers at Ximian for managing
+ to survive their manager and a special thanks to our
+ regression test marshal Nick Drochak, who has been hunting
+ down, and fixing code in our class libraries and keeping us on
+ track for so long.
+
+@item Jul 8th, 2002
+
+ Radek today fixed the last bugs to get Mono to self host on
+ Linux/PowerPC.
+
+ Alp Toker has released version 0.5 of <a
+ href="http://www.atoker.com/phonic/">Phonic</a>, a media
+ player for .NET. Phonic makes extensive use of Mono-developed
+ technologies such as Gtk# and csvorbis (Ogg player ported by
+ Mark). Hopefully we will be seeing many more exciting
+ applications like these in the near future.
+
+ Dietmar has been moving a lot of the architecture specific
+ code in the JIT engine to our internal representation. This
+ means that porting the JIT is simpler now, as there is less
+ architecture-specific code to maintain. The inliner, constant
+ folder and constant propagation are also done at the
+ architecture independent layer.
+
+ Gonzalo is now running the sample ASP.NET applications on
+ Linux with the Mono runtime. It still needs polishing though,
+ and help with the various ASP.NET controls would be
+ appreciated. The ASP.NET community seems more poor than the
+ PHP community, we need to have a few open source controls to
+ do things dynamic rendering (libart+gdk-pixbuf again can do
+ most of the work), charts and components like the kind of
+ thing you see in the PHP universe: to bring nice GPL code to
+ the masses of Windows developers, lure them into the world of
+ Linux.
+
+ Dick has also got us the new Process implementation that
+ implements the Win32 semantics. Now only redirection is
+ missing.
+
+@item Jul 3rd, 2002
+
+ Listen to Paolo Molaro do a talk on Mono at the WebIT
+ conference in Padova, Italy this coming friday. Details are
+ <a href="http://www.webbit2001.org/event/eventview/534/">here</a>
+
+ You can also see a trip report from the Gnome in the South trip:
+ <a href="http://primates.ximian.com/~miguel/sur.html">here</a>
+
+ Miguel will be doing a couple of talks at the O'Reilly
+ conference about Mono: status update, progress and developing
+ applications with it. Details are <a
+ href="http://conferences.oreillynet.com/cs/os2002/view/e_sess/2994">here</a>
+ and <a
+ href="http://conferences.oreillynet.com/cs/os2002/view/e_sess/2996">here</a>
+
+@item Jun 30, 2002
+
+ Martin Baulig fixed the remaining bugs that prevented MCS to
+ compile our corlib. The compilation was tricky because of the way
+ MCS bootstraps the compile (internally mcs uses the types that are
+ being defined at that point to perform compares).
+
+ Martin and Paolo have been working hard on fixing the
+ remaining issues. Currently 102 test pass and 15 fail with
+ our resulting corlib.
+
+ Jesus' SoapFormatter classes are now in CVS.
+
+ I have been redoing the type lookup system for MCS. The
+ interesting bit is that I did most of this work on an airplane
+ using MCS itself. Which is a good test that the compiler is
+ now a good development tool.
+
+ Duncan, Mike and Rachel have been hard at work with Gtk#, now
+ there are bindings for the GtkHTML widget (the one used by
+ Evolution's composer). And Rachel also got the beginning of GNOME
+ bindings, that should simplify application development.
+
+ A big thanks goes to Dennis Hayes for getting the
+ Windows.Forms work together, and committing so many stubs for Windows.Forms.
+
+@item Jun 25, 2002
+
+ I am updating the Mono site from the UNESCO offices in
+ Uruguay, the <a href="http://www.gnome.org/resources/calendar/roadshow/GNOMEenelSur.html">South-America trip</a>
+ to promote free software is going very well.
+
+ Many news in Mono-land this week so far:
+
+ Mike Kestner got bindings for GtkHTML last night for Gtk#,
+ this is using GtkHTML 2.0.
+
+ On Monday Piers Haken <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-June/000380.html">contributed</a>
+ the core to support XPath in Mono: most of the w3c spec is
+ implemented (modulo a few pending bits).
+
+ Dick checked in his implementation of the Process classes:
+ process forking and waiting support committed, with some functions to
+ query status. This was complex as we had to emulate the Win32
+ environment, but this is another step to be fully compatible.
+ This means for example that any process can check on the
+ status of any other process (without the parent/child relationship)
+
+ Of course, those interested
+ in only the Unix semantics can always P/Invoke the Unix calls.
+
+@item Jun 24, 2002
+
+
+ Duncan has written a few sample <a
+ href="http://primates.ximian.com/~duncan/Mono">Gtk# demo
+ applications</a> (<a
+ href="http://primates.ximian.com/~duncan/Mono/img/ImageViewer.png">screen
+ shot</a>, <a
+ href="http://primates.ximian.com/~duncan/Mono/img/ImageBrowser.png">another</a>)
+
+ Rachel also got the beginning of Gnome bindings (<a
+ href="http://primates.ximian.com/~tvgm/gnome-hello.png">screenshot</a>).
+ She also got some <a
+ href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">documentation</a>
+ up now.
+
+@item Jun 22, 2002
+
+ Mono's ASP.NET has rendered its first page on Linux for the
+ first time (Gonzalo and Paolo).
+
+ Also, we are getting close to
+ self hosting. Paolo posted a <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-June/000345.html">list
+ of pending issues</a> which are now very small.
+
+ Steam is picking up in <a
+ href="http://gtk-sharp.sf.net">Gtk#</a> as the bindings become more
+ complete and small applications are starting to emerge. Gtk#
+ now compiles completely on Linux. This uses a lot of the XML
+ libraries, which is nice to see.
+
+@item Jun 20, 2002
+
+ Gonzalo has got the Mono ASP.NET implementation can now render all Html
+ Controls, and 21 out of the 26 Web Controls. Session tracking is
+ next. Look in xsp/test for a collection of tests that render with Mono.
+
+ Ajay has been very busy improving and extending the
+ XmlSerialization code. All fields had to be re-ordered to
+ match the Microsoft implementation.
+
+@item Jun 19, 2002
+
+ You can now download a fresh tarball of the libraries and the MCS
+ compiler daily from <a href="http://www.atoker.com/mono/">Alp Toker's
+ website</a>.
+
+ New libgc RPMS for Redhat 7.3 are available on <a href="
+ http://java.thn.htu.se/~toor/">Richard Torkar's site</a>.
+
+@item Jun 10, 2002
+
+ Ajay <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-June/000128.html">announced</a>
+ today that the reading code for XmlSchemas is almost complete.
+
+@item Jun 7, 2002
+
+ <b>Mono 0.12 is out!</b> More classes! More working code!
+ Better compiler! Faster runtime! Less bugs!
+
+ You can get it <a
+ href="download.html#jun-7">Here</a> (quick links: <a
+ href="archive/mono-0.12.tar.gz">runtime</a> and <a
+ href="archive/mcs-0.12.tar.gz">compiler/classes</a>).
+
+@item Jun 3rd, 2002
+
+ CodeDOM implementation from Daniel Stodden has got C# output support.
+
+@item May 31, 2002
+
+ Gonzalo got the Mono XSP page parser to render its first ASP.NET
+ .aspx file today without using MS System.Web.Hosting classes.
+ It is currently on its infancy. But very good news, now we need to
+ upgrade our System.Web runtime to run natively on Linux.
+
+ Sergey's code for architecture and size-specific CPBLK has
+ been checked into CVS.
+
+ Paolo has checked the configuration code for Mono (to map
+ PInvoke dlls to other libraries).
+
+ <a href="ado-net.html">ADO support</a>: Daniel has checked in
+ a modified version of the MySQL data provider from Brad. And Rodrigo
+ started the OleDB using LibGDA.
+
+@item May 27, 2002
+
+ An <a href="index.rss">RSS feed</a> is now available for the
+ Mono news. I find it surprising that there are so many tools
+ that process this data.
+
+ Binaries for <a href="http://www.superin.formativ.net/mono/mono.htm">Windows</a> are
+ now location independent, do not require Cygwin and come with a Wizard.
+
+@item May 26, 2002
+
+ Daniel Morgan checked in his Sql# Cli tool into the
+ System.Data class library.
+
+@item May 24, 2002
+
+ Ajay <a
+ href="http://lists.ximian.com/archives/public/mono-patches/2002-May/003953.html">has
+ checked in</a> a major update to the System.Xml.Schema namespace.
+
+ Gonzalo moved XSP along this week: Added support for
+ templates, columns inside DataGrid, HTML comments, code render
+ and data binding tags, style properties in style tags,
+ ListItem inside list controls, float and double properties.
+
+@item May 22, 2002
+
+ <a href="http://monologo.sourceforge.net/">MonoLogo</a> runs
+ on the Mono runtime. This <a
+ href="http://monologo.sourceforge.net/gtk.png">screenshot</a> shows
+ MonoLogo running Gtk#.
+
+@item May 21, 2002
+
+ Martin has improved the debugging infrastructure in Mono, now
+ it is possible to get <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-May/005717.html">line
+ number</a> information on stack traces.
+
+@item May 20, 2002
+
+ XSP <a href="asp-net">our ASP.NET</a> .aspx page parser is now
+ available on the AnonCVS servers. This is part of the ASP.NET
+ support in Mono. Gonzalo is the developer on charge of it.
+
+ Many updates to the <a href="ado-net.html">ADO.NET
+ implementation</a> from Dan, Tim and Rodrigo.
+
+ Radek got the Mono C# compiler running on Linux/PPC and
+ compiling most of our regression test suite.
+
+ Lawrence has been working really hard in fixing, improving and
+ polishing the underlying network infrastructure.
+
+ The Rafael and Chris have committed the beginning of the
+ VisualBasic.NET runtime support to CVS.
+
+ Jesus has contributed the beginning of the SoapFormatter
+
+@item May 9, 2002
+
+ Linear register allocator has been deployed in the Mono JIT
+ engine. Read <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-May/005489.html">about
+ it</a>
+
+@item May 5, 2002
+
+ We are able to retrieve simple data from the database
+ using our ADO.NET like functionality. Only string and integer data
+ types are supported right now but more are in the works.
+
+ You can find more information
+ at <a href="http://www.go-mono.com/ado-net.html">The Mono ADO-NET Page</a>
+
+ Thanks goes to Chris, Daniel, Duncan, Gonzalo, Miguel, Rodrigo, Tim,
+ and others for these bits.
+
+@item May 4th, 2002
+
+ Rodrigo Moya announced <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-May/005366.html">new
+ LibGDA</a>: LibGDA is an ADO-like library for Unix systems.
+ This one removes all the CORBA and GConf dependencies, which
+ should make it easier to use and compile.
+
+ This is another milestone for our <a
+ href="ado-net.html">ADO.NET implementation plans</a>
+
+ We have a little surprise for everyone tracking the news on Tuesday ;-)
+
+@item May 2nd, 2002
+
+ Mark Crichton csvorbis port (C# port of Vorbis player) and
+ Richard Hestilow's <a href="http://monologo.sf.net">MonoLogo compiler</a> are now
+ on the CVS, and you can get them from AnonCVS.
+
+ Dick implemented inter-process sharing of handles as well as
+ simplifying the implementation of WaitForMultipleObjects, now
+ we have a `handles' subsystem in Mono. This is needed to fully
+ emulate the handle behavior that Win32 exposes, and that the .NET API
+ expose to applications.
+
+ News from the <a
+ href="http://gtk-sharp.sourceforge.net">Gtk#</a> front: <a
+ href="http://gtk-sharp.sourceforge.net/menu.png">Menu
+ support</a>, Mike <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-May/000064.html">tells
+ the story</a>
+
+@item May 1st, 2002
+
+ Daily packages for <a href="http://www.debian.org">Debian</a> are available
+ <a href="http://www.atoker.com/mono/">here</a>
+
+@item Apr 26, 2002
+
+ Binary packages of Mono 0.11 are available for <a
+ href="http://www.superin.formativ.net/mono/mono.htm">Windows</a>
+ (Thanks to Johannes Roith) and for
+ <a
+ href="http://mono.baselabs.org/index.php/software/">Linux</a> (thanks
+ to BaseLabs).
+
+@item Apr 24, 2002
+
+ <b>Mono 0.11 is out!</b> Mostly performance improvements, bug
+ fixes and more classes are included.
+
+ A new version of the runtime, compiler and class libraries has
+ been packaged for your download pleasure. Binaries are
+ included. The <a href="archive/mono-0.11">Release Notes</a>
+ are available.
+
+ You can get it <a
+ href="download.html#apr-24">Here</a> (quick links: <a
+ href="archive/mono-0.11.tar.gz">runtime</a> and <a
+ href="archive/mcs-0.11.tar.gz">compiler/classes</a>).
+
+@item Apr 23, 2002
+
+ SharpDevelop 0.88a <a href="http://www.icsharpcode.net/OpenSource/SD">is out!</a>
+
+ Congratulations to the developers behind SharpDevelop for
+ their new release.
+
+@item Apr 20, 2002
+
+ Some updates from the hacking lines:
+
+ <b>The web:</b> Patrik Torstensson last week contributed the
+ http runtime support and started work on thread pools. This
+ is part of the ASP.NET support.
+
+ <b>Docs:</b> John Barnette, John Sohn and Adam Treat have been
+ hacking on MonoDoc.
+
+ <b>ADO.NET:</b> Daniel Morgan and Rodrigo Moya have been
+ working on the <a href="ado-net">ADO.NET</a> support, and got
+ the first signs of life this week (we can connect, insert
+ rows; do transactions: commit/rollback; SQL errors and
+ exceptions work). Check <a
+ href="mailing-lists.html">mono-patches</a> for all the
+ goodies.
+
+ <b>Optimizations:</b> A number of optimizations in the runtime
+ made the compiler twice as fast this week:
+
+ Early this week Patrik started the string
+ rewrite in the runtime. Today Dietmar finished the
+ constructors and deployed the new layout.
+
+ Paolo got the JIT engine to generate profiles, which were in
+ turn used to find hot spots in Reflection, which he improved.
+
+ Daniel Lewis (of Regex fame) noticed the performance issues
+ with our current array layout, and contributed a new array
+ representation.
+
+ At the same time Dietmar started the the JIT inline code and
+ implemented constant propagation. These two optimizations
+ together are very powerful.
+
+ <b>Bug fixing:</b> And of course everyone has been helping out
+ with the bug fixing (Duncan, Gonzalo, Jonathan, Miguel, Nick,
+ Ravi, Sergey)
+
+
+@item Apr 18, 2002
+
+ Dietmar's inlining for the JIT engine just landed into
+ CVS. This is only a first cut and more improvements will come later.
+
+ Patrik, Paolo, Dietmar and Gonzalo have been busy optimizing
+ our class libraries and runtime engine to become faster. Many changes
+ on CVS as well.
+
+@item Apr 11, 2002
+
+ Gtk# 0.1 "ButtonHook" has been <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-April/000048.html">released</a>
+
+ Binaries for the Mono Regression Test Suite are <a
+ href="archive/mono-tests.tar.gz">available</a> for
+ people porting the Mono Runtime to new platforms.
+
+@item Apr 6, 2002
+
+ <a href="http://www.dotnetremoting.cc/book/AdvancedDotNetRemoting.asp">
+ Advanced .NET Remoting</a> from Ingo Rammer is now available. Ingo
+ helped us to implement the proxy support and the book is a valuable
+ resource for anyone interested in remoting.
+
+@item Apr 5, 2002
+
+ Transparent proxy support has been finished, congrats to
+ Dietmar. Our JIT engine on CVS contains the implementation.
+ This should enable people to test the remoting framework on
+ Mono.
+
+@item Mar 28, 2002
+
+ Debugging information is now generated by the compiler thanks
+ to Martin's work. The resulting dwarf file can be used to
+ single step C# code in GDB. A document will be shortly published with
+ the details.
+
+@item Mar 27, 2002
+
+ <b>Mono 0.10 is out!</b> The self hosting release of Mono has
+ been released.
+
+ A new version of the runtime, compiler and class libraries has
+ been packaged for your download pleasure. Binaries are
+ included. The <a href="archive/mono-0.10">Release Notes</a>
+ are available.
+
+ You can get it <a
+ href="download.html#mar-27">Here</a> (quick links: <a
+ href="archive/mono-0.10.tar.gz">runtime</a> and <a
+ href="archive/mcs-0.10.tar.gz">compiler/classes</a>).
+
+@item Mar 26, 2002
+
+ Paolo finally fixed the last bug in the JITer that stopped
+ us from using it to run the Mono C# compiler. Goodies are on
+ CVS.
+
+ <a href="http://gtk-sharp.sourceforge.net">Gtk#</a> runs <a
+ href="http://gtk-sharp.sourceforge.net/gtk-hello-world.png">Hello
+ World</a>. Mike posted some <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-March/000034.html">details.</a>
+
+
+@item Mar 19, 2002
+
+ Martin has been working on our debugging infrastructure, both
+ on the JIT side of things (adding dward support) as well as on
+ the class libraries (so that MCS can start generating
+ debugging information).
+
+ Jason and Kral keep working on the System.Xml namespace,
+ allowing Mike to move more to self-hosting his Gtk# code.
+
+ The System.Web classes are now part of the build (and they are
+ also part of the class status now). Ajay contributed a large
+ chunk of code to the System.Xml.Schema namespace
+
+ Dan (of regex fame) has been working on internal calls
+ support: moving more code from the old monowrapper to become
+ internal calls.
+
+ Paolo and Dietmar are working steadily on our runtime
+ environment, fixing bugs, adding missing features and allowing
+ us to run the compiler on Linux.
+
+ Remember to post your bug reports.
+
+ The nice class status on the right is brought to you by
+ endless hacking hours from Piers and Nick. These status
+ report pages have been helping us track down various mistakes
+ in our classes (very useful, check it out for yourself)
+
+@item Mar 12, 2002
+
+ At midnight, in Italy, Paolo got the Mono C# compiler to self
+ host on Linux, the last bug has been squashed to self
+ hostingness. We have now a fully self hosting compiler in Linux.
+
+ A release will follow up shortly.
+
+@item Mar 9, 2002
+
+ Updated the <a href="class-status.html">class status</a>, now
+ it is possible to use the right-side menu to browse a specific
+ assembly.
+
+@item Mar 7, 2002
+
+ MCS compiles on Linux!
+
+ Today Paolo got the <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-March/003726.html">MCS
+ compiler compiling itself on Linux</a>
+ completely for the first time! The resulting image still contains
+ some errors, but the whole compiler process goes now. Later in the day
+ and a couple of small optimizations and bug fixes, the compile
+ speed was improved in 400%
+
+ We are very close to have a complete self hosting environment now.
+
+ Mono is temporarily using the Bohem GC garbage collector while
+ we deploy the more advanced ORP one.
+
+@item Mar 5, 2002
+
+ The CVS repository <a href="http://cvs.hispalinux.es/cgi-bin/cvsweb/?hidenonreadable=1&f=u&logsort=date&sortby=file&hideattic=1&cvsroot=Mono">can be browsed</a>
+
+ Jason has got an incredible amount of work on the Xml
+ classes during the weekend, and Gaurav is very close to have
+ the complete System.Web.UI.WebControls namespace implemented.
+
+ Martin and Duco have been killing bugs by using the recently
+ revamped regression test suite.
+
+ Piers has updated our <a href="class-status.html">class
+ status</a> page again, with even more information available.
+
+ The C# compiler has full constant folding implemented now and Ravi
+ killed bugs of bugs in the <a href="http://bugzilla.ximian.com/buglist.cgi?product=Mono%2FClass+Libraries&product=Mono%2FMCS&product=Mono%2FRuntime&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&keywords=&keywords_type=anywords&op_sys_details=&op_sys_details_type=substring&version_details=&version_details_type=substring&cmdtype=doit&order=%27Importance%27&form_name=query">Mono Bug List</a>
+
+@item Mar 1, 2002
+
+ RPMs of Mono 0.9 are available at <a href="http://mono.baselabs.org/#download">mono.baselabs.com</a>
+
+@item Feb 28, 2002
+
+ <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-February/003464.html">Christophe</a>
+ has setup his <a href="http://mono.baselabs.org">First Steps in Mono</a> web site, which
+ shows you a step-by-step process on getting Mono running on your system.
+
+ RPMs of Mono 0.9 are available at <a href="http://mono.baselabs.org/index.php/software/">mono.baselabs.org</a>
+
+@item Feb 27, 2002
+
+ New <a href="class-status.html">class status</a> engine that
+ provides detailed information about missing functionality in
+ our class libraries. Nick built the cormissing tool and Piers
+ did the XSLT and DHTML magic.
+
+ More compiler progress on Linux: our support runtime now
+ enables the compiler to compile `MIS' on Linux (MIS being
+ Dick's Mono sample HTTP server ;-)
+
+@item Feb 26, 2002
+
+ Paolo posted a list of <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-February/003266.html">ways
+ you can help</a> if you do not have Windows right now. Sergey followed up with
+ <a href="http://lists.ximian.com/archives/public/mono-list/2002-February/003268.html">his</a>
+ suggestions.
+
+@item Feb 25, 2002
+
+ StrongARM port from Sergey Chaban has been checked into CVS.
+
+@item Feb 24, 2002
+
+ SPARC: 44 out of 74 tests pass now (Jeff)
+
+ Power PC: delegates are working now (Radek)
+
+@item Feb 22, 2002
+
+ <b>Mono 0.9 has been released!</b>
+
+ A new version of the runtime, compiler and class libraries has
+ been packaged for your download pleasure. The <a
+ href="archive/mono-0.9">Release Notes</a>
+
+ You can get it <a
+ href="download.html#feb-22">Here</a> (quick links: <a
+ href="archive/mono-0.9.tar.gz">runtime</a> and <a
+ href="archive/mcs-0.9.tar.gz">compiler/classes</a>).
+
+@item Feb 21, 2002
+
+ Paolo got our compiler natively to compile 117 of our tests.
+ Self hosting is closer every day.
+
+ Unsafe support is finished in the C# compiler.
+
+@item Feb 20, 2002
+
+ Gaurav got DataGrid and DataGridItemCollection done.
+
+ C# compiler: Unsafe support is mostly complete (only stackalloc is missing).
+
+ New easy to run scripts for compiling Mono on Unix and Windows
+ is <a href="download.html">available</a>. We can now easily compile
+ Mono on Windows and Linux. If you had trouble before, use the
+ above scripts which will get the setup right for you.
+
+ There are now three machines that can provide AnonCVS, just
+ use anoncvs.go-mono.com as the hostname for your CVSROOT and
+ you will get one of the machines.
+
+@item Feb 19, 2002
+
+ Do you want to see what <a href="http://people.debian.org/~lupus/mono/">Mono Looks Like?</a>
+
+@item Feb 18, 2002
+
+ Application Domains now support the two LoaderOptimization
+ modes: share code or do not share code, and you can control
+ this with the --share-code command line option.
+
+ Paolo has now 100+ test cases run on Linux now with our class
+ libraries.
+
+ PowerPC and SPARC ports are moving along (Radek and Jeff)
+
+@item Feb 13, 2002
+
+ Excellent news since the 11th, here is a quick rundown:
+
+ AppDomains have been deployed (Dietmar). Socket work is done
+ (Dick). Corlib compiled with no refs to mscorlib (Dan). New
+ comprehensive tests for corlib bits (David). Nick is driving the
+ regression test suite efforts and class library completeness.
+ New System.Data work (Chris). Bug fixes (Paolo, Duncan, Ravi, Miguel)
+
+ Miguel is off to the <a
+ href="http://www.fosdem.org">FOSDEM</a> conference in Brussels.
+
+@item Feb 11, 2002
+
+ <b>Mono 0.8 has been released!</b>
+
+ A new version of the runtime, compiler and class libraries has
+ been packaged for your download pleasure.
+
+ You can get it <a
+ href="download.html#feb-11">Here</a> (quick links: <a
+ href="archive/mono-0.8.tar.gz">runtime</a> and <a
+ href="archive/mcs-0.8.tar.gz">compiler/classes</a>)
+
+@item Feb 11, 2002
+
+ We would like to welcome all the new developers that have
+ joined the project in the last couple of days. The classes
+ are rapidly moving.
+
+ An explanation of the relationship between <a
+ href="http://mail.gnome.org/archives/gnome-hackers/2002-February/msg00031.html">GNOME
+ and Mono</a>.
+
+ Nick is still leading our test suite platform. I can not
+ stress how important it is to have a good regression test suite
+ for our platform, as buggy class libraries are what are
+ stopping the compiler from running completely on Linux.
+
+ We are of course psyched to see Mono run on
+ non-Linux systems. Work is moving on native code generation
+ for StrongARM, PowerPC, and SPARC as well as porting Mono to
+ other systems.
+
+ There are a couple of debates on the Mono list on implementing
+ a set of web server classes for <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-February/002911.html">enabling
+ ASP.NET</a> on Mono.
+
+ Paolo also <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-February/002944.html">
+ posted a list of pending tasks</a> to enable the compiler to run on Linux
+
+@item Feb 10, 2002
+
+ Mike Kestner has posted an <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-February/000024.html">Update
+ on his Gtk#</a> activities.
+
+@item Feb 4, 2002
+
+ Adam has done <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-February/002808.html">Qt
+ bindings</a> for .NET. Adam is cool.
+
+@item Jan 29, 2002
+
+ Dan Lewis has contributed a major missing set of classes to
+ Mono: <a
+ href="http://lists.ximian.com/archives/public/mono-list/2002-January/002745.html">
+ System.Text.RegularExpressions</a>.
+
+ This is a fully .NET compatible implementation of the .NET regular expressions,
+ fully Unicode aware. This contribution is very appreciated, as implementing this
+ was not entirely trivial (supporting Unicode, plus a regex engine which is a super
+ set of the Perl regex engine).
+
+@item Jan 28, 2002
+
+ The Mono contributors have relicensed the Class Libraries under
+ the terms of the
+ <a href="http://www.opensource.org/licenses/mit-license.html">MIT X11</a> license.
+
+ This license is an Open Source license, and is used by other projects
+ (most notably, the XFree86 project).
+
+ The runtime (JIT, metadata library, interpreter) remains under
+ the LGPL and the C# compiler remains under the GPL.
+
+ Our <a
+ href="http://www.ximian.com/about_us/press_center/press_releases/mono_partners.html">Press
+ Release</a>
+
+ Press coverage: <a
+ href="http://news.com.com/2100-1001-823734.html">CNet</a>, <a
+ href="http://www.wired.com/news/technology/0,1282,50037-2,00.html">Wired</a>,
+ <a href="http://www.infoworld.com/articles/hn/xml/02/01/28/020128hnopennet.xml">InfoWorld</a>,
+ <a href="http://www.newsforge.com/article.pl?sid=02/01/27/2232231">NewsForge</a>.
+
+@item Jan 23, 2002
+
+ New mailing list: <a href="mailto:mono-patches-request@ximian.com">mono-patches@ximian.com</a>.
+ This mailing list will receive automatically the patches that are submitted
+ to the Mono CVS to any of its modules.
+
+ This allows anyone who wants to participate in the peer-review of the
+ code submitted to CVS to receive patches on e-mail. It should also
+ expose to everyone the changes that are being done by the team every day.
+
+@item Jan 21, 2002
+
+ Dick has got a simple web server running with Mono (`MIS: Mono
+ Internet Server') that is mostly used to test our IO layer, a
+ <a href="http://primates.ximian.com/~miguel/dick-mis-server.png">screenshot</a>
+
+ Paolo and Dietmar are busy making our runtime self sufficient on
+ non-Windows platforms.
+
+ C# compiler front: A lot of focus in the past weeks after
+ the C# became self hosting has been in making the compiler a useful
+ tool for development: improve error handling, provide better error
+ reports, fixing all known bugs, and finally profiling of the compiler
+ has begun.
+
+@item Jan 8, 2002
+
+ Our compiler has been self-supporting since January 3rd. In
+ the meantime, we have been busy working on making it run on
+ Linux. Today Paolo got more work done on Reflection.Emit and
+ the compiler compiled `console.cs' (a sample Mono program) on
+ Linux.
+
+@item Jan 4, 2002
+
+ Dietmar landed the Unicode support patch. Class libraries and
+ runtimes are now fully Unicode aware. The details are <a href=
+ "http://lists.ximian.com/archives/public/mono-list/2002-January/002409.html">
+ here</a>
+
+ Last minute breaking news: Paolo got our compiler in Linux to
+ compile fib.cs, patches are coming tomorrow once we have
+ ChangeLog entries.
+
+@item Jan 4, 2002
+
+ Mike Kestner posted an update on Gtk# <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2002-January/000021.html"><i>New
+ year, new direction</i></a>.
+
+ Gtk# will be our foundation on which we will be implementing
+ System.Windows.Forms.
+
+@item Jan 3, 2002
+
+ Mono C# compiler becomes self-sufficient. We can now continue
+ development of the compiler with itself.
+
+ Work on the class libraries is still underway for having a full
+ self hosting system. We hope to achieve our goal of self-hosting
+ on Linux before the end of the month.
+
+ Join the fun by downloading either tonight's <a
+ href="snapshots">snapshot</a> or getting your sources from our
+ <a href="anoncvs.html">Anonymous CVS server</a>.
+
+@item Dec 28, 2001
+
+ After a lot of work, the C# compiler can compile itself.
+ There are still errors in the generated image, but they are
+ being fixed quickly.
+
+ We will soon have the first non-Microsoft C# implementation!
+
+@item Dec 18, 2001
+
+ JIT: More work on our IO abstraction layer (Dick).
+
+ JIT: exception handling for unmanaged code (Dietmar)
+
+ System.Reflection: Support for PropertyInfo and
+ PropertyBuilder as well as the various queries for MethodBase.
+
+ C#: Pre-processor; Rewrite of MemberLookup which fixed many of
+ the outstanding issues. More bug fixing allows it to compile
+ more programs.
+
+@item Dec 14, 2001
+
+ Dietmar has improved the register allocation and now Mono performs
+ two to three times as fast as it did yesterday. Amazing.
+
+ The compiler keeps moving along, explicit interface
+ implementation is there.
+
+@item Dec 11, 2001
+
+ The JIT engine can now run all the compiler regression tests as
+ well as assorted other programs, many more opcodes added
+ recently. Currently the JIT engine uses a very simplistic register
+ allocator (just enough to allow us to focus on feature completeness)
+ and that will be the next major task to improve performance and
+ reduce spills and reloads.
+
+ On the C# compiler front: language features are now pretty
+ much complete. The big missing tasks are unsafe code support,
+ visibility, explicit interface implementation plus static flow
+ analysis. There are many small bugs that need to be addressed.
+
+ You can get your copy of the <a href="snapshots">latest Mono</a>
+
+ More work is also required on fixing the foundation class
+ libraries, it is easy to find spots now since Nick got the
+ `make test' going.
+
+@item Dec 1, 2001
+
+ AnonCVS access to Mono is here (updated every hour). Thanks
+ to <a href="http://www.hispalinux.es">HispaLinux</a> and Jesus
+ Climent for helping to set this up.
+
+@item Nov 30, 2001
+
+ All tests from the mono runtime work with the JIT engine now
+ (Dietmar).
+
+ Recursive enumeration definition in the C# compiler are
+ working now (Ravi).
+
+ More work on the Web classes (Gaurav).
+
+@item Nov 28, 2001
+
+ JIT land: Paolo got GDB support into the JIT engine while
+ Dietmar added exceptions support to it.
+
+ The C# compiler supports all array initializations now, and the
+ switch statement as well as fixing many existing bugs. Many
+ new more tests.
+
+ Nick keeps working on improving our class library test suite.
+
+ Dick has almost completed the Mono IO layer.
+
+@item Nov 16, 2001
+
+<blockquote>
+ Mike Kestner has posted an <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2001-November/000015.html">update</a>
+ on Gtk# development.
+</blockquote>
+
+@item Nov 14, 2001
+
+<blockquote>
+ Paolo today got the Mono C# compiler running <a
+ href="http://lists.ximian.com/archives/public/mono-list/2001-November/001941.html">on
+ Linux</a>. It compiles a sample program and then the sample
+ program is executed.
+
+ Mutator unary operators (++ and --) in the compiler are fully
+ functional, they used to only work on variables, and now they
+ are complete.
+
+ To sum things up: The Mono C# compiler is written in C# and
+ uses the .NET classes to get its work done. To make this work
+ on Linux work has to happen in various fronts:
+<ul>
+ * The C# compiler is being worked on and can compile
+ many programs now (our test suite at this point is
+ made up of 40 tests).
+
+ * The class libraries need to be mature enough to support
+ the compiler, particularly System.Reflection.Emit (which is
+ what Paolo has been working on lately).
+
+ The compiler currently requires 103 classes from the
+ .NET runtime (you can get the list by running: <b>monodis --typeref mcs.exe</b>
+
+ * The interpreter should be mature enough to run the actual
+ compiler byte codes and the corlib bytecodes.
+</ul>
+
+ At the same time, Dietmar is working on the JIT engine which will
+ replace our interpreter in production.
+</blockquote>
+
+@item Nov 12, 2001
+
+<blockquote>
+ Dietmar got value types working on the JIT engine. Sean has
+ got assembly loading in the runtime (required for NUnit).
+
+ More progress on enumerations and attributes from Ravi.
+
+ Nick keeps working on improving our class libraries.
+</blockquote>
+
+@item Nov 8, 2001
+
+<blockquote>
+ Enumerations, array access and attributes for the C# compiler are into the CVS now.
+
+ Full array support is not complete, but moving along.
+</blockquote>
+
+@item Nov 5, 2001
+
+<blockquote>
+ Dietmar's new set of patches to the JIT have 20 out of 33
+ tests running now.
+</blockquote>
+
+@item Nov 4, 2001
+
+<blockquote>
+ Mike Kestner, main Gtk# contributor has posted a very interesting <a
+ href="http://lists.ximian.com/archives/public/gtk-sharp-list/2001-November/000013.html">
+ update</a> on his work on Gtk#.
+
+ Ravi committed the initial support for Attributes in the
+ compiler.
+
+ Many HTML Controls from Leen checked into CVS.
+
+ Paolo checked in his new System.Reflection and
+ System.Reflection.Emit implementations. He has been working
+ steadily on this huge task for a few weeks now. This is the
+ foundation for the Mono C# compiler, and hence a very
+ important piece of the puzzle.
+</blockquote>
+
+@item Nov 3, 2001
+
+<blockquote>
+ Many clean ups have been going into the class library by Nick Drochak.
+
+ Mega patch from Dietmar: he committed the flow analysis code
+ for the JITer.
+
+ A lot of work has been going into the WebControls by Gaurav (4
+ new controls plus improved and bug fixed base classes).
+</blockquote>
+
+@item Nov 1, 2001
+
+<blockquote>
+ Ravi committed the caller-side method selection of methods with
+ variable length arguments. Now he depends on Miguel finishing
+ the array handling support.
+</blockquote>
+
+@item Oct 27, 2001
+
+<blockquote>
+ Lots of classes for System.Web from Gaurav were committed this
+ morning.
+
+ Some large recent developments:
+
+ The Decimal implementation from Martin Weindel has been
+ partially integrated (we need to put the internalcalls in
+ place now and compile and link the decimal code).
+
+ Derek Holden committed recently the IntegerFormatter code into
+ the CVS, so we got a pretty comprehensive integer formatting
+ engine that we can finally use all over the place.
+
+ Compiler got support for lock as well as assorted bug fixes.
+ Ravi is still working on array support (and then we can
+ optimize foreach for the array case).
+
+ Dietmar is busy working on flow analysis on the JITer, the
+ previous mechanism of generating the forest was wrong. Paolo
+ has been a busy bee reworking the System.Reflection.Emit
+ support code, and we should have some pretty nice stuff next
+ week. Dick on the other hand is still working on the
+ WaitOne/WaitAll emulation code. WaitAll is like select on
+ steroids: it can wait for different kinds of objects: files,
+ mutexes, events and a couple of others.
+
+ Mike Kestner is busy working on Gtk# which is now using the
+ .defs files to quickly wrap the API.
+</blockquote>
+
+@item Oct 18, 2001
+
+<blockquote>
+ Reworking expressions to support cleanly indexers and
+ properties. <a href="http://www.nat.org/evolution.php3">11
+ days</a> until Evolution 1.0 ships.
+
+ Ximian users around the world <!--a
+ href="http://www.bez.it/IMAGES/nora.jpg"-->rejoice<!--/a--> with
+ recent C# compiler progress.
+</blockquote>
+
+@item Oct 17, 2001
+
+<blockquote>
+ Delegate support has been checked into the compiler
+ (definition and invocation); break/continue implemented.
+</blockquote>
+
+@item Oct 15, 2001
+
+<blockquote>
+ JIT engine supports many of the object constructs now (object
+ creation, vtable setup, interface table setup).
+
+ The C# compiler now has almost full property support (only
+ missing bit are pre-post increment/decrement operations),
+ delegates are now created (still missing delegate invocation).
+ try/catch/finally is also supported in the compiler now.
+
+ System.Decimal implementation is in, as well as many crypto
+ classes.
+</blockquote>
+
+@item Oct 5, 2001
+
+<blockquote>
+ Sergey has released his first version of the <b>ilasm</b>
+ assembler written in C#. You can get it from his web page:
+ <a
+ href="http://mono.eurosoft.od.ua">http://mono.eurosoft.od.ua</a>.
+
+ The plan is to integrate ildasm into the Mono CVS soon. This
+ component should in theory also be reusable for SharpDevelop
+ eventually.
+</blockquote>
+
+@item Oct 4, 2001
+
+<blockquote>
+ Our System.Reflection.Emit implementation created its first
+ executable today. This means that a very simple .NET program
+ that was compiled on Windows was able to generate a .NET program
+ while running on Linux using the Mono runtime.
+
+ The various piece of the puzzle are starting to get together:
+ the compiler can compile simple programs now and we are
+ basically focusing on completeness now.
+</blockquote>
+
+@item Sep 28, 2001
+
+<blockquote>
+ <a
+ href="http://www.icsharpcode.net/OpenSource/SD/default.asp">Sharp
+ Develop 0.80</a> was released today.
+</blockquote>
+
+@item Sep 26, 2001
+
+<blockquote>
+ More progress: more opcodes are working (Paolo); The compiler
+ runs up to a point in Mint (Paolo); operator overloading works
+ (both unary and binary) all over the place (Miguel); Completed decimal
+ type conversions (Miguel); New build system in place based on
+ Ant (Sean and Sergey); Refactored and documented the
+ internals of the JIT engine (Dietmar); StatementExpressions
+ handled correctly (Miguel).
+</blockquote>
+
+@item Sep 21, 2001
+
+<blockquote>
+ A couple of news-worthy items: Dick got the initial thread
+ support into mint; Paolo implemented many new opcodes; Dietmar
+ got long operations and mul/div working on the JITer; Ravi rewrote
+ the Method selector for expressions to be conformant; Miguel
+ got i++ working. All in tonight's snapshot
+</blockquote>
+
+@item Sep 19, 2001
+
+<blockquote>
+ Paolo has written a section on <a href="porting.html">Porting
+ Mono</a> to other architectures.
+</blockquote>
+
+@item Sep 18, 2001
+
+<blockquote>
+ <A a href="download.html#sep-18">Mono 0.7</a> has been
+ released (runtime engine, class libraries
+ and C# compiler). Check the <a href="archive/mono-0.7">Mono
+ 0.7 announcement</a> for details
+</blockquote>
+
+@item Sep 17, 2001
+
+<blockquote>
+ Mike Kestner's Gtk# (Gtk-sharp) was checked into the CVS
+ repository. Gtk# can run a simple hello world application.
+ The binding is nice, as it maps Gtk+ signals to delegates in
+ C#. You can see the Gtk# Hello World program <a href="src/HelloWorld.cs">here</a>
+
+ Gtk-sharp should be available on the next snapshot set.
+</blockquote>
+
+@item Sep 10, 2001
+
+<blockquote>
+ Dietmar checked in his CIL tree/forest regeneration and most
+ importantly, the x86 instruction selector burg grammar.
+</blockquote>
+
+
+@item Sep 5, 2001
+
+<blockquote>
+ The MCS compiler <b>can compile the sample Hello World</b>
+ application and generate a Windows/CIL executable that runs!
+
+ This executable runs with the Mono Interpreter of course (see
+ August 28)
+</blockquote>
+
+@item Sep 4, 2001
+
+<blockquote>
+ Dietmar checked into CVS the `monoburg' architecture
+ independent instruction selector for the JIT engine.
+</blockquote>
+
+@item Aug 28, 2001
+
+<blockquote>
+ <b>.NET Hello World is working under Mono!</b> The latest snapshots
+ will let you run it.
+
+ Hello World consists of 1821 CIL instructions,
+ performs 66 subroutine calls and loads 12 classes from the corlib.dll
+
+ Good work Mono team!
+</blockquote>
+
+@item Aug 23, 2001
+
+<blockquote>
+ Lloyd Dupont has announced his OpenGL bindings for C#, they
+ are available here: <a
+ href="http://csgl.sourceforge.net">http://csgl.sourceforge.net</a>
+</blockquote>
+
+@item Aug 22, 2001
+
+<blockquote>
+ New version of the Mono Runtime, Compiler and Classes has been
+ <a
+ href="download.html#august-22">released.</a> Check the <a
+ href="archive/mono-0.6">0.6 announcement</a>.
+</blockquote>
+
+@item Aug 20, 2001
+
+<blockquote>
+ A new <a href="contributing.html#compile-service">Compilation
+ service</a> has been made available by Derek to allow people
+ without access to the <a
+ href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">.NET SDK</a>
+</blockquote>
+
+@item Aug 3, 2001
+
+<blockquote>
+ Daily snapshots of mcs and mono are now available, they will
+ run every night at 10pm Boston time.
+</blockquote>
+
+@item Jul 29, 2001
+
+<blockquote>
+ Mono Runtime 0.5 has been <a
+ href="download.html#july-29">released.</a> Check the <a
+ href="archive/mono-0.5">release notes</a>
+</blockquote>
+
+@item Jul 25, 2001
+
+<blockquote>
+ The slides for <A href="Presentations/O-Reilly">my
+ presentation</a> at <a href="http://www.oreilly.com">O'Reilly
+ Open Source Software Convention</a>
+</blockquote>
+
+@item Jul 22, 2001
+
+<blockquote>
+ Another release of the class libraries is out, check the <a
+ href="archive/mcs-22">MCS 22-July Release Notes</a>. You can
+ get the new class libraries from <a
+ href="download.html#july-22">here</a>
+</blockquote>
+
+@item Jul 19, 2001
+
+<blockquote>
+ Another release of the class libraries is out, check the <a
+ href="archive/mcs-19">MCS 19-July Release Notes</a>. You can
+ get the new class libraries from <a
+ href="download.html#july-19">here</a>
+</blockquote>
+
+@item Jul 17, 2001
+
+<blockquote>
+ Another release of the class libraries is out, check the <a
+ href="archive/mcs-17">MCS 17-July Release Notes</a>. You can
+ get the new class libraries from <a
+ href="download.html#july-17">here</a>
+
+ Do not forget to check out the updated <a href="faq.html">FAQ</a>.
+
+ Got Sean's new Class
+ Status web pages up. These are a lot better than mine, and
+ we are now keeping better track of contributors.
+</blockquote>
+
+@item Jul 15, 2001
+
+<blockquote>
+ Another release of Mono is out, check the <a
+ href="archive/mono-0.4">Mono 0.4 Release Notes</a>. Get it <a
+ href="download.html#july-15">here</a>.
+</blockquote>
+
+@item Jul 14, 2001
+
+<blockquote>
+ A <a
+ href="http://lists.ximian.com/archives/public/mono-list/2001-July/000399.html">new
+ release</a> of the
+ runtime, compiler and classes has been made. Get it <a href="download.html#july-14">here</a>
+</blockquote>
+
+@item Jul 12, 2001
+
+<blockquote>
+ I keep getting questions about my opinion on Passport, even when
+ Mono has <b>nothing</b> to do with it. I finally <a
+ href="passport.html">wrote something.</a>
+</blockquote>
+
+@item Jul 9, 2001
+
+<blockquote>
+ Project launched.
+</blockquote>
+
+@item O'Reilly
+
+<blockquote>
+ Brian posted a story on <a
+ href="http://www.oreillynet.com/dotnet">O'Reilly Network .NET</a>
+</blockquote>
diff --git a/doc/java b/doc/java
new file mode 100755
index 00000000000..adcd888f1be
--- /dev/null
+++ b/doc/java
@@ -0,0 +1,66 @@
+* Java
+
+ <b>This is an outline on how to support Java, actual
+ implementations of ideas like this can be found <a href="http://radio.weblogs.com/0109845/">here</a></b>
+
+
+ It would be interesting to support the Java language as part
+ of the Mono project.
+
+ You have to think of Java as various pieces: Java the
+ language and Java the virtual machine.
+
+ It is possible to compile Java to .NET, as shown by the
+ Microsoft J# compiler. We could then allow the migration of
+ Java applications to the Mono runtime.
+
+** Native compiler
+
+ Although a native compiler can be built, and probably should be
+ built using an existing compiler, a short term solution is to
+ build a translator from Java class files to the ECMA CIL images.
+
+ This has the advantage that we can use an existing and tested
+ Java compiler to generate the code, and then we can use an automated
+ code compiler that compiles Java VM bytecodes to CIL bytecodes.
+
+** The translator.
+
+ It would be interesting to write a semantic translator that
+ converts java byte codes into CIL opcodes. This is possible
+ because the Java byte codes are a subset of the CIL ones.
+
+ A semantic tree needs to be constructed (very much in the
+ spirit of what is done in mono_analize_stack in
+ <tt>mono/mono/jit/jit.c</tt>. Once such a semantic tree is
+ constructed, we could generate the equivalent Java code.
+
+ This has a number of interesting side effects: people can
+ continue to use their existing Java compilers to compile their
+ code, and a simple tool that converts their .class files into
+ a .NET assembly can be used.
+
+** Libraries
+
+ We could translate the GNU Classpath libraries with the above
+ tools to provide the Java runtime required to host into the
+ Mono runtime. Some special treatment would be required for
+ core data types like integers, arrays and strings, and of
+ course reuse where possible existing classes from .NET to make
+ them compatible.
+
+** JILC - Java to IL Compiler
+
+ This is an attempt to make the java bytecode available for the
+ .NET environment.
+
+ The project attempts to generate the IL code / bytecode from the
+ compiled java class files. It has reached the stage of code-generation.
+ The issues that needs to be addressed is the mapping of java objects
+ to the IL objects, eg: java.lang.String to System.String.
+
+ Gaurav Vaish and Abhaya Agarwal are currently leading this project.
+ The project is currently hosted at <a href="http://sourceforge.net/projects/jilc">SourceForge.Net</a>.
+ The official home page of the project is
+ <a href="http://jilc.sourceforge.net">http://jilc.sourceforge.net</a>.
+
diff --git a/doc/jit-debug b/doc/jit-debug
new file mode 100644
index 00000000000..d5cfef4fcb2
--- /dev/null
+++ b/doc/jit-debug
@@ -0,0 +1,23 @@
+* Debugging information
+
+ Compile your programs using the `-g' flag in MCS, that will generate a file
+ with the extension .dbg containing the dwarf symbols for your executable.
+
+ To get stack traces with line number information, you need to run your
+ program like this:
+
+ <b>
+ mono --debug program.exe
+ </b>
+
+ Notice that the program will need to be compiled with the -g
+ flag and that running with --debug will slow down the execution.
+
+* Mono Debugger
+
+ A new debugger has been created in C# and using Gtk# for its
+ user interface, this will simplify the debugging of CLI applications.
+
+ Stay turned for its first public release.
+
+ \ No newline at end of file
diff --git a/doc/jit-debug-sample b/doc/jit-debug-sample
new file mode 100644
index 00000000000..650d67f8ca9
--- /dev/null
+++ b/doc/jit-debug-sample
@@ -0,0 +1,86 @@
+* A debugging session using a dynamically generated symbol file.
+
+ Let's assume we have the following C# application which we want to debug:
+
+ <pre>
+ using System;
+
+ public class Foo
+ {
+ public struct MyStruct {
+ int a;
+ long b;
+ double c;
+ }
+
+ public static void Main ()
+ {
+ Int32 value = 5;
+ long test = 512;
+
+ MyStruct my_struct;
+ my_struct.a = 5;
+ my_struct.b = test;
+ my_struct.c = 23323.5235;
+ }
+ }
+ </pre>
+
+ First of all, we need to compile it and create the .il files:
+
+ <pre>
+ $ mcs ./Foo.cs
+ $ monodis /home/export/martin/MONO-LINUX/lib/corlib.dll > corlib.il
+ $ monodis Foo.exe > Foo.il
+ </pre>
+
+ Now we can start the JIT in the debugger:
+
+ <pre>
+ $ gdb ~/monocvs/mono/mono/jit/mono
+ (gdb) r --debug=dwarf --break Foo:Main ./Foo.exe
+ Starting program: /home/martin/monocvs/mono/mono/jit/mono --debug=dwarf --break Foo:Main ./Foo.exe
+ 0x081e8911 in ?? ()
+ (gdb) call mono_debug_make_symbols ()
+ (gdb) add-symbol-file /tmp/Foo.o
+ Reading symbols from /tmp/Foo.o...done.
+ Current language: auto; currently c++
+ (gdb) frame
+ #0 Foo.Main () at Foo.il:26
+ 26 // method line 2
+ (gdb) n
+ Foo.Main () at Foo.il:38
+ 38 IL_0000: ldc.i4.5
+ (gdb) list
+ 33 .maxstack 2
+ 34 .locals (
+ 35 int32 V_0,
+ 36 int64 V_1,
+ 37 valuetype MyStruct V_2)
+ 38 IL_0000: ldc.i4.5
+ 39 IL_0001: stloc.0
+ 40 IL_0002: ldc.i4 512
+ 41 IL_0007: conv.i8
+ 42 IL_0008: stloc.1
+ 43 IL_0009: ldloca.s 2
+ 44 IL_000b: ldc.i4.5
+ 45 IL_000c: stfld int32 .MyStruct::a
+ 46 IL_0011: ldloca.s 2
+ 47 IL_0013: ldloc.1
+ 48 IL_0014: stfld int64 .MyStruct::b
+ 49 IL_0019: ldloca.s 2
+ 50 IL_001b: ldc.r8 23323.5
+ 51 IL_0024: stfld float64 .MyStruct::c
+ 52 IL_0029: ret
+ (gdb) until 52
+ Foo.Main () at Foo.il:53
+ 53 }
+ (gdb) info locals
+ V_0 = 5
+ V_1 = 512
+ V_2 = {a = 5, b = 512, c = 23323.523499999999}
+ </pre>
+
+ As you see in this example, you need to know IL code to use this debugging method - but
+ it may be the only way to debug a library.
+
diff --git a/doc/jit-debug-sample2 b/doc/jit-debug-sample2
new file mode 100644
index 00000000000..4e4cc31bc4f
--- /dev/null
+++ b/doc/jit-debug-sample2
@@ -0,0 +1,70 @@
+* A debugging session using a symbol file which has been created by MCS.
+
+ Let's assume we have the following C# application which we want to debug:
+
+ <pre>
+ using System;
+
+ public class Foo
+ {
+ public struct MyStruct {
+ int a;
+ long b;
+ double c;
+ }
+
+ public static void Main ()
+ {
+ Int32 value = 5;
+ long test = 512;
+
+ MyStruct my_struct;
+ my_struct.a = 5;
+ my_struct.b = test;
+ my_struct.c = 23323.5235;
+ }
+ }
+ </pre>
+
+ First of all, we need to compile it with MCS, assemble the generated .s file and
+ create the .il files for all referenced assemblies which were not compiled with MCS:
+
+ <pre>
+ $ mcs -g ./Foo.cs
+ $ as -o Foo-debug.o Foo-debug.s
+ $ monodis /home/export/martin/MONO-LINUX/lib/corlib.dll > corlib.il
+ </pre>
+
+ Now we can start the JIT in the debugger:
+
+ <pre>
+ $ gdb ~/monocvs/mono/mono/jit/mono
+ (gdb) r --debug=dwarf-plus --break Foo:Main ./Foo.exe
+ Starting program: /home/martin/monocvs/mono/mono/jit/mono --debug=dwarf-plus --break Foo:Main ./Foo.exe
+ Program received signal SIGTRAP, Trace/breakpoint trap.
+ 0x081e8681 in ?? ()
+ (gdb) call mono_debug_make_symbols ()
+ (gdb) add-symbol-file Foo-debug.o
+ (gdb) add-symbol-file /tmp/corlib.o
+` (gdb) frame
+ #0 Main () at ./Foo.cs:11
+ 11 public static void Main ()
+ (gdb) n
+ Main () at ./Foo.cs:13
+ 13 Int32 value = 5;
+ (gdb)
+ 14 long test = 512;
+ (gdb)
+ 17 my_struct.a = 5;
+ (gdb)
+ 18 my_struct.b = test;
+ (gdb)
+ 19 my_struct.c = 23323.5235;
+ (gdb)
+ 20 }
+ (gdb) info locals
+ value = 5
+ test = 512
+ my_struct = { a = 5, b = 512, c = 23323.5235 }
+ </pre>
+
diff --git a/doc/languages b/doc/languages
new file mode 100755
index 00000000000..da970e0af96
--- /dev/null
+++ b/doc/languages
@@ -0,0 +1,142 @@
+* Compilers for other languages
+
+ Here are some other free compilers for other languages that
+ target .NET and should work with Mono with no problem:
+
+ <ul>
+ * <a href="#ComponentPascal">Component Pascal</a>
+ * <a href="#MonoLogo">MonoLogo</a>
+ * <a href="#Oberon">Oberon</a>
+ * <a href="#Forth">Forth</a>
+ * <a href="#mbas">Mono Basic</a> (Mono's VB.NET compiler)
+ </ul>
+
+ Languages which are known to run, but we have not done a
+ complete ran of all their regression tests to validate it:
+
+ <ul>
+ * Kylix.NET.
+ </ul>
+
+ Languages we would like to have supported, with links to resources:
+
+ <ul>
+ * <a href="#JavaScript">Java Script</a>
+ * <a href="#java.html">Java</a>
+ * <a href="#c">C</a>
+ </ul>
+
+ Some experimental languages:
+
+ <ul>
+ * <a href="#Tachy">Tachy</a> (scheme-like)
+ </ul>
+
+<a name="Java">
+** Java
+
+ There is a very interesting project to make a JavaVM for .NET
+ <a href="http://radio.weblogs.com/0109845/">here</a>.
+ Currently this will not work with Mono, as they use some
+ pieces of Managed C++ to implement the JNI interface.
+
+ A workaround has been discussed, contact the author if you want to contribute.
+
+<a name="MonoLogo">
+** MonoLogo
+
+ An implementation of Logo for Mono (and .NET)
+
+ The <A href="http://monologo.sf.net">Mono Logo</a> compiler is
+ hosted in the <a href="ccvs.html">Mono CVS</a> repository
+ and also available on the <a href="anoncvs.html">AnonCVS</a> mirrors.
+
+<a name="mbas">
+** Mono Basic (Mono's VB.NET compiler)
+
+ Work has resumed on the Mono Visual Basic compiler (currently
+ called mbas). It is part of the standard Mono distribution,
+ but its still an early compiler.
+
+<a name="Oberon">
+** Oberon
+
+ This Oberon compiler is written in Oberon.NET (another self
+ hosting compiler).
+
+ The main site <a href="http://www.oberon.ethz.ch/oberon.net/">http://www.oberon.ethz.ch/oberon.net/</a>
+
+ Download:
+ <a href="http://www.oberon.ethz.ch/oberon.net/download/">http://www.oberon.ethz.ch/oberon.net/download/</a>
+
+ Examples:
+ <a href="http://www.oberon.ethz.ch/oberon.net/examples/">http://www.oberon.ethz.ch/oberon.net/examples/</a>
+
+
+ <a href="http://www.superin.formativ.net/mono/oberon/oberon.zip">http://www.superin.formativ.net/mono/oberon/oberon.zip</a>
+
+<a name="ComponentPascal">
+** Component Pascal
+
+ The Component Pascal compiler: <a
+ href="http://www2.fit.qut.edu.au/CompSci/PLAS/ComponentPascal">Home
+ Page</a>, you can <a
+ href="http://www2.fit.qut.edu.au/CompSci/PLAS/ComponentPascal/gpcp1.1.4-netRTM.zip">
+ download it</a>
+
+<a name="Forth">
+** Delta Forth
+
+ The Delta Forth.NET project: <a
+ href="www.dataman.ro/dforth">Home
+ Page</a> and <a href="http://www.dataman.ro/dforth/index.html">more
+ details here</a>.
+
+
+<a name="Tachy">
+** Tachy
+
+ A subset of Scheme language called <a
+ href="http://radio.weblogs.com/0101156/stories/2002/03/19/tachy.html">Tachy</a>
+
+* Missing languages
+
+ Here is a list of a few languages that we would like to see
+ supported. We will try to maintain a set of links here with
+ technical information for those interested in porting,
+ implementing or adapting a compiler for any of these
+ languages:
+
+<a name="JavaScript">
+* Java Script
+
+ The Mozilla project has an implementation of JavaScript
+ written in Java called <a
+ href="http://www.mozilla.org/rhino/">Rhino</a>.
+
+ You could port this code from Java to C#.
+
+ Note that since JavaScript allows for evaluation at runtime,
+ the compiler has to be built as a class that can be invoked at
+ runtime.
+
+<a name="c">
+* C
+
+ Ideally GCC could be modified to generate CIL, but it is a
+ big task. That would give us various compilers in one pass.
+
+ <a href="http://www.cs.princeton.edu/software/lcc">LCC</a> 4.2
+ has been recently released. This release adds support for compiling
+ ANSI C programs to CIL. Note that the CIL support only works on Win32
+ right now, but should be easy to convert to Mono/other architectures.
+
+ LCC is not an open source compiler, but it is free as long as you
+ do not profit from selling it.
+
+<a name="Java">
+* Java
+
+ We have a <a href="java.html">separate page</a> for Java.
+
+
diff --git a/doc/mailing-lists b/doc/mailing-lists
new file mode 100644
index 00000000000..366e6c42cc6
--- /dev/null
+++ b/doc/mailing-lists
@@ -0,0 +1,211 @@
+* Mailing Lists
+
+ Most of the mailing lists are in english, but there is also
+ Mono Hispano that has lists in Spanish. <a
+ href="http://mono.es.gnome.org/mailman/listinfo/mono-hispano">Mono Hispano list</a>
+
+ There are a number of mailing lists for Mono in English:
+
+ <table>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-list">mono-list</a></b>
+ </td>
+ <td>
+ The general Mono discussion list.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-announce-list">mono-announce-list</a></b>
+ </td>
+ <td>
+ Announcements of Mono developments.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-gc-list">mono-gc-list</a></b>
+ </td>
+ <td>
+ Discussion on the GC system of Mono.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-patches">mono-patches</a></b>
+ </td>
+ <td>
+ Track the CVS activity of Mono on this mailing list (patches are sent to recipients).
+ You can get <a href="http://www.go-mono.com/snapshots">daily snapshots</a> as well.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-cvs-list">mono-cvs-list</a></b>
+ </td>
+ <td>
+ Track the CVS activity of Mono on this mailing list.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-docs-list">mono-docs-list</a></b>
+ </td>
+ <td>
+ Discussion on the documentation of Mono.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a href="http://lists.ximian.com/mailman/listinfo/mono-bugs">mono-bugs</a></b>
+ </td>
+ <td>
+ This mailing list is used to keep track of the bugs in Mono as reported
+ in <a href="http://bugzilla.ximian.com">Bugzilla.ximian.com</a>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <b><a
+ href="http://lists.ximian.com/mailman/listinfo/mono-winforms-list">mono-winforms-list</a></b>
+ </td>
+ <td>
+ Used to discuss the Windows.Forms implementatation for Mono using Wine.
+ </td>
+ </tr>
+ </table>
+
+ Other mailing lists of interest:
+
+ <ul>
+ * <b><a
+ href="http://discuss.develop.com/dotnet.html">Dotnet mailing
+ list at Develop.com:</a></b> The guys at Develop Mentor run
+ this general purpose mailing list.
+ </ul>
+ </ul>
+
+* Google search of the archives
+
+<!-- Google Search with mods -->
+<center>
+
+<table>
+<tr>
+<td><a href="http://www.google.com/search"><img src="mailing-lists_files/Logo_40wht.gif" border="0" alt="Google" align="middle"></a></td>
+
+<td>
+<table>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face="arial,sans-serif" size="-1"><input type="hidden" name="domains" value="www.go-mono.com;lists.ximian.com"><br><input type="radio" name="sitesearch" value="www.go-mono.com"> Search www.go-mono.com <input type="radio" name="sitesearch" value="lists.ximian.com"> Search lists.ximian.com </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-list">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>list</b> </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-announce-list">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>announce-list</b> </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-bugs">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>bugs</b> </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-gc-list">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>gc-list</b> </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-cvs-list">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>cvs-list</b> </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+<tr><td>
+<FORM method=GET action=http://www.google.com/custom>
+<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
+<tr valign=top>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value="">
+<INPUT TYPE=hidden name=q size=31 maxlength=255 value="mono-patches">
+<INPUT type=submit name=sa VALUE="Search">
+<input type="hidden" name="cof" value="GIMP:#00ff00;T:#ffffff;LW:401;BIMG:http://www.go-mono.com/images/bgsquares.gif;ALC:#ffffff;L:http://www.go-mono.com/images/mono.gif;GFNT:#cc7700;LC:#ee9900;LH:80;BGC:#444444;AH:center;VLC:#cccccc;S:http://www.go-mono.com;GALT:#eeee00;AWFID:45753ce73241ef7a;">
+<font face=arial,sans-serif size=-1><input type=hidden name=domains value="lists.ximian.com"><br> <input type=hidden name=sitesearch value="lists.ximian.com"> Search mono-<b>patches</b> </font><br>
+</td></tr></TABLE>
+</FORM>
+</tr></td>
+
+
+</table>
+</tr>
+</table>
+
+</center>
+<!-- /Google Search with mods -->
diff --git a/doc/mbas b/doc/mbas
new file mode 100644
index 00000000000..49247b5c527
--- /dev/null
+++ b/doc/mbas
@@ -0,0 +1,54 @@
+* mbas: Mono's Basic.NET Compiler.
+
+ MBAS is a CIL compiler for the Visual Basic language, an extended
+ version of VisualBasic.NET. It's based on the MCS compiler
+ and still in heavy development, though many language features are
+ already supported.
+
+** What works
+
+ <ul>
+
+ * Classes, Fields and Methods. Properties are still
+ being worked on.
+
+ * Module definition and Sub functionality (TODO: Function's)
+
+ * Namespace Import, so can you reference, instantiate
+ and call external assemblies
+
+ * Parameter passing between Sub's. ByVal and ByRef
+ parameters are being worked on.
+
+ * Delegates
+
+ * Object creation
+
+ * Events - to a limited extent. You can declare a
+ Class-Field as 'WithEvents' and dynamic events (i.e
+ AddHandler MyButton.Click, Button1_OnClick). Please
+ beware: just after committing the code, I discovered
+ that the handler field in the AddHandler call is
+ case-sensitive, a remnant of mBas' mcs heritage)
+
+ * Statements supported are 'If..Then..Else' ,
+ 'While..End While' and assignment statements. Simple
+ operators (+, -, *, /, >, <, =) should also
+ work. Other statements (For..Next, etc.) should be
+ quite trivial to implement.
+ </ul>
+
+ A lot of this stuff is implemented rebuilding proper expressions and
+ statements on top of the classes provided by mcs (look at the grammar -
+ mb-parser.jay - and compare it with cs-parser.jay, if interested).
+
+** TODO-list
+
+ At this stage almost every element of the language must be still checked for
+ conformance to MS'implementation. Help is particularly needed for those areas
+ I know little of (mcs internals are still quite obscure to me). I'd like to
+ implement class properties, the missing statements, exception handling,
+ structures and actual event support (not necessarily in this order). Once we
+ have all this stuff set up and reasonably bug-free, more work could be done
+ on helper functions and Object-vars handling.
+
diff --git a/doc/mono-beginning b/doc/mono-beginning
new file mode 100644
index 00000000000..970eed63f6e
--- /dev/null
+++ b/doc/mono-beginning
@@ -0,0 +1,34 @@
+* Mono for beginners
+
+ Hinne Hettema and Jaime Anguiano Olarra are providing us with
+ nice and complete set of documents (HOWTOs) about how to install,
+ configure, run and test the software developed by the Mono Project.
+
+ You can read them online, get PDF versions or get the XML sources.
+
+
+ HTML Format (read it online)
+
+ For <a href="mono-beginning/t1.html">RPM Linux based systems</a>
+
+ For <a href="http://monoevo.sourceforge.net/mono-windows/mono-beginning-windows/t1.html">Microsoft Windows</a>
+
+
+ PDF Format
+
+ For <a href="mono-beginning.pdf">RPM Linux based systems</a>
+
+
+ XML Source
+
+ For <a href="mono-beginning.xml">RPM Linux based systems</a>
+
+ For <a href="http://monoevo.sourceforge.net/mono-windows/mono-beginning-windows.xml">Microsoft Windows</a>
+
+
+ Currently Hinne is working on a Mono Tools HOWTO. Which will be
+ very useful for the hackers that would like to get in touch with
+ Mono and Jaime is working out a Mono Beginning HOWTO for Debian
+ users.
+
+
diff --git a/doc/mono-beginning-windows.xml b/doc/mono-beginning-windows.xml
new file mode 100644
index 00000000000..a6f34da77f0
--- /dev/null
+++ b/doc/mono-beginning-windows.xml
@@ -0,0 +1,1065 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" []>
+<article>
+
+ <articleinfo>
+
+ <!-- Use "HOWTO", "mini HOWTO", "FAQ" in title, if appropriate -->
+ <title>Mono Beginners HOWTO for Windows users</title>
+
+ <author>
+ <firstname>Jaime</firstname>
+ <surname>Anguiano Olarra</surname>
+ <affiliation>
+ <address><email>jaime@geneura.ugr.es</email></address>
+ </affiliation>
+ </author>
+
+ <author>
+ <firstname>Hinne</firstname>
+ <surname>Hettema</surname>
+ <affiliation>
+ <address><email>h.hettema@auckland.ac.nz</email></address>
+ </affiliation>
+ </author>
+
+ <pubdate>2002-08</pubdate>
+
+ <!-- Most recent revision goes at the top; list in descending order -->
+ <!-- All dates specified in ISO "YYYY-MM-DD" format -->
+ <revhistory>
+ <revision>
+ <revnumber>0.1</revnumber>
+ <date>2002-08-05</date>
+ <authorinitials>JA</authorinitials>
+ <revremark>First release</revremark>
+ </revision>
+ </revhistory>
+
+ <!-- Provide a good abstract; a couple of sentences is sufficient -->
+ <abstract>
+ <para>
+ The goal of this document is to guide people through the setup of a Mono
+ framework in a Windows box. Because some people might want to just test
+ Mono a bit and use the compiler, etc, I have made two distinctions, one
+ for the Mono user that only wants to get precompiled binaries and another
+ for the one how wants to build Mono from the CVS and probably contribute
+ to the project actively. Each kind of user has to read the corresponding
+ part of this document. I hope a lot of Windows users will get a nice
+ approach to the free software world by starting using Mono.
+ </para>
+ </abstract>
+
+ </articleinfo>
+
+<sect1 id="intro">
+<title>Introduction</title>
+
+<para>
+Mono is an open source implementation of the Common Language Infrastructure
+(CLI) specified in ECMA standard 335. It comes with a C# compiler and
+provides an extensible platform to develop and run applications that
+are interoperable with Microsoft .NET.
+</para>
+
+<para>
+Mono is not finished--it is a project still under development. As a
+result, installation and configuration may not be as smooth as you
+will be used to from other Linux or Windows applications. Nevertheless,
+mono is in a state that will allow you to get it up and running and gain
+experience with it--which is, I would suggest, a very smart thing to do.
+</para>
+
+<para>
+This document is aimed at the mono beginner, and aims to present a complete
+view of a minimal installation, which will allow you to experiment with
+mono to some degree. It also describes some of those experiments. We
+expect that after reading this document you'll go on to do either of
+two things:
+</para>
+<orderedlist>
+<listitem>
+<para>
+Continue to contribute to the mono project in some shape or form. The
+website has some ideas and suggestions under the heading 'Contributing'.
+</para>
+</listitem>
+<listitem>
+<para>
+Continue to write applications that run in mono.
+</para>
+</listitem>
+</orderedlist>
+
+<para>
+We hope this document will be useful to you in your first steps with mono.
+Happy hacking!
+</para>
+
+<sect2 id="disclaimer"> <title>Disclaimer</title>
+
+<para>
+No liability for the contents of this document can be accepted.
+Use the concepts, examples and information at your own risk. There may
+be errors and inaccuracies, that could be damaging to your system.
+Proceed with caution, and although this is highly unlikely, the author(s)
+do not take any responsibility.
+</para>
+
+<para>
+All copyrights are held by their by their respective owners,
+unless specifically noted otherwise. Use of a term in this document
+should not be regarded as affecting the validity of any trademark or
+service mark. Naming of particular products or brands should not be
+seen as endorsements.
+</para>
+</sect2>
+
+<!-- Give credit where credit is due...very important -->
+<sect2 id="credits"> <title>Credits / Contributors</title>
+
+<para> Credits are due to </para>
+<itemizedlist>
+<listitem>
+<para>Hinne Hettema <email>h.hettema@auckland.ac.nz</email>
+for creating the xml template I used for this document, for
+reviewing and make an excellent job with the other HOWTO and
+for his feedback. As you can see a lot of his work has been
+included in this document too.
+</para>
+</listitem>
+<listitem>
+<para>
+The Mono Hackers.
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<!-- Feedback -->
+<sect2 id="feedback"> <title>Feedback</title>
+
+<para>
+Feedback is most certainly welcome for this document. Send your
+additions, comments and criticisms to the following email address:
+<email>mono-docs-list@ximian.com</email>. I am lurking on this list
+and will maintain this document as required.
+</para>
+</sect2>
+</sect1>
+
+<!-- This is the preamble stuff over with the rest of document follows... -->
+<sect1 id="installation">
+<title> Installing Mono</title>
+
+<sect2 id="obtaining">
+<title>Obtaining Mono</title>
+<para>
+In order to obtain the required software you just need to visit the
+Mono download page at http://www.go-mono.org/download or any of the
+related sites.
+</para>
+
+<para>
+You'll be able to complete everything in this document if you just install
+the runtime, but taking a look at the compiler package is well worth the
+effort. The compiler is written in C# and is 'self hosting' which means it
+is able to compile itself.
+</para>
+
+<para>
+This page also lists the current versions of the software
+mono depends on. Make sure that your system has all the
+required versions, otherwise mono won't compile.
+</para>
+
+</sect2>
+
+<sect2 id="easyinstall">
+<title>Installing Mono on Windows, the easy way</title>
+<para>
+ Oh. This is a very easy task now. If you just want to take a look at
+ the possibilities of Mono get the Mono installer from the site of
+ Johannes Roith &lt;johannes\@jroith.de&gt;:
+</para>
+
+<para>
+ http://www.superin.informativ.net/mono/mono.htm. You can get a link in
+</para>
+<para>
+ the download section of the Mono site too: http://www.go-mono.org/download
+</para>
+<para>
+ Then you just need a Windows machine. Better use
+ Windows 2000 Professional. </para>
+<para>
+ Once you've got it, run the installer.
+</para>
+<para>
+ Remember, building your own Mono runtime and compiler from the sources
+ is strongly recommended. You won't discover the power of Mono until
+ you get it made this way. If you feel hungry about real programming with
+ Mono, proceed like in the next section.
+</para>
+</sect2>
+
+<sect2 id="hardinstall">
+<title>Building Mono under Windows</title>
+<itemizedlist>
+ <listitem>
+ <para>
+ 1.- Get Windows 2000 Professional or any Windows System supporting .NET SDK.
+ Avoid using XP and the redistributable version of the SDK (necessary for
+ WinME, etc).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 2.- Get the latest Cygwin distribution, be sure you install the GNU Build Tools
+ packages. Take the openssh package if you plan to contribute to the project.
+ If you feel insecure about the packages you need to install, install all of
+ them, of course, Text, Admin, Games and Web are not necessary at all and you
+ can pass of those. The fitness of your choice will depend of your knowledge
+ on Linux and/or Cygwin. If in doubt install all.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 3.- Install the .NET SDK.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 4.- Install Cygwin.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 5.- Get http://www.go-mono.org/mono-build-w32.sh and put it into your home
+ directory in the cygwin setup.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 6.- Enter your cygwin environment. If you have an account in the mono cvs, then
+ export the variables as shown in http://www.go-mono.org/ccvs.html
+ </para>
+
+ <programlisting>
+ This means. Enter: export CVSROOT=user@mono-cvs.ximian.com:/cvs/public
+
+ and export CVS_RSH=ssh
+ </programlisting>
+ <para>
+ If you have no account DO NOTHING.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 7.- Enter:
+ <programlisting>
+ export ACLOCAL_FLAGS="-I /usr/local/share/aclocal"
+ and this: export PKG_CONFIG_PATH="/usr/local/bin"
+ </programlisting>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 8.- Run the script (mono-build-w32.sh)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 9.- All should work fine know and you should see it download what necessary and
+ build mono.
+ </para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="errors">
+<title>Troubleshooting</title>
+<para>
+ If you have noticed problems during step 8 and the execution stops because of
+ errors as I cannot find that or such library or alike, try to:
+</para>
+
+<itemizedlist>
+<listitem>
+ <para>
+ 1.- Create a directory mono-temp for example.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 2.- Move and unzip all the zips the mono-build script downloads to /usr/local
+ to that new directory. Do it one by one, copying the content of the created
+ subdirectories (include, bin, etc) to their respectives in /usr/local. Take
+ care, some libraries like libglib... must go into /usr/local/bin and not
+ into /usr/local/lib.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 3.- Jump into the /usr/local/mono directory and run ./autogen.sh
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 4.- Then run ./configure and after it: make and finally: make install.
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+</sect1>
+
+<sect1 id="running">
+<title>Running mono</title>
+<sect2 id="basic">
+<title>Basic steps</title>
+<para>
+To work with mono, you first have to create a C# program. Open up
+your favourite editor, and type in the following code:
+</para>
+<programlisting>
+using System;
+
+class Hello
+{
+public static void Main(String[] args)
+ {
+ Console.WriteLine("mono:: is alive and well...");
+
+ for (int i = 0; i < args.Length; i++)
+ Console.WriteLine("Argument {0} = {1}", i, args[i]);
+ }
+}
+</programlisting>
+
+<para>
+Save the file as hello.cs. To compile this into a working program,
+type mcs hello.cs. If you get the following:
+</para>
+<programlisting>
+ mcs hello.cs
+RESULT: 0
+</programlisting>
+<para>
+you know the compile worked fine. If you see some strange error
+messages including the word 'parser' somewhere, you made a mistake in
+your program. Fix this up first.
+</para>
+
+<para>
+You are now ready to execute your first mono program. To execute
+the code, type
+</para>
+
+<programlisting>
+ mono hello.exe arg1 arg2 arg 3
+</programlisting>
+<para>
+(where we have given some arguments just for fun) and you'll
+see the following:
+</para>
+
+<programlisting>
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg2
+Argument 2 = arg
+Argument 3 = 3
+RESULT: 0
+</programlisting>
+<para>
+As you can see, mono printed the line "mono:: is alive and well"
+and printed the list of arguments. This completes the creation
+and execution of your first mono program.
+</para>
+</sect2>
+
+<sect2 id="interpreter">
+<title>Interpreter</title>
+<para>
+But mono will allow you to do more. First of all, mono is the
+compiled mono execution environment which uses the Just in
+Time (JIT) compiler. Mono also comes with an interpreted
+environment, which can be accessed using the command 'mint'
+as follows
+</para>
+<programlisting>
+ mint hello.exe arg1 arg 2
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg
+Argument 2 = 2
+</programlisting>
+<para>
+As you can see, it makes no difference to mono output which
+environment you use, but what happens under the hood is very
+different. If you use 'mono' as the command line tool, you
+call the 'production' execution environment which will read
+your portable executable (PE) file, and call the just in
+time (JIT) compiler to compile the PE code down to machine
+level code (in my case, an x86 architecture) after which
+it is executed.
+</para>
+<para>
+If you use mint, the JIT is not used, and the PE code is
+interpreted into x86 instructions for execution. In fact,
+for our simple 'hello' mint is slightly faster. The point
+is that the JIT compiler will take some time to compile the
+code of our program and store it in some location in memory,
+but the subsequent execution of the code is faster with mono.
+</para>
+
+<para>
+After this simple run of mono, it is time to play with some options.
+I won't cover these in detail since there are quite a few, and also because
+I assume you downloaded mono to hack it around in the first place. So
+I'll leave some pointers.
+</para>
+
+
+<sect3 id="debugging">
+<title>Debugging</title>
+<para>
+Mono supports a debugging option when you specify the "-d" flag while running
+the runtime. Utilising this flag will get you a significant amount of output,
+and it may be an idea to specify an output file as well. The interesting aspect
+of this file is that it allows you to see to some extent (quite precisely,
+actually) what the JIT compiler is up to.
+</para>
+</sect3>
+
+<sect3 id="statistics">
+<title>Statistics</title>
+<para>
+It is also possible to collect some runtime statistics on your program. These
+will give you some idea of the resource utilisation of your program.
+</para>
+<programlisting>
+ mono --stats hello.exe
+mono:: is alive and well...
+RESULT: 0
+Mono Jit statistics
+Compiled methods: 58
+Methods cache lookup: 15
+Method trampolines: 698
+Basic blocks: 188
+Max basic blocks: 15
+Allocated vars: 238
+Analyze stack repeat: 61
+Compiled CIL code size: 2450
+Native code size: 10167
+Max code size ratio: 7.13 (FileStream::FlushBuffer)
+Biggest method: 1016 (StreamWriter::Write)
+Code reallocs: 27
+Allocated code size: 22073
+Inlineable methods: 17
+Inlined methods: 22
+
+Created object count: 18
+Initialized classes: 127
+Used classes: 37
+Static data size: 288
+VTable data size: 8292
+</programlisting>
+</sect3>
+
+</sect2>
+
+<sect2 id="ILAsm_code" >
+<title>Inspecting IL Assembly code</title>
+<para>
+Mono also provides a small tool that will let you disassemble
+the executable (.exe) file so you can have a peek
+under the hood. This tool is monodis, and is run as
+follows:
+
+</para>
+<programlisting>
+ monodis hello.exe
+.assembly extern mscorlib
+{
+ .ver 0:0:0:0
+}
+.assembly 'hello'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+ .class private auto ansi beforefieldinit Hello
+ extends [mscorlib]System.Object
+ {
+
+ // method line 1
+ .method public hidebysig specialname rtspecialname
+ instance default void .ctor() cil managed
+ {
+ // Method begins at RVA 0x20ec
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void System.Object::.ctor()
+ IL_0006: ret
+ } // end of method instance default void .ctor()
+
+ // method line 2
+ .method public static
+ default void Main(string[] args) cil managed
+ {
+ // Method begins at RVA 0x20f4
+ .entrypoint
+ // Code size 56 (0x38)
+ .maxstack 5
+ .locals init (
+ int32 V_0,
+ int32 V_1)
+ IL_0000: ldstr "mono:: is alive and well..."
+ IL_0005: call void System.Console::WriteLine(string)
+ IL_000a: ldc.i4.0
+ IL_000b: stloc.0
+ IL_000c: ldloc.0
+ IL_000d: ldarg.s 0
+ IL_000f: ldlen
+ IL_0010: clt
+ IL_0012: brfalse IL_0037
+
+ IL_0017: ldstr "Argument {0} = {1}"
+ IL_001c: ldloc.0
+ IL_001d: box [mscorlib]System.Int32
+ IL_0022: ldarg.s 0
+ IL_0024: ldloc.0
+ IL_0025: ldelem.ref
+ IL_0026: call void System.Console::WriteLine(string, object, object)
+ IL_002b: nop
+ IL_002c: ldloc.0
+ IL_002d: ldc.i4.1
+ IL_002e: add
+ IL_002f: stloc.1
+ IL_0030: ldloc.1
+ IL_0031: stloc.0
+ IL_0032: br IL_000c
+
+ IL_0037: ret
+ } // end of method default void Main(string[] args)
+
+ } // end of type Hello
+
+
+</programlisting>
+<para>
+This is the listing of the code of your program in a language
+called IL assembly, or Common Intermediate Language (CIL). The
+CIL provides the portability of the mono platform, and ensures
+that code compiled with Microsoft's .NET framework will work
+on mono and vice versa.
+</para>
+</sect2>
+
+<sect2 id="man_pages">
+<title>Man pages</title>
+
+<para>
+Mono has man pages already installed, and generally, typing <command>
+man</command> before the command you wish to execute should help in
+getting a list of the options. In many cases, it's still up to you
+to figure out what they do.
+</para>
+
+</sect2>
+
+
+</sect1>
+
+
+<sect1 id="problems">
+<title>Problems</title>
+<para>
+With mono being as new as it is, it is likely that you will have some
+problems with installation. The following are some ideas to help you
+out in a bind:
+</para>
+
+<orderedlist>
+<listitem>
+<para>
+See the Ximian Bugzilla page to find out if there is a bug
+report about your specific issue.
+</para>
+</listitem>
+
+<listitem>
+<para>Read this document. If it does not solve your problem, we want to
+know about it. Please send a message to the email address listed for
+feedback at the beginning of the document.</para>
+</listitem>
+
+<listitem>
+
+<para>
+Visit the mono mailing lists' archives and do a little
+research in there for threads talking about the problem you have.
+</para>
+</listitem>
+
+<listitem>
+<para>
+If you still cannot correct the problem, send a message to the
+mono list. When you do this, please be as precise as possible--i.e.
+mention the system you are running, the version of mono that you have the
+problem with, and give any error codes and other output that might appear.
+</para>
+</listitem>
+</orderedlist>
+
+</sect1>
+
+
+<!-- Legal Sections --> <sect1 id="copyright">
+ <title>Copyright and License</title>
+
+ <!-- The LDP recommends, but doesn't require, the GFDL --> <para>
+ This document, <emphasis>Running mono</emphasis>, is copyrighted
+ (c) 2002 by <emphasis>Hinne Hettema</emphasis> and
+ <emphasis>Jaime Anguiano Olarra</emphasis>. Permission is
+ granted to copy, distribute and/or modify this document under the
+ terms of the GNU Free Documentation License, Version 1.1 or any later
+ version published by the Free Software Foundation; with no Invariant
+ Sections, with no Front-Cover Texts, and with no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ </para>
+
+<sect2 id="gfdl"> <title>GNU Free Documentation License</title>
+<!-- GNU Project - Free Software Foundation (FSF) -->
+
+<para>Version 1.1, March 2000</para>
+
+<blockquote> <para>Copyright (C) 2000 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is
+permitted to copy and distribute verbatim copies of this license document,
+but changing it is not allowed.</para> </blockquote>
+
+<sect3 id="gfdl-0"> <title>PREAMBLE</title>
+
+<para>The purpose of this License is to make a manual, textbook,
+ or other written document "free" in the sense of freedom: to assure
+ everyone the effective freedom to copy and redistribute it, with
+ or without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher
+ a way to get credit for their work, while not being considered
+ responsible for modifications made by others.</para>
+
+<para>This License is a kind of "copyleft", which means that
+ derivative works of the document must themselves be free in the
+ same sense. It complements the GNU General Public License, which
+ is a copyleft license designed for free software.</para>
+
+<para>We have designed this License in order to use it for manuals
+ for free software, because free software needs free documentation:
+ a free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to software
+ manuals; it can be used for any textual work, regardless of subject
+ matter or whether it is published as a printed book. We recommend
+ this License principally for works whose purpose is instruction
+ or reference.</para>
+</sect3>
+
+<sect3 id="gfdl-1"> <title>APPLICABILITY AND DEFINITIONS</title>
+
+<para>This License applies to any manual or other work that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. The "Document", below,
+ refers to any such manual or work. Any member of the public is a
+ licensee, and is addressed as "you".</para>
+
+<para>A "Modified Version" of the Document means any work
+ containing the Document or a portion of it, either copied verbatim,
+ or with modifications and/or translated into another language.</para>
+
+<para>A "Secondary Section" is a named appendix or a front-matter
+ section of the Document that deals exclusively with the relationship
+ of the publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (For example, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.</para>
+
+<para>The "Invariant Sections" are certain Secondary Sections
+ whose titles are designated, as being those of Invariant Sections,
+ in the notice that says that the Document is released under this
+ License.</para>
+
+<para>The "Cover Texts" are certain short passages of text that
+ are listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License.</para>
+
+<para>A "Transparent" copy of the Document means a
+ machine-readable copy, represented in a format whose specification
+ is available to the general public, whose contents can be viewed and
+ edited directly and straightforwardly with generic text editors
+ or (for images composed of pixels) generic paint programs or
+ (for drawings) some widely available drawing editor, and that is
+ suitable for input to text formatters or for automatic translation
+ to a variety of formats suitable for input to text formatters.
+ A copy made in an otherwise Transparent file format whose markup
+ has been designed to thwart or discourage subsequent modification
+ by readers is not Transparent. A copy that is not "Transparent"
+ is called "Opaque".</para>
+
+<para>Examples of suitable formats for Transparent copies include
+ plain ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML designed for human modification. Opaque formats include
+ PostScript, PDF, proprietary formats that can be read and edited
+ only by proprietary word processors, SGML or XML for which the
+ DTD and/or processing tools are not generally available, and the
+ machine-generated HTML produced by some word processors for output
+ purposes only.</para>
+
+<para>The "Title Page" means, for a printed book, the title page
+ itself, plus such following pages as are needed to hold, legibly,
+ the material this License requires to appear in the title page.
+ For works in formats which do not have any title page as such,
+ "Title Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.</para>
+</sect3>
+
+<sect3 id="gfdl-2"> <title>VERBATIM COPYING</title>
+
+<para>You may copy and distribute the Document in any medium,
+ either commercially or noncommercially, provided that this License,
+ the copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that
+ you add no other conditions whatsoever to those of this License.
+ You may not use technical measures to obstruct or control the
+ reading or further copying of the copies you make or distribute.
+ However, you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.</para>
+
+<para>You may also lend copies, under the same conditions stated
+ above, and you may publicly display copies.</para>
+</sect3>
+
+<sect3 id="gfdl-3"> <title>COPYING IN QUANTITY</title>
+
+<para>If you publish printed copies of the Document numbering more
+ than 100, and the Document's license notice requires Cover Texts, you
+ must enclose the copies in covers that carry, clearly and legibly,
+ all these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The front
+ cover must present the full title with all words of the title equally
+ prominent and visible. You may add other material on the covers
+ in addition. Copying with changes limited to the covers, as long as
+ they preserve the title of the Document and satisfy these conditions,
+ can be treated as verbatim copying in other respects.</para>
+
+<para>If the required texts for either cover are too voluminous to
+ fit legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.</para>
+
+<para>If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with each
+ Opaque copy a publicly-accessible computer-network location containing
+ a complete Transparent copy of the Document, free of added material,
+ which the general network-using public has access to download
+ anonymously at no charge using public-standard network protocols.
+ If you use the latter option, you must take reasonably prudent steps,
+ when you begin distribution of Opaque copies in quantity, to ensure
+ that this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you distribute
+ an Opaque copy (directly or through your agents or retailers) of
+ that edition to the public.</para>
+
+<para>It is requested, but not required, that you contact the
+ authors of the Document well before redistributing any large number
+ of copies, to give them a chance to provide you with an updated
+ version of the Document.</para>
+</sect3>
+
+<sect3 id="gfdl-4"> <title>MODIFICATIONS</title>
+
+<para>You may copy and distribute a Modified Version of the
+ Document under the conditions of sections 2 and 3 above, provided
+ that you release the Modified Version under precisely this License,
+ with the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version
+ to whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:</para>
+
+<orderedlist numeration="upperalpha"> <listitem><para>Use in the
+Title Page
+ (and on the covers, if any) a title distinct from that of the
+ Document, and from those of previous versions (which should, if
+ there were any, be listed in the History section of the Document).
+ You may use the same title as a previous version if the original
+ publisher of that version gives permission.</para>
+</listitem>
+
+<listitem><para>List on the Title Page,
+ as authors, one or more persons or entities responsible for
+ authorship of the modifications in the Modified Version, together
+ with at least five of the principal authors of the Document (all
+ of its principal authors, if it has less than five).</para>
+</listitem>
+
+<listitem><para>State on the Title page
+ the name of the publisher of the Modified Version, as the
+ publisher.</para>
+</listitem>
+
+<listitem><para>Preserve all the
+ copyright notices of the Document.</para>
+</listitem>
+
+<listitem><para>Add an appropriate
+ copyright notice for your modifications adjacent to the other
+ copyright notices.</para>
+</listitem>
+
+<listitem><para>Include, immediately
+ after the copyright notices, a license notice giving the public
+ permission to use the Modified Version under the terms of this
+ License, in the form shown in the Addendum below.</para>
+</listitem>
+
+<listitem><para>Preserve in that license
+ notice the full lists of Invariant Sections and required Cover
+ Texts given in the Document's license notice.</para>
+</listitem>
+
+<listitem><para>Include an unaltered
+ copy of this License.</para>
+</listitem>
+
+<listitem><para>Preserve the section
+ entitled "History", and its title, and add to it an item stating at
+ least the title, year, new authors, and publisher of the Modified
+ Version as given on the Title Page. If there is no section entitled
+ "History" in the Document, create one stating the title, year,
+ authors, and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in the
+ previous sentence.</para>
+</listitem>
+
+<listitem><para>Preserve the network
+ location, if any, given in the Document for public access to
+ a Transparent copy of the Document, and likewise the network
+ locations given in the Document for previous versions it was
+ based on. These may be placed in the "History" section. You may
+ omit a network location for a work that was published at least four
+ years before the Document itself, or if the original publisher of
+ the version it refers to gives permission.</para>
+</listitem>
+
+<listitem><para>In any section entitled
+ "Acknowledgements" or "Dedications", preserve the section's title,
+ and preserve in the section all the substance and tone of each
+ of the contributor acknowledgements and/or dedications given
+ therein.</para>
+</listitem>
+
+<listitem><para>Preserve all the
+ Invariant Sections of the Document, unaltered in their text and in
+ their titles. Section numbers or the equivalent are not considered
+ part of the section titles.</para>
+</listitem>
+
+<listitem><para>Delete any section
+ entitled "Endorsements". Such a section may not be included in
+ the Modified Version.</para>
+</listitem>
+
+<listitem><para>Do not retitle any
+ existing section as "Endorsements" or to conflict in title with
+ any Invariant Section.</para>
+</listitem> </orderedlist> <para>If the Modified Version includes new
+front-matter sections
+ or appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other section
+ titles.</para>
+
+<para>You may add a section entitled "Endorsements", provided it
+ contains nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of
+ a standard.</para>
+
+<para>You may add a passage of up to five words as a Front-Cover
+ Text, and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.</para>
+
+<para>The author(s) and publisher(s) of the Document do not by
+ this License give permission to use their names for publicity for
+ or to assert or imply endorsement of any Modified Version.</para>
+</sect3>
+
+<sect3 id="gfdl-5"> <title>COMBINING DOCUMENTS</title>
+
+<para>You may combine the Document with other documents released
+ under this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all of
+ the Invariant Sections of all of the original documents, unmodified,
+ and list them all as Invariant Sections of your combined work in
+ its license notice.</para>
+
+<para>The combined work need only contain one copy of this
+ License, and multiple identical Invariant Sections may be replaced
+ with a single copy. If there are multiple Invariant Sections with
+ the same name but different contents, make the title of each such
+ section unique by adding at the end of it, in parentheses, the
+ name of the original author or publisher of that section if known,
+ or else a unique number. Make the same adjustment to the section
+ titles in the list of Invariant Sections in the license notice of
+ the combined work.</para>
+
+<para>In the combination, you must combine any sections entitled
+ "History" in the various original documents, forming one section
+ entitled "History"; likewise combine any sections entitled
+ "Acknowledgements", and any sections entitled "Dedications".
+ You must delete all sections entitled "Endorsements."</para>
+</sect3>
+
+<sect3 id="gfdl-6"> <title>COLLECTIONS OF DOCUMENTS</title>
+
+<para>You may make a collection consisting of the Document and
+ other documents released under this License, and replace the
+ individual copies of this License in the various documents with a
+ single copy that is included in the collection, provided that you
+ follow the rules of this License for verbatim copying of each of
+ the documents in all other respects.</para>
+
+<para>You may extract a single document from such a collection,
+ and distribute it individually under this License, provided you
+ insert a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.</para>
+</sect3>
+
+<sect3 id="gfdl-7"> <title>AGGREGATION WITH INDEPENDENT WORKS</title>
+<para>A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume
+ of a storage or distribution medium, does not as a whole count
+ as a Modified Version of the Document, provided no compilation
+ copyright is claimed for the compilation. Such a compilation is
+ called an "aggregate", and this License does not apply to the other
+ self-contained works thus compiled with the Document, on account
+ of their being thus compiled, if they are not themselves derivative
+ works of the Document.</para>
+
+<para>If the Cover Text requirement of section 3 is applicable to
+ these copies of the Document, then if the Document is less than
+ one quarter of the entire aggregate, the Document's Cover Texts
+ may be placed on covers that surround only the Document within
+ the aggregate. Otherwise they must appear on covers around the
+ whole aggregate.</para>
+</sect3>
+
+<sect3 id="gfdl-8"> <title>TRANSLATION</title>
+
+<para>Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include
+ a translation of this License provided that you also include the
+ original English version of this License. In case of a disagreement
+ between the translation and the original English version of this
+ License, the original English version will prevail.</para>
+</sect3>
+
+<sect3 id="gfdl-9"> <title>TERMINATION</title> <para>You may not copy,
+modify, sublicense, or distribute the
+ Document except as expressly provided for under this License.
+ Any other attempt to copy, modify, sublicense or distribute the
+ Document is void, and will automatically terminate your rights under
+ this License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.</para>
+</sect3>
+
+<sect3 id="gfdl-10"> <title>FUTURE REVISIONS OF THIS LICENSE</title>
+
+<para>The Free Software Foundation may publish new, revised
+ versions of the GNU Free Documentation License from
+ time to time. Such new versions will be similar
+ in spirit to the present version, but may differ in
+ detail to address new problems or concerns. See <ulink
+ url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.</para>
+
+<para>Each version of the License is given a distinguishing
+ version number. If the Document specifies that a particular
+ numbered version of this License "or any later version" applies
+ to it, you have the option of following the terms and conditions
+ either of that specified version or of any later version that has
+ been published (not as a draft) by the Free Software Foundation.
+ If the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.</para>
+</sect3>
+
+<sect3 id="gfdl-11"> <title>How to use this License for your
+documents</title>
+
+<para>To use this License in a document you have written, include
+ a copy of the License in the document and put the following copyright
+ and license notices just after the title page:</para>
+
+<blockquote><para> Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being LIST THEIR TITLES,
+ with the Front-Cover Texts being LIST, and with the Back-Cover
+ Texts being LIST. A copy of the license is included in the section
+ entitled "GNU Free Documentation License".
+</para></blockquote>
+
+<para>If you have no Invariant Sections, write "with no Invariant
+ Sections" instead of saying which ones are invariant. If you
+ have no Front-Cover Texts, write "no Front-Cover Texts" instead of
+ "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.</para>
+
+<para>If your document contains nontrivial examples of program
+ code, we recommend releasing these examples in parallel under your
+ choice of free software license, such as the GNU General Public
+ License, to permit their use in free software.</para>
+</sect3> </sect2> </sect1>
+
+</article>
+
+
+
+
+<!-- This document is dedicated to all my friends and to the Mono hackers.
+
+ License
+
+Here goes the GFDL, GNU Free Documentation License. -->
+
diff --git a/doc/mono-beginning.xml b/doc/mono-beginning.xml
new file mode 100644
index 00000000000..6ab1019c225
--- /dev/null
+++ b/doc/mono-beginning.xml
@@ -0,0 +1,1294 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" []>
+<article>
+
+ <articleinfo>
+
+ <!-- Use "HOWTO", "mini HOWTO", "FAQ" in title, if appropriate -->
+ <title>Running Mono</title>
+
+
+ <author>
+ <firstname>Hinne</firstname>
+ <surname>Hettema</surname>
+ <affiliation>
+ <address><email>h.hettema@auckland.ac.nz</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Jaime</firstname>
+ <surname>Anguiano Olarra</surname>
+ <affiliation>
+ <address><email>jaime@genuara.ugr.es</email></address>
+ </affiliation>
+ </author>
+
+ <pubdate>2002-06</pubdate>
+
+ <!-- Most recent revision goes at the top; list in descending order -->
+ <!-- All dates specified in ISO "YYYY-MM-DD" format -->
+ <revhistory>
+ <revision>
+ <revnumber>0.1</revnumber>
+ <date>2002-06-20</date>
+ <authorinitials>HH</authorinitials>
+ <revremark>First release</revremark>
+ </revision>
+ </revhistory>
+
+ <!-- Provide a good abstract; a couple of sentences is sufficient -->
+ <abstract>
+ <para>
+ This document describes how to install mono on your Linux system
+ from the source and describes some simple experiments you can
+ perform with this installation.
+ </para>
+ </abstract>
+
+ </articleinfo>
+
+
+<sect1 id="intro">
+<title>Introduction</title>
+
+<para>
+Mono is an open source implementation of the Common Language Infrastructure
+(CLI) specified in ECMA standard 335. It comes with a C# compiler and
+provides an extensible platform to develop and run applications that
+are interoperable with Microsoft .NET.
+</para>
+
+<para>
+Mono is not finished--it is a project still under development. As a
+result, installation and configuration may not be as smooth as you
+will be used to from other Linux applications. Nevertheless, mono is
+in a state that will allow you to get it up and running and gain
+experience with it--which is, I would suggest, a very smart thing to do.
+</para>
+
+<para>
+This document is limited in the following sense: it describes how to
+download a 'stable' version of mono as a 'tarball' and get it to run on
+your computer. I'm also assuming you run mono on Linux rather than
+on Windows. All the examples have been tested on a 'vanilla' Red Hat 7.3
+installation.
+</para>
+
+<para>
+There are two items this document will <emphasis>not
+</emphasis> cover: the first is how to self host the mcs compiler
+under linux and the second is the graphical user environment
+which is implemented as GTK#. These two interesting topics
+are the subject of two more howto's that I'm planning.
+</para>
+
+<para>
+This document is also less useful for two types of people.
+</para>
+<itemizedlist>
+<listitem>
+<para>
+If you are a very inexperienced linux user and want to know what mono is
+all about, there is an easier way to install mono. Go to mono.baselabs.org
+and download the rpm's ready for installation on your system. This site also
+runs a tutorial that is worth reading.
+</para>
+</listitem>
+<listitem>
+<para>
+If you are a very experienced user wanting to contribute to the mono code,
+you should probably regularly do a CVS download. At the moment, the mono
+code grows very fast, and the 'stable' releases still appear too slowly.
+</para>
+</listitem>
+
+</itemizedlist>
+
+<para>
+This document is aimed at the mono beginner, and aims to present a complete
+view of a minimal installation, which will allow you to experiment with
+mono to some degree. It also describes some of those experiments. We
+expect that after reading this document you'll go on to do either of
+two things:
+</para>
+<orderedlist>
+<listitem>
+<para>
+Continue to contribute to the mono project in some shape or form. The
+website has some ideas and suggestions under the heading 'Contributing'.
+</para>
+</listitem>
+<listitem>
+<para>
+Continue to write applications that run in mono.
+</para>
+</listitem>
+</orderedlist>
+
+<para>
+We hope this document will be useful to you in your first steps with mono.
+Happy hacking!
+</para>
+
+<sect2 id="note">
+<title>A note on the development of this document</title>
+<para>
+This document is expected to grow into a full 'running mono howto' over time.
+As of yet, it does not really discuss some of the excellent efforts of others
+to package mono into an rpm or deb and prepare it for easy installation.
+It is our aim to include this in future versions of this document.
+</para>
+</sect2>
+
+<sect2 id="prerequisites">
+<title>Prerequisites</title>
+<para>
+This document assumes you are somewhat familiar with the architecture
+of the Common Language Infrastructure and the C# programming language.
+</para>
+
+<para>
+To compile mono on your system, you will also have to satisfy
+some dependencies on other software. A list of these are given
+on the mono download page. Read through this list to see if
+you've got all components.
+</para>
+
+<para>
+On a practical note, I had no dependency issues with the
+installation of mono 0.12 on a 'standard issue' Red Hat 7.3 build.
+</para>
+
+</sect2>
+
+<sect2 id="disclaimer"> <title>Disclaimer</title>
+
+<para>
+No liability for the contents of this document can be accepted.
+Use the concepts, examples and information at your own risk. There may
+be errors and inaccuracies, that could be damaging to your system.
+Proceed with caution, and although this is highly unlikely, the author(s)
+do not take any responsibility.
+</para>
+
+<para>
+All copyrights are held by their by their respective owners,
+unless specifically noted otherwise. Use of a term in this document
+should not be regarded as affecting the validity of any trademark or
+service mark. Naming of particular products or brands should not be
+seen as endorsements.
+</para>
+</sect2>
+
+<!-- Give credit where credit is due...very important --> <sect2
+id="credits"> <title>Credits / Contributors</title>
+
+<para> This document was originally created by Jaime Anguiano Olarra,
+but has been extensively rewritten. Credits are due to </para>
+<itemizedlist>
+<listitem>
+<para>Jaime Anguiano Olarra <email>jaime@geneura.ugr.es</email>
+for creating the original version of this document, and in fact
+the document that got me through installing mono for the first time.
+</para>
+</listitem>
+<listitem>
+<para>
+My partner Margaret for support on my more exotic ventures.
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<!-- Feedback -->
+<sect2 id="feedback"> <title>Feedback</title>
+
+<para>
+Feedback is most certainly welcome for this document. Send your
+additions, comments and criticisms to the following email address:
+<email>mono-docs-list@ximian.com</email>. I am lurking on this list
+and will maintain this document as required.
+</para>
+</sect2>
+</sect1>
+
+<!-- This is the preamble stuff over with the rest of document
+follows... -->
+<sect1 id="installation">
+<title> Installing Mono</title>
+
+<sect2 id="obtaining">
+<title>Obtaining Mono</title>
+<para>
+There are several ways to get Mono running on your computer. This
+document will discuss only one of those: downloading the source tarball
+and utilising the make utilities to get mono up and running. There is
+only one mono package to worry about if you are just after a 'base' install
+of mono: the mono runtime. This package, found under the name "mono-x.xx"
+has got a compiled version of the compiler built in.
+</para>
+
+<para>
+You'll be able to complete everything in this document if you just install
+the runtime, but taking a look at the compiler package is well worth the
+effort. The compiler is written in C# and is 'self hosting' which means it
+is able to compile itself.
+</para>
+
+<para>
+As of this moment, it is my understanding that there are still some issues
+with the 'self hosting' bit of the compiler on linux, although this is
+expected to work in later versions of mono. If you are just interested in
+finding out how mono will work under linux, I would not worry about the
+self-hosting bit for now. The self-hosting of the compiler will be the
+topic of a future howto.
+</para>
+
+<para>
+See <ulink url="http://www.go-mono.com/download">the mono download
+site</ulink> for the source of the tarballs.
+</para>
+
+<para>
+This page also lists the current versions of the software
+mono depends on. Make sure that your system has all the
+required versions, otherwise mono won't compile.
+</para>
+
+<para>
+At a minimum for mono 0.12, you'll need to:
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+download and install
+<ulink url="http//www.freedesktop.org/software/pkgconfig">
+pkg-config</ulink>.
+</para>
+</listitem>
+<listitem>
+<para>
+download and install
+<ulink url="ftp://ftp.gtk.org/pub/gtk/v1.3/glib-1.3.12.tar.gz">
+glib 1.3</ulink>.
+</para>
+</listitem>
+</itemizedlist>
+
+<para>
+Installing the tarballs is done via GNU autoconf and
+automake. The general upshot of running autoconf and automake is that you
+can type <command>./configure</command> and then <command> make</command>
+to do the build.
+Typing <command>make install</command> completes the installation of mono
+on your system.
+</para>
+
+<para>
+To build the mono runtime package, unzip the tarball to some useful
+location. I tend to use <command>/usr/src</command> as the location,
+but you could really do it anywhere. For the install process, it is
+also a good idea to be 'root'. The installation process will shuttle
+some executables into <command>/usr/local/bin</command> (more about
+that later).
+</para>
+
+<para>
+Unzipping the tarballs will have created two directories in <command>
+/usr/src/</command>, one called something like mono-x.xx and the other
+mcs-x.xx. The one called 'mono' is the runtime environment, and this contains
+all that is initially needed to run mono and investigate its inner workings.
+</para>
+
+<para>
+To start building the mono runtime, first type <command>./configure</command>.
+You will see an output like this:
+</para>
+<programlisting>
+[root@taurus mono-0.12]# ./configure
+loading cache ./config.cache
+checking host system type... i686-pc-linux-gnu
+checking target system type... i686-pc-linux-gnu
+checking build system type... i686-pc-linux-gnu
+checking for a BSD compatible install... (cached) /usr/bin/install -c
+checking whether build environment is sane... yes
+checking whether make sets ${MAKE}... (cached) yes
+checking for working aclocal... found
+
+
+snip ....
+
+
+checking BASE_DEPENDENCIES_CFLAGS... -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+checking BASE_DEPENDENCIES_LIBS... -lglib-2.0
+checking for GC_malloc in -lgc... (cached) no
+configure: warning: Compiling mono without GC.
+checking if off_t is 64 bits wide... no
+checking if _FILE_OFFSET_BITS=64 gives 64 bit off_t... ok
+
+snip ...
+
+creating Makefile
+creating mono/Makefile
+creating mono/utils/Makefile
+creating mono/metadata/Makefile
+creating mono/dis/Makefile
+creating mono/cil/Makefile
+creating mono/arch/Makefile
+creating mono/os/Makefile
+creating mono/os/win32/Makefile
+creating mono/os/unix/Makefile
+creating mono/arch/x86/Makefile
+creating mono/arch/ppc/Makefile
+creating mono/arch/sparc/Makefile
+creating mono/arch/arm/Makefile
+creating mono/interpreter/Makefile
+creating mono/tests/Makefile
+creating mono/benchmark/Makefile
+creating mono/monoburg/Makefile
+creating mono/monograph/Makefile
+creating mono/jit/Makefile
+creating mono/io-layer/Makefile
+creating mono/handles/Makefile
+creating runtime/Makefile
+creating scripts/Makefile
+creating man/Makefile
+creating doc/Makefile
+creating docs/Makefile
+creating config.h
+config.h is unchanged
+
+
+ GC: auto
+
+
+[root@taurus mono-0.12]#
+</programlisting>
+
+
+<para>
+This means that the configure script has now created all the
+makefiles necessary to complete the build on your system.
+Note the "GC: auto" at the end of the list of commands.
+GC stands for "garbage collection" and it
+will be addressed in a later section of this document.
+</para>
+<para>
+You are now ready to start the mono "build" process. To kick
+this off, you can type <command>make</command> at the
+command prompt. You'll see something like this:
+</para>
+
+<programlisting>
+[root@taurus mono-0.12]# make
+make all-recursive
+make[1]: Entering directory `/usr/src/mono-0.12'
+Making all in mono
+make[2]: Entering directory `/usr/src/mono-0.12/mono'
+Making all in utils
+make[3]: Entering directory `/usr/src/mono-0.12/mono/utils'
+gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/include/glib-2.0
+-I/usr/lib/glib-2.0/include -I/usr/include/glib-2.0
+-I/usr/lib/glib-2.0/include -I../.. -I../../mono
+-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -Wall
+-Wunused -Wmissing-prototypes -Wmissing-declarations
+-Wstrict-prototypes -Wmissing-prototypes -Wnested-externs
+-Wpointer-arith -Wno-cast-qual -Wcast-align -Wwrite-strings
+-c mono-hash.c
+
+</programlisting>
+<para>
+and this will continue for a while. On my 1 GHz Duron with 256 MB of RAM the
+total build process takes about three minutes. All the terrible flags after gcc
+have essentially been set by the configure script and there is no need to worry
+about these.
+</para>
+<para>
+To finally install mono, you can type <command>make install</command>
+to get a working version of mono. This command will copy the
+scripts that run the executables to a place where the operating system
+will be ale to find them. This location is <command>/usr/local/bin</command>
+on my system.
+</para>
+
+</sect2>
+
+<sect2 id="garbage_collection">
+<title> Garbage Collection</title>
+<para>
+To make the mint interpreter work with garbage collection, you first need to
+install a garbage collection package on your system. Mono works with
+Boehm Garbage collection, which is found at
+<ulink url="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">
+http://www.hpl.hp.com/personal/Hans_Boehm/gc/
+</ulink>.
+</para>
+
+<para>
+To get garbage collection to work, I downloaded the source tarball
+into <command>/usr/src/</command> and typed <command>./configure</command>
+followed by <command>make</command> and <command>make install</command>.
+</para>
+
+<para>
+There is one glitch to work around. The header file for the garbage collection
+<command>gc.h</command> is found in the <command>/usr/src/gc6.0/include
+</command> directory (at least on my system). The mono build process will break
+on this location: it is looking for the header file in some other place called
+<command>/usr/include/gc/</command> and won't be able to find the correct
+header file.
+</para>
+
+<para>
+The solution is to build a symbolic link between these two locations as
+follows
+</para>
+
+<programlisting>
+[root@taurus include]# ln -s /usr/src/gc6.0/include/ /usr/include/gc
+</programlisting>
+
+<para>
+after which you'll be able to list the directory contents as if they were
+in <command>/usr/include</command>
+</para>
+
+<programlisting>
+[root@taurus include]# pwd
+/usr/include
+[root@taurus include]# ls /usr/include/gc
+cord.h gc_backptr.h gc_inline.h javaxfc.h
+ec.h gc_cpp.h gc_local_alloc.h leak_detector.h
+gc gc_gcj.h gc_mark.h new_gc_alloc.h
+gc_alloc.h gc.h gc_pthread_redirects.h private
+gc_amiga_redirects.h gc_inl.h gc_typed.h weakpointer.h
+[root@taurus include]#
+</programlisting>
+
+<para>
+To get mono to work with garbage collection, you'll have to rebuild the
+environment. This is done easily by typing <command>make distclean</command>
+to clean up any existing executables.
+</para>
+
+<para>
+Continue the build by typing <command>./configure</command>, and look at
+the last line. It should read:
+</para>
+
+<programlisting>
+
+snip...
+
+creating config.h
+
+
+ GC: boehm
+
+
+[root@taurus mono-0.12]#
+
+</programlisting>
+
+<para>
+The GC: boehm tells you that garbage collection has been turned on. Now to
+compile the runtime, you type <command>make</command> and <command> make
+install</command> as previously.
+</para>
+
+<para>
+You now have mono working with Garbage Collection.
+</para>
+
+<para>
+Although my experimentation is incomplete as of this time, I have found some
+issues with running Garbage Collection continuously, and my recommendation
+would be to turn it off for now.
+</para>
+
+<para>
+To turn garbage collection off again, you have to go to the <command>/usr/src
+</command> directory where you extracted the tarball. Enter the <command>gc6.0
+</command> directory and type <command>make uninstall</command> to uninstall
+Garbage Collection. Then in your <command>mono</command> directory, type
+<command>make distclean</command> followed by <command>./configure</command>,
+<command>make</command> and <command>make install</command>.
+</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="running">
+<title>Running mono</title>
+<sect2 id="basic">
+<title>Basic steps</title>
+<para>
+To work with mono, you first have to create a C# program. Open up
+your favourite editor, and type in the following code:
+</para>
+<programlisting>
+using System;
+
+class Hello
+{
+public static void Main(String[] args)
+ {
+ Console.WriteLine("mono:: is alive and well...");
+
+ for (int i = 0; i < args.Length; i++)
+ Console.WriteLine("Argument {0} = {1}", i, args[i]);
+ }
+}
+</programlisting>
+
+<para>
+Save the file as hello.cs. To compile this into a working program,
+type mcs hello.cs. If you get the following:
+</para>
+<programlisting>
+[hinne@taurus hello]$ mcs hello.cs
+RESULT: 0
+[hinne@taurus hello]$
+</programlisting>
+<para>
+you know the compile worked fine. If you see some strange error
+messages including the word 'parser' somewhere, you made a mistake in
+your program. Fix this up first.
+</para>
+
+<para>
+You are now ready to execute your first mono program. To execute
+the code, type
+</para>
+
+<programlisting>
+[hinne@taurus hello]$ mono hello.exe arg1 arg2 arg 3
+</programlisting>
+<para>
+(where we have given some arguments just for fun) and you'll
+see the following:
+</para>
+
+<programlisting>
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg2
+Argument 2 = arg
+Argument 3 = 3
+RESULT: 0
+</programlisting>
+<para>
+As you can see, mono printed the line "mono:: is alive and well"
+and printed the list of arguments. This completes the creation
+and execution of your first mono program.
+</para>
+</sect2>
+
+<sect2 id="interpreter">
+<title>Interpreter</title>
+<para>
+But mono will allow you to do more. First of all, mono is the
+compiled mono execution environment which uses the Just in
+Time (JIT) compiler. Mono also comes with an interpreted
+environment, which can be accessed using the command 'mint'
+as follows
+</para>
+<programlisting>
+[hinne@taurus hello]$ mint hello.exe arg1 arg 2
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg
+Argument 2 = 2
+[hinne@taurus hello]$
+</programlisting>
+<para>
+As you can see, it makes no difference to mono output which
+environment you use, but what happens under the hood is very
+different. If you use 'mono' as the command line tool, you
+call the 'production' execution environment which will read
+your portable executable (PE) file, and call the just in
+time (JIT) compiler to compile the PE code down to machine
+level code (in my case, an x86 architecture) after which
+it is executed.
+</para>
+<para>
+If you use mint, the JIT is not used, and the PE code is
+interpreted into x86 instructions for execution. In fact,
+for our simple 'hello' mint is slightly faster. The point
+is that the JIT compiler will take some time to compile the
+code of our program and store it in some location in memory,
+but the subsequent execution of the code is faster with mono.
+</para>
+<para>
+
+You can see what happens below (the thing to look for is the
+'user' time: 0.1 seconds with mono and 0.06 seconds with mint):
+
+</para>
+<programlisting>
+[hinne@taurus hello]$ time mono hello.exe arg1 arg 2
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg
+Argument 2 = 2
+RESULT: 0
+
+real 0m0.575s
+user 0m0.100s
+sys 0m0.010s
+[hinne@taurus hello]$ time mint hello.exe arg1 arg 2
+mono:: is alive and well...
+Argument 0 = arg1
+Argument 1 = arg
+Argument 2 = 2
+
+real 0m0.545s
+user 0m0.060s
+sys 0m0.000s
+[hinne@taurus hello]$
+</programlisting>
+<para>
+After this simple run of mono, it is time to play with some options.
+I won't cover these in detail since there are quite a few, and also because
+I assume you downloaded mono to hack it around in the first place. So
+I'll leave some pointers.
+</para>
+
+
+<sect3 id="debugging">
+<title>Debugging</title>
+<para>
+Mono supports a debugging option when you specify the "-d" flag while running
+the runtime. Utilising this flag will get you a significant amount of output,
+and it may be an idea to specify an output file as well. The interesting aspect
+of this file is that it allows you to see to some extent (quite precisely,
+actually) what the JIT compiler is up to.
+</para>
+</sect3>
+
+<sect3 id="statistics">
+<title>Statistics</title>
+<para>
+It is also possible to collect some runtime statistics on your program. These
+will give you some idea of the resource utilisation of your program.
+</para>
+<programlisting>
+[hinne@taurus hello]$ mono --stats hello.exe
+mono:: is alive and well...
+RESULT: 0
+Mono Jit statistics
+Compiled methods: 58
+Methods cache lookup: 15
+Method trampolines: 698
+Basic blocks: 188
+Max basic blocks: 15
+Allocated vars: 238
+Analyze stack repeat: 61
+Compiled CIL code size: 2450
+Native code size: 10167
+Max code size ratio: 7.13 (FileStream::FlushBuffer)
+Biggest method: 1016 (StreamWriter::Write)
+Code reallocs: 27
+Allocated code size: 22073
+Inlineable methods: 17
+Inlined methods: 22
+
+Created object count: 18
+Initialized classes: 127
+Used classes: 37
+Static data size: 288
+VTable data size: 8292
+</programlisting>
+</sect3>
+
+</sect2>
+
+<sect2 id="ILAsm_code" >
+<title>Inspecting IL Assembly code</title>
+<para>
+Mono also provides a small tool that will let you disassemble
+the executable (.exe) file so you can have a peek
+under the hood. This tool is monodis, and is run as
+follows:
+
+</para>
+<programlisting>
+[hinne@taurus hello]$ monodis hello.exe
+.assembly extern mscorlib
+{
+ .ver 0:0:0:0
+}
+.assembly 'hello'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+ .class private auto ansi beforefieldinit Hello
+ extends [mscorlib]System.Object
+ {
+
+ // method line 1
+ .method public hidebysig specialname rtspecialname
+ instance default void .ctor() cil managed
+ {
+ // Method begins at RVA 0x20ec
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void System.Object::.ctor()
+ IL_0006: ret
+ } // end of method instance default void .ctor()
+
+ // method line 2
+ .method public static
+ default void Main(string[] args) cil managed
+ {
+ // Method begins at RVA 0x20f4
+ .entrypoint
+ // Code size 56 (0x38)
+ .maxstack 5
+ .locals init (
+ int32 V_0,
+ int32 V_1)
+ IL_0000: ldstr "mono:: is alive and well..."
+ IL_0005: call void System.Console::WriteLine(string)
+ IL_000a: ldc.i4.0
+ IL_000b: stloc.0
+ IL_000c: ldloc.0
+ IL_000d: ldarg.s 0
+ IL_000f: ldlen
+ IL_0010: clt
+ IL_0012: brfalse IL_0037
+
+ IL_0017: ldstr "Argument {0} = {1}"
+ IL_001c: ldloc.0
+ IL_001d: box [mscorlib]System.Int32
+ IL_0022: ldarg.s 0
+ IL_0024: ldloc.0
+ IL_0025: ldelem.ref
+ IL_0026: call void System.Console::WriteLine(string, object, object)
+ IL_002b: nop
+ IL_002c: ldloc.0
+ IL_002d: ldc.i4.1
+ IL_002e: add
+ IL_002f: stloc.1
+ IL_0030: ldloc.1
+ IL_0031: stloc.0
+ IL_0032: br IL_000c
+
+ IL_0037: ret
+ } // end of method default void Main(string[] args)
+
+ } // end of type Hello
+
+[hinne@taurus hello]$
+</programlisting>
+<para>
+This is the listing of the code of your program in a language
+called IL assembly, or Common Intermediate Language (CIL). The
+CIL provides the portability of the mono platform, and ensures
+that code compiled with Microsoft's .NET framework will work
+on mono and vice versa.
+</para>
+</sect2>
+
+<sect2 id="man_pages">
+<title>Man pages</title>
+
+<para>
+Mono has man pages already installed, and generally, typing <command>
+man</command> before the command you wish to execute should help in
+getting a list of the options. In many cases, it's still up to you
+to figure out what they do.
+</para>
+
+</sect2>
+
+
+</sect1>
+
+
+<sect1 id="problems">
+<title>Problems</title>
+<para>
+With mono being as new as it is, it is likely that you will have some
+problems with installation. The following are some ideas to help you
+out in a bind:
+</para>
+
+<orderedlist>
+<listitem>
+<para>
+See the Ximian Bugzilla page to find out if there is a bug
+report about your specific issue.
+</para>
+</listitem>
+
+<listitem>
+<para>Read this document. If it does not solve your problem, we want to
+know about it. Please send a message to the email address listed for
+feedback at the beginning of the document.</para>
+</listitem>
+
+<listitem>
+
+<para>
+Visit the mono mailing lists' archives and do a little
+research in there for threads talking about the problem you have.
+</para>
+</listitem>
+
+<listitem>
+<para>
+If you still cannot correct the problem, send a message to the
+mono list. When you do this, please be as precise as possible--i.e.
+mention the system you are running, the version of mono that you have the
+problem with, and give any error codes and other output that might appear.
+</para>
+</listitem>
+</orderedlist>
+
+</sect1>
+
+<sect1 id="knownproblems">
+<title>Known Problems</title>
+
+<para> mcs fails to compile in Linux.
+To the best of my knowledge, as of yet mcs cannot compile in Linux.
+Try to install the already made packages from
+http://mono.baselabs.org/index.php/software. </para>
+</sect1>
+
+<!-- Legal Sections --> <sect1 id="copyright">
+ <title>Copyright and License</title>
+
+ <!-- The LDP recommends, but doesn't require, the GFDL --> <para>
+ This document, <emphasis>Running mono</emphasis>, is copyrighted
+ (c) 2002 by <emphasis>Hinne Hettema</emphasis> and
+ <emphasis>Jaime Anguiano Olarra</emphasis>. Permission is
+ granted to copy, distribute and/or modify this document under the
+ terms of the GNU Free Documentation License, Version 1.1 or any later
+ version published by the Free Software Foundation; with no Invariant
+ Sections, with no Front-Cover Texts, and with no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU Free
+ Documentation License".
+ </para>
+
+<sect2 id="gfdl"> <title>GNU Free Documentation License</title>
+<!-- GNU Project - Free Software Foundation (FSF) -->
+
+<para>Version 1.1, March 2000</para>
+
+<blockquote> <para>Copyright (C) 2000 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is
+permitted to copy and distribute verbatim copies of this license document,
+but changing it is not allowed.</para> </blockquote>
+
+<sect3 id="gfdl-0"> <title>PREAMBLE</title>
+
+<para>The purpose of this License is to make a manual, textbook,
+ or other written document "free" in the sense of freedom: to assure
+ everyone the effective freedom to copy and redistribute it, with
+ or without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher
+ a way to get credit for their work, while not being considered
+ responsible for modifications made by others.</para>
+
+<para>This License is a kind of "copyleft", which means that
+ derivative works of the document must themselves be free in the
+ same sense. It complements the GNU General Public License, which
+ is a copyleft license designed for free software.</para>
+
+<para>We have designed this License in order to use it for manuals
+ for free software, because free software needs free documentation:
+ a free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to software
+ manuals; it can be used for any textual work, regardless of subject
+ matter or whether it is published as a printed book. We recommend
+ this License principally for works whose purpose is instruction
+ or reference.</para>
+</sect3>
+
+<sect3 id="gfdl-1"> <title>APPLICABILITY AND DEFINITIONS</title>
+
+<para>This License applies to any manual or other work that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. The "Document", below,
+ refers to any such manual or work. Any member of the public is a
+ licensee, and is addressed as "you".</para>
+
+<para>A "Modified Version" of the Document means any work
+ containing the Document or a portion of it, either copied verbatim,
+ or with modifications and/or translated into another language.</para>
+
+<para>A "Secondary Section" is a named appendix or a front-matter
+ section of the Document that deals exclusively with the relationship
+ of the publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (For example, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.</para>
+
+<para>The "Invariant Sections" are certain Secondary Sections
+ whose titles are designated, as being those of Invariant Sections,
+ in the notice that says that the Document is released under this
+ License.</para>
+
+<para>The "Cover Texts" are certain short passages of text that
+ are listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License.</para>
+
+<para>A "Transparent" copy of the Document means a
+ machine-readable copy, represented in a format whose specification
+ is available to the general public, whose contents can be viewed and
+ edited directly and straightforwardly with generic text editors
+ or (for images composed of pixels) generic paint programs or
+ (for drawings) some widely available drawing editor, and that is
+ suitable for input to text formatters or for automatic translation
+ to a variety of formats suitable for input to text formatters.
+ A copy made in an otherwise Transparent file format whose markup
+ has been designed to thwart or discourage subsequent modification
+ by readers is not Transparent. A copy that is not "Transparent"
+ is called "Opaque".</para>
+
+<para>Examples of suitable formats for Transparent copies include
+ plain ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML designed for human modification. Opaque formats include
+ PostScript, PDF, proprietary formats that can be read and edited
+ only by proprietary word processors, SGML or XML for which the
+ DTD and/or processing tools are not generally available, and the
+ machine-generated HTML produced by some word processors for output
+ purposes only.</para>
+
+<para>The "Title Page" means, for a printed book, the title page
+ itself, plus such following pages as are needed to hold, legibly,
+ the material this License requires to appear in the title page.
+ For works in formats which do not have any title page as such,
+ "Title Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.</para>
+</sect3>
+
+<sect3 id="gfdl-2"> <title>VERBATIM COPYING</title>
+
+<para>You may copy and distribute the Document in any medium,
+ either commercially or noncommercially, provided that this License,
+ the copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that
+ you add no other conditions whatsoever to those of this License.
+ You may not use technical measures to obstruct or control the
+ reading or further copying of the copies you make or distribute.
+ However, you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.</para>
+
+<para>You may also lend copies, under the same conditions stated
+ above, and you may publicly display copies.</para>
+</sect3>
+
+<sect3 id="gfdl-3"> <title>COPYING IN QUANTITY</title>
+
+<para>If you publish printed copies of the Document numbering more
+ than 100, and the Document's license notice requires Cover Texts, you
+ must enclose the copies in covers that carry, clearly and legibly,
+ all these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The front
+ cover must present the full title with all words of the title equally
+ prominent and visible. You may add other material on the covers
+ in addition. Copying with changes limited to the covers, as long as
+ they preserve the title of the Document and satisfy these conditions,
+ can be treated as verbatim copying in other respects.</para>
+
+<para>If the required texts for either cover are too voluminous to
+ fit legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.</para>
+
+<para>If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with each
+ Opaque copy a publicly-accessible computer-network location containing
+ a complete Transparent copy of the Document, free of added material,
+ which the general network-using public has access to download
+ anonymously at no charge using public-standard network protocols.
+ If you use the latter option, you must take reasonably prudent steps,
+ when you begin distribution of Opaque copies in quantity, to ensure
+ that this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you distribute
+ an Opaque copy (directly or through your agents or retailers) of
+ that edition to the public.</para>
+
+<para>It is requested, but not required, that you contact the
+ authors of the Document well before redistributing any large number
+ of copies, to give them a chance to provide you with an updated
+ version of the Document.</para>
+</sect3>
+
+<sect3 id="gfdl-4"> <title>MODIFICATIONS</title>
+
+<para>You may copy and distribute a Modified Version of the
+ Document under the conditions of sections 2 and 3 above, provided
+ that you release the Modified Version under precisely this License,
+ with the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version
+ to whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:</para>
+
+<orderedlist numeration="upperalpha"> <listitem><para>Use in the
+Title Page
+ (and on the covers, if any) a title distinct from that of the
+ Document, and from those of previous versions (which should, if
+ there were any, be listed in the History section of the Document).
+ You may use the same title as a previous version if the original
+ publisher of that version gives permission.</para>
+</listitem>
+
+<listitem><para>List on the Title Page,
+ as authors, one or more persons or entities responsible for
+ authorship of the modifications in the Modified Version, together
+ with at least five of the principal authors of the Document (all
+ of its principal authors, if it has less than five).</para>
+</listitem>
+
+<listitem><para>State on the Title page
+ the name of the publisher of the Modified Version, as the
+ publisher.</para>
+</listitem>
+
+<listitem><para>Preserve all the
+ copyright notices of the Document.</para>
+</listitem>
+
+<listitem><para>Add an appropriate
+ copyright notice for your modifications adjacent to the other
+ copyright notices.</para>
+</listitem>
+
+<listitem><para>Include, immediately
+ after the copyright notices, a license notice giving the public
+ permission to use the Modified Version under the terms of this
+ License, in the form shown in the Addendum below.</para>
+</listitem>
+
+<listitem><para>Preserve in that license
+ notice the full lists of Invariant Sections and required Cover
+ Texts given in the Document's license notice.</para>
+</listitem>
+
+<listitem><para>Include an unaltered
+ copy of this License.</para>
+</listitem>
+
+<listitem><para>Preserve the section
+ entitled "History", and its title, and add to it an item stating at
+ least the title, year, new authors, and publisher of the Modified
+ Version as given on the Title Page. If there is no section entitled
+ "History" in the Document, create one stating the title, year,
+ authors, and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in the
+ previous sentence.</para>
+</listitem>
+
+<listitem><para>Preserve the network
+ location, if any, given in the Document for public access to
+ a Transparent copy of the Document, and likewise the network
+ locations given in the Document for previous versions it was
+ based on. These may be placed in the "History" section. You may
+ omit a network location for a work that was published at least four
+ years before the Document itself, or if the original publisher of
+ the version it refers to gives permission.</para>
+</listitem>
+
+<listitem><para>In any section entitled
+ "Acknowledgements" or "Dedications", preserve the section's title,
+ and preserve in the section all the substance and tone of each
+ of the contributor acknowledgements and/or dedications given
+ therein.</para>
+</listitem>
+
+<listitem><para>Preserve all the
+ Invariant Sections of the Document, unaltered in their text and in
+ their titles. Section numbers or the equivalent are not considered
+ part of the section titles.</para>
+</listitem>
+
+<listitem><para>Delete any section
+ entitled "Endorsements". Such a section may not be included in
+ the Modified Version.</para>
+</listitem>
+
+<listitem><para>Do not retitle any
+ existing section as "Endorsements" or to conflict in title with
+ any Invariant Section.</para>
+</listitem> </orderedlist> <para>If the Modified Version includes new
+front-matter sections
+ or appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other section
+ titles.</para>
+
+<para>You may add a section entitled "Endorsements", provided it
+ contains nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of
+ a standard.</para>
+
+<para>You may add a passage of up to five words as a Front-Cover
+ Text, and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.</para>
+
+<para>The author(s) and publisher(s) of the Document do not by
+ this License give permission to use their names for publicity for
+ or to assert or imply endorsement of any Modified Version.</para>
+</sect3>
+
+<sect3 id="gfdl-5"> <title>COMBINING DOCUMENTS</title>
+
+<para>You may combine the Document with other documents released
+ under this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all of
+ the Invariant Sections of all of the original documents, unmodified,
+ and list them all as Invariant Sections of your combined work in
+ its license notice.</para>
+
+<para>The combined work need only contain one copy of this
+ License, and multiple identical Invariant Sections may be replaced
+ with a single copy. If there are multiple Invariant Sections with
+ the same name but different contents, make the title of each such
+ section unique by adding at the end of it, in parentheses, the
+ name of the original author or publisher of that section if known,
+ or else a unique number. Make the same adjustment to the section
+ titles in the list of Invariant Sections in the license notice of
+ the combined work.</para>
+
+<para>In the combination, you must combine any sections entitled
+ "History" in the various original documents, forming one section
+ entitled "History"; likewise combine any sections entitled
+ "Acknowledgements", and any sections entitled "Dedications".
+ You must delete all sections entitled "Endorsements."</para>
+</sect3>
+
+<sect3 id="gfdl-6"> <title>COLLECTIONS OF DOCUMENTS</title>
+
+<para>You may make a collection consisting of the Document and
+ other documents released under this License, and replace the
+ individual copies of this License in the various documents with a
+ single copy that is included in the collection, provided that you
+ follow the rules of this License for verbatim copying of each of
+ the documents in all other respects.</para>
+
+<para>You may extract a single document from such a collection,
+ and distribute it individually under this License, provided you
+ insert a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.</para>
+</sect3>
+
+<sect3 id="gfdl-7"> <title>AGGREGATION WITH INDEPENDENT WORKS</title>
+<para>A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume
+ of a storage or distribution medium, does not as a whole count
+ as a Modified Version of the Document, provided no compilation
+ copyright is claimed for the compilation. Such a compilation is
+ called an "aggregate", and this License does not apply to the other
+ self-contained works thus compiled with the Document, on account
+ of their being thus compiled, if they are not themselves derivative
+ works of the Document.</para>
+
+<para>If the Cover Text requirement of section 3 is applicable to
+ these copies of the Document, then if the Document is less than
+ one quarter of the entire aggregate, the Document's Cover Texts
+ may be placed on covers that surround only the Document within
+ the aggregate. Otherwise they must appear on covers around the
+ whole aggregate.</para>
+</sect3>
+
+<sect3 id="gfdl-8"> <title>TRANSLATION</title>
+
+<para>Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include
+ a translation of this License provided that you also include the
+ original English version of this License. In case of a disagreement
+ between the translation and the original English version of this
+ License, the original English version will prevail.</para>
+</sect3>
+
+<sect3 id="gfdl-9"> <title>TERMINATION</title> <para>You may not copy,
+modify, sublicense, or distribute the
+ Document except as expressly provided for under this License.
+ Any other attempt to copy, modify, sublicense or distribute the
+ Document is void, and will automatically terminate your rights under
+ this License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.</para>
+</sect3>
+
+<sect3 id="gfdl-10"> <title>FUTURE REVISIONS OF THIS LICENSE</title>
+
+<para>The Free Software Foundation may publish new, revised
+ versions of the GNU Free Documentation License from
+ time to time. Such new versions will be similar
+ in spirit to the present version, but may differ in
+ detail to address new problems or concerns. See <ulink
+ url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.</para>
+
+<para>Each version of the License is given a distinguishing
+ version number. If the Document specifies that a particular
+ numbered version of this License "or any later version" applies
+ to it, you have the option of following the terms and conditions
+ either of that specified version or of any later version that has
+ been published (not as a draft) by the Free Software Foundation.
+ If the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.</para>
+</sect3>
+
+<sect3 id="gfdl-11"> <title>How to use this License for your
+documents</title>
+
+<para>To use this License in a document you have written, include
+ a copy of the License in the document and put the following copyright
+ and license notices just after the title page:</para>
+
+<blockquote><para> Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being LIST THEIR TITLES,
+ with the Front-Cover Texts being LIST, and with the Back-Cover
+ Texts being LIST. A copy of the license is included in the section
+ entitled "GNU Free Documentation License".
+</para></blockquote>
+
+<para>If you have no Invariant Sections, write "with no Invariant
+ Sections" instead of saying which ones are invariant. If you
+ have no Front-Cover Texts, write "no Front-Cover Texts" instead of
+ "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.</para>
+
+<para>If your document contains nontrivial examples of program
+ code, we recommend releasing these examples in parallel under your
+ choice of free software license, such as the GNU General Public
+ License, to permit their use in free software.</para>
+</sect3> </sect2> </sect1>
+
+</article>
+
diff --git a/doc/mono-build-w32.sh b/doc/mono-build-w32.sh
new file mode 100755
index 00000000000..d9e1f963c79
--- /dev/null
+++ b/doc/mono-build-w32.sh
@@ -0,0 +1,186 @@
+#!/bin/bash
+
+# Script to automate the building of mono and its dependencies on
+# cygwin. Relies on wget being installed (could make it fall back to
+# using lynx, links, w3, curl etc), assumes that gcc, make, tar,
+# automake, etc are already installed too (may be worth testing for
+# all that right at the top and bailing out if missing/too old/too new
+# etc).
+
+
+# See where we are. This will become the top level directory for the
+# installation, unless we are given an alternative location
+here=$1
+test -z "$here" && here=`pwd`
+
+echo "Building Mono and dependencies in $here, installing to $here/install"
+
+PATH=$here/install/bin:$here/install/lib:$PATH
+
+# Make sure cygwin's libiconv is installed, or libtool blows its tiny mind
+if [ ! -f /usr/lib/libiconv.la ]; then
+ echo "You need to install the cygwin \"libiconv\" package!"
+ exit -1
+fi
+
+# Check mono out first, so we can run aclocal from inside the mono dir (it
+# needs to see which version of the real aclocal to run)
+test -z "$CVSROOT" && CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono
+export CVSROOT
+
+echo "Updating mono"
+
+# cvs checkout does the same as cvs update, except that it copes with
+# new modules being added
+
+# Older versions of cvs insist on a cvs login for :pserver: methods
+# Make sure cvs is using ssh for :ext: methods
+
+if [ ${CVSROOT:0:5} = ":ext:" ]; then
+ CVS_RSH=ssh
+ export CVS_RSH
+elif [ ${CVSROOT:0:9} = ":pserver:" ]; then
+ if ! grep $CVSROOT ~/.cvspass > /dev/null 2>&1 ; then
+ echo "Logging into CVS server. Anonymous CVS password is probably empty"
+ cvs login || exit -1
+ fi
+fi
+
+cvs checkout mono || exit -1
+
+echo "Checking automake version"
+automake_required="1.6.2"
+automake_version=`automake --version | head -1 | awk '{print $4}' | tr -d '[a-zA-Z]' | sed 's/-.*$//g'`
+echo "Found automake version $automake_version"
+if expr $automake_version \< $automake_required > /dev/null; then
+ echo "Your automake is too old! You need version $automake_required or newer."
+ exit -1
+else
+ echo "Automake version new enough."
+fi
+
+# Select the stable version anyway...
+if [ ! -z "${AUTO_STABLE}" -o -e /usr/autotool/stable ]; then
+ export AUTO_STABLE=${AUTO_STABLE:-/usr/autotool/stable}
+ export AUTO_DEVEL=${AUTO_STABLE}
+fi
+
+# Need to install pkgconfig and set ACLOCAL_FLAGS if there is not a
+# pkgconfig installed already. Otherwise set PKG_CONFIG_PATH to the
+# glib we're about to install in $here/install.
+
+
+# --print-ac-dir was added in 1.2h according to the ChangeLog. This
+# should mean that any automake new enough for us has it.
+
+# This sets ACLOCAL_FLAGS to point to the freshly installed pkgconfig
+# if it doesnt already exist on the system (otherwise auto* breaks if
+# it finds two copies of the m4 macros). The GIMP for Windows
+# pkgconfig sets its prefix based on the location of its binary, so we
+# dont need PKG_CONFIG_PATH (the internal pkgconfig config file
+# $prefix is handled similarly). For the cygwin pkgconfig we do need to
+# set it, and we need to edit the mingw pc files too.
+
+function aclocal_scan () {
+ # Quietly ignore the rogue '-I' and other aclocal flags that
+ # aren't actually directories...
+ #
+ # cd into mono/ so that the aclocal wrapper can work out which version
+ # of aclocal to run, and add /usr/share/aclocal too cos aclocal looks there
+ # too.
+ for i in `(cd mono && aclocal --print-ac-dir)` /usr/share/aclocal $ACLOCAL_FLAGS
+ do
+ if [ -f $i/$1 ]; then
+ return 0
+ fi
+ done
+
+ return 1
+}
+
+function install_package() {
+ zipfile=$1
+ markerfile=$2
+ name=$3
+
+ echo "Installing $name..."
+ if [ ! -f $here/$zipfile ]; then
+ wget http://www.go-mono.com/archive/$zipfile
+ fi
+
+ # Assume that the package is installed correctly if the marker
+ # file is there
+ if [ ! -f $here/install/$markerfile ]; then
+ (cd $here/install || exit -1; unzip -o $here/$zipfile || exit -1) || exit -1
+ fi
+}
+
+# pkgconfig is only used during the build, so we can use the cygwin version
+# if it exists
+if aclocal_scan pkg.m4 ; then
+ install_pkgconfig=no
+else
+ install_pkgconfig=yes
+fi
+
+# But we still need to use the mingw libs for glib & co
+ACLOCAL_FLAGS="-I $here/install/share/aclocal $ACLOCAL_FLAGS"
+
+export PATH
+export ACLOCAL_FLAGS
+
+# Grab pkg-config, glib etc
+if [ ! -d $here/install ]; then
+ mkdir $here/install || exit -1
+fi
+
+# Fetch and install pkg-config, glib, iconv, intl
+
+if [ $install_pkgconfig = "yes" ]; then
+ install_package pkgconfig-0.11-20020310.zip bin/pkg-config.exe pkgconfig
+else
+ echo "Not installing pkgconfig, you already seem to have it installed"
+fi
+install_package glib-2.0.4-20020703.zip lib/libglib-2.0-0.dll glib
+install_package glib-dev-2.0.4-20020703.zip lib/glib-2.0.lib glib-dev
+install_package libiconv-1.7.zip lib/iconv.dll iconv
+install_package libintl-0.10.40-20020101.zip lib/libintl-1.dll intl
+install_package libgc-dev.zip lib/gc.dll gc-dev
+
+if [ $install_pkgconfig = "no" ]; then
+ echo "Fixing up the pkgconfig paths"
+ for i in $here/install/lib/pkgconfig/*.pc
+ do
+ mv $i $i.orig
+ sed -e "s@^prefix=/target\$@prefix=$here/install@" < $i.orig > $i
+ done
+ export PKG_CONFIG_PATH=$here/install/lib/pkgconfig
+fi
+
+# Needed to find the libgc bits
+CPPFLAGS="$CPPFLAGS -I$here/install/include"
+LDFLAGS="$LDFLAGS -L$here/install/lib"
+export CPPFLAGS
+export LDFLAGS
+
+# Make sure we build native w32, not cygwin
+#CC="gcc -mno-cygwin"
+#export CC
+
+# --prefix is used to set the class library dir in mono, and it needs
+# to be in windows-native form. It also needs to have '\' turned into
+# '/' to avoid quoting issues during the build.
+prefix=`cygpath -w $here/install | sed -e 's@\\\\@/@g'`
+
+# Build and install mono
+echo "Building and installing mono"
+
+(cd $here/mono; ./autogen.sh --prefix=$prefix || exit -1; make || exit -1; make install || exit -1) || exit -1
+
+
+echo ""
+echo ""
+echo "All done."
+echo "Add $here/install/bin and $here/install/lib to \$PATH"
+echo "Don't forget to copy the class libraries to $here/install/lib"
+
diff --git a/doc/mono-build.sh b/doc/mono-build.sh
new file mode 100755
index 00000000000..2cfaf6d6ff0
--- /dev/null
+++ b/doc/mono-build.sh
@@ -0,0 +1,232 @@
+#! /usr/bin/env bash
+
+# Script to automate the building of mono and its dependencies.
+# Relies on wget being installed (could make it fall back to using
+# lynx, links, w3, curl etc), assumes that gcc, make, tar, automake,
+# etc are already installed too (may be worth testing for all that
+# right at the top and bailing out if missing/too old/too new etc).
+
+
+# See where we are. This will become the top level directory for the
+# installation, unless we are given an alternative location
+here=$1
+test -z "$here" && here=`pwd`
+
+echo "Building Mono and dependencies in $here, installing to $here/install"
+
+PATH=$here/install/bin:$PATH
+LD_LIBRARY_PATH=$here/install/lib:$LD_LIBRARY_PATH
+
+# Find a tool to fetch files. It must take an HTTP URL on the command line and
+# save the file in the current directory. (It must also talk HTTP/1.1, which
+# rules out BSD's ftp(1), at least on FreeBSD 4.4.)
+viable_downloaders="wget fetch"
+for i in $viable_downloaders
+do
+ if which $i > /dev/null; then
+ downloader=`which $i`
+ break
+ fi
+done
+
+if [ -z "$downloader" ]; then
+ echo "Can't find a commandline download tool (tried: $viable_downloaders)"
+ exit -1
+else
+ echo "Using $downloader to fetch files"
+fi
+
+# We need to prefer GNU make if there's a choice. BSD make falls over in
+# the glib build if gtk-doc is disabled.
+viable_makers="gmake make"
+for i in $viable_makers
+do
+ if which $i > /dev/null; then
+ MAKE=$i
+ break
+ fi
+done
+
+if [ -z "$MAKE" ]; then
+ echo "Can't find a make tool (tried: $viable_makers)"
+ exit -1
+else
+ echo "Using $MAKE"
+ export MAKE
+fi
+
+# Need to install pkgconfig and set ACLOCAL_FLAGS if there is not a
+# pkgconfig installed already. Otherwise set PKG_CONFIG_PATH to the
+# glib we're about to install in $here/install. This script could
+# attempt to be clever and see if glib 2 is already installed, too.
+
+
+# --print-ac-dir was added in 1.2h according to the ChangeLog. This
+# should mean that any automake new enough for us has it.
+
+function aclocal_scan () {
+ # Quietly ignore the rogue '-I' and other aclocal flags that
+ # aren't actually directories...
+ for i in `aclocal --print-ac-dir` $ACLOCAL_FLAGS
+ do
+ if [ -f $i/$1 ]; then
+ return 0
+ fi
+ done
+
+ return 1
+}
+
+function pkgconfig_scan () {
+ module=$1
+
+ echo "Finding pkgconfig files for $module..."
+
+ # Should we use locate? or just a list of well-known directories?
+ # locate has the problem of false positives in src dirs
+ for i in /usr/lib/pkgconfig /usr/local/lib/pkgconfig
+ do
+ echo "Looking in $i..."
+ if [ -f $i/${module}.pc ]; then
+ echo $i
+ return
+ fi
+ done
+}
+
+function install_package() {
+ tarfile=$1
+ dirname=$2
+ name=$3
+ configure_options=$4
+
+ echo "Installing $name..."
+ if [ ! -f $here/$tarfile ]; then
+ (cd $here && $downloader http://www.go-mono.com/archive/$tarfile)
+ fi
+
+ # Assume that the package built correctly if the dir is there
+ if [ ! -d $here/$dirname ]; then
+ # Build and install package
+ (cd $here && tar xzf $tarfile) || exit -1
+ (cd $here/$dirname; ./configure --prefix=$here/install $configure_options || exit -1; $MAKE || exit -1; $MAKE install || exit -1)
+ success=$?
+ if [ $success -ne 0 ]; then
+ echo "***** $name build failure. Run rm -rf $here/$dirname to have this script attempt to build $name again next time"
+ exit -1
+ fi
+ fi
+}
+
+if aclocal_scan pkg.m4 ; then
+ install_pkgconfig=no
+else
+ install_pkgconfig=yes
+fi
+
+if aclocal_scan glib-2.0.m4 ; then
+ install_glib=no
+ if [ $install_pkgconfig = "yes" ]; then
+ # We have to tell the newly-installed pkgconfig about the
+ # system-installed glib
+ PKG_CONFIG_PATH=`pkgconfig_scan glib-2.0`:$PKG_CONFIG_PATH
+ fi
+else
+ install_glib=yes
+ PKG_CONFIG_PATH="$here/install/lib/pkgconfig:$PKG_CONFIG_PATH"
+fi
+
+if [ -f /usr/include/gc/gc.h ]; then
+ install_libgc=no
+else
+ install_libgc=yes
+fi
+
+if [ $install_pkgconfig = "yes" -o $install_glib = "yes" ]; then
+ ACLOCAL_FLAGS="-I $here/install/share/aclocal $ACLOCAL_FLAGS"
+fi
+
+export PATH
+export LD_LIBRARY_PATH
+export ACLOCAL_FLAGS
+export PKG_CONFIG_PATH
+
+# Freebsd puts iconv in /usr/local, so see if we need to add
+# /usr/local/include and /usr/local/lib to CPPFLAGS and LDFLAGS. We could
+# skip this if it would add /usr/include and /usr/lib, but leaving it
+# shouldnt break anything.
+iconvh=`locate include/iconv.h`
+iconvh_dir=`dirname $iconvh`
+iconvlib_dir=`echo $iconvh_dir | sed -e 's/include/lib/'`
+
+echo "Adding $iconvh_dir to CPPFLAGS"
+echo "Adding $iconvlib_dir to LDFLAGS"
+
+CPPFLAGS="$CPPFLAGS -I$here/install/include -I$iconvh_dir"
+LDFLAGS="$LDFLAGS -L$here/install/lib -L$iconvlib_dir"
+export CPPFLAGS
+export LDFLAGS
+
+# Grab pkg-config, glib and libgc if necessary
+
+if [ $install_pkgconfig = "yes" ]; then
+ install_package pkgconfig-0.8.0.tar.gz pkgconfig-0.8.0 pkgconfig ""
+else
+ echo "Not installing pkgconfig, you already seem to have it installed"
+fi
+
+if [ $install_glib = "yes" ]; then
+ install_package glib-2.0.6.tar.gz glib-2.0.6 glib ""
+else
+ echo "Not installing glib, you already seem to have it installed"
+fi
+
+if [ $install_libgc = "yes" ]; then
+ install_package gc6.1alpha5.tar.gz gc6.1alpha5 libgc "--enable-threads=pthreads"
+ # make install didnt do the headers!
+ mkdir -p $here/install/include/gc
+ cp -r $here/gc6.1alpha5/include/* $here/install/include/gc
+else
+ echo "Not installing libgc, you already seem to have it installed"
+fi
+
+# End of build dependencies, now get the latest mono checkout and build that
+
+test -z "$CVSROOT" && CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono
+export CVSROOT
+
+echo "Updating mono"
+
+# cvs checkout does the same as cvs update, except that it copes with
+# new modules being added
+
+# Older versions of cvs insist on a cvs login for :pserver: methods
+# Make sure cvs is using ssh for :ext: methods
+
+if [ ${CVSROOT:0:5} = ":ext:" ]; then
+ CVS_RSH=ssh
+ export CVS_RSH
+elif [ ${CVSROOT:0:9} = ":pserver:" ]; then
+ # Chop off the trailing /mono because cvs 1.11 adds the port number
+ # into the .cvspass line
+ if ! grep ${CVSROOT%:/mono} ~/.cvspass > /dev/null 2>&1 ; then
+ echo "Logging into CVS server. Anonymous CVS password is probably empty"
+ cvs login
+ fi
+fi
+
+(cd $here && cvs checkout mono) || exit -1
+
+# Build and install mono
+echo "Building and installing mono"
+
+(cd $here/mono; ./autogen.sh --prefix=$here/install || exit -1; $MAKE || exit -1; $MAKE install || exit -1) || exit -1
+
+
+echo ""
+echo ""
+echo "All done."
+echo "Add $here/install/bin to \$PATH"
+echo "Add $here/install/lib to \$LD_LIBRARY_PATH"
+echo "Don't forget to copy the class libraries to $here/install/lib"
+
diff --git a/doc/mono-contribution-howto b/doc/mono-contribution-howto
new file mode 100644
index 00000000000..ea3a4eaae53
--- /dev/null
+++ b/doc/mono-contribution-howto
@@ -0,0 +1,551 @@
+
+ <Mono newbie coders start file>
+ <h1> A little help for mono newbie coders </h1>
+
+
+ For those who are new to Mono and are impatient to contribute
+ with code (uhh... you are brave!!) here is the document you
+ should read.
+
+
+ You will see all Mono hackers say the same (great minds have
+ similar way of thinking): First, DO WRITE TESTS!!!. In order
+ to do that:
+
+ <ul>
+ * Start with the NUnit Tests Guidelines. In the cvs
+ they are located at: mcs/class/doc/NUnitGuideli...
+
+ * But wait, this is a document for impatient
+ people. So EVERYTHING should be here. Well, it is.
+ </ul>
+
+
+ <h2> The NUnit Tests Guidelines document </h2>
+
+ Mono NUnit Test Guidelines and Best Practices
+
+ Authors: Nick Drochak <ndrochak@gol.com>
+ Martin Baulig <martin@gnome.org>
+ Last Update: 2002-03-02
+ Rev: 0.3
+
+ <b> Purpose </b>
+
+ This document captures all the good ideas people have had
+ about writing NUnit tests for the mono project. This document
+ will be useful for anyone who writes or maintains unit tests.
+
+ <b> Other resources </b>
+
+ - mcs/class/README has an explanation of the build process and
+ how it relates to the tests.
+ - http://nunit.sourceforge.net is the place to find out about
+ NUnit
+
+ <b> Getting Started </b>
+
+ If you are new to writing NUnit tests, there is a template
+ you may use to help get started. The file is:
+
+ mcs/class/doc/TemplateTest.cs
+
+
+ (2.- This is the point two!. This file is just after the end
+ of the guidelines. Copy/paste it in another buffer. And keep
+ reading.)
+
+ Save a copy of this file in the appropriate test subdirecty
+ (see below), and replace all the [text] markers with
+ appropriate code. Comments in the template are there to guide
+ you. You should also look at existing tests to see how other
+ people have written them.
+
+ mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs
+
+ is a small one that might help.
+
+ (3.- You reached the third point. And as expected, it's just
+ here to tell you that the content of CollectionBaseTest.cs is
+ after the TemplateTest.cs code at the end of these
+ guidelines.)
+
+ The directory that will contain your new file depends on the
+ assembly/namespace of the class for which you are creating the
+ tests. Under mcs/class there is a directory for each assembly.
+ In each assembly there is a Test directory, e.g.
+ mcs/class/corlib/Test. In the Test directory there are
+ sub-directories for each namespace in the assembly, e.g.
+ mcs/class/corlib/Test/Sytem. Put your new test file in the
+ appropriate sub-directory under Test for the class you are
+ testing.
+
+ Once your test class is complete, you need to add it to the
+ AllTests.cs file in the same directory as your new test. Add a
+ call to "suite.AddTest()" passing the name of your new test
+ class's suite property as the parameter. You will see examples
+ in the AllTests.cs file, so just copy and paste inside there.
+
+ Once all of that is done, you can do a 'make test' from the top
+ mcs directory. Your test class will be automagically included
+ in the build and the tests will be run along with all the
+ others.
+
+ <b> Tips </b>
+
+ <b> Provide an unique error message for Assert() </b>
+
+ Include an unique message for each Assert() so that when the
+ assert fails, it is trivial to locate the failing one.
+ Otherwise, it may be difficult to determine which part of the
+ test is failing. A good way to ensure unique messages is to use
+ something like #A01, #A02 etc.
+
+ Bad:
+<pre>
+ AssertEquals("array match", compare[0], i1[0]);
+ AssertEquals("array match", compare[1], i1[1]);
+ AssertEquals("array match", compare[2], i1[2]);
+ AssertEquals("array match", compare[3], i1[3]);
+</pre>
+ Good:
+<pre>
+ AssertEquals("#A01", compare[0], i1[0]);
+ AssertEquals("#A02", compare[1], i1[1]);
+ AssertEquals("#A03", compare[2], i1[2]);
+ AssertEquals("#A04", compare[3], i1[3]);
+</pre>
+ Once you used such a number in an Assert(), don't change it
+ later on - people might use it it identify the test in bug
+ reports or in mailing lists.
+
+ <b> Use AssertEquals() to compare things, not Assert(). </b>
+
+ Never compare two values with Assert() - if the test fails,
+ people have no idea what went wrong while AssertEquals()
+ reports the failed value.
+
+ Bad:
+<pre>
+ Assert ("A01", myTicks[0] == t1.Ticks);
+</pre>
+ Good:
+<pre>
+ AssertEquals ("A01", myTicks[0], t1.Ticks);
+</pre>
+
+ <b> Constructors </b>
+
+ When writing your testcase, please make sure to provide a
+ constructor which takes no arguments:
+
+<pre>
+ public class DateTimeTest : TestCase
+ {
+
+ public DateTimeTest() : base ("[MonoTests.System.DateTimeTest]") {}
+ public DateTimeTest (string name): base(name) {}
+
+ public static ITest Suite
+ {
+ get {
+ TestSuite suite = new TestSuite ();
+ return suite;
+ }
+ }
+ }
+</pre>
+
+ <b> Namespace </b>
+
+ Please keep the namespace within each test directory
+ consistent - all tests which are referenced in the same
+ AllTests.cs must be in the same namespace. Of course you can
+ use subnamespaces as you like - especially for subdirectories
+ of your testsuite.
+
+ For instance, if your AllTests.cs is in namespace "MonoTests"
+ and you have a subdirectory called "System", you can put all
+ the tests in that dir into namespace "MonoTests.System".
+
+ <b> Test your test with the microsoft runtime </b>
+
+ If possible, try to run your testsuite with the Microsoft
+ runtime on Windows and make sure all tests in it pass. This is
+ especially important if you're writing a totally new testcase
+ - without this check you can never be sure that your testcase
+ contains no bugs ....
+
+ Don't worry if you're writing your test on Linux, other people
+ can test it for you on Windows.
+
+ Sometimes you may discover that a test doesn't show the
+ expected result when run with the Microsoft runtime - either
+ because there is a bug in their runtime or something is
+ misleading or wrong in their documentation. In this case,
+ please put a detailed description of the problem to
+ mcs/class/doc/API-notes and do also report it to the list -
+ we'll forward this to the Microsoft people from time to time
+ to help them fix their documentation and runtime.
+
+<pre>
+-------------------- TemplateTest.cs begins ----------
+
+ // this is a template for making NUnit tests. Text enclosed
+ // in square brackets (and the brackets themselves) should be
+ // replaced by appropiate code.
+
+ // [File Name].cs - NUnit Test Cases for [explain here]
+ //
+ // [Author Name] ([Author email Address])
+ //
+ // (C) [Copyright holder]
+ //
+
+ // these are the standard namespaces you will need. You may
+ // need to add more depending on your tests.
+ using NUnit.Framework;
+ using System;
+
+ // all test namespaces start with "MonoTests." Append the
+ // Namespace that contains the class you are testing, e.g.
+ // MonoTests.System.Collections
+ namespace MonoTests.[Namespace]
+ {
+
+ // the class name should end with "Test" and start with the name
+ // of the class you are testing, e.g. CollectionBaseTest
+ public class [Class to be tested]Test : TestCase {
+
+ // there should be two constructors for your class. The first
+ // one (without parameters) should set the name to something
+ // unique.
+ // Of course the name of the method is the same as the name of
+ // the class
+ public [Constructor]() : base ("[Namespace.Class]") {}
+ public [Constructor](string name) : base(name) {}
+
+ // this method is run before each Test* method is called. You
+ // can put variable initialization, etc. here that is common to
+ // each test.
+ // Just leave the method empty if you don't need to use it.
+ protected override void SetUp() {}
+
+ // this method is run after each Test* method is called. You
+ // can put clean-up code, etc. here. Whatever needs to be done
+ // after each test. Just leave the method empty if you don't need
+ // to use it.
+ protected override void TearDown() {}
+
+ // this property is required. You need change the parameter for
+ // typeof() below to be your class.
+ public static ITest Suite {
+ get {
+ return new TestSuite(typeof([Classname here]));
+ }
+ }
+
+ // this is just one of probably many test methods in your test
+ // class. each test method must start with "Test". All methods
+ // in your class which start with "Test" will be automagically
+ // called by the NUnit framework.
+ public void Test[Something] {
+ // inside here you will exercise your class and then
+ // call Assert()
+ }
+}
+
+---------------------- TemplateTest.cs ends --------------
+
+---------------------- CollectionBaseTest.cs begins ------
+ //
+ // System.Collections.CollectionBase
+ // Test suite for System.Collections.CollectionBase
+ //
+ // Author:
+ // Nick D. Drochak II
+ //
+ // (C) 2001 Nick D. Drochak II
+ //
+
+
+ using System;
+ using System.Collections;
+ using NUnit.Framework;
+
+ namespace MonoTests.System.Collections
+ {
+
+ public class CollectionBaseTest : TestCase
+ {
+ public CollectionBaseTest () : base
+ ("System.Collection.CollectionBase testsuite")
+ {}
+ public CollectionBaseTest (String name) : base (name)
+ {}
+
+ // We need a concrete class to test the abstract base
+ // class
+ public class ConcreteCollection : CollectionBase
+ {
+ // These fields are used as markers to test
+ // the On* hooks.
+ public bool onClearFired;
+ public bool onClearCompleteFired;
+
+ public bool onInsertFired;
+ public int onInsertIndex;
+ public bool onInsertCompleteFired;
+ public int onInsertCompleteIndex;
+
+ public bool onRemoveFired;
+ public int onRemoveIndex;
+ public bool onRemoveCompleteFired;
+ public int onRemoveCompleteIndex;
+
+ public bool onSetFired;
+ public int onSetOldValue;
+ public int onSetNewValue;
+ public bool onSetCompleteFired;
+ public int onSetCompleteOldValue;
+ public int onSetCompleteNewValue;
+
+ // This constructor is used to test OnValid()
+ public ConcreteCollection()
+ {
+ IList listObj;
+ listObj = this;
+ listObj.Add(null);
+ }
+
+ // This constructor puts consecutive integers into the list
+ public ConcreteCollection(int i) {
+ IList listObj;
+ listObj = this;
+
+ int j;
+ for (j = 0; j< i; j++) {
+ listObj.Add(j);
+ }
+ }
+
+ // A helper method to look at a value in the
+ // list at a specific index
+ public int PeekAt(int index)
+ {
+ IList listObj;
+ listObj = this;
+ return (int) listObj[index];
+ }
+
+ // Mark the flag if this hook is fired
+ protected override void OnClear() {
+ this.onClearFired = true;
+ }
+
+ // Mark the flag if this hook is fired
+ protected override void OnClearComplete()
+ {
+ this.onClearCompleteFired = true;
+ }
+
+ // Mark the flag, and save the paramter if
+ // this hook is fired
+ protected override void OnInsert(int index,
+ object value)
+ {
+ this.onInsertFired = true;
+ this.onInsertIndex = index;
+ }
+
+ // Mark the flag, and save the paramter if
+ // this hook is fired
+ protected override void OnInsertComplete(int index,
+ object value)
+ {
+ this.onInsertCompleteFired = true;
+ this.onInsertCompleteIndex = index;
+ }
+
+ // Mark the flag, and save the paramter if this hook
+ // is fired
+ protected override void OnRemove(int index,
+ object value)
+ {
+ this.onRemoveFired = true;
+ this.onRemoveIndex = index;
+ }
+
+ // Mark the flag, and save the paramter if this hook
+ // is fired
+ protected override void OnRemoveComplete(int index,
+ object value)
+ {
+ this.onRemoveCompleteFired = true;
+ this.onRemoveCompleteIndex = index;
+ }
+
+ // Mark the flag, and save the paramters if this hook
+ // is fired
+ protected override void OnSet(int index, object oldValue,
+ object newValue)
+ {
+ this.onSetFired = true;
+ this.onSetOldValue = (int) oldValue;
+ this.onSetNewValue = (int) newValue;
+ }
+
+ // Mark the flag, and save the paramters if this hook
+ // is fired
+ protected override void OnSetComplete(int index,
+ object oldValue,
+ object newValue)
+ {
+ this.onSetCompleteFired = true;
+ this.onSetCompleteOldValue = (int) oldValue;
+ this.onSetCompleteNewValue = (int) newValue;
+ }
+ } // public class ConcreteCollection
+
+ public static ITest Suite {
+ get {
+ return new TestSuite
+ (typeof(CollectionBaseTest));
+ }
+ }
+
+ // Check the count property
+ public void TestCount() {
+ ConcreteCollection myCollection;
+ myCollection = new ConcreteCollection(4);
+ Assert(4 == myCollection.Count);
+ }
+
+ // Make sure GetEnumerator returns an object
+ public void TestGetEnumerator() {
+ ConcreteCollection myCollection;
+ myCollection = new ConcreteCollection(4);
+ Assert(null != myCollection.GetEnumerator());
+ }
+
+ // OnValid disallows nulls
+ public void TestOnValid() {
+ ConcreteCollection myCollection;
+ try {
+ myCollection = new ConcreteCollection();
+ }
+ catch (ArgumentNullException) {
+ }
+ }
+
+ // Test various Insert paths
+ public void TestInsert() {
+ ConcreteCollection myCollection;
+ int numberOfItems;
+ numberOfItems = 3;
+ // The constructor inserts
+ myCollection = new ConcreteCollection(numberOfItems);
+ Assert(myCollection.onInsertFired);
+ Assert(myCollection.onInsertCompleteFired);
+
+ // Using the IList interface, check inserts in the middle
+ IList listObj = myCollection;
+ listObj.Insert(1, 9);
+ Assert(myCollection.onInsertIndex == 1);
+ Assert(myCollection.onInsertCompleteIndex == 1);
+ Assert(myCollection.PeekAt(1) == 9);
+ }
+
+ // Test Clear and it's hooks
+ public void TestClear()
+ {
+ ConcreteCollection myCollection;
+ int numberOfItems;
+ numberOfItems = 1;
+ myCollection = new ConcreteCollection(numberOfItems);
+ myCollection.Clear();
+ Assert(myCollection.Count == 0);
+ Assert(myCollection.onClearFired);
+ Assert(myCollection.onClearCompleteFired);
+ }
+
+ // Test RemoveAt, other removes and the hooks
+ public void TestRemove()
+ {
+ ConcreteCollection myCollection;
+ int numberOfItems;
+ numberOfItems = 3;
+ // Set up a test collection
+ myCollection = new ConcreteCollection(numberOfItems);
+
+ // The list is 0-based. So if we remove the second one
+ myCollection.RemoveAt(1);
+
+ // We should see the original third one in it's place
+ Assert(myCollection.PeekAt(1) == 2);
+ Assert(myCollection.onRemoveFired);
+ Assert(myCollection.onRemoveIndex == 1);
+ Assert(myCollection.onRemoveCompleteFired);
+ Assert(myCollection.onRemoveCompleteIndex == 1);
+ IList listObj = myCollection;
+ listObj.Remove(0);
+ // Confirm parameters are being passed to the hooks
+ Assert(myCollection.onRemoveIndex == 0);
+ Assert(myCollection.onRemoveCompleteIndex == 0);
+ }
+
+ // Test the random access feature
+ public void TestSet()
+ {
+ ConcreteCollection myCollection;
+ int numberOfItems;
+ numberOfItems = 3;
+ myCollection = new ConcreteCollection(numberOfItems);
+ IList listObj = myCollection;
+ listObj[0] = 99;
+ Assert((int) listObj[0] == 99);
+ Assert(myCollection.onSetFired);
+ Assert(myCollection.onSetCompleteFired);
+ Assert(myCollection.onSetOldValue == 0);
+ Assert(myCollection.onSetCompleteOldValue == 0);
+ Assert(myCollection.onSetNewValue == 99);
+ Assert(myCollection.onSetCompleteNewValue == 99);
+ }
+}
+
+}
+----------------------- CollectionBaseTest.cs ends --------
+
+</pre>
+ <ul>
+ * If you use Emacs, you might want to use the .emacs
+ file and the package developed by Brad Merrill
+ mailto:zbrad@cybercom.net. It will allow you to
+ highlight and indent in C# style in your Emacs
+ editor. (XEmacs will still work but it'll also
+ complain).
+
+ * CSharpDevelop is a GPLed IDE developed by IC#Code.
+ Search for it at sourceforge if you are interested
+ in it.
+
+ * For those who Java: "A comparison of Microsoft's
+ C# programming language to Sun Microsystem's Java
+ Programming language" by Dare Obasanjo is a really good
+ (very complete) text to read.
+
+ * Suggest this point and more, now I can't think of
+ anything more.
+ </ul>
+
+ Enjoy!!.
+
+ (c) 2002, <a href="mailto:jaime@geneura.ugr.es">Jaime Anguiano Olarra</a>.
+
+ The parts included in this document are property of their
+ respective authors.
+
+ Note: The identation of the source code has been changed a bit
+ so it could fit better in the website. Anyway, as nothing more
+ changed, the files should work as expected.
+
diff --git a/doc/monodoc-xml b/doc/monodoc-xml
new file mode 100644
index 00000000000..e8a5ffe2c71
--- /dev/null
+++ b/doc/monodoc-xml
@@ -0,0 +1,755 @@
+* MonoDoc XML Tag Reference
+
+** Introduction
+
+<em>
+[This documentation is in progress. Comments to
+<a href="mailto:jbarn@httcb.net">jbarn@httcb.net</a> and/or
+<a href="mailto:mono-docs-list@ximian.com">mono-docs-list@ximian.com</a>.]
+</em>
+
+MonoDoc XML, our format for multilingual API documentation stored outside of
+source files, is very similar to the output of Microsoft's csc /doc. Minor
+alterations have been made to ease human parsing and hand-editing, but
+the majority of the tags are identical. In fact, many of the descriptions
+and examples below are taken from the ECMA C# Language Specification with
+little or no alteration.
+
+This document provides a list of all available MonoDoc XML tags, with
+syntax and examples. A complete example can be found in
+<a href="#appendix-a">Appendix A</a>, and both a <a href="#">DTD</a> and
+<a href="#">XSD schema</a> will be available very shortly.
+
+** MonoDoc XML Tags
+
+<dl>
+<dt><code><a href="#c">&lt;c&gt;</a></code></dt>
+<dd>Mark short sections of text as code.</dd>
+
+<dt><code><code><a href="#code">&lt;code&gt;</a></code></dt></code>
+<dd>Mark one or more lines as code or output.</dd>
+
+<dt><code><a href="#doc">&lt;doc&gt;</a></dt></code>
+<dd>Root element of documentation XML.</dd>
+
+<dt><code><a href="#event">&lt;event&gt;</a></dt></code>
+<dd>Describe an event.</dd>
+
+<dt><code><a href="#example">&lt;example&gt;</a></dt></code>
+<dd>An example.</dd>
+
+<dt><code><a href="#exception">&lt;exception&gt;</a></dt></code>
+<dd>Specify an exception a method can throw.</dd>
+
+<dt><code><a href="#field">&lt;field&gt;</a></dt></code>
+<dd>Describe a field.</dd>
+
+<dt><code><a href="#list">&lt;list&gt;</a></dt></code>
+<dd>Create a list or table.</dd>
+
+<dt><code><a href="#method">&lt;method&gt;</a></dt></code>
+<dd>Describe a method.</dd>
+
+<dt><code><a href="#para">&lt;para&gt;</a></dt></code>
+<dd>Allow text to be structured in paragraphs.</dd>
+
+<dt><code><a href="#param">&lt;param&gt;</a></dt></code>
+<dd>Specify a parameter for a method.</dd>
+
+<dt><code><a href="#paramref">&lt;paramref&gt;</a></dt></code>
+<dd>Mark a word as a parameter.</dd>
+
+<dt><code><a href="#permission">&lt;permission&gt;</a></dt></code>
+<dd>Define the access level of a member.</dd>
+
+<dt><code><a href="#property">&lt;property&gt;</a></dt></code>
+<dd>Describe a property.</dd>
+
+<dt><code><a href="#remarks">&lt;remarks&gt;</a></dt></code>
+<dd>Provide verbose information for a type or member.</dd>
+
+<dt><code><a href="#returns">&lt;returns&gt;</a></dt></code>
+<dd>Specify the return value of a method.</dd>
+
+<dt><code><a href="#see">&lt;see&gt;</a></dt></code>
+<dd>Specify a link.</dd>
+
+<dt><code><a href="#seealso">&lt;seealso&gt;</a></dt></code>
+<dd>Specify a 'see also' entry.</dd>
+
+<dt><code><a href="#summary">&lt;summary&gt;</a></dt></code>
+<dd>Provide a brief (usually one sentence) description of a member or type.</dd>
+
+<dt><code><a href="#type">&lt;type&gt;</a></dt></code>
+<dd>Describe a type.</dd>
+</dl>
+
+** Definitions and Examples
+
+*** <a name="c">&lt;c&gt;</a>
+
+This tag can be used to mark short, inline fragments of text that should
+be considered source code or program output. User agents should render
+this tag in a special -- likely monospace -- font. For larger sections,
+use <a href="#code"><code>&lt;code&gt;</code></a>.
+
+**** Syntax
+
+<pre>
+&lt;c&gt;code or output text&lt;/c&gt;
+</pre>
+
+**** Example
+
+<pre>
+&lt;remarks&gt;
+ Class &lt;c&gt;Point&lt;/c&gt; models a point in two-dimensional space.
+&lt;/remarks&gt;
+</pre>
+
+*** <a name="code">&lt;code&gt;</a>
+
+This tag can be used to mark one or more lines of text as source code or
+program output. User agents should render this tag in a special (likely
+monospace) font, and preserve both whitespace and newlines.
+
+**** Syntax
+
+ <code>&lt;code&gt;source or program output&lt;/code&gt;</code>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ This method changes the point's location by the given
+ x- and y-offsets.
+ &lt;example lang="C#"&gt;
+ A C# example:
+ &lt;code&gt;
+ Point p = new Point(3, 5);
+ p.Translate(-1, 3);
+ // p == (2, 8);
+ &lt;/code&gt;
+ &lt;/example&gt;
+&lt;/summary&gt;
+</pre>
+
+*** <a name="doc">&lt;doc&gt;</a>
+
+This tag is the root element of the documentation file. It can contain
+any number of &lt;type&gt; elements.
+
+**** Syntax
+
+<code>&lt;doc lang="language" assembly="assembly"&gt;typedocs&lt;/doc&gt;</code>
+
+<blockquote>
+<em>lang="language"</em><br />
+The two-letter ISO code that specifies what language the contained
+documentation is written in.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;doc lang="en"&gt;
+ &lt;type name="Graphics.Point"&gt;
+ &lt;!-- ... --&gt;
+ &lt;/type&gt;
+&lt;/doc&gt;
+</pre>
+
+*** <a name="event">&lt;event&gt;</a>
+
+This tag documents an event.
+
+**** Syntax
+
+<code>&lt;event name="eventname"&gt;documentation&lt;/event&gt;</code>
+
+<blockquote>
+<em>name="eventname"</em><br />
+The name of the event being documented.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;event name="Click"&gt;
+ &lt;summary&gt;
+ Occurs when the control is clicked.
+ &lt;/summary&gt;
+ &lt;data&gt;
+ The event handler receives an argument of type EventArgs
+ containing data related to this event.
+ &lt;/data&gt;
+ &lt;remarks&gt;
+ &lt;para&gt;The ControlStyles.StandardClick style must be set
+ for this event to be raised.&lt;/para&gt;
+ &lt;para&gt;For more information about handling events, see
+ Consuming Events.&lt;/para&gt;
+ &lt;/remarks&gt;
+&lt;/event&gt;
+</pre>
+
+*** <a name="example">&lt;example&gt;</a>
+
+This tag marks a section of text as an example, and optionally specifies
+what programming language <code><a href="#code">&lt;code&gt;</a></code> portions of the example are written in.
+
+**** Syntax
+
+<code><example lang="language">example text and code</example></code>
+
+<blockquote>
+<em>lang="language"</em><br />
+(optional) The name of the programming language <code><a href="#code">&lt;code&gt;</a></code> blocks in this example
+use. This information can be used by user agents to provide
+intelligent access to examples in multiple languages.
+</blockquote>
+
+**** Example
+
+See <code><a href="#code">&lt;code&gt;<a/></code> for an example.
+
+*** <a name="exception">&lt;exception&gt;</a>
+
+This tag provides a way to specify the exceptions a method can throw.
+
+**** Syntax
+
+<code>&lt;exception cref="exception-type"&gt;description&lt;/exception&gt;</code>
+
+<blockquote>
+<em>cref="exception-type"</em><br />
+The name of an exception type.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;exception cref="System.IO.FileNotFoundException"&gt;
+ Thrown when the requested file is not found.
+&lt;/exception&gt;
+</pre>
+
+*** <a name="field">&lt;field&gt;</a>
+
+This tag is used to describe a field.
+
+**** Syntax
+
+<code>&lt;field name="fieldname"&gt;documentation&lt;/field&gt;</code>
+
+<blockquote>
+<em>name="fieldname"</em><br />
+The name of the field being documented.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;field name="x"&gt;
+ &lt;summary&gt;
+ Instance variable &lt;c&gt;x&lt;/c&gt; represents the point's
+ x-coordinate.
+ &lt;/summary&gt;
+&lt;/field&gt;
+</pre>
+
+*** <a name="list">&lt;list&gt;</a>
+
+This tag is used to create a list or table of items. It may contain a
+<code>&lt;listheader&gt;</code> block to define the heading row of either a table or
+definition list. (When defining a table, only an entry for 'term' in the
+heading need be supplied.)
+
+Each item in the list is specified with an <code>&lt;item&gt;</code> block. When creating a
+definition list, both <code>&lt;term&gt;</code> and <code>&ltdescription&gt;</code> must be specified.
+However, for a table, bulleted list, or numbered list, only <code>&lt;description&gt;</code>
+need be specified.
+
+**** Syntax
+
+<pre>
+&lt;list type="bullet" | "number" | "table"&gt;
+ &lt;listheader&gt;
+ &lt;term&gt;term&lt;/term&gt;
+ &lt;description&gt;description&lt;/description&gt;
+ &lt;/listheader&gt;
+ &lt;item&gt;
+ &lt;term&gt;term&lt;/term&gt;
+ &lt;description&gt;description&lt;/description&gt;
+ &lt;/item&gt;
+
+ ...
+
+&lt;/list&gt;
+</pre>
+
+<blockquote>
+<em>term</em><br />
+The term to define, whose definition is in <code>&lt;description&gt;</code>.
+<br /><br />
+<em>description</em><br />
+Either an item in a bullet or numbered list, or the definition of a <code>&lt;term&gt;</code>.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;list type="bullet"&gt;
+ &lt;item&gt;
+ &lt;description&gt;Item 1&lt;/description&gt;
+ &lt;/item&gt;
+ &lt;item&gt;
+ &lt;description&gt;Item 2&lt;/description&gt;
+ &lt;/item&gt;
+&lt;/list&gt;
+</pre>
+
+*** <a name="method">&lt;method&gt;</a>
+
+This tag is the overall containing tag for documenting a method.
+
+**** Syntax
+
+<code>&lt;method name="methodname"&gt;documentation&lt;/method&gt;</code>
+
+**** Example
+
+<pre>
+&lt;method name="op_Equality(Graphics.Point,Graphics.Point)"&gt;
+ &lt;summary&gt;
+ This operator determines whether two points have
+ the same location.
+ &lt;/summary&gt;
+ &lt;param name="p1"&gt;
+ &lt;c&gt;p1&lt;/c&gt; is the first Point to be compared.
+ &lt;/param&gt;
+ &lt;param name="p2"&gt;
+ &lt;c&gt;p2&lt;/c&gt; is the second Point to be compared.
+ &lt;/param&gt;
+ &lt;returns&gt;
+ True if the points have the same location and they
+ have the exact same type; otherwise, false.
+ &lt;/returns&gt;
+ &lt;seealso cref="Equals(System.Object)" /&gt;
+ &lt;seealso cref="op_Inequality(Graphics.Point,Graphics.Point)" /&gt;
+&lt;/method&gt;
+</pre>
+
+*** <a name="para">&lt;para&gt;</a>
+
+
+This tag is for use inside other tags such as <code>&lt;remarks&gt;</code> or <code>&lt;returns&gt;</code>, and
+allows text to be structured into paragraphs.
+
+**** Syntax
+
+<code>&lt;para&gt;text&lt;/para&gt;</code>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ &lt;para&gt;
+ This is the entry point of the &lt;c&gt;Point&lt;/c&gt; class testing
+ program.
+ &lt;/para&gt;
+ &lt;para&gt;
+ This program tests each method and operator, and
+ is intended to be run after any non-trivial maintenance has
+ been performed on the &lt;c&gt;Point&lt;/c&gt; class.
+ &lt;/para&gt;
+&lt;/summary&gt;
+</pre>
+
+*** <a name="param">&lt;param&gt;</a>
+
+This tag is used to describe a parameter for a method, constructor, or
+indexer.
+
+**** Syntax
+
+<code>&lt;param name="name"&gt;description&lt;/param&gt;</code>
+
+<blockquote>
+<em>name</em><br />
+The name of the parameter.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ This is the entry point of the &lt;c&gt;Point&lt;/c&gt;
+ class.
+&lt;/summary&gt;
+&lt;param name="xor"&gt;&lt;c&gt;xor&lt;/c&gt; is the new x-coordinate.&lt;/param&gt;
+&lt;param name "yor"&gt;&lt;c&gt;yor&lt;/c&gt; is the new y-coordinate.&lt;/param&gt;
+</pre>
+
+*** <a name="paramref">&lt;paramref&gt;</a>
+
+This tag is used to indicate that a word is a parameter. User agents
+could use this information for special formatting or hyperlink insertion.
+
+**** Syntax
+
+<code>&lt;paramref name="name" /&gt;</code>
+
+<blockquote>
+<em>name</em><br />
+The name of the parameter.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ This constructor initializes the new Point to
+ (&lt;paramref name="xor" /&gt;,&lt;paramref name="yor" /&gt;).
+&lt;/summary&gt;
+&lt;param name="xor"&gt;&lt;c&gt;xor&lt;/c&gt; is the new x-coordinate.&lt;/param&gt;
+&lt;param name "yor"&gt;&lt;c&gt;yor&lt;/c&gt; is the new y-coordinate.&lt;/param&gt;
+</pre>
+
+*** <a name="permission">&lt;permission&gt;</a>
+
+This tag allows the security accessibility of a member to be documented.
+
+**** Syntax
+
+<code>&lt;permission cref="member"&gt;description&lt;/permission&gt;</code>
+
+<blockquote>
+<em>cref="member"</em><br />
+The name of a member.</br>
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;permission cref="System.Security.PermissionSet"&gt;
+ Everyone can access this method.
+&lt;/permission&gt;
+</pre>
+
+*** <a name="property">&ltproperty&gt;</a>
+
+This tag is the overall containing tag for documenting a property.
+
+**** Syntax
+
+<code>&lt;property name="propertyname"&gt;documentation&lt;/property&gt;</code>
+
+<blockquote>
+<em>name="propertyname"</em><br />
+The name of the property.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;property name="X"&gt;
+ &lt;summary&gt;
+ Gets or sets the point's x-coordinate.
+ &lt;value&gt;
+ The point's x-coordinate.
+ &lt;/value&gt;
+&lt;/property&gt;
+</pre>
+
+
+*** <a name="remarks">&lt;remarks&gt;</a>
+
+This tag contains extended discussion and information about a member or
+a type. <em>[jbarn: This differs from both the ECMA docs and
+portions of Microsoft's documentation, but seems consistent with both
+common usage, and, more importantly, NDoc convention.]</em>
+
+**** Syntax
+
+<code>&lt;remarks&gt;description&lt;/remarks&gt;</code>
+
+**** Example
+
+<pre>
+&lt;type name="Graphics.Point"&gt;
+ &lt;summary&gt;
+ Models a point in a two-dimensional plane.
+ &lt;/summary&gt;
+ &lt;remarks&gt;
+ Herein I might have an extended discussion of
+ the validity of Cartesian coordinate systems,
+ with examples pro and con, and perhaps
+ some code.
+ &lt;/remarks&gt;
+
+ &lt;!-- ... --&gt;
+&lt;/type&gt;
+</pre>
+
+*** <a name="returns">&lt;returns&gt;</a>
+
+This tag is used to describe the return value of a method.
+
+**** Syntax
+
+<code>&lt;returns&gt;description&lt;/returns&gt;</code>
+
+**** Example
+
+<pre>
+&lt;method name="op_Inequality(Graphics.Point,Graphics.Point)"&gt;
+ &lt;summary&gt;
+ This operator determines whether two points have the
+ same location.
+ &lt;/summary&gt;
+ &lt;param name="p1"&gt;&lt;c&gt;p1&lt;/c&gt; is the first Point to be compared.&lt;/param&gt;
+ &lt;param name="p2"&gt;&lt;c&gt;p2&lt;/c&gt; is the second Point to be compared.&lt;/param&gt;
+ &lt;returns&gt;
+ True if the points do not have the same location and they
+ have the exact same type; otherwise, false.
+ &lt;/returns&gt;
+&lt;/method&gt;
+</pre>
+
+*** <a name="see">&lt;see&gt;</a>
+
+This tag allows a link to be specified within documentation text. (Use
+<code>&lt;seealso&gt;</code> to indicate links that should appear in a 'See Also' section.)
+
+**** Syntax
+
+<code>&lt;see cref="destination" /&gt;</code>
+
+<blockquote>
+<em>cref="destination"</em><br />
+A destination, such as a type or a member of a type.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ This method changes the point's location to the given
+ coordinates. This is an asinine way to insert a link,
+ but &lt;see cref="Equals(Object)" /&gt; to understand
+ how points are compared.
+&lt;/summary&gt;
+</pre>
+
+*** <a name="seealso">&lt;seealso&gt;</a>
+
+This tag allows an entry to be generated for the 'See Also' section. (Use
+<code>&lt;see&gt;</code> to specify a link from within text.)
+
+**** Syntax
+
+<code>&lt;seealso cref="destination" /&gt;</code>
+
+<blockquote>
+<em>cref="destination"</em><br />
+A destination, such as a type or a member of a type.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ This method determines whether two Points have the
+ same location.
+&lt;/summary&gt;
+&lt;seealso cref="op_Equality(Graphics.Point,Graphics.Point)" /&gt;
+&lt;seealso cref="op_Inequality(Graphics.Point,Graphics.Point" /&gt;
+</pre>
+
+*** <a name="summary">&lt;summary&gt;</a>
+
+This tag contains a short summary of a member or type,
+often one sentence. <em>[jbarn: This differs from both the ECMA docs and
+portions of Microsoft's documentation, but seems consistent with both
+common usage, and, more importantly, NDoc convention.]</em>
+
+**** Syntax
+
+<code>&lt;summary&gt;description&lt;/summary&gt;</code>
+
+**** Example
+
+<pre>
+&lt;summary&gt;
+ This is the entry point of the &lt;c&gt;Point&lt;/c&gt; class testing
+ program.
+&lt;/summary&gt;
+&lt;remarks&gt;
+ This program tests each method an operator, and is intended
+ to be run after any non-trivial maintenance is performed
+ on the &lt;c&gt;Point&lt;/c&gt; class.
+&lt;/remarks&gt;
+</pre>
+
+*** <a name="type">&lt;type&gt;</a>
+
+This tag is the overall containing tag for documenting a type.
+
+**** Syntax
+
+<code>&lttype name="typename" assembly="assemblyname"&gt;documentation&lt;/type&gt;</code>
+
+<blockquote>
+<em>name="typename"</em><br />
+The name of the type being documented.
+<br /><br />
+<em>assembly="assemblyname"</em><br />
+The assembly this type resides in. This attribute is not required for nested types.
+</blockquote>
+
+**** Example
+
+<pre>
+&lt;type name="Graphics.Point" assembly="Point"&gt;
+ &lt;summary&gt;
+ Models a point in two-dimensional space.
+ &lt;/summary&gt;
+
+ &lt;!-- members --&gt;
+
+ &lt;field name="x"&gt;
+ &lt;summary&gt;
+ Represents the point's x-coordinate.
+ &lt;/summary&gt;
+ &lt;/field&gt;
+&lt;/type&gt;
+</pre>
+
+** <a name="appendix-a">Appendix A: Complete Example</a>
+
+<em>[jbarn: Please, please, don't take the human-readable portions of
+this example to be good guidelines for writing your own documentation.
+this XML is intended only to show structure.]</em>
+
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;doc lang="en"&gt;
+ &lt;type name="Graphics.Point" assembly="Point"&gt;
+ &lt;summary&gt;
+ Models a point in a two-dimensional plane.
+ &lt;/summary&gt;
+ &lt;remarks&gt;
+ No useful remarks.
+ &lt;/remarks&gt;
+
+ &lt;!-- fields --&gt;
+ &lt;field name="x"&gt;
+ &lt;summary&gt;
+ Instance variable &lt;c&gt;x&lt;/c&gt; represents the point's x-coordinate.
+ &lt;/summary&gt;
+ &lt;/field&gt;
+
+ &lt;field name="y"&gt;
+ &lt;summary&gt;
+ Instance variable &lt;c&gt;y&lt;/c&gt; represents the point's y-coordinate.
+ &lt;/summary&gt;
+ &lt;/field&gt;
+
+ &lt;!-- methods --&gt;
+ &lt;method name="#ctor"&gt;
+ &lt;summary&gt;
+ Initializes the new point to &lt;c&gt;(0,0)&lt;/c&gt;.
+ &lt;/summary&gt;
+ &lt;/method&gt;
+
+ &lt;method name="#ctor(System.Int32,System.Int32)"&gt;
+ &lt;summary&gt;
+ Initializes the new Point to (&lt;paramref name="xor" /&gt;,&lt;paramref name="yor" /&gt;).
+ &lt;/summary&gt;
+ &lt;param name="xor"&gt;&lt;c&gt;xor&lt;/c&gt; is the new x-coordinate.&lt;/param&gt;
+ &lt;param name="yor"&gt;&lt;c&gt;yor&lt;/c&gt; is the new y-coordinate.&lt;/param&gt;
+ &lt;/method&gt;
+
+ &lt;method name="Move(System.Int32,System.Int32)"&gt;
+ &lt;summary&gt;
+ This method changes the point's location to the given coordinates.
+ &lt;/summary&gt;
+ &lt;param name="xor"&gt;&lt;c&gt;xor&lt;/c&gt; is the new x-coordinate.&lt;/param&gt;
+ &lt;param name="yor"&gt;&lt;c&gt;yor&lt;/c&gt; is the new y-coordinate.&lt;/param&gt;
+ &lt;seealso cref="Translate(System.Int32,System.Int32)" /&gt;
+ &lt;/method&gt;
+
+ &lt;method name="Translate(System.Int32,System.Int32)"&gt;
+ &lt;summary&gt;This method changes the point's location by the given x- and y-offsets.&lt;/summary&gt;
+ &lt;remarks&gt;
+ &lt;example lang="C#"&gt;
+ A C# example:
+ &lt;code&gt;
+ Point p = new Point(3, 5);
+ p.Translate(-1, 3);
+ &lt;/code&gt;
+ This code results in &lt;c&gt;p&lt;/c&gt; having the value (2,8).
+ &lt;/example&gt;
+ &lt;/remarks&gt;
+ &lt;param name="xor"&gt;&lt;c&gt;xor&lt;/c&gt; is the relative x-offset.&lt;/param&gt;
+ &lt;param name="yor"&gt;&lt;c&gt;yor&lt;/c&gt; is the relative y-offset.&lt;/param&gt;
+ &lt;seealso cref="Move(System.Int32,System.Int32)" /&gt;
+ &lt;/method&gt;
+
+ &lt;method name="Equals(System.Object)"&gt;
+ &lt;summary&gt;This method determines whether two points have the same location.&lt;/summary&gt;
+ &lt;param name="o"&gt;&lt;c&gt;o&lt;/c&gt; is the object to be compared to the current object.&lt;/param&gt;
+ &lt;returns&gt;True if the Points have the same location and they have the exact same
+ type; otherwise, false.&lt;/returns&gt;
+ &lt;seealso cref="op_Equality(Graphics.Point,Graphics.Point)" /&gt;
+ &lt;seealso cref="op_Inequality(Graphics.Point,Graphics.Point" /&gt;
+ &lt;/method&gt;
+
+ &lt;method name="ToString"&gt;
+ &lt;summary&gt;Report a point's location as a string.&lt;/summary&gt;
+ &lt;returns&gt;A string representing a point's location, in the form (x,y), without any
+ leading, trailing, or embedded whitespace.&lt;/returns&gt;
+ &lt;/method&gt;
+
+ &lt;method name="op_Equality(Graphics.Point,Graphics.Point)"&gt;
+ &lt;summary&gt;This operator determines whether two points have the same location.&lt;/summary&gt;
+ &lt;param name="p1"&gt;&lt;c&gt;p1&lt;/c&gt; is the first Point to be compared.&lt;/param&gt;
+ &lt;param name="p2"&gt;&lt;c&gt;p2&lt;/c&gt; is the second Point to be compared.&lt;/param&gt;
+ &lt;returns&gt;True if the points have the same location and they have the exact same
+ type; otherwise, false.&lt;/returns&gt;
+ &lt;seealso cref="Equals(System.Object)" /&gt;
+ &lt;seealso cref="op_Inequality(Graphics.Point,Graphics.Point)" /&gt;
+ &lt;/method&gt;
+
+ &lt;method name="op_Inequality(Graphics.Point,Graphics.Point)"&gt;
+ &lt;summary&gt;This operator determines whether two points have the same location.&lt;/summary&gt;
+ &lt;param name="p1"&gt;&lt;c&gt;p1&lt;/c&gt; is the first Point to be compared.&lt;/param&gt;
+ &lt;param name="p2"&gt;&lt;c&gt;p2&lt;/c&gt; is the second Point to be compared.&lt;/param&gt;
+ &lt;returns&gt;True if the points do not have the same location and they have the exact same
+ type; otherwise, false.&lt;/returns&gt;
+ &lt;seealso cref="Equals(System.Object)" /&gt;
+ &lt;seealso cref="op_Equality(Graphics.Point,Graphics.Point)" /&gt;
+ &lt;/method&gt;
+
+ &lt;method name="Main"&gt;
+ &lt;summary&gt;
+ This is the entry point of the Point class testing program.
+ &lt;/summary&gt;
+ &lt;remarks&gt;
+ &lt;para&gt;This program tests each method and operator, and is intended to be run after
+ any non-trivial maintenance has been performed on the Point class.&lt;/para&gt;
+ &lt;/remarks&gt;
+ &lt;/method&gt;
+
+ &lt;!-- properties --&gt;
+ &lt;property name="X"&gt;
+ &lt;value&gt;Property &lt;c&gt;X&lt;/c&gt; represents the point's x-coordinate.&lt;/value&gt;
+ &lt;/property&gt;
+
+ &lt;property name="Y"&gt;
+ &lt;value&gt;Property &lt;c&gt;y&lt;/c&gt; represents the point's y-coordinate.&lt;/value&gt;
+ &lt;/property&gt;
+ &lt;/type&gt;
+&lt;/doc&gt;
+</pre>
+
diff --git a/doc/mysql b/doc/mysql
new file mode 100755
index 00000000000..e45ea0bee0b
--- /dev/null
+++ b/doc/mysql
@@ -0,0 +1,270 @@
+* MySQL Data Provider
+
+<ul>
+ <li>MySQL Data Provider for
+ <a href="http://www.mysql.com/">MySQL</a> databases. It is written in C# and uses
+ the MySQL C Client Library</li>
+
+ <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql</li>
+
+ <li>Works on Windows and Linux via the MySQL client shared library
+ (libmySQL.dll on Windows and libmysqlclient.so on Linux).</li>
+
+ <li>Started by Daniel Morgan using
+ <a href="http://www.cybercom.net/~zbrad/DotNet/MySql/">C# Bindings to MySQL</a> from <a href="mailto:zbrad@cybercom.net">Brad Merill</a>
+
+ <li><a href="http://www.mysql.com/articles/dotnet/">Exploring MySQL in the Microsoft .NET Environment</a> is an article
+ by Mr. Venu who is a MySQL AB developer.</li>
+
+ <li>There is a good alternative to the provider in Mono:
+ <ul>
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> from ByteFX
+ is a MySQL Managed provider written in 100% C#,
+ does not require a client library, and works on Microsoft .NET and Mono. You
+ need at least Mono 0.18 and MySQLNet 0.65 for it to work on Mono.</li>
+
+ </ul>
+ </li>
+ <li>Testing for Mono's Mono.Data.MySql and ByteFX's ByteFX.Data.MySQLClient is below...</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>can connect
+
+ <li>can execute non-queries via ExecuteNonQuery()
+
+ <li>can execute aggregates via ExecuteScalar() and retrieve the
+ single row/single column result
+
+ <li>can execute queries and retrieve results using a data reader.
+
+ <li>a schema DataTable has been partially
+ implemented which is returned from GetSchemaTable() in MySqlDataReader.
+
+ <li>a DataTable in a DataSet can be filled via a MySqlDataAdapter
+
+ <li>The shared client libraries
+ between windows version and linux are different: windows has libmySQL.dll
+ while linux has libmysqlclient.so. This is handled by the
+ file etc/mono/config which is mapped by the mono runtime in knowing
+ which native shared library to load. In cvs, this file is mono/config.in and
+ can be modified with a text editor.
+</ul>
+
+** Action plan
+
+The current plan to work on the MySQL data provider:
+
+ <ul>
+ <li>Parameters support via MySqlParameter and MySqlParameterCollection
+
+ <li>Support LOBs (Large Object)
+
+ <li>Change the MySQL provider to not be dependent on a client library and
+ be written in 100% C#
+
+ <li>Connection pooling
+
+ <li>Get the provider to work like other data providers
+ </ul>
+
+** Testing for Mono's MySQL provider (Mono.Data.MySql)
+
+<ul>
+ <li>Have access to a MySQL database or download it from
+ <ul>
+ <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li>
+ </ul>
+ </li>
+
+ <li>Take a look at MySqlTest.cs in mcs/class/Mono.Data.MySql/Test</li>
+
+ <li>Has a ConnectionString format:
+<pre>
+ "Server=hostname;" +
+ "Database=database;" +
+ "User ID=username;" +
+ "Password=password"
+ (or)
+ "host=hostname;" +
+ "dbname=database;" +
+ "user=username;" +
+ "passwd=password"
+</pre>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.MySql;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=mysql;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new MySqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs \
+ -r System.Data.dll \
+ -r Mono.Data.MySql.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll \
+ -r Mono.Data.MySql.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
+** Testing for MySQLNet provider (ByteFX.Data.MySQLClient)
+
+<ul>
+ <li>Have access to a MySQL database or download it from
+ <ul>
+ <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li>
+ </ul>
+ </li>
+
+ <li>MySQLNet can be gotten from <a href="http://sourceforge.net/projects/mysqlnet/">here</a> and the
+ binary assembly ByteFX.Data.dll needs to be installed
+ in the same place as the mono class libraries.</li>
+
+ <li>MySQLNet requires <a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp">SharpZipLib</a> which is
+ a Zip Library written in 100% C#. This is used for compression/decompression of data
+ sent/received over the network. The SharpZipLib binary assembly SharpZipLib.dll should
+ be installed in the same place as the mono class libraries.</li>
+
+ <li>Has a ConnectionString format:
+<pre>
+"Server=hostname;" +
+"Database=database;" +
+"User ID=username;" +
+"Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using ByteFX.Data.MySQLClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=mysql;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new MySQLConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r ByteFX.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r ByteFX.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
diff --git a/doc/odbc b/doc/odbc
new file mode 100755
index 00000000000..33d25c98193
--- /dev/null
+++ b/doc/odbc
@@ -0,0 +1,175 @@
+* ODBC Data Provider
+<ul>
+ <li>Exists in namespace System.Data.Odbc and assembly System.Data
+
+ <li>Works on Windows and Linux. Should have no problems working on UNIX too.
+
+ <li>Works on Windows via the native Windows odbc32.dll
+
+ <li>Works on Linux via:
+
+ <ul>
+ <li><a href="http://www.unixodbc.org/">unixODBC</a> which has
+ commercial support
+ from <a href="http://www.easysoft.com/">Easysoft</a></li>
+
+ <li><a href="http://www.iodbc.org/">iODBC</a> which has
+ a commercial support
+ from <a href="http://oplweb.openlinksw.com:8080/download/">OpenLink Software</a></li>
+ </ul>
+
+ <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a>
+
+ <li>List of <a href="http://ourworld.compuserve.com/homepages/Ken_North/odbcvend.htm">ODBC Vendors</a>
+
+ <li>ODBC can connect to various databases which has an ODBC driver installed:
+ <ul>
+ <li><a href="http://www.mysql.com/">MySQL</a>
+ <li><a href="http://www.postgresql.org/">PostgreSQL</a>
+ <li><a href="http://www.oracle.com/">Oracle</a>
+ <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a> and
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
+ via <a href="http://www.freetds.org/">FreeTDS</a> on UNIX)
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+ <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a>
+ (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a> on UNIX)
+ </ul>
+
+ <li>ODBC Provider created by Brian Ritchie.</li>
+
+ <li>Does not support trusted connections</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Can Connect on:
+ <ul>
+ <li>Windows via native Windows odbc32.dll</a></li>
+ <li>Linux via:
+ <ul>
+ <li>unixODBC's libodbc.so</li>
+ <li>iODBC's libiodbc.so</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>Various databases have been tested using their
+ ODBC drivers: MySQL, PostgreSQL, Oracle, IBM DB2, and Microsoft SQL Server</li>
+
+ <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand</li>
+
+ <li>Can execute aggreates and retrieve a single row single column result via
+ ExecuteScalar of a OdbcCommand</li>
+
+ <li>Can execute queries via ExecuteReader of a OdbcCommand and
+ retrieve results using an OdbcDataReader</li>
+
+ <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader</li>
+
+ <li>Can Fill a DataTable in a DataSet via an OdbcDataAdapter</li>
+</ul>
+
+** Action Plan
+
+<ul>
+
+ <li>Fixing bugs
+
+ <li>Testing with other setups
+</ul>
+
+** Testing ODBC provider
+
+<p>Test Mono's ODBC provider System.Data.Odbc with the MySQL ODBC driver MyODBC
+
+<p><ul>
+ <li>Take a look at OdbcTest.cs in mcs/class/System.Data/Test</li>
+
+ <li>Here is a ConnectionString format if you have a DSN setup:
+<pre>
+"DSN=dataSetName;UID=username;PWD=password"
+</pre>
+ </li>
+ <li>Here is a ConnectionString format if you do not have DSN (have not
+ gotten this to work):
+<pre>
+"DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;DATABASE=pubs"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.Odbc;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ // have an ODBC DSN setup named MYSQLDSN
+ // that accesses a MySQL database via
+ // MyODBC driver for ODBC with a
+ // hostname of localhost and database test
+ string connectionString =
+ "DSN=MYSQLDSN;" +
+ "UID=mysql;" +
+ "PWD=;";
+ IDbConnection dbcon;
+ dbcon = new OdbcConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
diff --git a/doc/oledb b/doc/oledb
new file mode 100755
index 00000000000..a4f80e53d47
--- /dev/null
+++ b/doc/oledb
@@ -0,0 +1,142 @@
+* OLE DB Provider
+
+<ul>
+ <li> Provides a OleDb-like provider for Mono
+ using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.</li>
+
+ <li> Exists in namespace System.Data.OleDb and assembly System.Data</li>
+
+ <li>Created by Rodrigo Moya</li>
+
+ <li>LibGDA has providers for:</li>
+ <ul>
+ <li><a href="http://www.mysql.com/">MySQL</a></li>
+ <li><a href="http://www.postgresql.org/">PostgreSQL</a></li>
+ <li>XML</li>
+ <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)</li>
+ <li><a href="http://www.oracle.com/">Oracle</a></li>
+ <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a></li>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a> and
+ <a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
+ via <a href="http://www.freetds.org/">FreeTDS</a>)</li>
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a></li>
+ <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a></li>
+ <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a></li>
+ (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)</li>
+ </ul>
+ </li>
+
+ <li>Does not support trusted connections</li>
+</ul>
+
+** Current Status
+ <ul>
+ <li>The OleDb provider is working with libgda (an OLE-DB/ADO data access for Unix).
+ The C-Sharp bindings to libgda currently work - meaning they can compile, run,
+ and you can connect to a
+ PostgreSQL database via libgda via the C-Sharp bindings to libgda.</li>
+
+ <li>Basic
+ functionality (execution of commands, data retrieval, transactions, etc) are
+ now working.</li>
+
+ <li>An inital implementation of GetSchemaTable() for
+ the OleDbDataReader has been checked into cvs. GetSchemaTable() isn't correct for OleDb,
+ but the foundation is there.</li>
+ </ul>
+
+** Action Plan
+ <ul>
+ <li>Current focus is on filling up the missing pieces (Data adapters
+ mainly) and schema support.</li>
+
+ <li>We need help building libgda on Windows though. libgda
+ builds find on linux though.</li>
+
+ <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET</li>
+ </ul>
+
+** Testing OleDb with libgda's PostgreSQL provider
+
+<ul>
+ <li>Requires a working mono and mcs</li>
+ <li>Requires Linux because the OleDb provider uses libgda and libgda only
+ works on Linux.</li>
+ <li>Connection String format: "Provider=providerName;...". providerName is the
+ name of the Provider you use, such as, PostgreSQL, MySQL, etc. The elipsis ...
+ means that the connection parameters are dependent upon the provider being used and
+ are passed to libgda for connecting. Such paramters, can be: Database, User ID, Password,
+ Server, etc...</li>
+ <li>See the test TestOleDb.cs found at mcs/class/System.Data/System.Data.OleDb</li>
+ <li>C# Example for Mono's System.Data.OleDb:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OleDb;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ // there is a libgda PostgreSQL provider
+ string connectionString =
+ "Provider=PostgreSQL;" +
+ "Addr=127.0.0.1;" +
+ "Database=rodrigo";
+ IDbConnection dbcon;
+ dbcon = new OleDbConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+
+</ul>
+
diff --git a/doc/oracle b/doc/oracle
new file mode 100755
index 00000000000..e69f378b1a9
--- /dev/null
+++ b/doc/oracle
@@ -0,0 +1,146 @@
+* Oracle Data Provider
+
+<ul>
+ <li>Exists in namespace System.Data.OracleClient and assembly System.Data.OracleClient</li>
+
+ <li>Works on Windows</li>
+
+ <li>Works with Oracle 8i</li>
+
+ <li>More information about Oracle can be found at <a href="http://www.oracle.com/"/>here</a></li>
+
+ <li>Created by Daniel Morgan.</li>
+
+ <li>Does not support trusted connections</li>
+
+</ul>
+
+** Current Status
+
+<ul>
+ <li>OracleConnection can connect to an Oracle 8i database on
+ Windows via oci.dll</li>
+
+ <li>The native glue library only has makefiles for Borland C++ and
+ Microsoft Visual C++ command line compilers. Only the makefile for
+ Microsoft Visual C++ command-line compiler has been tested.</li>
+
+ <li>Can execute simple DML SQL statements, such as,
+ INSERT a row into the EMP table via the OracleCommand's ExecuteNonQuery method</li>
+
+ <li>The System.Data.OracleClient.dll assembly can be built with mcs/mono via
+ the makefile.gnu for System.Data.OracleClient or csc/.net via the
+ System.Data.OracleClient.build nant build file. There is also a Visual Studio.NET
+ solution it too.
+
+</ul>
+
+** Action Plan
+
+<ul>
+ <li>Get the makefile for the Borland C++ compiler to work
+ since the <a href="http://www.borland.com/">Borland</a> C++ compiler is
+ a free download</li>
+ <li>Get the native glue lib System.Data.OracleClient.ocigule.dll to be built
+ using gcc on Linux. This would require that Oracle 8i client software be installed
+ on Linux with the oci headers and shared libraries</li>
+ <li>Be able to retrieve results via a data reader</li>
+ <li>Parameters support</li>
+ <li>Stored Procedures, Functions, and Packages support</li>
+ <li>Be able to fill a DataTable in a DataSet via a data adapter</li>
+ <li>Support for Oracle 9i</li>
+ <li>Figure out how to move the unmanaged OCI handling code in
+ the oci glue C library to the managed C# assembly. I have been unable
+ to successfully connect to an Oracle 8i database by using Platform Invoke and
+ Marshalling in C# to the oci shared library (oci.dll on Windows)</li>
+
+</ul>
+
+** Testing Mono.Data.OracleClient
+
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Have access to an Oracle 8i database or download it from
+ <a href="http://www.oracle.com/">Oracle</a>. Registration to the
+ Oracle Technology Network is free. If installing on Linux, I suggest you
+ do a lot of searching to see how others installed Oracle on Linux.</li>
+
+ <li>Make sure Mono.Data.OracleClient.dll assembly is built, if not, go
+ into Mono.Data.OracleClient and do a make -f makefile.gnu (on Linux) or
+ ../../nant/NAnt.exe (on Cygwin).</li>
+
+ <li>The OCI Glue Library Mono.Data.OracleClient.ociglue.dll will need to be
+ created as well. Has only been tested with lc (Microsoft Visual C++ command-line compiler).
+ There is a make file for Microsoft C++ and Borland C++. I'm sure it wouldn't be hard
+ to create a makefile for gcc if installing on Linux.</li>
+
+ <li>Take a look at TestOracleClient.cs found at mcs/class/System.Data.OracleClient/Test</li>
+
+ <li>Has a connection string format:
+<pre>
+"Data Source=tnsname;User ID=userid;Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OracleClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Data Source=testdb;" +
+ "User ID=scott;" +
+ "Password=tiger;";
+ IDbConnection dbcon;
+ dbcon = new OracleConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "insert into scott.emp " +
+ "(empno, ename, job, sal, deptno) " +
+ "values(123," +
+ "'Don Smith'," +
+ "'Cook'," +
+ "23021," +
+ "20)";
+ dbcmd.ConnectionString = sql;
+ dbcmd.ExecuteNonQuery();
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
diff --git a/doc/papers b/doc/papers
new file mode 100644
index 00000000000..36a31988e83
--- /dev/null
+++ b/doc/papers
@@ -0,0 +1,96 @@
+* JIT Compiler
+
+ <a
+ href="http://citeseer.nj.nec.com/vitek97efficient.html">
+ Efficient Type Inclusion Tests: Jahn Vitek, R. Nigel Horspool, Andres
+ Krall</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/cytron91efficiently.html">
+ Efficiently Computing Static Single Assignment Form and the Control
+ Dependence Graph: Ron Cytron, Jeanne Ferrante</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/193349.html">
+ Practical Improvements to the Construction and Destruction of Static Single Assignment Form: Preston Briggs,
+ Keith Cooper, Timothy Harvey, Taylor Simpson</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/krall98efficient.html">
+ Efficient JavaVM Just-in-Time Compilation: Andreas Krall</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/452617.html">Java for
+ Large-Scale Scientific Computations: Andreas Krall, Phillip Thomsich</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/117522.html">
+ Engineering Simple, Efficient Code Generator Generator: Christopher
+ W. Fraser, David R. Hanson, Todd A. Proebsting</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/proebsting92code.html">
+ Code Generation Techniques: Todd Alan Proebsting</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/74629.html">Fast,
+ Effective Code Generation in a Just-In-Time Java Compiler: Ali-Reza
+ Adl-Tabatabai Guei-Yuan Lueh, Vishesh M. Parikh, James M. Stichnoth...</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/bodik00abcd.html">
+ ABCD: Eliminating Array-Bounds Checks on Demand: Rastislav Bodik, Rajiv Gupta, Vivek Sarkar</a>
+
+* Register Allocation
+
+ <a
+ href="http://citeseer.nj.nec.com/poletto99linear.html">
+ Linear Scan Register Allocation: Massimiliano Poletto, Vivek Sarkar</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/traub98quality.html">
+ Quality and Speed in Linear-scan Register Allocation: Omri Traub, Glenn
+ Holloway, Michael D. Smith</a>
+
+* Loop Transformations
+
+ <a
+ href="http://citeseer.nj.nec.com/bacon93compiler.html">
+ Compiler Transformations for High-Performance Computing: David Bacon</a>
+
+* Interpreter
+
+ <a
+ href="http://citeseer.nj.nec.com/470069.html">
+ vmgen-A Generator of Efficient Virtual Machine Interpreters: M. Anton
+ Ertl, David Gregg, Andreas Krall, Bernd Paysan</a>
+
+* Synchronization
+
+ <a
+ href="http://citeseer.nj.nec.com/krall98monitors.html">
+ Monitors and Exceptions - How to implement Java efficiently: Andreas Krall,
+ Mark Probst</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/bacon98thin.html">
+ Thin Locks: Featherweight Synchronization for Java: David Bacon</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/278639.html">
+ Featherweight Monitors with Bacon Bits: David Bacon</a>
+
+* Garbage Collection
+
+ <a
+ href="http://citeseer.nj.nec.com/wilson92uniprocessor.html">
+ Uniprocessor Garbage Collection Techniques: Paul Wilson</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/41666.html">
+ A Language-Independent Garbage Collector Toolkit: Richard Hudson, Eliot Moss, Amer Diwan, Christopher Weight</a>
+
+ <a
+ href="http://citeseer.nj.nec.com/seligmann95incremental.html">
+ Incremental Collection of Mature Objects: Richard Hudson, Eliot Moss</a>
+
diff --git a/doc/passport b/doc/passport
new file mode 100644
index 00000000000..3ffe0dfeef9
--- /dev/null
+++ b/doc/passport
@@ -0,0 +1,298 @@
+* Updates
+
+ <b>Sep 20, 2001:</b> Microsoft has just announced some changes
+ to passport that are rather interesting. This document
+ reflects the Passport system without taking into account the
+ new changes.
+
+ Read about it <a href="http://www.microsoft.com/presspass/features/2001/sep01/09-20passport.asp">here</a>.
+
+ For an analysis of security problems with passport, check <a
+ href="http://avirubin.com/passport.html">http://avirubin.com/passport.html</a>.
+ The bottom line is that you should not put any sensitive
+ information on passport.
+
+ I have received many comments from people, and I have updated
+ the page accordingly. From removing incorrect statements, to
+ fixing typos, to include mentions to other software pieces.
+
+ I also corrected my statement about IIS and a trojan horse, I
+ should read a more educated press in the future. My apologies
+ to Microsoft and its employees on this particular topic. IIS
+ did not have a trojan horse built in.
+
+* Microsoft Hailstorm and Passport
+
+ Microsoft Passport is a centralized database hosted by
+ Microsoft that enhances the consumer experience with the Web
+ by providing a single logon system that they can use across a
+ number of participant web sites.
+
+ As you might know by now from our extensive <a
+ href="faq.html">FAQ</a>, the Mono project has nothing to do
+ with Microsoft Hailstorm or <a
+ href="http://www.passport.com">Microsoft Passport.</a>
+
+ Still a lot of people have asked us our opinion on them.
+
+** Passport
+
+ Passport is important not because of it being a breakthrough
+ technologically speaking, but because the company is in a
+ position to drive most people toward being suscribers of it.
+
+ At the time of this writing passport is required to use the
+ free mail service <a href="http://www.hotmail.com">Hotmail</a>
+ to get customized support for the <a
+ href="http://www.msn.com">MSN portal</a>, <a
+ href="http://msdn.microsoft.com">Microsoft Developers
+ Network</a> and according to the original announcement from
+ Microsoft <a href="http://www.americanexpress.com">American
+ Express</a> and <a href="http://www.ebay.com">EBay</a> will be
+ adopting it.
+
+ There is already a <a
+ href="http://www.passport.com/Directory/Default.asp?PPDir=C&lc=1033">Large
+ list</a> of participating sites.
+
+ There are many current users of it and Microsoft will be
+ driving more users towards Passport as it <a
+ href="http://news.cnet.com/news/0-1003-200-6343275.html">integrates
+ it</a> in their upcoming release of Windows.
+
+ Microsoft has also <a
+ href="http://www.passport.com/Business/JoinPassportNetwork.asp?lc=1033">developed
+ a toolkit</a> to enable current web merchants to integrate
+ their services with passport.
+
+ To the end user, there is a clear benefit: they only have to
+ log into a single network and not remember multiple passwords
+ across sites on the internet. Companies that adopt passport
+ will have a competition advantage over those that dont.
+ Microsoft lists a list of <a
+ href="http://www.passport.com/Business/Default.asp?lc=1033">benefits</a>
+ to companies.
+
+
+** The problems of Passport
+
+ There are a number of concerns that different groups have over
+ Passport. Sometimes I have some, sometimes I do not. But
+ overall, consumers and businesses can have better solutions.
+
+ <ul>
+ * <b>Single Point of Failure:</b> As more services and
+ components depend on remote servers, functionality can
+ grind to a halt if there is a failure on the
+ centralized Passport system.
+
+ Such a failure was predicted, and we recently <a
+ href="http://news.cnet.com/news/0-1005-200-6473003.html">witnessed</a>
+ got a lot of people worried.
+
+ The outgage lasted for seven days. Think what this
+ could do to your business.
+
+ * <b>Trust:</b> Not everyone trusts Microsoft to keep
+ their information confidential. Concerns are not only
+ at the corporate level policy, but also the fact that
+ the source code for Microsoft products is not
+ available, means that trojans or worms could be built
+ into the products by malicious engineers.
+
+ Various government officials in non-US countries also
+ have a policy that no state sensitive information can
+ be held by foreign companies in foreign soil. A natural
+ matter of national security to some.
+
+ * <b>Security:</b> With a centralized system like
+ Passport, imagine the repercussions of a malicious
+ hacker gaining access to the Passport database.
+ Personal information and credit card information about
+ almost everyone using a computer could be stored there.
+
+ Hackers have already <a
+ href="http://slashdot.org/articles/00/10/27/1147248.shtml">broken
+ into Microsoft</a> in the past. And the company was
+ unable to figure out for how long their systems had
+ been hacked.
+
+ Security holes have been found in <a
+ href="http://slashdot.org/articles/00/04/14/0619206.shtml">IIS
+ in the past.</a> If all the world's data is stored on
+ a central location, when a single security hole is
+ detected, it would allow an intruder to install a
+ backdoor within seconds into the corporate network
+ without people ever noticing.
+
+ Microsoft itself has been recently hit by worms,
+ imagine if all your business depended on a single
+ provider for providing all or your authentication
+ needs
+ </ul>
+
+ Microsoft might or might not realize this. The idea behind
+ Passport is indeed a good one (I can start to get rid of my
+ file that keeps track of the 30 logins and passwords or so
+ that I use across the various services on the net myself).
+
+** Alternatives to Microsoft Passport
+
+ An alternative to Microsoft Passport needs to take the above
+ problems into consideration. Any solution of the form `We
+ will just have a competing offering' will not work.
+
+ The system thus has to be:
+
+ <ul>
+ * <b>Distributed:</b> The entire authentication
+ system should not create an internet `blackout' in the
+ case of failure.
+
+ A distributed system using different software
+ platforms and different vendors would be more
+ resistent to an attack, as holes in a particular
+ implementation of the server software would not affect
+ every person at the same time.
+
+ A security hole attack might not even be relevant to
+ other software vendors software.
+
+ * <b>Allow for multiple registrars:</b> Users should
+ be able to choose a registrar (their banks, local
+ phone company, service provider, Swiss bank, or any
+ other entity they trust.
+
+ * <b>Mandate good security measures:</b> As a
+ principle, only Open Source software should be used
+ for servers in the registrar, and they should conform
+ to a standard set of tools and software that can be
+ examined by third parties.
+ </ul>
+
+ An implementation of this protocol could use the DNS or a
+ DNS-like setup to distribute the information of users with the
+ possibility of replicating and caching public information
+ about the user.
+
+ For instant messaging (another piece of the Hailstorm bit),
+ you want to use a non-centralized system like Sun's <a
+ href="http://www.jxta.org">JXTA</a>. Some people mailed me to
+ mention Jabber as a messaging platform and other people
+ pointed out to the <a
+ href="http://java.sun.com/products/jms/">Java Message
+ Service</a>. The JMS does support a number of very
+ interesting features that are worth researching.
+
+ It could also just use the user e-mail address as the `key' to
+ choose the registrar (msn.com, hotmail.com -> passport.com;
+ aol.com -> aol.passport.com; you get the idea).
+
+ The <a
+ href="http://www.soapware.org/xmlStorageSystem">xmlStorage</a>
+ idea from <a href="http://www.scripting.com">Dave Winer</a>
+ could be used to store the information.
+
+ A toolkit for various popular web servers could be provided,
+ authenticated and should be open sourced (for those of you who
+ think that a binary program would give more security and would
+ prevent people from tampering: you are wrong. You can always
+ use a proxy system that "behaves" like the binary, and passes
+ information back and forth from the real program, and snoops
+ in-transit information).
+
+ Good cryptographers need to be involved in this problem to
+ figure out the details and the possible insecure pieces of a
+ proposal like this.
+
+** Implementation: In short
+
+ To keep it short: <b>DNS, JXTA, xmlStorage.</b>
+
+
+** Deploying it
+
+ The implementation of such a system should be a pretty
+ straightforward task once security cryptographers have
+ designed such a beast.
+
+ The major problems are:
+
+ <ul>
+ * <b>People might just not care:</b> In a poll to US
+ citizens a couple of decades ago, it was found that
+ most people did not care about the rights they were
+ given by the Bill of Rights, which lead to a number of
+ laws to be passed in the US that eliminated most of
+ the rights people had.
+
+ * <b>The industry will move way too slow:</b>
+ Microsoft's implementation is out in the open now: it
+ is being deployed, and soon it will be insinuated to
+ many, many users. The industry needs to get together
+ soon if they care about this issue.
+
+ By the time the industry reacts, it might be too
+ late.
+ </ul>
+
+** Passport and Mono
+
+ The .NET class libraries include a Passport class that
+ applications might use to authenticate with Passport. Since
+ we do not have information at this point on the exact protocol
+ of Passport, it is not even feasible to implement it.
+
+ If at some point the information is disclosed, it could be
+ implemented.
+
+ If a competing system to Passport existed, we could probably
+ hide all the authentication information to use a number of
+ different passport-like systems.
+
+ If a user does not want to use Passport at all, he could
+ always turn it off (or completely remove the class from the
+ library). After all, this is free software.
+
+ Currently, we are too far from the point where this is a real
+ issue.
+
+** Passport and endangering Open Source.
+
+ A few people have said: `Mono will allow Passport to be
+ available for Linux and that is bad'. This is plain
+ misinformation.
+
+ Currently, you can obtain Passport for Linux from Microsoft
+ itself and deploy it today on your Web server. Mono does not
+ even enter the picture here. Go to passport.com and download
+ the toolkit and you will see with your own eyes that passport
+ is <B>already</b> available for Linux.
+
+** Disclaimer
+
+ This is just a group of personal thoughts of mine that I have
+ placed here because I get asked this question a lot lately.
+ The views of this page are not a statement from my employer
+ (Ximian, Inc).
+
+ This is not part of Mono. We are not trying to deal with this
+ problem.
+
+ Nat Friedman (Ximian's co-founder) has his own ideas on how a
+ competing system to Passport could be designed, but I will let
+ <a href="http://www.nat.org/">him</a> post his own story.
+
+** Other Passport Comments
+
+ An interesting study on the security of passport is available at: <a
+ href="http://avirubin.com/passport.html">http://avirubin.com/passport.html</a>
+
+** Other Alternatives
+
+ Some people have pointed out <a
+ href="http://www.xns.org">XNS</a>
+
+Send comments to me: Miguel de Icaza (<a
+ href="mailto:miguel@ximian.com">miguel@ximian.com</a>)
+
diff --git a/doc/pending b/doc/pending
new file mode 100644
index 00000000000..e243a10dedf
--- /dev/null
+++ b/doc/pending
@@ -0,0 +1,14 @@
+** Microsoft and GNU and Linux.
+
+Q: Does this mean that Microsoft is better than Linux?
+
+A: Many of us are working on <a
+ href="http://www.gnu.org/philosophy/free-sw.html">free software<a>
+ and want to have an <a href="http://www.opensource.org">open
+ source</a> environment that we can change, modify, improve, learn
+ from, and share with others. Some of us also think that this will
+ lead on the long run to better software: more efficient, faster,
+ more robust and more.
+
+ We are willing to take good ideas from any source they come from.
+
diff --git a/doc/pending-classes.in b/doc/pending-classes.in
new file mode 100644
index 00000000000..1cdb5a4cb36
--- /dev/null
+++ b/doc/pending-classes.in
@@ -0,0 +1,246 @@
+System.Object
+System.Exception
+System.ValueType
+System.Delegate
+System.MulticastDelegate
+System.Enum
+System.Activator
+System.ArgIterator
+System.__ComObject
+System.TypedReference
+System.Security.AllowPartiallyTrustedCallersAttribute
+System.Runtime.Serialization.Formatter
+System.Runtime.Serialization.FormatterConverter
+System.Runtime.Serialization.FormatterServices
+System.Runtime.Serialization.ObjectIDGenerator
+System.Runtime.Serialization.ObjectManager
+System.Reflection.ModuleResolveEventHandler
+System.Reflection.Pointer
+System.Globalization.CompareInfo
+System.Globalization.HebrewCalendar
+System.Globalization.HijriCalendar
+System.Globalization.JapaneseCalendar
+System.Globalization.KoreanCalendar
+System.Globalization.SortKey
+System.Globalization.StringInfo
+System.Globalization.TaiwanCalendar
+System.Globalization.TextElementEnumerator
+System.Globalization.TextInfo
+System.Globalization.ThaiBuddhistCalendar
+System.IO.IsolatedStorage.IsolatedStorageFile
+System.Reflection.Emit.MethodRental
+System.Runtime.CompilerServices.AccessedThroughPropertyAttribute
+System.Runtime.CompilerServices.CallConvCdecl
+System.Runtime.CompilerServices.CallConvStdcall
+System.Runtime.CompilerServices.CallConvThiscall
+System.Runtime.CompilerServices.CallConvFastcall
+System.Runtime.CompilerServices.CustomConstantAttribute
+System.Runtime.CompilerServices.DateTimeConstantAttribute
+System.Runtime.CompilerServices.DiscardableAttribute
+System.Runtime.CompilerServices.DecimalConstantAttribute
+System.Runtime.CompilerServices.CompilationRelaxationsAttribute
+System.Runtime.CompilerServices.CompilerGlobalScopeAttribute
+System.Runtime.CompilerServices.IDispatchConstantAttribute
+System.Runtime.CompilerServices.IsVolatile
+System.Runtime.CompilerServices.IUnknownConstantAttribute
+System.Runtime.CompilerServices.RequiredAttributeAttribute
+System.Runtime.InteropServices.ArrayWithOffset
+System.Runtime.InteropServices.DispIdAttribute
+System.Runtime.InteropServices.ClassInterfaceType
+System.Runtime.InteropServices.ClassInterfaceAttribute
+System.Runtime.InteropServices.ComVisibleAttribute
+System.Runtime.InteropServices.LCIDConversionAttribute
+System.Runtime.InteropServices.ComRegisterFunctionAttribute
+System.Runtime.InteropServices.ComUnregisterFunctionAttribute
+System.Runtime.InteropServices.ProgIdAttribute
+System.Runtime.InteropServices.ImportedFromTypeLibAttribute
+System.Runtime.InteropServices.IDispatchImplType
+System.Runtime.InteropServices.IDispatchImplAttribute
+System.Runtime.InteropServices.ComSourceInterfacesAttribute
+System.Runtime.InteropServices.ComConversionLossAttribute
+System.Runtime.InteropServices.TypeLibTypeFlags
+System.Runtime.InteropServices.TypeLibFuncFlags
+System.Runtime.InteropServices.TypeLibVarFlags
+System.Runtime.InteropServices.TypeLibTypeAttribute
+System.Runtime.InteropServices.TypeLibFuncAttribute
+System.Runtime.InteropServices.TypeLibVarAttribute
+System.Runtime.InteropServices.ComImportAttribute
+System.Runtime.InteropServices.PreserveSigAttribute
+System.Runtime.InteropServices.ComAliasNameAttribute
+System.Runtime.InteropServices.AutomationProxyAttribute
+System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute
+System.Runtime.InteropServices.CoClassAttribute
+System.Runtime.InteropServices.ComEventInterfaceAttribute
+System.Runtime.InteropServices.COMException
+System.Runtime.InteropServices.ComMemberType
+System.Runtime.InteropServices.CurrencyWrapper
+System.Runtime.InteropServices.DispatchWrapper
+System.Runtime.InteropServices.ErrorWrapper
+System.Runtime.InteropServices.ExtensibleClassFactory
+System.Runtime.InteropServices.HandleRef
+System.Runtime.InteropServices.InvalidComObjectException
+System.Runtime.InteropServices.InvalidOleVariantTypeException
+System.Runtime.InteropServices.TypeLibImporterFlags
+System.Runtime.InteropServices.ExporterEventKind
+System.Runtime.InteropServices.ITypeLibExporterNotifySink
+System.Runtime.InteropServices.ITypeLibConverter
+System.Runtime.InteropServices.MarshalDirectiveException
+System.Runtime.InteropServices.ObjectCreationDelegate
+System.Runtime.InteropServices.RuntimeEnvironment
+System.Runtime.InteropServices.RegistrationServices
+System.Runtime.InteropServices.SafeArrayRankMismatchException
+System.Runtime.InteropServices.SafeArrayTypeMismatchException
+System.Runtime.InteropServices.SEHException
+System.Runtime.InteropServices.TypeLibConverter
+System.Runtime.InteropServices.BIND_OPTS
+System.Runtime.InteropServices.UCOMIBindCtx
+System.Runtime.InteropServices.UCOMIConnectionPointContainer
+System.Runtime.InteropServices.UCOMIConnectionPoint
+System.Runtime.InteropServices.UCOMIEnumMoniker
+System.Runtime.InteropServices.CONNECTDATA
+System.Runtime.InteropServices.UCOMIEnumConnections
+System.Runtime.InteropServices.UCOMIEnumConnectionPoints
+System.Runtime.InteropServices.UCOMIEnumString
+System.Runtime.InteropServices.UCOMIEnumVARIANT
+System.Runtime.InteropServices.FILETIME
+System.Runtime.InteropServices.UCOMIMoniker
+System.Runtime.InteropServices.UCOMIPersistFile
+System.Runtime.InteropServices.UCOMIRunningObjectTable
+System.Runtime.InteropServices.STATSTG
+System.Runtime.InteropServices.UCOMIStream
+System.Runtime.InteropServices.DESCKIND
+System.Runtime.InteropServices.BINDPTR
+System.Runtime.InteropServices.UCOMITypeComp
+System.Runtime.InteropServices.TYPEKIND
+System.Runtime.InteropServices.TYPEFLAGS
+System.Runtime.InteropServices.IMPLTYPEFLAGS
+System.Runtime.InteropServices.TYPEATTR
+System.Runtime.InteropServices.FUNCDESC
+System.Runtime.InteropServices.IDLFLAG
+System.Runtime.InteropServices.IDLDESC
+System.Runtime.InteropServices.PARAMFLAG
+System.Runtime.InteropServices.PARAMDESC
+System.Runtime.InteropServices.TYPEDESC
+System.Runtime.InteropServices.ELEMDESC
+System.Runtime.InteropServices.VARDESC
+System.Runtime.InteropServices.DISPPARAMS
+System.Runtime.InteropServices.EXCEPINFO
+System.Runtime.InteropServices.FUNCKIND
+System.Runtime.InteropServices.INVOKEKIND
+System.Runtime.InteropServices.CALLCONV
+System.Runtime.InteropServices.FUNCFLAGS
+System.Runtime.InteropServices.VARFLAGS
+System.Runtime.InteropServices.UCOMITypeInfo
+System.Runtime.InteropServices.SYSKIND
+System.Runtime.InteropServices.LIBFLAGS
+System.Runtime.InteropServices.TYPELIBATTR
+System.Runtime.InteropServices.UCOMITypeLib
+System.Runtime.InteropServices.UnknownWrapper
+System.Runtime.Remoting.IObjectHandle
+System.Runtime.Remoting.IRemotingTypeInfo
+System.Runtime.Remoting.IChannelInfo
+System.Runtime.Remoting.IEnvoyInfo
+System.Runtime.Remoting.RemotingConfiguration
+System.Runtime.Remoting.TypeEntry
+System.Runtime.Remoting.ActivatedClientTypeEntry
+System.Runtime.Remoting.ActivatedServiceTypeEntry
+System.Runtime.Remoting.WellKnownClientTypeEntry
+System.Runtime.Remoting.WellKnownServiceTypeEntry
+System.Runtime.Remoting.RemotingException
+System.Runtime.Remoting.ServerException
+System.Runtime.Remoting.RemotingTimeoutException
+System.Runtime.Remoting.RemotingServices
+System.Runtime.Remoting.InternalRemotingServices
+System.Runtime.Remoting.SoapServices
+System.Runtime.Remoting.Activation.UrlAttribute
+System.Runtime.Remoting.Messaging.IMessageSink
+System.Runtime.Remoting.Messaging.AsyncResult
+System.Runtime.Remoting.Messaging.CallContext
+System.Runtime.Remoting.Messaging.ILogicalThreadAffinative
+System.Runtime.Remoting.Messaging.InternalMessageWrapper
+System.Runtime.Remoting.Messaging.IMethodCallMessage
+System.Runtime.Remoting.Messaging.MethodCallMessageWrapper
+System.Runtime.Remoting.Messaging.HeaderHandler
+System.Runtime.Remoting.Messaging.IMessageCtrl
+System.Runtime.Remoting.Messaging.IRemotingFormatter
+System.Runtime.Remoting.Messaging.ReturnMessage
+System.Runtime.Remoting.Messaging.MethodCall
+System.Runtime.Remoting.Messaging.ConstructionCall
+System.Runtime.Remoting.Messaging.MethodResponse
+System.Runtime.Remoting.Messaging.ConstructionResponse
+System.Runtime.Remoting.Messaging.MethodReturnMessageWrapper
+System.Runtime.Remoting.Messaging.OneWayAttribute
+System.Runtime.Remoting.Messaging.MessageSurrogateFilter
+System.Runtime.Remoting.Messaging.RemotingSurrogateSelector
+System.Runtime.Remoting.Contexts.CrossContextDelegate
+System.Runtime.Remoting.Contexts.ContextProperty
+System.Runtime.Remoting.Contexts.IContextPropertyActivator
+System.Runtime.Remoting.Contexts.IContributeClientContextSink
+System.Runtime.Remoting.Contexts.IContributeDynamicSink
+System.Runtime.Remoting.Contexts.IContributeEnvoySink
+System.Runtime.Remoting.Contexts.IContributeObjectSink
+System.Runtime.Remoting.Contexts.IContributeServerContextSink
+System.Runtime.Serialization.Formatters.InternalRM
+System.Runtime.Serialization.Formatters.InternalST
+System.Runtime.Serialization.Formatters.SoapMessage
+System.Runtime.Serialization.Formatters.SoapFault
+System.Runtime.Serialization.Formatters.ServerFault
+System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+System.Security.Cryptography.CryptoConfig
+System.Security.Cryptography.KeyedHashAlgorithm
+System.Security.Cryptography.HMACSHA1
+System.Security.Cryptography.MACTripleDES
+System.Security.Cryptography.MaskGenerationMethod
+System.Security.Cryptography.PasswordDeriveBytes
+System.Security.Cryptography.PKCS1MaskGenerationMethod
+System.Security.Cryptography.RC2
+System.Security.Cryptography.RC2CryptoServiceProvider
+System.Security.Cryptography.RSACryptoServiceProvider
+System.Security.Cryptography.RSAOAEPKeyExchangeDeformatter
+System.Security.Cryptography.RSAOAEPKeyExchangeFormatter
+System.Security.Cryptography.RSAPKCS1KeyExchangeDeformatter
+System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter
+System.Security.Cryptography.RSAPKCS1SignatureDeformatter
+System.Security.Cryptography.RSAPKCS1SignatureFormatter
+System.Security.Cryptography.SHA1Managed
+System.Security.Cryptography.TripleDES
+System.Security.Cryptography.TripleDESCryptoServiceProvider
+System.Security.Permissions.EnvironmentPermission
+System.Security.Permissions.FileDialogPermission
+System.Security.Permissions.IsolatedStorageFilePermission
+System.Security.Permissions.PrincipalPermissionAttribute
+System.Security.Permissions.SecurityPermissionAttribute
+System.Security.Permissions.PublisherIdentityPermissionAttribute
+System.Security.Permissions.PublisherIdentityPermission
+System.Security.Permissions.ReflectionPermission
+System.Security.Permissions.RegistryPermission
+System.Security.Permissions.PrincipalPermission
+System.Security.Permissions.SiteIdentityPermission
+System.Security.Permissions.StrongNameIdentityPermission
+System.Security.Permissions.StrongNamePublicKeyBlob
+System.Security.Permissions.UIPermission
+System.Security.Permissions.UrlIdentityPermission
+System.Security.Permissions.ZoneIdentityPermission
+System.Security.Policy.ApplicationDirectory
+System.Security.Policy.ApplicationDirectoryMembershipCondition
+System.Security.Policy.FirstMatchCodeGroup
+System.Security.Policy.Hash
+System.Security.Policy.HashMembershipCondition
+System.Security.Policy.NetCodeGroup
+System.Security.Policy.PermissionRequestEvidence
+System.Security.Policy.Publisher
+System.Security.Policy.PublisherMembershipCondition
+System.Security.Policy.Site
+System.Security.Policy.SiteMembershipCondition
+System.Security.Policy.StrongName
+System.Security.Policy.StrongNameMembershipCondition
+System.Security.Policy.UnionCodeGroup
+System.Security.Policy.Url
+System.Security.Policy.UrlMembershipCondition
+System.Security.Policy.Zone
+System.Security.Policy.ZoneMembershipCondition
+System.Security.Principal.WindowsIdentity
+System.Security.Principal.WindowsImpersonationContext
+System.Security.Principal.WindowsPrincipal
+System.Threading.CompressedStack
+
diff --git a/doc/plans b/doc/plans
new file mode 100755
index 00000000000..db6f6dde7c8
--- /dev/null
+++ b/doc/plans
@@ -0,0 +1,15 @@
+* Plans
+
+ Here we are tracking some plans to particular pieces of
+ technology that are part of Mono.
+
+ This is just a repository of information that is handy for
+ contributors.
+
+ Currently you can read our plans for <a
+ href="ado-net.html">ADO.NET</a>, <a
+ href="asp-net">ASP.NET</a>, <a href="java.html">Java</a> and
+ <a href="winforms.html">WinForms</a>.
+
+
+
diff --git a/doc/porting b/doc/porting
new file mode 100644
index 00000000000..a09ab69deaa
--- /dev/null
+++ b/doc/porting
@@ -0,0 +1,63 @@
+* How to port Mono to your preferred architecture
+
+** Endian, 64 bits and unaligned access issues
+
+ The first thing to do is to check that the metadata handling
+ library works on your target processor. You may use the disassembler
+ on simple programs and check that you get sensible results
+ (assuming it compiles at all on your system:-).
+
+ The main issue is to write macros that read unaligned
+ little endian shorts/ints/longs/float/doubles: look into
+ mono/metadata/endian.h. There may be other spots in the code that are
+ unsafe at reading/writing to some datatypes that require special
+ alignment, but there should be few such issues and they need to be fixed.
+
+ Once this stuff is sorted out, you should be able to run the interpreter
+ on simple programs that don't require delegates, P/Invoke functions etc..
+
+** Generating assembly bytecodes for the target processor
+
+ Next, you need to provide the support code for generating assembly bytecode
+ for your target platform (in mono/arch/{ppc,sparc,alpha,*}).
+ The code should be more or less like the code in x86-codegen.h:
+ macros that produce fast in-line code. You don't need to provide
+ code to create every possible code, at first, just the code to
+ create trampolines and execute them is fine (you'll need to research
+ how the call convention works on your platform): that would be, for
+ example, the prolog and epilog code in a function, code to pass function
+ parameters and deal with the return value and so on.
+
+ libffi in gcc or the xptcall sources in mozilla may be helpful to
+ understand how the calling convention works, if you can't find a specification.
+ You'd need a processor manual to know how to create the assembly binary data.
+ This requires a lot of reading if you're not familiar with the assembly for your
+ target platform. Manuals for many processors are available as PDF files on the
+ web site of the respective vendors. Note that some processors require you to
+ flush the I-cache before executing the code: have a look at how the same thing is
+ done in GNU lightning.
+
+** Getting the interpreter to work
+
+ Once you can generate binary code, you can start working on a
+ mono_create_trampoline() function for your platform: this function will receive
+ a MonoMethod that describes the arguments and the return type of a C function
+ and will create the code to call such function. When this function is complete
+ you'll be able to run more sample programs, that use System.IO, P/Invoke
+ functions etc.
+
+ To support delegates you'll need to write a mono_create_method_pointer()
+ function that creates a native function: this can be used to call the
+ method using the runtime's calling convention (it's basically the reverse
+ of mono_create_trampoline()).
+
+** The final step: porting the JIT
+
+ At this point you'd need to have a more complete code generation header file
+ and you can start writing the machine description file for the monoburg
+ system. This code (jit/tesjit.c) will require some machine specific tweaks,
+ but hopefully all you have to do is create the grammar that emit assembly
+ code from the IR tree. Work is at the early stages also for x86 on this stuff
+ as we are still testing various solutions: you'd want to read about burg-like
+ code-generator generators (the LCC book is a good starting point).
+
diff --git a/doc/postgresql b/doc/postgresql
new file mode 100644
index 00000000000..2bd0b74d09f
--- /dev/null
+++ b/doc/postgresql
@@ -0,0 +1,492 @@
+* PostgreSQL Data Provider
+
+<ul>
+ <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
+
+ <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
+ client/server database management system.</li>
+
+ <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
+ and libpq.so on Linux.</li>
+
+ <li>Alternative to the PostgreSQL provider in Mono:
+ <ul>
+ <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ is a Managed PostgreSQL provider written in 100% C#, does not require a client library,
+ and works on Microsoft .NET and Mono.
+ </li>
+ </ul>
+ </li>
+
+ <li>See Testing for both Mono's Mono.Data.PostgreSqlClient and Npgsql.</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
+ DELETE SQL commands using the ExecuteNonQuery method in PgSqlCommand.
+
+ <li>We can execute multiple queries and do a NextResult() in PgSqlDataReader()
+ to get the next result set.
+
+ <li>We are also able to do simple aggregate functions,
+ ie, count(), sum(), min(), and max()
+ in a simple SELECT SQL query using the ExecuteScalar() now.
+
+ <li>We are also able to retrieve data with a simple SELECT SQL query
+ using ExecuteReader() which returns a PgSqlDataReader. We are able to
+ use GetSchemaTable() to get the meta data about the table columns.
+ We are able to Read() to get each row from the result set.
+
+ <li>We are able to get
+ String data (char, character, text, varchar), Int16 (smallint),
+ Int32 (integer), Int64 (bigint), DateTime (time, date, timestamp),
+ Boolean (boolean), Single (float), and Double (double).
+ More data types will come later. Note, the types that do work still
+ need thorough testing.
+
+ <li>Rows that are returned which contain columns that are NULL are handled now.
+ The PgSqlDataReader method IsDBNull() needs to be called to determine
+ if a field IS NULL before trying to read data from that field.
+
+ <li>Calling PostgreSQL stored procedures works. It does not work perfectly.
+ It may not
+ even work to specification - yet. If you want to test it yourself, look at
+ TestSqlDataReader.cs or PostgresTest.cs in
+ mcs/class/System.Data/Test.
+
+ <li>Below, I have some sample code you can
+ use to call a PostgreSQL stored procedure named "version". This stored
+ procedure returns a string containing the PostgreSQL server version. Notice
+ the CommandType is StoredProcedure and the method ExecuteScalar() is called.
+
+ <li>ExecuteScalar() is a lightweight method in class PgSqlCommand that only returns
+ one row and one column as one object - even if there is more than row or column.
+
+ <li>We have the beginnings of Parameters support PostgreSQL. Only
+ Input Parameters are currently supported. Output, Input/Output,
+ and Return parameters still need to be done.
+
+ <li>A lot of functionality in System.Data is missing, but the
+ infrastructure is starting to come together.
+
+ <li>A lot of Exceptions need to be thrown for various exceptions. However,
+ PgSqlException, PgSqlErrorCollection, and PgSqlError have been partially
+ implemented.
+
+ <li>Tim Coleman and Rodrigo Moya got the beginnings of the
+ PgSqlDataAdapter/DataSet/DataTable/DataRow to work. Currently,
+ the PgSqlDataAdapter can Fill() relational data into a DataTable in a DataSet.
+ See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.
+</ul>
+
+** Action Plan
+
+ <p>More testing and fixing bugs...
+
+ <p>Eventually replace the PostgreSQL data provider in Mono
+ with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
+ Npgsql is a .Net Data Provider for PostgreSQL which implements
+ the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
+ Npgsql is implemented in 100% C#. This provider was created by Francisco Figueiredo jr.
+ and has many programmers developing the provider.
+
+** Testing Mono's Mono.Data.PostgreSqlClient
+
+ <ul>
+ * <p>In order to test Mono.Data.PostgreSqlClient, you will need to have
+ access to a remote PostgreSQL DBMS, or you will have to install
+ one locally. PostgreSQL was the first ADO.NET provider created in Mono.
+
+ <p>Why use PostgreSQL? Because it is free software, has a client
+ library that is easy to use, PostgreSQL is easy to install on
+ Unix and Windows (using the Cygwin install program), not difficult to setup after
+ installation, and it runs under: Linux,
+ Windows (via cygwin and ipc-daemon), Unix, and
+ others. This allowed us to create the
+ System.Data functionality in Mono much quicker.
+
+ <p>If you plan on using a remote PostgreSQL DBMS Server,
+ than you will need to have the PostgreSQL client software on your
+ local computer that includes libpq.so (pq.dll on Windows).
+
+ <p>The System.Data tests use this connection string to connect
+ to the PostgreSQL database named "test" at host "localhost" as
+ user "postgres".
+
+<pre>
+"Server=localhost;Database=test;User ID=postgres;Password=fun2db"
+ (or)
+"host=localhost;dbname=test;user=postgres;password=fun2db"
+</pre>
+</ul>
+
+ <p>Installation instructions for PostgreSQL DBMS:
+
+ <b>On Unix</b>
+
+ <ul>
+ * Read the PostgreSQL Installation Instructions
+ at \usr\doc\postgresql-x.x.x\html\installation.html
+
+ * Depending on your Unix system,
+ PostgreSQL maybe already installed, a database user 'postgres' created,
+ a linux user 'postgres' created and initdb ran. Or maybe not.
+
+<pre>
+ su
+ adduser postgres
+ mkdir /usr/local/pgsql/data
+ chown postgres /usr/local/pgsql/data
+ su - postgres
+ initdb -D /usr/local/pgsql/data
+ postmaster -i -D /usr/local/pgsql/data
+ createdb test
+ psql test
+</pre>
+
+ * Make sure you have a database user named postgres. It is best to install
+ the PostgreSQL DBMS under linux user postgres. When you run the postmaster,
+ run it under the user postgres as well. If this was not done, then you
+ will need to create a user named postgres for the System.Data tests.
+
+ * If you already installed PostgeSQL and you do not have a database
+ user named postgres, then you can create user postgres using psql:
+
+<pre>
+psql test
+create user postgres with password 'fun2db';
+</pre>
+
+ * The postmaster must be run with -i option.
+
+ * In the /usr/local/pgsql/data/pg_hba.conf file, you need
+ to have the AUTH_TYPE set to md5. You can read more on this at
+ /usr/doc/postgresql-7.2.1/html/client-authentication.html
+ or wherever your
+ PostgreSQL html docs are located. See the 2nd line below,
+ host 127.0.0.1 has an AUTH_TYPE md5 in pg_hba.conf.
+
+<pre>
+ # TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE
+
+ local all trust
+ host all 127.0.0.1 255.255.255.255 md5
+</pre>
+
+ * If you can not find your PostgreSQL documentation locally or you
+ did not install it, then you
+ can get it <a href="http://www.postgresql.org/idocs/">here</a>.
+
+ </ul>
+
+ <b>On Windows</b>
+
+ <ul>
+ * Use the <a href="http://www.cygwin.com/">Cygwin</a> installer to
+ install the PostgreSQL DBMS. It is
+ found in the database category.
+
+ * <p>Read the file postgres-x.x.README at /usr/doc/Cygwin and read
+ the requirements to install PostgreSQL. Those requirements
+ are included with cygwin except cygipc. A default installtion
+ of cygwin does not install everything you will need, so on the
+ safe side, just include everything when installing cygwin.
+
+ * <p>The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
+
+ * <p>Once Cygwin has installed the PostgreSQL DBMS on your computer,
+ read the file FAQ_MSWIN which is available
+ in /usr/doc/postgres-x.x
+
+ * <p>Important notes from this file are:
+
+ <ul>
+ <p><b>2.</b> - Install the latest <a href="http://www.neuro.gatech.edu/users/cwilson/cygutils/cygipc/index.html">CygIPC</a> package.
+ Cygwin includes a utility bunzip2 which can be used to unzip it. Now, change to
+ the root directory by
+ typing "cd /" then
+ you can use "tar xvf cygipc.xxx.tar" to untar it
+ in the root directory in cygwin.
+
+ <p>The cygipc package contains the support to run ipc-daemon
+ that you will need
+ to run before you can
+ run the PostgreSQL DBMS Server daemon (postmaster) or run
+ initdb which initializes the PostgreSQL database.
+
+ <p><b>3.</b> The Cygwin bin directory has to be placed in
+ the path before the Windows program directories,
+ for example, C:\cygwin\bin
+
+ <p><b>My own note.</b> In the Windows control panel, I set
+ the environment variables PATH to my cygwin /usr/local/bin,
+ /usr/bin, and /bin. I also set my LD_LIBRARY_PATH to
+ /usr/local/lib and /usr/lib. For example:
+
+ <p>
+<pre>
+PATH=c:\cygwin\usr\local\bin;c:\cygwin\usr\bin;c:\cygwin\bin;
+LD_LIBRARY_PATH=c:\cygwin\usr\local\lib;c:\cygwin\usr\lib;
+</pre>
+
+ <p><b>4.</b> Start the ipc-daemon that came with the cygipc
+ package. There
+ are two ways to do this: run it from the command line as:
+
+ <p>
+<pre>
+ipc-daemon &
+</pre>
+ <p>or you can set it up as a Windows service. See the
+ file cygrunsrv.README at /usr/doc/Cygwin on how to do this
+ for ipc-daemon and postmaster. Note the
+ troubleshooting section at the end of
+ the cygrunsrv.README file.
+
+ <p>To install ipc-daemon as a service,
+ you just have to run
+
+ <p>
+<pre>
+ipc-daemon --install-as-service' (--remove-as-service)
+</pre>
+
+ <p>and then run
+
+<pre>
+net start ipc-daemon
+</pre>
+ </ul>
+
+ <p>Read the installation.html file
+ at /usr/doc/postgresql-x.x/html/installation.html
+
+ <p>You will see in this file that you will need to
+ run the following commands:
+
+ <p>
+<pre>
+mkdir /usr/local/pgsql/data
+initdb -D /usr/local/pgsql/data
+postmaster -D /usr/local/pgsql/data
+createdb test
+psql test
+</pre>
+
+ <p>When you need to connect to the database,
+ you will need ipc-daemon and postmaster running. Start ipc-daemon
+ before any of the command above. If you restart your computer, you
+ need to start ipc-daemon and postmaster either manually or as a
+ service.
+
+ <p>psql is a command-line PostgreSQL client tool to
+ enter and run SQL commands and queries.
+
+ <p>If there is no database user named postgres, create a user named
+ postgres with the following SQL command in the client tool psql:
+
+ <p>
+<pre>
+psql test
+create user postgres with password 'fun2db';
+</pre>
+ <p>The only reason I say this is so you can easily use the System.Data tests
+ without having to change the database, userid, etc.
+ </ul>
+
+ <p>In the path mcs/class/System.Data/Test
+ there is a test for Mono.Data.PostgreSqlClient named
+ PostgreTest.cs. Thanks goes to Gonzalo for creating the original
+ PostgreSQL test.
+
+ <p>
+ To compile the PostgresTest.cs program, do:
+
+ <p>
+<pre>
+ mcs PostgresTest.cs \
+ -r System.Data.dll \
+ -r Mono.Data.PostgreSqlClient.dll
+</pre>
+
+ <p>If there are compile errors, such as, can not convert IDbConnection
+ to PgSqlConnection, then you need to run mcs like:
+
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ PostgresTest.cs \
+ -r System.Data.dll \
+ -r Mono.Data.PostgreSqlClient.dll
+</pre>
+
+ <p>
+ To run using mint, do:
+
+ <p>
+<pre>
+mint PostgresTest.exe
+</pre>
+
+ <p>
+ To run using mono, do:
+<pre>
+mono PostgresTest.exe
+</pre>
+
+ <p>C# Example for Mono.Data.PostgreSqlClient:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.PostgreSqlClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=postgres;" +
+ "Password=fun2db;";
+ IDbConnection dbcon;
+ dbcon = new PgConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname" +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.PostgreSqlClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.PostgreSqlClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+</ul>
+
+** Testing Npgsql
+
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Get <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ and make sure the binary assembly Npgsql.dll is installed in the same place that the
+ mono class libraries are located.
+
+ <li>Read the Testing notes for Mono.Data.PostgreSqlClient too
+
+ <li>C# Example for Npgsql:
+<pre>
+ using System;
+ using System.Data;
+ using Npgsql;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=postgres;" +
+ "Password=fun2db;";
+ IDbConnection dbcon;
+ dbcon = new NpgsqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Npgsql.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Npgsql.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+</ul>
+
diff --git a/doc/ppc b/doc/ppc
new file mode 100644
index 00000000000..56026d4d6b1
--- /dev/null
+++ b/doc/ppc
@@ -0,0 +1,33 @@
+
+* Mono PowerPC Port
+
+** Status
+
+ It passes and compiles the same amount of mono tests as on the x86 architecture.
+
+ mcs is self hosting on Linux/PPC.
+
+*** Interpreter
+
+ Up to date.
+
+*** Jitter
+
+ Start the port
+
+** Documentation
+
+*** PowerPC architecture:
+
+ <A HREF="http://e-www.motorola.com/brdata/PDFDB/docs/MPCFPE32B.pdf">PowerPC Programming environments manual</A><BR>
+ <A HREF="http://e-www.motorola.com/brdata/PDFDB/docs/MPC7410UM.pdf">G4 (7410) User's manual</A>
+
+ There's a very nice introduction to PowerPC assembly language
+ at <a
+ href="http://www-106.ibm.com/developerworks/library/l-ppc/">http://www-106.ibm.com/developerworks/library/l-ppc/</a>.
+
+*** Calling conventions:
+
+ <a href="http://www.esofta.com/softspecs.html">The PowerPC SystemV ABI specification</a>
+
+
diff --git a/doc/projects b/doc/projects
new file mode 100755
index 00000000000..47df1e71098
--- /dev/null
+++ b/doc/projects
@@ -0,0 +1,24 @@
+* Open Projects
+
+ The .NET framework is a good first in terms of a new
+ development foundation, but it falls short of providing
+ higher-level components or building blocks for people to
+ reuse.
+
+ A few ideas of projects and classes that would be useful to
+ develop applications follows:
+
+** EOG component
+
+** XmlStorageSystem component
+
+* Gtk# related projects
+
+ Gnome Canvas Bindings.
+
+ Bezier Canvas Item Binding.
+
+* Graphical bindings
+
+ Binding for the Libart library
+
diff --git a/doc/rationale b/doc/rationale
new file mode 100644
index 00000000000..d63cf225a59
--- /dev/null
+++ b/doc/rationale
@@ -0,0 +1,173 @@
+
+* The Mono Project
+
+** Background.
+
+ The GNOME project goal was to bring missing technologies to
+ Unix and make it competitive in the current market place for
+ desktop applications. We also realized early on that language
+ independence was important, and that is why GNOME APIs were
+ coded using a standard that allowed the APIs to be easily
+ wrapped for other languages. Our APIs are available to most
+ programming languages on Unix (Perl, Python, Scheme, C++,
+ Objective-C, Ada).
+
+ Later on we decided to use better methods for encapsulating
+ our APIs, and we started to use CORBA to define interfaces to
+ components. We complemented it with policy and a set of
+ standard GNOME interfaces for easily creating reusable,
+ language independent components, controls and compound
+ documents. This technology is known as <a
+ href="http://developer.ximian.com/tech/bonobo.html">Bonobo</a>.
+ Interfaces to Bonobo exist for C, Perl, Python, and
+ Java.
+
+ CORBA is good when you define coarse interfaces, and most
+ Bonobo interfaces are coarse. The only problem is that
+ Bonobo/CORBA interfaces are not good for small interfaces.
+ For example, an XML parsing Bonobo/CORBA component would be
+ inefficient compared to a C API.
+
+** Another explanation
+
+ I recently explained our motivations to Dave Winer, and he posted
+ it <a
+ href="http://scriptingnews.userland.com/stories/storyReader$1275">here</a>
+
+** Microsoft's .NET
+
+ The Microsoft .NET initiative is confusing because it is a
+ company wide effort that ranges from development tools to end
+ user applications. .NET is a branding formative that
+ has been applied to:
+
+ <ul>
+ * The .NET development platform, a new platform for
+ writing software.
+
+ * Web services.
+
+ * Microsoft Server Applications.
+
+ * New tools that use the new development platform.
+
+ * Hailstorm, the Passport centralized single-signon
+ system that is being integrated into Windows XP.
+
+ </ul>
+
+ Mono is an implementation of the .NET development platform.
+
+** The Common Language Infrastructure platform.
+
+ Microsoft has created a new development platform. The
+ highlights of this new development platform are:
+
+ <ul>
+ * A runtime environment that provides garbage
+ collection, threading and a virtual machine
+ specification (The Virtual Execution System, VES)
+
+ * A comprehensive class library.
+
+ * A new language, C#. Very similar to Java, C#
+ allows programmers to use all the features available
+ on the .NET runtime.
+
+ * A language specification that compilers can
+ follow if they want to generate classes and code
+ that can interoperate with other programming
+ languages (The Common Language Specification: CLS)
+ </ul>
+
+ The Common Language Infrastructure platform is similar to the
+ goals we had in GNOME of giving language independence to
+ programmers. It is more mature, documented, larger in scope,
+ and has a consistent design.
+
+ Any API that is written using a CLS provider language can be
+ used by any language that is a CLS consumer. Compilers
+ generate code in a format called Common Intermediate Language
+ (CIL) which is an intermediate representation of a compiled
+ program and is easy to compile to native code or compiled
+ using Just-in-Time (JIT) engines. The restrictions placed by
+ the runtime on the CIL byte codes ensures that it is possible
+ to do a good job at optimizing the code in a JIT compiler.
+
+ There is not really a lot of innovation in this platform: we
+ have seen all of these concepts before, and we are all
+ familiar with how these things work.
+
+ What makes the Common Language Infrastructure development
+ platform interesting is that it is a good mix of technologies
+ that have been nicely integrated.
+
+ The .NET development platform is essentially a new foundation
+ for program development that gives Microsoft a room to grow
+ for the coming years.
+
+** ECMA standards.
+
+ Microsoft has submitted the
+ specifications of C#, the runtime, the metadata and the
+ other various bits of the .NET development platform to the
+ <a href="http://www.ecma.ch">ECMA</a> for standarization.
+
+ You can get a copy of the specifications submitted to ECMA
+ from: <a href="http://www.dotnetexperts.com/ecma">http://www.dotnetexperts.com/ecma</a>
+
+** Mono: an Open Source Common Language Infrastructure implementation.
+
+ Ximian has begun work on Mono, a project that aims to bring
+ the Common Language Infrastructure platform to free systems.
+
+ When the GNU project was launched, they picked the best
+ operating system that was available out there, and they
+ began to clone it: Unix.
+
+ The .NET development platform is a very rich, powerful, and
+ well designed platform that would help improve the free
+ software development platform. Just like the GNU project
+ began to clone Unix sixteen years ago, we will be cloning the
+ .NET development platform because it is a great platform to
+ build on.
+
+** What makes up Mono?
+
+ There are various pieces that will make up Mono:
+
+ <ul>
+ * A C# compiler.
+
+ * The Virtual Execution System: that will have the
+ Just-in-Time compiler, garbage collector, loader,
+ threading engine.
+
+ A byte code interpreter will be provided for quickly
+ porting Mono to new systems and debugging the JIT
+ purposes, but it is not intended to be the ideal
+ execution environment.
+
+ * An implemenation of the .NET class library.
+
+ * Visual development tools.
+
+ * A CIL GCC frontend.
+ </ul>
+
+** Why use GNOME components?
+
+ GNOME is an umbrella project that consists of infrastructural
+ components (GUI toolkit, XML libraries, CORBA implementation,
+ printing architecture, imaging system), a desktop environment,
+ and productivity applications.
+
+ The GNOME infrastructural components can be used to quickly
+ implement various pieces of the class libraries without reinventing
+ the wheel, and since all those components are licensed under
+ the terms of the GNU LGPL it is a perfect fit.
+
+ Libart will be used to implement the Drawing.2D API; Gtk+ and
+ the GNOME libraries will be used to implement the WinForms
+ API and of course Glib and libxml will be used in various
+ places. \ No newline at end of file
diff --git a/doc/release-notes/mono-0.3 b/doc/release-notes/mono-0.3
new file mode 100644
index 00000000000..4976037b957
--- /dev/null
+++ b/doc/release-notes/mono-0.3
@@ -0,0 +1,46 @@
+To: mono-list@ximian.com, mono-announce-list@ximian.com
+Subject: July 12 snapshots.
+FCC: ~/Mail/outbox.txt
+X-Windows: Sometimes you fill a vacuum and it still sucks.
+--text follows this line--
+
+Hey!
+
+ July 12 snapshots of class libraries, the compiler and the mono
+runtime are available.
+
+New on this release:
+
+ * Runtime (module: mono)
+
+ The beginning of a simple interpreter that Paolo started
+ workign on (can run really simple .NET programs).
+
+ Disassembler copes with more elements of the binary format and
+ more tokens are decoded. Paolo is working now on moving some
+ of these to the metadata library.
+
+ More tables are dumped.
+
+ * Class libraries (module: mcs/class)
+
+ Many new more classes are in from Joe, Vladimir, Jeff, Sean
+ and yours truly.
+
+ Sean fixed the build process, and it is now possible to
+ compile with a single command the assemblies. We will be
+ revisiting this mechanism in the future to compile per-OS
+ assemblies (ie, Unix, Windows, MacOS, etc).
+
+ * Compiler (module mcs/mcs)
+
+ Not much done this week, just a few fixes here and there, and
+ more work to make it easy to compiler.
+
+ * Documentation (module: mono/doc)
+
+ All the changes to the web site are there for your browsing
+ pleasure. We still need to integrate the status system in
+ there.
+
+Miguel.
diff --git a/doc/release-notes/mono-0.4 b/doc/release-notes/mono-0.4
new file mode 100644
index 00000000000..1d7e1cea5f1
--- /dev/null
+++ b/doc/release-notes/mono-0.4
@@ -0,0 +1,43 @@
+To: mono-list@ximian.com
+Subject: Sunday snapshot available.
+Gcc: mail.2001-07
+--text follows this line--
+
+Hey guys,
+
+ I promise I will not be doing these so often once we have the CVS
+server up. In the meantime:
+
+ * MCS
+
+ Sean got the classes to compile in a single go. You
+ will need CygWin (www.cygwin.org) to compile though
+ (GNU make and stuff is required).
+
+ System.Xml.XmlReader contribution from Jason
+ (WOOHHOO!!). It also contains a nice test-suite for
+ his functions, and in his new code bit, his
+ implementation is faster than Microsoft's
+
+ We now ship `jay' as part of the distribution to allow
+ you to compile the compiler with the same `make'
+ command. Small fixes to the parser as well were
+ introduced.
+
+ * Mono 0.4
+
+ Paolo's interpreter supports call instructions and has
+ the test suite program that he posted about.
+
+
+ All documentation ships now in the mono-0.4.tar.gz
+
+Notes:
+
+ As usual, MCS is targeted to be compiled on a Windows machine
+ (you will need Cygwin).
+
+ Mono is targeted to be compiled on a Unix machine or a Windows
+ machine running Cygwin.
+
+Miguel. \ No newline at end of file
diff --git a/doc/resources b/doc/resources
new file mode 100644
index 00000000000..f85105feb2e
--- /dev/null
+++ b/doc/resources
@@ -0,0 +1,235 @@
+
+* Resources
+
+ There are a number of resources available for those of you who
+ want to contribute to the Mono project. Here are a few links.
+
+ If you want to send suggestions for links, address them to <a
+ mailto="web-mono@ximian.com">web-mono@ximian.com</a>.
+
+** Microsoft .NET
+
+ The <a href="http://msdn.microsoft.com/net">Microsoft.NET site.</a>
+
+ The Microsoft .NET Framework 1.0 can be downloaded <a
+ href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a>
+
+ New methods that are not documented in 1.0, are documented <a
+ href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/framewrkaddend.asp">here</a>
+
+ The changes between .NET 1.0 and .NET 1.1 are available <a href="http://www.csharphelp.com/archives2/archive406.html">here</a>
+
+** IRC
+
+ Various Mono contributors get together on channel #mono on
+ irc.gnome.org
+
+** Mono related sites.
+
+ The Mono Tutorial:
+
+ <a href="http://http://go-mono.com/gnometutorial/">GNOME.NET Tutorial</a>
+
+ and other useful tutorials (Gtk#, Glade#, Embeded, etc) (in Spanish) at
+
+ <a href="http://mono.es.gnome.org">The Mono Hispano site</a>.
+
+ Sergey's web page on Mono resources:
+
+ <a href="http://mono.eurosoft.od.ua">http://mono.eurosoft.od.ua</a>
+
+ Got Dot Net:
+
+ <a href="http://www.gotdotnet.com">Got Dot Net</a>
+
+ MonoMail:
+
+ <a href="http://sourceforge.net/projects/monomail/">http://sourceforge.net/projects/monomail/</a>
+
+ Zip classes:
+
+ Mike's port to .NET: <a
+ href="http://www.icsharpcode.net/OpenSource/NZipLib/default.asp">NZipLib</a>
+
+ .NET Security:
+
+ A nice overview paper on the <a
+ href="http://www.foundstone.com/pdf/dotnet-security-framework.pdf">.NET
+ security architecture</a>.
+
+** Development Tools
+
+ A tool to compare two assemblies:
+
+ <ul>
+ <li><a href="http://www.gotdotnet.com/userarea/keywordsrch.aspx?keyword=winchurn">http://www.gotdotnet.com/userarea/keywordsrch.aspx?keyword=winchurn</a>
+ </ul>
+
+** Presentations
+
+ Currently the <a href="Presentations/O-Reilly">O'Reilly</a>
+ presentation on Mono is available. Arturo Espinosa has given
+ a talk on Mono in Mexico and made <a
+ href="http://construct.ximian.com/~arturo/Presentations/Mono.OLS/html">spanish
+ slides</a>
+
+** ECMA Documentation.
+
+ You can get the documentation for the ECMA specs from:
+
+ <ul>
+ * <a href="http://www.ecma.ch/ecma1/STAND/ecma-334.htm">C# Language Specification</a>
+ * <a href="http://www.ecma.ch/ecma1/STAND/ecma-335.htm">Common Language Infrastructure</a>
+ </ul>
+
+
+ Older copies of the standard are available here:
+
+ <ul>
+ * <a href="http://msdn.microsoft.com/net/ecma">At MSDN</a>
+ * <a href="http://www.dotnetexperts.com">Dot Net Experts</a>
+ * <a href="http://developer.intel.com/software/idap/ecma">Intel</a>
+ * <a href="http://lightning.csse.monash.edu.au/.net/CLI">Monash University</a>
+ </ul>
+
+ These contain specifications for the assembler, the metadata,
+ byte codes supported by the CLI virtual machine, the C#
+ language and the core class libraries.
+
+ For details on the .NET class libraries, you can
+ visit the Microsoft's Developer Network:
+
+ <ul>
+ * <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/cpref_start.asp">.NET Framework Class Library</a>
+ </ul>
+
+ You can also get this information if you install the Beta2
+ release of the .NET Framework.
+
+** Discussion Groups.
+
+ <ul>
+
+ * <a href="http://www.oreillynet.com">O'Reilly
+ Network</a> has a <a
+ href="http://www.oreillynet.com/dotnet">section devoted to
+ .NET</a>
+ * <a
+ href="http://msdn.microsoft.com/newsgroups">MSDN</a> also
+ lists various newsgroups related to .NET</ul>
+ </ul>
+
+** Other .NET related projects
+
+ There are a number of related projects to Mono:
+
+ <li><b>Development tools</b></li>
+ <ul>
+ * <a
+ href="http://www.icsharpcode.net/OpenSource/SD/default.asp">Sharp
+ Develop:</a> an IDE for the C# language written in C#.
+
+ * <a href="http://nunit.sourceforge.net">NUnit:</a> A
+ testing framework for .NET classes.
+
+ * <a
+ href="http://xmarks.sourceforge.net/doc.html">XMarks DOC.NET:</a> For
+ creating online documentation you can browse for your own classes.
+
+ </ul>
+
+ <li><b>Class Libraries</b></li>
+ <ul>
+ * <a href="http://9mm.com/~ogl/sdldotnet/">SDL for
+ .NET:</a> Bindings for the popular SDL graphics library.
+
+
+ * C# bindings for OpenGL and SDL are available here: <a
+ href="http://csgl.sourceforge.net">http://csgl.sourceforge.net</a>
+
+ * <a
+ href="http://qtcsharp.sourceforge.net">Qt#:</a>
+ C# bindings for the Qt toolkit.
+
+ * <a
+ href="http://codigolivre.org.br/projects/monoqle">Project MonoQLE:</a> a C# Message Queue Server.
+ Sorry only in portuguese, for now.
+
+ </ul>
+
+ <li><b>Programming languages:</b></li>
+ <ul>
+ * <a
+ href="http://janet-js.sourceforge.net/">Janet:</a>
+ an implemention of ECMAScript (the standarized
+ version of JavaScript) in C#
+ </ul>
+
+ <li><b>Other projects</b></li>
+ <ul>
+ * <a
+ href="http://www.improve-technologies.com/alpha/esharp/">Eclipse
+ Plugin for C#</a>
+
+ * <a href="http://www.kaffe.org">Kaffe:</a> A popular
+ Free Software JIT engine for Java.
+
+ * <a href="http://www.intel.com/research/mrl/orp">ORP:</a> A research
+ JIT/VM/GC system from Intel.
+
+ * <a
+ href="http://www.southern-storm.com.au/portable_net.html">Portable.NET:</a>
+ Another implementation of the CLI and C# compiler.
+
+ * A Free (GFDL) tutorial on C# in Spanish with
+ examples, slides, and extras (under development). Get it <a
+ href="http://geneura.ugr.es/~jaime/csharp/">here</a>.
+ </ul>
+
+** GNOME Documentation
+
+ Documentation on GNOME, and the GNOME APIs is available from
+ the <a href="http://developer.gnome.org">developer</a> site at
+ GNOME:
+
+ <ul>
+ * <a href="http://developer.gnome.org/doc/API/">GNOME
+ API documentation</a>
+
+ * <a href="http://developer.gnome.org/doc/books">GNOME
+ Online books</a>
+
+ * <A
+ href="http://developer.gnome.org/arch/">Architecture Overview</a>
+ </ul>
+
+** Assembly Language Manuals online
+
+ <ul>
+ * <a href="http://www.agner.org/assem/#optimize">
+ Pentium optimization tutorial</a> by Agner Fog
+
+ * <a href="http://webster.cs.ucr.edu/">
+ Art of Assembly</a> (x86 only)
+
+ * Documentation for various CPUs
+ (<a href="http://www.mit.edu/afs/sipb/contrib/doc/specs/ic/cpu/">
+ x86, IA64, MIPS, ARM, Alpha</a>)
+
+ * <a href="http://www.heyrick.co.uk/assembler/">
+ ARM Assembler</a> tutorial
+
+ * PowerPC
+ <a href="http://www-3.ibm.com/chips/techlib/techlib.nsf/techdocs/852569B20050FF7785256996007558C6">
+ Compiler Writer's Guide</a>
+
+ * <a href="http://www.lightsoft.co.uk/Fantasm/Beginners/begin1.html">
+ Beginners Guide to PowerPC Assembler</a>
+ </ul>
+
+** Win32
+
+ <ul>
+ * Win32 <a href="http://www.jorgon.freeserve.co.uk/ExceptFrame.htm">
+ Structured Exception Handling (SEH)</a> internals (x86 specific)
+ </ul>
diff --git a/doc/resources-pending b/doc/resources-pending
new file mode 100644
index 00000000000..fd9b9073d64
--- /dev/null
+++ b/doc/resources-pending
@@ -0,0 +1,30 @@
+** MacOS Documentation
+
+** Assembly Language Manuals online
+ Intel
+ MIPS
+ SPARC
+
+** Microsoft
+ msdn.microsoft.com/net
+ Research.microsoft.com
+
+** Related Technologies
+
+ <ul>
+
+ * The CLI allows people to create Web Services using the SOAP
+ protocol. SOAP is based on XML, XML schemas an the HTTP
+ protocol.
+ <ul>
+ * XML specification.
+ * XML Namespaces.
+ * XML Schemas.
+ * SOAP Specification.
+ </ul>
+ </ul>
+
+** Compiler Information
+ GCC
+ GCC Sample front-end tutorial
+
diff --git a/doc/roadmap b/doc/roadmap
new file mode 100644
index 00000000000..6cdfa1366a8
--- /dev/null
+++ b/doc/roadmap
@@ -0,0 +1,12 @@
+* Roadmap
+
+ We are working on the following three projects at Ximian:
+
+ The C# Compiler (mcs/mcs)
+
+ A .NET compatible Class Library (mcs/class)
+
+ The JIT/interpreter (mono)
+
+
+ \ No newline at end of file
diff --git a/doc/runtime b/doc/runtime
new file mode 100644
index 00000000000..ecae4673a7e
--- /dev/null
+++ b/doc/runtime
@@ -0,0 +1,169 @@
+* The Mono runtime
+
+ The Mono runtime implements a JIT engine for the CIL virtual
+ machine (as well as a byte code interpreter, this is to
+ quickly port it to new systems), the class loader, the garbage
+ collector, threading system and metadata access libraries.
+
+ We currently have two runtimes:
+
+ <ul>
+ * <b>mono:</b> The Just In Time compiler implemented
+ using a BURS instruction selector. We only support
+ x86 machines in the JIT engine at this point.
+
+ * <b>mint:</b> The Mono interpreter. This is an
+ easy-to-port runtime engine.
+ </ul>
+
+ Currently we are using the Bohem conservative garbage
+ collector.
+
+ The Mono runtime can be used as a stand-alone process, or it
+ can be <a href="embedded-api">embedded into applications</a> (see
+ the documentation in mono/samples/embed for more details).
+
+ Embedding the Mono runtime allows applications to be extended
+ in C# while reusing all of the existing C and C++ code.
+
+ Paolo Molaro did a presentation on the current JIT engine and
+ the new JIT engine. You can find his <a
+ href="http://primates.ximian.com/~lupus/slides/jit/">slides
+ here</a>
+
+** Current JIT Engine (<b>updated, July 8th, 2002</b>)
+
+ The JIT engine uses a code-generator generator approach for
+ compilation. Given the properties of CIL byte codes, we can
+ take full advantage of a real instruction selector for our
+ code generator.
+
+ The JIT engine implements a number of optimizations:
+
+ <ul>
+ * Opcode cost estimates (our architecture allows
+ us to generate different code paths depending
+ on the target CPU dynamically).
+
+ * Inlining.
+
+ * Constant folding.
+
+ Although compilers typically do
+ constant folding, the combination of inlining with
+ constant folding gives some very good results.
+
+ * Linear scan register allocation. In the past,
+ register allocation was our achilles heel, but now
+ we have left this problem behind.
+ </ul>
+
+ There are a couple of books that deal with this technique: "A
+ Retargetable C Compiler" and "Advanced Compiler Design and
+ Implementation" are good references. You can also get a
+ technical description of <a
+ href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/iburg.pdf&pub=ACM">lbrug</a>.
+
+ A few papers that describe the instruction selector:
+
+ <ul>
+ * <a href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/interface.pdf&pub=wiley">A code generation interface for ANSI C</a>
+
+
+ * <a href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/~drh/pubs/iburg.pdf&pub=ACM">Engineering efficient code generators using tree matching and dynamic programming.</a>
+
+ </ul>
+
+** New JIT engine.
+
+ We are working on a new JIT engine. The new JIT engine
+ focuses on portability and in two intermediate representations
+ that simplify the development of optimizations. This together
+ with the Ahead-of-Time compilation will allow developers to
+ deploy applications that match the speed of natively compiled code.
+
+** Garbage Collection
+
+ Currently we are using the Boehm conservative GC. Although our plans
+ are to move to the Intel ORP GC engine, our plans on a next generation
+ dual-JIT engine have to be taken into account.
+
+ We will be using the Intel ORP GC engine as it provides a precise
+ garbage collector engine, similar to what is available on the
+ .NET environment.
+
+ Although using a conservative garbage collector like Bohem's
+ would work, all the type information is available at runtime,
+ so we can actually implement a better collector than a
+ conservative collector.
+
+ <ul>
+ * Garbage collection list and FAQ:<br>
+ <a href="http://www.iecc.com/gclist/">http://www.iecc.com/gclist/</a>
+
+ * "GC points in a Threaded Environment":<br>
+ <a href="http://research.sun.com/techrep/1998/abstract-70.html">
+ http://research.sun.com/techrep/1998/abstract-70.html</a>
+
+ * "A Generational Mostly-concurrent Garbage Collector":
+ <a href="http://research.sun.com/techrep/2000/abstract-88.html">
+ http://research.sun.com/techrep/2000/abstract-88.html</a>
+
+ * Details on The Microsoft .NET Garbage Collection Implementation:<br>
+ <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI.asp</a>
+ <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI2.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag00/html/GCI2.asp</a>
+ </ul>
+
+** IO and threading
+
+ The ECMA runtime and the .NET runtime assume an IO model and a
+ threading model that is very similar to the Win32 API.
+
+ Dick Porter has been working on the Mono abstraction layer
+ that allows our runtime to execute code that depend on this
+ behaviour.
+
+** Useful links
+
+ Paolo Molaro found a few interesting links:
+
+ <ul>
+ * On compilation of stack-based languages:<br>
+ <a href="http://www.complang.tuwien.ac.at/projects/rafts.html">
+ http://www.complang.tuwien.ac.at/projects/rafts.html</a>
+
+ * A paper on fast JIT compilation of a stack-based language:<br>
+ <a href="http://www.research.microsoft.com/~cwfraser/pldi99codegen.pdf">
+ http://www.research.microsoft.com/~cwfraser/pldi99codegen.pdf</a>
+
+ * Vmgen generates much of the code for efficient virtual machine (VM)
+ interpreters from simple descriptions of the VM instructions:<br>
+ <a href="http://www.complang.tuwien.ac.at/anton/vmgen/">
+ http://www.complang.tuwien.ac.at/anton/vmgen</a>
+ </ul>
+
+** PInvoke
+
+ PInvoke is the mechanism we are using to wrap Unix API calls
+ as well as talking to system libraries.
+
+ Initially we used libffi, but it was fairly slow, so we have
+ reused parts of the JIT work to create efficient PInvoke trampolines.
+
+** Remoting
+
+ Mono has support for remoting and proxy objects, just like
+ .NET does. The runtime provides these facilities.
+
+** Porting
+
+ If you are interested in porting the Mono runtime to other
+ platforms, you might find the pre-compiled <a
+ href="archive/mono-tests.tar.gz">Mono regression test
+ suite</a> useful to debug your implementation.
+
+* COM and XPCOM
+
+ We plan on adding support for XPCOM on Unix and COM on Microsoft
+ Windows later in our development process.
+
diff --git a/doc/sqlclient b/doc/sqlclient
new file mode 100755
index 00000000000..df76f9d620a
--- /dev/null
+++ b/doc/sqlclient
@@ -0,0 +1,147 @@
+* Microsoft SQL Server Provider
+
+<ul>
+ <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases</li>
+
+ <li>Exists in namespace System.Data.SqlClient and assembly System.Data</li>
+
+ <li>Created by Tim Coleman</li>
+
+ <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
+
+ <li>Implemented in 100% C#</li>
+
+ <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.</li>
+
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
+
+ <li>Uses TDS Protocol Version 7.0</li>
+
+ <li>Does not support trusted connections</li>
+</ul>
+
+
+** Current Status
+
+
+<ul>
+ <li>Able to connect to Microsoft SQL Server 7/2000 databases</li>
+
+ <li>Connection pooling works.</li>
+
+ <li>Stored Procedures work</li>
+
+ <li>Parameters work.</li>
+
+ <li>Prepare works.</li>
+
+ <li>SQL commands can be executed
+ via ExecuteNonQuery() of a SqlCommand.</li>
+
+ <li>SQL aggregates can be executed and a single row and single column
+ result can be retrieved via ExecuteScalar() of a SqlCommand</li>
+
+ <li>SQL queries can be executed via ExecuteReader() and results
+ can be retrieved via SqlDataReader.</li>
+
+ <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+ in a SqlDataReader</li>
+
+ <li>XML can be read via ExecuteXmlReader in a SqlCommand.</li>
+
+ <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter</li>
+
+ <li>Uses TDS Protocol Version 7.0</li>
+
+ <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a></li>
+</ul>
+
+** Action plan
+
+<ul>
+ <li>Connection timeouts is being developed now.
+
+ <li>Needs more testing...
+
+</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Microsoft SQL Server database
+ or either download it:
+ <ul>
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.SqlClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new SqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
diff --git a/doc/sqlite b/doc/sqlite
new file mode 100755
index 00000000000..85b35c997aa
--- /dev/null
+++ b/doc/sqlite
@@ -0,0 +1,112 @@
+* SQL Lite Data Provider
+
+<ul>
+ <li>Exists in namespace and assembly Mono.Data.SqliteClient</li>
+
+ <li>Created by Vladimir Vukicevic</li>
+
+ <li><a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
+ binaries exist for Linux and Windows. sqlite.dll on Windows
+ and sqlite.so on Linux.</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Able to connect, execute commands, and retrieve data...</li>
+
+ <li>Works in mPhoto by providing access to a SQL Lite database to store images.</li>
+</ul>
+
+** Action Plan
+
+<ul>
+ <li>Create a DataAdapter for SQL Lite named SqliteDataAdapter that can be used to
+ Fill a DataTable in a DataSet</li>
+
+ <li>Get the method GetSchemaTable() in class SqliteDataReader to return a DataTable
+ that works</li>
+</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mcs and mono</li>
+ <li>Make sure Mono.Data.SqliteClient.dll was built and is installed
+ in the same place as the mono class libraries.</li>
+ <li>If you do not have <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>,
+ download it. There are binaries for Windows and Linux.</li>
+ <li>There is a test named SqliteTest.cs found at mcs/class/Mono.Data.SqliteTest/Test</li>
+ <li>Has a connection string format of "URI=file:some/path". For example,
+ the connection string "URI=file:SqliteTest.db" will use the database file
+ named SqliteTest.db, if it does not exist, the file will be created.</li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.SqliteClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString = "URI=file:SqliteTest.db";
+ IDbConnection dbcon;
+ dbcon = new MySQLConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader[0];
+ string LastName = reader[1];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.SqliteClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll \
+ -r Mono.Data.SqliteClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
diff --git a/doc/status b/doc/status
new file mode 100644
index 00000000000..64948ba312f
--- /dev/null
+++ b/doc/status
@@ -0,0 +1,40 @@
+* Project Status
+
+
+ Pieces of Mono that have been implemented:
+
+ <ul>
+ * C# compiler: The C# compiler is mostly complete, a
+ few features are still missing (for a list, check the
+ <a href="c-sharp.html">C# compiler</a> web page.
+
+ * The Mono JIT engine (<b>mono</b>. The JIT engine is
+ the real
+ virtual machine that we support. It is
+ currently functional, and we are improving its speed,
+ and making it feature complete.
+
+ * A CIL bytecode interpreter (<b>mint</b>). This
+ currently can be used to run most .NET programs
+ (modulo the fact that our class libraries are not
+ complete enough).
+
+ <b>mint</b> can currently run the Mono C# compiler and
+ the compiler generates valid code.
+
+ We use <b>mint</b> as a reference implementation of
+ the runtime environment and to quickly support
+ non-Intel platforms.
+
+ * Metadata library: Can currently parse
+ and load information from .NET modules (executables
+ and DLL files).
+
+ * Disassembler: Can disassemble .NET modules. Still
+ lacking exception handling as well as useful debugging
+ tools (hex dumping, token dumping).
+
+ * Class Libraries: You can check the current status in the
+ <a href="class-status.html">Class Status page</a>.
+ </ul>
+
diff --git a/doc/sybase b/doc/sybase
new file mode 100755
index 00000000000..6a3b859c5b1
--- /dev/null
+++ b/doc/sybase
@@ -0,0 +1,134 @@
+* Sybase Data Provider
+
+<ul>
+ <li>ADO.NET Provider for Sybase SQL Server databases</li>
+
+ <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient</li>
+
+ <li>Created by Tim Coleman</li>
+
+ <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
+
+ <li>Implemented in 100% C#</li>
+
+ <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.</li>
+
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
+
+ <li>Uses TDS Protocol Version 5.0</li>
+
+ <li>Does not support trusted connections</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Able to connect to Sybase databases</li>
+
+ <li>SQL commands can be executed
+ via ExecuteNonQuery() of a SybaseCommand.</li>
+
+ <li>SQL aggregates can be executed and a single row and single column
+ result can be retrieved via ExecuteScalar() of a SybaseCommand</li>
+
+ <li>SQL queries can be executed via ExecuteReader() and results
+ can be retrieved via SybaseDataReader.</li>
+
+ <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+ in a SybaseDataReader</li>
+
+ <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter</li>
+</ul>
+
+** Action plan
+
+<ul>
+ <li>Connection timeouts is being developed now.
+
+ <li>Needs more testing...
+
+</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Sybase database
+ or either download it:
+ <ul>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.SybaseClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new SybaseConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.SybaseClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.SybaseClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
diff --git a/doc/tds-providers b/doc/tds-providers
new file mode 100644
index 00000000000..6442e69601a
--- /dev/null
+++ b/doc/tds-providers
@@ -0,0 +1,164 @@
+* Design of the Microsoft SQL Server, Sybase, and TDS Data Providers in Mono
+
+ <ul>
+ * After much discussion among the Mono ADO.NET developers,
+ we have come up with the design of implementing a Sybase, Microsoft
+ SQL Server, and TDS Generic ADO.NET providers. These providers have
+ been created and are actively developed by Tim Coleman.
+
+ * Since Sybase and Microsoft SQL Server databases both
+ use the TDS protocol for data access, and other implementations
+ of TDS (FreeTDS and jTDS) have included support for multiple
+ versions of the TDS, we have decided to do the same.
+
+ * The TdsClient ADO.NET provider will be Mono's first provider
+ written completely in C# without any dependencies except
+ the usual suspects: corlib.dll, System.dll, and System.Xml.dll.
+ </ul>
+
+* New ADO.NET Providers
+
+<p>There will be three ADO.NET providers that will use TDS.
+
+ <ol>
+ <li><p>Mono.Data.SybaseClient namepace and assembly will
+ hold the ADO.NET provider for Sybase SQL Server database.
+ This provider uses TDS version 5.0 which
+ can only be used with Sybase databases.
+
+ <li><p>System.Data.SqlClient namespace and System.Data assembly
+ will hold the ADO.NET provider
+ for Microsoft SQL Server 7.0/2000 databases. This provider is to be
+ compatible with SqlClient in Microsoft .NET and uses TDS version 7.0
+ which only supports Microsoft SQL Server 7.0/2000.
+ There is TDS version 8.0
+ which we will need to support as well, but it is used for
+ Microsoft SQL Server 2000 databases.
+
+ <li><p>Mono.Data.TdsClient namespace and assembly is a generic
+ provider for older TDS databases. This provider will default to
+ using TDS version 4.2 which can be used by older Sybase and
+ Microsoft SQL Server databases.
+ </ol>
+
+* Building The New Providers
+
+ <p> All three providers will use common internal code
+ at Mono.Data.TdsClient.Internal. Any classes in
+ Mono.Data.TdsClient.Internal will have the internal
+ keyword and will be built with the assembly of that provider.
+ <ol>
+ <li><p>SqlClient will build its assembly System.Data using files
+ from System.Data, System.Data.SqlClient, System.Data.SqlTypes,
+ System.Data.Common, and Mono.Data.TdsClient.Internal.
+
+ <p>SqlClient
+ will only reference the usual
+ suspects: corlib.dll, System.dll, and System.Xml.dll. SqlClient will be
+ a wrapper around TdsClient.Internal, but provide specific functionality to
+ Microsoft SQL Server 7.0/2000 databases.
+
+ <p>SqlClient build example:
+
+<pre>
+ mcs -target:library -out:System.Data.dll \
+ System.Data.SqlClient/*.cs \
+ ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs \
+ [any other classes in System.Data assembly...] \
+ -r corlib.dll -r System.dll -r System.Xml.dll
+</pre>
+
+ <li><p>SybaseClient will build its assembly Mono.Data.SybaseClient using
+ files from Mono.Data.SybaseClient and Mono.Data.TdsClient.Internal.
+ SybaseClient will reference
+ the usual suspects plus System.Data.dll SybaseClient will
+ be a wrapper around TdsClient.Internal, but provide specific
+ functionality to Sybase.
+
+ <p>SybaseClient build example:
+
+<pre>
+ mcs -target:library -out:Mono.Data.SybaseClient.dll \
+ Mono.Data.SybaseClient\*.cs \
+ ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs
+ -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll
+</pre>
+
+ <li><p>TdsClient will build its assembly Mono.Data.TdsClient
+ using files from Mono.Data.TdsClient
+ and Mono.Data.TdsClient.Internal. TdsClient will reference the
+ usual suspects plus System.Data.dll TdsClient is a wrapper
+ provider around TdsClient.Internal used for generic
+ unit tests. TdsClient will a wrapper around TdsClient.Internal
+ as a generic TDS provider
+ and allow TDS configuration options not exposed in SqlClient
+ nor SybaseClient, such as, TdsVersion will be exposed in TdsClient
+ but not in SqlClient nor SybaseClient.
+
+ <p>TdsClient build example:
+
+<pre>
+mcs -target:library -out:Mono.Data.TdsClient.dll \
+ Mono.Data.TdsClient\*.cs \
+ Mono.Data.TdsClient.Internal\*.cs \
+ -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll
+</pre>
+ </ol>
+
+* Classes in Mono.Data.TdsClient.Internal will:
+
+ <ul>
+ <li>use the internal keyword to prevent exposing these classes
+ to the System.Data.dll assembly.
+
+ <li> implement the ADO.NET interfaces just like any other ADO.NET provider, such as,
+ IDbConnection, IDbCommand, IDataReader, IDataRecord, IDataAdapter, etc...
+
+ <li> be sealed just like other providers
+
+ <li> provide features to be directly used by the SqlClient and SybaseClient
+ providers, such
+ as, setting the default TDS version: SqlClient to 7.0 and SybaseClient
+ to 5.0 and TdsClient to 4.2.
+
+ <li> be written completely in C# or IL assembly language (if need be).
+
+ <li> implement the TDS protocol version 4.2, 5.0, 7.0, and 8.0. This
+ is where most of the
+ work will take place.
+
+ <li> be an internal ADO.NET provider to the public ADO.NET providers:
+ System.Data.SqlClient, Mono.Data.SybaseClient, and Mono.Data.TdsClient.
+ </ul>
+
+* Implementation Details of the TDS Protocol
+
+ <ul>
+ * will be implemented in pure C# from scratch
+
+ * will reside in Mono.Data.TdsClient.Internal
+
+ * will use FreeTDS and jTDS as rerferences.
+ </ul>
+
+* More Information
+
+ <ul>
+ * <a href="http://www.freetds.org/">FreeTDS</a> is C API that implements
+ the TDS protocol. Has libraries for tds, ctlib, and dblib. It builds
+ and runs on Windows, Linux, and other platforms. FreeTDS provides
+ data access to Microsoft SQL Server and Sybase databases.
+
+ * <a href="http://jtds.sf.net/">jTDS</a> is a 100% Java JDBC provider
+ for Microsoft SQL Server and Sybase databases.
+
+ * <a href="http://www.freetds.org/tds.html">TDS Protocol</a>
+ </ul>
+
+* Contribute
+
+ <p>Anybody willing to help? If so,
+ contact any of the people working on the ADO.NET support
+ in Mono: Rodrigo Moya, Tim Coleman, Daniel Morgan, Brian Ritchie,
+ Vladimir Vukicevic, Ville Palo, Franklin Wise, and others.
+
diff --git a/doc/tdsclient b/doc/tdsclient
new file mode 100755
index 00000000000..c5f494a7c66
--- /dev/null
+++ b/doc/tdsclient
@@ -0,0 +1,137 @@
+* TDS Generic Provider
+
+<ul>
+ <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases</li>
+
+ <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient</li>
+
+ <li>Created by Tim Coleman</li>
+
+ <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
+
+ <li>Implemented in 100% C#</li>
+
+ <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.</li>
+
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
+
+ <li>Uses TDS Protocol Version 4.2 by default</li>
+
+ <li>Does not support trusted connections</li>
+</ul>
+
+** Current Status
+
+
+<ul>
+ <li>Only builds on Windows currently due to mcs does not support modules and mcs
+ has problems with code that is internal.</li>
+
+ <li>Able to connect to Microsoft SQL Server and Sybase databases</li>
+
+ <li>SQL commands can be executed
+ via ExecuteNonQuery() of a TdsCommand.</li>
+
+ <li>SQL aggregates can be executed and a single row and single column
+ result can be retrieved via ExecuteScalar() of a TdsCommand</li>
+
+ <li>SQL queries can be executed via ExecuteReader() and results
+ can be retrieved via TdsDataReader.</li>
+
+ <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+ in a TdsDataReader</li>
+
+ <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter</li>
+</ul>
+
+** Action plan
+
+<ul>
+ <li>Connection timeouts is being developed now.</li>
+
+ <li>TODO</li>
+</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Sybase or Microsoft SQL Server database
+ or either download it:
+ <ul>
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.TdsClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new TdsConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.TdsClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.TdsClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+</ul>
+
diff --git a/doc/team b/doc/team
new file mode 100644
index 00000000000..eff7bc9d3d5
--- /dev/null
+++ b/doc/team
@@ -0,0 +1,2 @@
+* The MonoNet Team
+
diff --git a/doc/testing b/doc/testing
new file mode 100644
index 00000000000..c76a9b5f1d8
--- /dev/null
+++ b/doc/testing
@@ -0,0 +1,186 @@
+* Testing
+
+ Testing is an important part of the Mono project: every one of its
+ three major components has a test suite tailored for its needs. This
+ is very helpful, because in the course of developing the software it
+ is very common to introduce bugs in existing code. A test suite
+ helps us fix the bugs as soon as they are introduced.
+
+** Class Library Tests
+
+ All classes in Mono libraries should have comprehensive unit test
+ suites to go with them. Unit testing is a software engineering
+ methodology that makes it easier to build correct code. Every
+ method in every class should have a set of tests to verify
+ that they work correctly. Mono also needs a testing framework
+ to make it easy to write and run lots of tests.
+
+
+** Getting started
+
+ If you are new to writing NUnit tests, there is a template you may use
+ to help get started. The file is:
+
+ <b>mcs/class/doc/TemplateTest.cs</b>
+
+ Save a copy of this file in the appropriate test subdirecty
+ (see below), and replace all the [text] markers with
+ appropriate code. Comments in the template are there to guide
+ you. You should also look at existing tests to see how other
+ people have written them.
+ mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs
+ is a small one that might help.
+
+ The directory that will contain your new file depends on the
+ assembly/namespace of the class for which you are creating the
+ tests. Under mcs/class there is a directory for each
+ assembly. In each assembly there is a Test directory,
+ e.g. mcs/class/corlib/Test. In the Test directory there are
+ sub-directories for each namespace in the assembly,
+ e.g. mcs/class/corlib/Test/Sytem. Put your new test file in
+ the appropriate sub-directory under Test for the class you are
+ testing.
+
+ Once your test class is complete, you need to add it to the
+ AllTests.cs file in the same directory as your new test. Add a
+ call to "suite.AddTest()" passing the name of your new test
+ class's suite property as the parameter. You will see
+ examples in the AllTests.cs file, so just copy and paste
+ inside there.
+
+ Once all of that is done, you can do a 'make test' from the top mcs
+ directory. Your test class will be automagically included in the
+ build and the tests will be run along with all the others.
+
+* Tips on writing Unit tests.
+
+ You should look at the NUnit documentation, as it is a
+ fantastic product, and includes fantastic documentation, but
+ here are some tips for those of you who are already reading
+ this web page.
+
+
+** Provide an unique error message for Assert()
+
+ Include an unique message for each Assert() so that when the assert
+ fails, it is trivial to locate the failing one. Otherwise, it may be
+ difficult to determine which part of the test is failing. A good way
+ to ensure unique messages is to use something like #A01, #A02 etc.
+
+ Ok:
+ <pre>
+
+ AssertEquals("array match", compare[0], i1[0]);
+ AssertEquals("array match", compare[1], i1[1]);
+ AssertEquals("array match", compare[2], i1[2]);
+ AssertEquals("array match", compare[3], i1[3]);
+ </pre>
+
+ Excellent:
+ <pre>
+ AssertEquals("#A01", compare[0], i1[0]);
+ AssertEquals("#A02", compare[1], i1[1]);
+ AssertEquals("#A03", compare[2], i1[2]);
+ AssertEquals("#A04", compare[3], i1[3]);
+ </pre>
+
+ Once you used such a number in an Assert(), don't change it later on -
+ people might use it it identify the test in bug reports or in mailing
+ lists.
+
+** Use AssertEquals() to compare things, not Assert().
+
+ Do not compare two values with Assert() - if the test fails,
+ people have no idea what went wrong while AssertEquals()
+ reports the failed value.
+
+ Ok:
+ <pre>
+ Assert ("A01", myTicks[0] == t1.Ticks);
+ </pre>
+
+ Excellent:
+ <pre>
+ AssertEquals ("A01", myTicks[0], t1.Ticks);
+ </pre>
+
+** Constructors
+
+ When writing your testcase, please make sure to provide a constructor
+ which takes no arguments:
+
+ <pre>
+ public class DateTimeTest : TestCase
+ {
+
+ public DateTimeTest() : base ("[MonoTests.System.DateTimeTest]") {}
+ public DateTimeTest (string name): base(name) {}
+
+ public static ITest Suite
+ {
+ get {
+ TestSuite suite = new TestSuite ();
+ return suite;
+ }
+ }
+ }
+ </pre>
+
+** Namespace
+
+ Please keep the namespace within each test directory consistent - all
+ tests which are referenced in the same AllTests.cs must be in the same
+ namespace. Of course you can use subnamespaces as you like -
+ especially for subdirectories of your testsuite.
+
+ For instance, if your AllTests.cs is in namespace "MonoTests" and you
+ have a subdirectory called "System", you can put all the tests in that
+ dir into namespace "MonoTests.System".
+
+** Test your test with the Microsoft runtime
+
+ If possible, try to run your testsuite with the Microsoft runtime on
+ Windows and make sure all tests in it pass. This is especially
+ important if you're writing a totally new testcase - without this
+ check you can never be sure that your testcase contains no bugs ....
+
+ Don't worry if you're writing your test on Linux, other people can
+ test it for you on Windows.
+
+ Sometimes you may discover that a test doesn't show the expected
+ result when run with the Microsoft runtime - either because there is a
+ bug in their runtime or something is misleading or wrong in their
+ documentation. In this case, please put a detailed description of the
+ problem to mcs/class/doc/API-notes and do also report it to the list -
+ we'll forward this to the Microsoft people from time to time to help
+ them fix their documentation and runtime.
+
+** Unit tests.
+
+ Why do unit testing? It becomes simple to run automated tests
+ for the whole library. Unit tests are a safety net - you can
+ change part of the code and verify that you haven't broken
+ anything. Ideally, tests are written before the actual library
+ code itself. And every time a bug is discovered, a test should
+ be written to demonstrate the bug and its fix. Then, if
+ you ever reintroduce the bug, you will know immediately. For
+ more info, read <a
+ href="http://junit.sourceforge.net/doc/testinfected/testing.htm">
+ JUnit Test Infected: Programmers Love Writing Tests</a>.
+
+
+** Getting Started
+
+ We welcome all contributions to the Class Libary Test Suite.
+
+ There is information to help you get started in CVS at
+ mcs/class/doc/NUnitGuidelines. Once you have written your test, please
+ post it to <a href="mailing-lists.html">mono-list</a>.
+
+ Someone will make sure to add the file or apply the patch as
+ appropriate. If you plan to be an on-going contributor and
+ would like to get cvs account, email <a href="mailto:miguel@ximian.com">miguel</a>.
+
+ Normally, after you send a couple of well-written new files
+ and/or patches to the list, you will be given cvs access.
+
diff --git a/doc/thanks b/doc/thanks
new file mode 100644
index 00000000000..5f2df36f9cd
--- /dev/null
+++ b/doc/thanks
@@ -0,0 +1,6 @@
+* Thanks
+
+ We would like to thank Tim O'Reilly, Brian Jepson and Nathan
+ Torkington for their help.
+
+ Dave Winer for provided interesting comments and a to read.
diff --git a/doc/todo b/doc/todo
new file mode 100644
index 00000000000..abae8cdfb40
--- /dev/null
+++ b/doc/todo
@@ -0,0 +1 @@
+Discuss with write new JIT \ No newline at end of file
diff --git a/doc/tools b/doc/tools
new file mode 100644
index 00000000000..eabef48bb88
--- /dev/null
+++ b/doc/tools
@@ -0,0 +1,67 @@
+* Tools
+
+ We need a number of tools to make people productive using a
+ Mono-based solution. Some of these tools can be developed on
+ Windows before Mono is fully finished.
+
+ All of these tools should be written using C#.
+
+ For the tools that are typically command line tools: Try to
+ write these as components that could load their input from
+ streams or collections of streams, and implement the command
+ line tools as wrappers around those classes.
+
+ For example, we will be making the C# compiler a component
+ that could be reused by applications that might have a use for
+ the various bits of the compiler (either to embed the
+ compiler, or reuse the code generator part of it).
+
+ This is important so that these components (compiler,
+ assembler, linker, etc) can be integrated later into the
+ visual development environment (hopefully with the help of the
+ SharpDevelop hackers).
+
+TODO=ilasm,IL Assembler
+** IL Assembler.
+
+ This assembler should basically take as input a file
+ containing IL bytecodes as specified in the `Partition II' of
+ the ECMA spec, and produce a binary file.
+
+TODO=al,Assembly Linker
+** Assembly Linker.
+
+ This tool is used to construct assemblies, which are basically
+ deployment units for CLI executables.
+
+TODO=debugger,Debugger
+** Debugger
+
+ We will need a debugging API to debug CLI applications and
+ then a debugger component that can be used in an IDE
+ environment.
+
+TODO=ide,Integrated Development Environment
+** Integrated Development Environment
+
+ There is already a project to create a C# development
+ environment: <a
+ href="http://www.icsharpcode.net/OpenSource/SD/default.asp">SharpDevelop</a>.
+ People should work with the SharpDevelop hackers to produce a
+ unified development environment.
+
+ Please work with the SharpDevelop hackers to build a good IDE.
+ We will work on creating an embedable compiler component and
+ an embeddable debugger component that can be used withing
+ SharpDevelop
+
+TODO=hbrowser,Help Browser
+** Help Browser
+
+ We need a good help browser that can be used to browse
+ documentation. Ideally this help browser can accept as input
+ XML Docbook input and an assorted set of file formats
+ (Microsoft Help, Unix manual pages, Unix Info pages)
+
+ Look at the GNOME DevHelp for a good set of ideas on how to
+ implement this. \ No newline at end of file
diff --git a/doc/web/.cvsignore b/doc/web/.cvsignore
new file mode 100644
index 00000000000..a023a6f9c7c
--- /dev/null
+++ b/doc/web/.cvsignore
@@ -0,0 +1,2 @@
+*.src
+*.html
diff --git a/doc/web/commands b/doc/web/commands
new file mode 100644
index 00000000000..23a49c4bca7
--- /dev/null
+++ b/doc/web/commands
@@ -0,0 +1,63 @@
+0,Home,index.html,index.src
+1,FAQ,faq.html,faq.src
+0,Mono,rationale.html,rationale.src
+1,Runtime,runtime.html,runtime.src
+2,Embedding,embedded-api.html,embedded-api.src
+1,Classes,class-library.html,class-library.src
+1,Gtk#,gtk-sharp.html,gtk-sharp.src
+1,ASP.NET,asp-net.html,asp-net.src
+1,ADO.NET,ado-net.html,ado-net.src
+1,C# Compiler,c-sharp.html,c-sharp.src
+1,VB Compiler,mbas.html,mbas.src
+0,Download,download.html,download.src
+1,CVS access,ccvs.html,ccvs.src
+1,AnonCVS access,anoncvs.html,anoncvs.src
+0,Contributing,contributing.html,contributing.src
+1,Hackers,hackers.html,hackers.src
+1,Documentation,documentation.html,documentation.src
+1,Class Docs,classlib-doc.html,classlib-doc.src
+1,Doc format,monodoc-xml.html,monodoc-xml.src
+1,Test Suite,testing.html,testing.src
+1,Tools,tools.html,tools.src
+1,Porting,porting.html,porting.src
+2,PowerPC,ppc.html,ppc.src
+1,HOWTO,mono-contribution-howto.html,mono-contribution-howto.src
+0,Resources,resources.html,resources.src
+1,Beginning,mono-beginning.html,mono-beginning.src
+1,Mailing Lists,mailing-lists.html,mailing-lists.src
+1,Ideas,ideas.html,ideas.src
+1,Passport,passport.html,passport.src
+1,Books,books.html,books.src
+1,Papers,papers.html,papers.src
+1,Languages,languages.html,languages.src
+1,Debugging,jit-debug.html,jit-debug.src
+0,Plans,plans.html,plans.src
+1,ADO.NET,ado-net.html,ado-net.src
+2,Firebird Interbase,firebird.html,firebird.src
+2,IBM DB2,ibmdb2.html,ibmdb2.src
+2,Microsft SQL Server,sqlclient.html,sqlclient.src
+2,MySQL,mysql.html,mysql.src
+2,ODBC,odbc.html,odbc.src
+2,OLE DB,oledb.html,oledb.src
+2,Oracle,oracle.html,oracle.src
+2,PostgreSQL,postgresql.html,postgresql.src
+2,SQL Lite,sqlite.html,sqlite.src
+2,Sybase,sybase.html,sybase.src
+2,TDS Generic,tdsclient.html,tdsclient.src
+1,Crypto,crypto.html,crypto.src
+1,Java,java.html,java.src
+1,Windows.Forms,winforms.html,winforms.src
+0,Class Status,class-status.html,class-status.src,cm/cormissing.css,cm/cormissing.js
+1,corlib,class-status-corlib.html,class-status-corlib.src,cm/cormissing.css,cm/cormissing.js
+1,System,class-status-System.html,class-status-System.src,cm/cormissing.css,cm/cormissing.js
+1,Xml,class-status-System.Xml.html,class-status-System.Xml.src,cm/cormissing.css,cm/cormissing.js
+1,Data,class-status-System.Data.html,class-status-System.Data.src,cm/cormissing.css,cm/cormissing.js
+1,Drawing,class-status-System.Drawing.html,class-status-System.Drawing.src,cm/cormissing.css,cm/cormissing.js
+1,Web,class-status-System.Web.html,class-status-System.Web.src,cm/cormissing.css,cm/cormissing.js
+1,Web.Services,class-status-System.Web.Services.html,class-status-System.Web.Services.src,cm/cormissing.css,cm/cormissing.js
+1,Microsoft.VisualBasic,class-status-Microsoft.VisualBasic.html,class-status-Microsoft.VisualBasic.src,cm/cormissing.css,cm/cormissing.js
+1,Windows.Forms,class-status-System.Windows.Forms.html,class-status-System.Windows.Forms.src,cm/cormissing.css,cm/cormissing.js
+1,EnterpriseServices,class-status-System.EnterpriseServices.html,class-status-System.EnterpriseServices.src,cm/cormissing.css,cm/cormissing.js
+1,Formatters.Soap,class-status-System.Runtime.Serialization.Formatters.Soap.html,class-status-System.Runtime.Serialization.Formatters.Soap.src,cm/cormissing.css,cm/cormissing.js
+1,Cscompmgd,class-status-Cscompmgd.html,class-status-Cscompmgd.src,cm/cormissing.css,cm/cormissing.js
+0,Contact,contact.html,contact.src
diff --git a/doc/web/deploy/.cvsignore b/doc/web/deploy/.cvsignore
new file mode 100755
index 00000000000..2d19fc766d9
--- /dev/null
+++ b/doc/web/deploy/.cvsignore
@@ -0,0 +1 @@
+*.html
diff --git a/doc/web/deploy/cm/c.gif b/doc/web/deploy/cm/c.gif
new file mode 100644
index 00000000000..02c347efd0b
--- /dev/null
+++ b/doc/web/deploy/cm/c.gif
Binary files differ
diff --git a/doc/web/deploy/cm/cormissing.css b/doc/web/deploy/cm/cormissing.css
new file mode 100644
index 00000000000..1f22da54273
--- /dev/null
+++ b/doc/web/deploy/cm/cormissing.css
@@ -0,0 +1,182 @@
+.y IMG
+{
+ border: 0px;
+ padding: 0px;
+ margin: 0px;
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+.y, .y_,
+.n, .n_,
+.c, .c_,
+.c, .c_,
+.d, .d_,
+.en, .en_,
+.i, .i_,
+.s, .s_,
+.e, .e_,
+.f, .f_,
+.m, .m_,
+.o, .o_,
+.p, .p_,
+.r, .r_,
+.x, .x_
+{
+ FONT: 10px 'Verdana';
+ margin-left: 20px;
+}
+
+.y_ .n,
+.y_ .n_,
+.n_ .c,
+.n_ .c_,
+.n_ .s,
+.n_ .s_,
+.n_ .d,
+.n_ .d_,
+.n_ .en,
+.n_ .en_,
+.n_ .i,
+.n_ .i_,
+.c_ .c,
+.c_ .c_,
+.c_ .e,
+.c_ .e_,
+.c_ .f,
+.c_ .f_,
+.c_ .m,
+.c_ .m_,
+.c_ .o,
+.c_ .o_,
+.c_ .p,
+.c_ .p_,
+.c_ .r,
+.c_ .r_,
+.c_ .x,
+.c_ .x_,
+.c_ .i,
+.c_ .i_,
+.d_ .c,
+.d_ .c_,
+.d_ .e,
+.d_ .e_,
+.d_ .f,
+.d_ .f_,
+.d_ .m,
+.d_ .m_,
+.d_ .o,
+.d_ .o_,
+.d_ .p,
+.d_ .p_,
+.d_ .r,
+.d_ .r_,
+.d_ .x,
+.d_ .x_,
+.en_ .c,
+.en_ .c_,
+.en_ .e,
+.en_ .e_,
+.en_ .f,
+.en_ .f_,
+.en_ .m,
+.en_ .m_,
+.en_ .o,
+.en_ .o_,
+.en_ .p,
+.en_ .p_,
+.en_ .r,
+.en_ .r_,
+.en_ .x,
+.en_ .x_,
+.i_ .c,
+.i_ .c_,
+.i_ .e,
+.i_ .e_,
+.i_ .f,
+.i_ .f_,
+.i_ .m,
+.i_ .m_,
+.i_ .o,
+.i_ .o_,
+.i_ .p,
+.i_ .p_,
+.i_ .r,
+.i_ .r_,
+.i_ .x,
+.i_ .x_,
+.i_ .i,
+.i_ .i_,
+.s_ .c,
+.s_ .c_,
+.s_ .e,
+.s_ .e_,
+.s_ .f,
+.s_ .f_,
+.s_ .m,
+.s_ .m_,
+.s_ .o,
+.s_ .o_,
+.s_ .p,
+.s_ .p_,
+.s_ .r,
+.s_ .r_,
+.s_ .x,
+.s_ .x_,
+.s_ .i,
+.s_ .i_,
+
+.e_ .r,
+.e_ .r_,
+.e_ .o,
+.e_ .o_,
+.f_ .r,
+.f_ .r_,
+.f_ .o,
+.f_ .o_,
+.m_ .r,
+.m_ .r_,
+.m_ .o,
+.m_ .o_,
+.o_ .r,
+.o_ .r_,
+.o_ .o,
+.o_ .o_,
+.p_ .r,
+.p_ .r_,
+.p_ .o,
+.p_ .o_,
+.r_ .r,
+.r_ .r_,
+.r_ .o,
+.r_ .o_,
+.x_ .r,
+.x_ .r_,
+.x_ .o,
+.x_ .o_
+{
+ display: none;
+}
+
+.t
+{
+ cursor: pointer;
+ margin-right: 8px;
+}
+
+.filter
+{
+ cursor: pointer;
+ vertical-align: middle;
+}
+
+
+.st
+{
+ margin-left: 20px;
+}
+
+.l
+{
+ cursor: pointer;
+}
diff --git a/doc/web/deploy/cm/cormissing.js b/doc/web/deploy/cm/cormissing.js
new file mode 100644
index 00000000000..e6b12ac4fd2
--- /dev/null
+++ b/doc/web/deploy/cm/cormissing.js
@@ -0,0 +1,392 @@
+function toggle (elt)
+{
+ if (elt == null)
+ return;
+
+ var eltLink = elt.firstChild;
+ if (eltLink != null && eltLink.className == 't') // toggle
+ {
+ var ich = elt.className.indexOf ('_');
+ if (ich < 0)
+ {
+ eltLink.src = 'cm/tp.gif';
+ elt.className += '_';
+ }
+ else
+ {
+ eltLink.src = 'cm/tm.gif';
+ elt.className = elt.className.slice (0, ich);
+ }
+ }
+}
+
+function setView (elt, fView)
+{
+ var eltLink = elt.firstChild;
+ if (eltLink != null && eltLink.className == 't') // toggle
+ {
+ var ich = elt.className.indexOf ('_');
+ if (ich < 0 && !fView)
+ {
+ eltLink.src = 'cm/tp.gif';
+ elt.className += '_';
+ }
+ else if (ich >= 0 && fView)
+ {
+ eltLink.src = 'cm/tm.gif';
+ elt.className = elt.className.slice (0, ich);
+ }
+ }
+}
+
+function trimSrc (strSrc)
+{
+ return strSrc.slice (strSrc.lastIndexOf ('/') + 1, strSrc.lastIndexOf ('.'));
+}
+
+function getChildrenByTagName (elt, strTag)
+{
+ strTag = strTag.toLowerCase ();
+ var rgChildren = new Array ();
+ var eltChild = elt.firstChild;
+ while (eltChild)
+ {
+ if (eltChild.tagName && eltChild.tagName.toLowerCase () == strTag)
+ rgChildren.push (eltChild);
+ eltChild = eltChild.nextSibling;
+ }
+ return rgChildren;
+}
+
+function viewAll (elt, dictTypes)
+{
+ var fView = false;
+ var rgImages = getChildrenByTagName (elt, 'IMG');
+ var cImages = rgImages.length;
+ for (var iImage = 0; iImage < cImages; iImage++)
+ {
+ var strImage = trimSrc (rgImages [iImage].src);
+ if (dictTypes [strImage])
+ {
+ fView = true;
+ break;
+ }
+ }
+ var rgElts = getChildrenByTagName (elt, 'DIV');
+ var cElts = rgElts.length;
+ if (cElts != 0)
+ {
+ var iElt;
+ for (iElt = 0; iElt < cElts; iElt ++)
+ fView |= viewAll (rgElts [iElt], dictTypes);
+ }
+ elt.style.display = fView ? '' : 'none';
+ return fView;
+}
+
+function getView (elt)
+{
+ var eltLink = elt.firstChild;
+ if (eltLink != null && eltLink.className == 't') // toggle
+ {
+ var ich = elt.className.indexOf ('_');
+ if (ich < 0)
+ return true;
+ }
+ return false;
+}
+
+function getParentDiv (elt)
+{
+ if (elt)
+ {
+ do
+ {
+ elt = elt.parentNode;
+ }
+ while (elt && elt.tagName != 'DIV');
+ }
+
+ return elt;
+}
+
+function getName (elt)
+{
+ var rgSpans = getChildrenByTagName (elt, 'SPAN');
+ for (var iSpan = 0; iSpan < rgSpans.length; iSpan ++)
+ {
+ var span = rgSpans [iSpan];
+ if (span.className == 'l') // label
+ {
+ if (span.innerText)
+ return span.innerText;
+ else
+ return span.firstChild.nodeValue;
+ }
+ }
+ return null;
+}
+
+function clickHandler (evt)
+{
+ var elt;
+ if (document.layers)
+ elt = evt.taget;
+ else if (window.event && window.event.srcElement)
+ {
+ elt = window.event.srcElement;
+ evt = window.event;
+ }
+ else if (evt && evt.stopPropagation)
+ elt = evt.target;
+
+ if (!elt.className && elt.parentNode)
+ elt = elt.parentNode;
+
+ if (elt.className == 'l') // label
+ {
+ var strClass;
+ var strField;
+ var strNamespace;
+ var strAssembly;
+
+ elt = getParentDiv (elt);
+ var strEltClass = elt.className;
+ if (strEltClass.charAt (strEltClass.length - 1) == '_')
+ strEltClass = strEltClass.slice (0, strEltClass.length - 1);
+
+ if (strEltClass == 'x') // constructor
+ {
+ strField = 'ctor';
+ elt = getParentDiv (elt);
+ }
+ else
+ if (strEltClass == 'm' || // method
+ strEltClass == 'p' || // property
+ strEltClass == 'e' || // event
+ strEltClass == 'f') // field
+ {
+ strField = getName (elt).toLowerCase ();
+ var match = strField.match ( /[\.A-Z0-9_]*/i );
+ if (match)
+ strField = match [0];
+ elt = getParentDiv (elt);
+
+ }
+
+ var strEltClass = elt.className;
+ if (strEltClass.charAt (strEltClass.length - 1) == '_')
+ strEltClass = strEltClass.slice (0, strEltClass.length - 1);
+
+ if (strEltClass == 'c' || // class
+ strEltClass == 's' || // struct
+ strEltClass == 'i' || // struct
+ strEltClass == 'd' || // delegate
+ strEltClass == 'en') // enum
+ {
+ strClass = getName (elt);
+ if (strEltClass == 'en')
+ strField = null;
+ elt = getParentDiv (elt);
+ }
+
+ var strEltClass = elt.className;
+ if (strEltClass.charAt (strEltClass.length - 1) == '_')
+ strEltClass = strEltClass.slice (0, strEltClass.length - 1);
+
+ if (strEltClass == 'n')
+ {
+ strNamespace = getName (elt);
+ elt = getParentDiv (elt);
+ }
+
+ var strEltClass = elt.className;
+ if (strEltClass.charAt (strEltClass.length - 1) == '_')
+ strEltClass = strEltClass.slice (0, strEltClass.length - 1);
+
+ if (strEltClass == 'y')
+ {
+ strAssembly = getName (elt);
+ }
+
+ if (evt.ctrlKey)
+ {
+ var strRoot = 'http://cvs.hispalinux.es/cgi-bin/cvsweb/mcs/class/';
+ var strExtra = '?cvsroot=Mono';
+
+ if (strAssembly)
+ {
+ strRoot = strRoot + strAssembly + '/';
+ if (strNamespace)
+ {
+ strRoot = strRoot + strNamespace + '/';
+ if (strClass)
+ {
+ strRoot += strClass + '.cs';
+ strExtra += '&rev=1';
+ }
+ }
+ window.open (strRoot + strExtra, 'CVS');
+ }
+ }
+ else if (strNamespace)
+ {
+ var re = /\./g ;
+ strNamespace = strNamespace.toLowerCase ().replace (re, '');
+ if (strClass)
+ strNamespace += strClass.toLowerCase () + 'class';
+ if (strField)
+ strNamespace += strField;
+ if (strClass || strField)
+ strNamespace += 'topic';
+
+ window.open ('http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf' + strNamespace + '.asp', 'MSDN');
+ }
+ }
+ else
+ {
+ if (elt.parentNode && elt.parentNode.className == 't') // toggle
+ elt = elt.parentNode;
+ else if (elt.className != 't') // toggle
+ return;
+
+ while (elt != null && elt.tagName != 'DIV')
+ elt = elt.parentNode;
+
+ if (evt.shiftKey)
+ {
+ var rgElts = getChildrenByTagName (elt, 'DIV');
+ var cElts = rgElts.length;
+ if (cElts != 0)
+ {
+ var fView = false;
+ var iElt;
+ for (iElt = 0; iElt < cElts; iElt ++)
+ {
+ if (getView (rgElts [iElt]))
+ {
+ fView = true;
+ break;
+ }
+ }
+ for (iElt = 0; iElt < cElts; iElt ++)
+ {
+ setView (rgElts [iElt], !fView);
+ }
+ }
+ }
+ else if (evt.ctrlKey)
+ {
+ setView (elt, true);
+ var eltParent = getParentDiv (elt);
+ while (eltParent)
+ {
+ var rgSiblings = getChildrenByTagName (eltParent, 'DIV');
+ var cSiblings = rgSiblings.length;
+ for (var iSibling = 0; iSibling < cSiblings; iSibling++)
+ {
+ var eltSibling = rgSiblings [iSibling];
+ if (eltSibling != elt)
+ {
+ setView (eltSibling, false);
+ }
+ }
+ elt = eltParent;
+ eltParent = getParentDiv (elt);
+ }
+ }
+ else
+ toggle (elt);
+ }
+
+ return false;
+}
+
+function filterTree ()
+{
+ var eltMissing = document.getElementById ('missing');
+ var eltTodo = document.getElementById ('todo');
+ var eltExtra = document.getElementById ('extra');
+ var eltErrors = document.getElementById ('errors');
+
+ var dictTypes = new Object ();
+ if (eltMissing.checked)
+ dictTypes ['sm'] = true;
+ if (eltTodo.checked)
+ dictTypes ['st'] = true;
+ if (eltErrors.checked)
+ dictTypes ['se'] = true;
+ if (eltExtra.checked)
+ dictTypes ['sx'] = true;
+// dictTypes ['sc'] = true;
+
+ viewAll (document.getElementById ('ROOT'), dictTypes);
+}
+
+function selectMissing ()
+{
+ toggleFilter ('missing');
+}
+
+function selectTodo ()
+{
+ toggleFilter ('todo');
+}
+
+function selectExtra ()
+{
+ toggleFilter ('extra');
+}
+
+function selectErrors ()
+{
+ toggleFilter ('errors');
+}
+
+function toggleFilter (strFilter)
+{
+ var eltTodo = document.getElementById ('todo');
+ var eltMissing = document.getElementById ('missing');
+ var eltExtra = document.getElementById ('extra');
+ var eltErrors = document.getElementById ('errors');
+
+ var eltToggle = document.getElementById (strFilter);
+ if (window && window.event && window.event.shiftKey)
+ {
+ eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = false;
+ eltToggle.checked = true;
+ }
+ else
+ if (!eltTodo.checked && !eltMissing.checked && !eltExtra.checked && !eltErrors.checked)
+ {
+ eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = true;
+ eltToggle.checked = false;
+ }
+ filterTree ();
+}
+
+function onLoad ()
+{
+ var eltMissing = document.getElementById ('missing');
+ var eltTodo = document.getElementById ('todo');
+ var eltExtra = document.getElementById ('extra');
+ var eltErrors = document.getElementById ('errors');
+ eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = true;
+}
+
+if (document.layers)
+{
+ document.captureEvents (Event.MOUSEUP);
+ document.onmouseup = clickHandler;
+}
+else if (document.attachEvent)
+{
+ document.attachEvent('onclick', clickHandler);
+}
+else if (document.addEventListener)
+{
+ document.addEventListener('click', clickHandler, false);
+}
+else
+ document.onclick = clickHandler;
+
diff --git a/doc/web/deploy/cm/d.gif b/doc/web/deploy/cm/d.gif
new file mode 100644
index 00000000000..c9735952f33
--- /dev/null
+++ b/doc/web/deploy/cm/d.gif
Binary files differ
diff --git a/doc/web/deploy/cm/e.gif b/doc/web/deploy/cm/e.gif
new file mode 100644
index 00000000000..1137246bfae
--- /dev/null
+++ b/doc/web/deploy/cm/e.gif
Binary files differ
diff --git a/doc/web/deploy/cm/en.gif b/doc/web/deploy/cm/en.gif
new file mode 100644
index 00000000000..00026b77300
--- /dev/null
+++ b/doc/web/deploy/cm/en.gif
Binary files differ
diff --git a/doc/web/deploy/cm/f.gif b/doc/web/deploy/cm/f.gif
new file mode 100644
index 00000000000..f78a2f53bbc
--- /dev/null
+++ b/doc/web/deploy/cm/f.gif
Binary files differ
diff --git a/doc/web/deploy/cm/i.gif b/doc/web/deploy/cm/i.gif
new file mode 100644
index 00000000000..56cd032a565
--- /dev/null
+++ b/doc/web/deploy/cm/i.gif
Binary files differ
diff --git a/doc/web/deploy/cm/m.gif b/doc/web/deploy/cm/m.gif
new file mode 100644
index 00000000000..75fe3586d48
--- /dev/null
+++ b/doc/web/deploy/cm/m.gif
Binary files differ
diff --git a/doc/web/deploy/cm/n.gif b/doc/web/deploy/cm/n.gif
new file mode 100644
index 00000000000..f6fa746304d
--- /dev/null
+++ b/doc/web/deploy/cm/n.gif
Binary files differ
diff --git a/doc/web/deploy/cm/p.gif b/doc/web/deploy/cm/p.gif
new file mode 100644
index 00000000000..b79d0dd7edb
--- /dev/null
+++ b/doc/web/deploy/cm/p.gif
Binary files differ
diff --git a/doc/web/deploy/cm/r.gif b/doc/web/deploy/cm/r.gif
new file mode 100644
index 00000000000..a3ef0f38ef0
--- /dev/null
+++ b/doc/web/deploy/cm/r.gif
Binary files differ
diff --git a/doc/web/deploy/cm/s.gif b/doc/web/deploy/cm/s.gif
new file mode 100644
index 00000000000..f2fd5c8aee2
--- /dev/null
+++ b/doc/web/deploy/cm/s.gif
Binary files differ
diff --git a/doc/web/deploy/cm/sc.gif b/doc/web/deploy/cm/sc.gif
new file mode 100644
index 00000000000..b02afd9b2e0
--- /dev/null
+++ b/doc/web/deploy/cm/sc.gif
Binary files differ
diff --git a/doc/web/deploy/cm/se.gif b/doc/web/deploy/cm/se.gif
new file mode 100644
index 00000000000..1c46eaa5887
--- /dev/null
+++ b/doc/web/deploy/cm/se.gif
Binary files differ
diff --git a/doc/web/deploy/cm/sm.gif b/doc/web/deploy/cm/sm.gif
new file mode 100644
index 00000000000..0c7194786d5
--- /dev/null
+++ b/doc/web/deploy/cm/sm.gif
Binary files differ
diff --git a/doc/web/deploy/cm/st.gif b/doc/web/deploy/cm/st.gif
new file mode 100644
index 00000000000..067582cb398
--- /dev/null
+++ b/doc/web/deploy/cm/st.gif
Binary files differ
diff --git a/doc/web/deploy/cm/sx.gif b/doc/web/deploy/cm/sx.gif
new file mode 100644
index 00000000000..2c8ca547929
--- /dev/null
+++ b/doc/web/deploy/cm/sx.gif
Binary files differ
diff --git a/doc/web/deploy/cm/tb.gif b/doc/web/deploy/cm/tb.gif
new file mode 100644
index 00000000000..ee68c5a356b
--- /dev/null
+++ b/doc/web/deploy/cm/tb.gif
Binary files differ
diff --git a/doc/web/deploy/cm/tm.gif b/doc/web/deploy/cm/tm.gif
new file mode 100644
index 00000000000..3c8f18aecea
--- /dev/null
+++ b/doc/web/deploy/cm/tm.gif
Binary files differ
diff --git a/doc/web/deploy/cm/tp.gif b/doc/web/deploy/cm/tp.gif
new file mode 100644
index 00000000000..8b7435361b7
--- /dev/null
+++ b/doc/web/deploy/cm/tp.gif
Binary files differ
diff --git a/doc/web/deploy/cm/y.gif b/doc/web/deploy/cm/y.gif
new file mode 100644
index 00000000000..08f00d4ea11
--- /dev/null
+++ b/doc/web/deploy/cm/y.gif
Binary files differ
diff --git a/doc/web/deploy/images/bgsquares.gif b/doc/web/deploy/images/bgsquares.gif
new file mode 100644
index 00000000000..864bcd44038
--- /dev/null
+++ b/doc/web/deploy/images/bgsquares.gif
Binary files differ
diff --git a/doc/web/deploy/images/bgsquares.png b/doc/web/deploy/images/bgsquares.png
new file mode 100644
index 00000000000..a9e2bb94dbb
--- /dev/null
+++ b/doc/web/deploy/images/bgsquares.png
Binary files differ
diff --git a/doc/web/deploy/images/bgsquares.xcf.gz b/doc/web/deploy/images/bgsquares.xcf.gz
new file mode 100644
index 00000000000..200b5805615
--- /dev/null
+++ b/doc/web/deploy/images/bgsquares.xcf.gz
Binary files differ
diff --git a/doc/web/deploy/images/mono.gif b/doc/web/deploy/images/mono.gif
new file mode 100644
index 00000000000..298976a07b7
--- /dev/null
+++ b/doc/web/deploy/images/mono.gif
Binary files differ
diff --git a/doc/web/deploy/images/mono.png b/doc/web/deploy/images/mono.png
new file mode 100644
index 00000000000..21709009d60
--- /dev/null
+++ b/doc/web/deploy/images/mono.png
Binary files differ
diff --git a/doc/web/deploy/images/pixel.gif b/doc/web/deploy/images/pixel.gif
new file mode 100644
index 00000000000..a4f37d7e02e
--- /dev/null
+++ b/doc/web/deploy/images/pixel.gif
Binary files differ
diff --git a/doc/web/deploy/images/pixel.png b/doc/web/deploy/images/pixel.png
new file mode 100644
index 00000000000..85cfd14929a
--- /dev/null
+++ b/doc/web/deploy/images/pixel.png
Binary files differ
diff --git a/doc/web/htmlify b/doc/web/htmlify
new file mode 100644
index 00000000000..e4e61961f3b
--- /dev/null
+++ b/doc/web/htmlify
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+$q = 1;
+
+while (<>){
+ chop;
+ if (/^\* (.*)$/){
+ print "<h1>$1</h1>\n";
+ } elsif (/^\*\* (.*)$/) {
+ print "<h2>$1</h2>\n";
+ } elsif (/^\*\*\* (.*)$/) {
+ print "<h3>$1</h3>\n";
+ } elsif (/^\*\*\*\* (.*)$/) {
+ print "<h4>$1</h4>\n";
+ } elsif (/^$/) {
+ print "<p>\n";
+ } elsif (/^\t\t\* (.*)$/) {
+ print "<li>$1\n";
+ } elsif (/^\@item (.*)$/){
+ $name = $link = $1;
+ $link =~ s/ //g;
+ print "<a name=\"$link\">\n";
+ print "<h2>$name</h2>\n";
+ } elsif (/^Q: (.*)$/){
+ print "<p><a name=\"q$q\"></a><b>Question $q:</b> $1\n";
+ $q++;
+ } elsif (/^A: (.*)$/){
+ print "$1\n";
+ } elsif (/^TODO=(.*),$/){
+ print "<a name=\"$1\">\n";
+ } else {
+ print "$_\n";
+ }
+}
diff --git a/doc/web/icaza.pl b/doc/web/icaza.pl
new file mode 100644
index 00000000000..ce8b87c44da
--- /dev/null
+++ b/doc/web/icaza.pl
@@ -0,0 +1,76 @@
+#!/usr/bin/perl
+$q = 1;
+
+# Modified by Edwin Lima (edwinlima@hotmail.com; edwin.lima@nec-computers.com)
+# Date: 08/21/01, The Netherlands
+# $f: Variable used as a flag to create the list of questions on top of the question-answers set. This
+# is the only way that I found to scan the questions which have a <CR><LF>, in such a way that I will not
+# scan the answer together at same time.
+# @aname: Buffer used to store the question-answers set to print them out just after the print of the
+# questions.
+# @href: Buffer used to store the anchors (only questions) to the questions-answers set on the bottom
+# of the page.
+# I opened explicitly the file for input (input.txt) but U can change this as it was originally.
+#
+#
+
+#comment this line if you are not open the file explicitly
+#open(IN, "input.txt") || die "cannot open file input.txt" ;
+
+print("<A name=TOP>") ;
+
+#Uncomment line bellow to make it work as it was originally.
+while (<>){
+
+#comment line bellow
+
+#while (<IN>){
+ chop;
+ if (/^\* (.*)$/){
+ push(@aname,"<h1>$1</h1>\n");
+# print $body;
+ } elsif (/^\*\* (.*)$/) {
+ push(@aname, "<h2>$1</h2>\n");
+ push(@href, "<h2>$1</h2>\n");
+ } elsif (/^\*\*\* (.*)$/) {
+ push(@aname, "<h3>$1</h3>\n");
+
+ } elsif (/^$/) {
+ push(@aname, "<p>\n");
+# push(@href, "<p>\n"); NOT NEEDED
+ } elsif (/^\t\t\* (.*)$/) {
+ push(@aname, "<li>$1\n");
+ } elsif (/^Q: (.*)$/){
+ push(@aname, "<p><a name=\"q$q\"></a><b>Question $q:</b> $1\n");
+ push(@href,"<p><a href=\"#q$q\"><b>Question $q:</b></a> $1\n");
+ $f=1;
+ $q++;
+ } elsif (/^A: (.*)$/){
+ push(@aname,"<P>\n<A HREF=#TOP>Top</A>\n<P>");
+ push(@aname,"$1\n");
+ $f=0;
+ } elsif (/^TODO=(.*),$/){
+ push(@aname, "<a name=\"$1\">\n");
+ #push(@href, "<a name=\"$1\">\n");
+ } else {
+ push(@aname,"$_\n");
+ if ($f==1) {
+ push(@href,"$_\n");
+ }
+ }
+}
+
+foreach $line (@href) #"\n\n";
+{
+ print $line;
+ }
+
+foreach $line (@aname) #"\n\n";
+{
+ print $line;
+ }
+
+
+#comment this line if you are not open the file explicitly
+# close(IN) || die "cannot close file" ;
+
diff --git a/doc/web/images/bgsquares.gif b/doc/web/images/bgsquares.gif
new file mode 100644
index 00000000000..864bcd44038
--- /dev/null
+++ b/doc/web/images/bgsquares.gif
Binary files differ
diff --git a/doc/web/images/bgsquares.png b/doc/web/images/bgsquares.png
new file mode 100644
index 00000000000..54de2ad1e6d
--- /dev/null
+++ b/doc/web/images/bgsquares.png
Binary files differ
diff --git a/doc/web/images/bgsquares.xcf.gz b/doc/web/images/bgsquares.xcf.gz
new file mode 100644
index 00000000000..200b5805615
--- /dev/null
+++ b/doc/web/images/bgsquares.xcf.gz
Binary files differ
diff --git a/doc/web/images/mono-new.gif b/doc/web/images/mono-new.gif
new file mode 100755
index 00000000000..9aa496940a8
--- /dev/null
+++ b/doc/web/images/mono-new.gif
Binary files differ
diff --git a/doc/web/images/mono.gif b/doc/web/images/mono.gif
new file mode 100644
index 00000000000..298976a07b7
--- /dev/null
+++ b/doc/web/images/mono.gif
Binary files differ
diff --git a/doc/web/images/mono.png b/doc/web/images/mono.png
new file mode 100644
index 00000000000..a19e38acedd
--- /dev/null
+++ b/doc/web/images/mono.png
Binary files differ
diff --git a/doc/web/images/pixel.gif b/doc/web/images/pixel.gif
new file mode 100644
index 00000000000..a4f37d7e02e
--- /dev/null
+++ b/doc/web/images/pixel.gif
Binary files differ
diff --git a/doc/web/images/pixel.png b/doc/web/images/pixel.png
new file mode 100644
index 00000000000..d8f33a2a3e4
--- /dev/null
+++ b/doc/web/images/pixel.png
Binary files differ
diff --git a/doc/web/images/xml.gif b/doc/web/images/xml.gif
new file mode 100755
index 00000000000..ecb09575418
--- /dev/null
+++ b/doc/web/images/xml.gif
Binary files differ
diff --git a/doc/web/makefile b/doc/web/makefile
new file mode 100644
index 00000000000..5a037d1cc16
--- /dev/null
+++ b/doc/web/makefile
@@ -0,0 +1,152 @@
+CSCRIPT = $(SYSTEMROOT)/system32/cscript.exe
+CSC=csc
+
+CORCOMPARE=../../../mcs/tools/corcompare
+
+OBJECTS= \
+ deploy/ado-net.html \
+ deploy/firebird.html \
+ deploy/ibmdb2.html \
+ deploy/mysql.html \
+ deploy/odbc.html \
+ deploy/oledb.html \
+ deploy/oracle.html \
+ deploy/postgresql.html \
+ deploy/sqlclient.html \
+ deploy/sqlite.html \
+ deploy/sybase.html \
+ deploy/tdsclient.html \
+ deploy/anoncvs.html \
+ deploy/asp-net.html \
+ deploy/books.html \
+ deploy/contributing.html \
+ deploy/class-status.html \
+ deploy/class-status-corlib.html \
+ deploy/class-status-System.html \
+ deploy/class-status-System.Xml.html \
+ deploy/class-status-System.Drawing.html \
+ deploy/class-status-System.Data.html \
+ deploy/class-status-System.Web.html \
+ deploy/class-status-System.Web.Services.html \
+ deploy/class-status-Microsoft.VisualBasic.html \
+ deploy/class-status-System.EnterpriseServices.html \
+ deploy/class-status-System.Runtime.Serialization.Formatters.Soap.html \
+ deploy/class-status-System.Windows.Forms.html \
+ deploy/class-status-Cscompmgd.html \
+ deploy/class-library.html \
+ deploy/classlib-doc.html \
+ deploy/contact.html \
+ deploy/c-sharp.html \
+ deploy/mbas.html \
+ deploy/ccvs.html \
+ deploy/documentation.html \
+ deploy/download.html \
+ deploy/crypto.html \
+ deploy/embedded-api.html \
+ deploy/faq.html \
+ deploy/gcc-frontend.html \
+ deploy/hackers.html \
+ deploy/index.html \
+ deploy/ideas.html \
+ deploy/java.html \
+ deploy/jit-debug.html \
+ deploy/jit-debug-sample.html \
+ deploy/jit-debug-sample2.html \
+ deploy/languages.html \
+ deploy/mailing-lists.html \
+ deploy/mono-beginning.html \
+ deploy/mono-contribution-howto.html \
+ deploy/monodoc-xml.html \
+ deploy/papers.html \
+ deploy/passport.html \
+ deploy/plans.html \
+ deploy/porting.html \
+ deploy/ppc.html \
+ deploy/rationale.html \
+ deploy/resources.html \
+ deploy/roadmap.html \
+ deploy/runtime.html \
+ deploy/status.html \
+ deploy/testing.html \
+ deploy/tools.html \
+ deploy/winforms.html
+#2,Configuration.Install,class-status-System.Configuration.Install.html,class-status-System.Configuration.Install.src,cm/cormissing.css,cm/cormissing.js
+#2,Runtime.Remoting,class-status-System.Runtime.Remoting.html,class-status-System.Runtime.Remoting.src,cm/cormissing.css,cm/cormissing.js
+
+# deploy/class-status-System.Configuration.Install.html \
+# deploy/class-status-System.Runtime.Remoting.html \
+
+NON_HTML_SOURCES= \
+ ../mono-build.sh \
+ ../mono-build-w32.sh
+
+
+all: $(OBJECTS) deploy/index.rss
+ perl process.pl commands template.html.in deploy
+
+tutorial: mono-beginning.html.stamp mono-beginning.pdf
+ cp -a mono-beginning mono-beginning.xml mono-beginning.pdf deploy
+
+mono-beginning.html.stamp: mono-beginning.xml
+ db2html mono-beginning.xml
+ touch mono-beginning.html.stamp
+
+mono-beginning.pdf: mono-beginning.xml
+ db2pdf mono-beginning.xml
+
+mono-beginning.xml: ../mono-beginning.xml
+ cp ../mono-beginning.xml .
+
+deploy/index.rss: mono-rss.exe ../index
+ ./mono-rss.exe ../index deploy/index.rss
+
+mono-rss.exe: mono-rss.cs rss.cs
+ $(CSC) mono-rss.cs rss.cs
+
+clean:
+ rm -f $(OBJECTS) $(patsubst deploy/%.html,src/%.src, $(OBJECTS)) src/*.xml src/*.html.in ../class-status-* ../class-status
+
+push:
+ cp -f $(NON_HTML_SOURCES) deploy
+ echo scp -P 2200 -r deploy/* www@www.ximian.com:/web/cvsmodules/mono
+ (cd deploy; rsync --verbose --recursive --checksum --update --rsh='ssh -p 2200' . www@www.ximian.com:/web/cvsmodules/mono )
+
+push2:
+ scp -r deploy/* primates:public_html/xxx
+
+$(OBJECTS): $(patsubst deploy/%.html,src/%.src, $(OBJECTS))
+
+#.PRECIOUS: $(patsubst deploy/%.html,src/%.src, $(OBJECTS))
+
+
+
+.PRECIOUS: src/%.src
+src/%.src: ../% commands makefile template.html.in
+ perl htmlify $< > $@
+
+
+
+.PRECIOUS: ../class-status-%
+../class-status-%: src/%.html.in ../class-status.in
+ cat ../class-status.in $< > $@
+
+
+.PRECIOUS: src/%.html.in
+src/%.html.in: src/%.xml $(CORCOMPARE)/transform.js $(CORCOMPARE)/cormissing.xsl
+ $(CSCRIPT) /nologo $(CORCOMPARE)/transform.js $< $(CORCOMPARE)/cormissing.xsl > $@
+
+
+
+.PRECIOUS: src/%.xml
+src/%.xml: ../../../mcs/class/lib/%.dll $(CORCOMPARE)/CorCompare.exe
+ $(CORCOMPARE)/CorCompare.exe -x $@ $<
+
+src/corlib.xml: ../../../mcs/class/lib/corlib_cmp.dll $(CORCOMPARE)/CorCompare.exe
+ $(CORCOMPARE)/CorCompare.exe -f corlib -ms mscorlib -x $@ $<
+
+
+../class-status: ../class-status.in
+ cp -f $< $@
+
+make-rss:
+ $(CSC) make-rss.cs -o
diff --git a/doc/web/mono-rss.cs b/doc/web/mono-rss.cs
new file mode 100755
index 00000000000..a4fdd49c365
--- /dev/null
+++ b/doc/web/mono-rss.cs
@@ -0,0 +1,103 @@
+//
+// Generates the Mono RSS feed
+//
+// Miguel de Icaza
+//
+using System;
+using System.IO;
+using System.Xml;
+using RSS;
+
+class X {
+ static RSS.RSS rss;
+ static Channel c;
+ static int item_count;
+
+ static void PopulateRSS (StreamReader input)
+ {
+ string s;
+
+ while ((s = input.ReadLine ()) != null){
+ if (s.StartsWith ("@item "))
+ break;
+ }
+
+ if (s == null || !s.StartsWith ("@item ")){
+ Console.WriteLine ("Could not find beginning of text to RSS");
+ return;
+ }
+
+ Item i = null;
+ string description = "";
+ do {
+ if (s.StartsWith ("@item ")){
+ if (item_count++ > 25)
+ break;
+
+ if (i != null){
+ i.Description = description;
+ description = "";
+ }
+
+ string title = s.Substring (6);
+ string link = "http://www.go-mono.com/index.html#";
+ foreach (char ch in title){
+ if (ch != ' ')
+ link += ch;
+ }
+
+ i = c.NewItem ();
+ i.Title = title;
+ i.Link = link;
+ } else {
+ description += "\n" + (s == "\n" ? "<p>" : s);
+ }
+ } while ((s = input.ReadLine ()) != null);
+
+ if (i != null){
+ i.Description = description;
+ }
+ }
+
+ static void MakeRSS (string input, string output)
+ {
+ rss = new RSS.RSS ();
+ c = rss.NewChannel ("Mono Project News", "http://www.go-mono.com");
+
+ c.Title = "Mono Project News";
+ c.Link = "http://www.go-mono.com";
+ c.Description =
+ "News from the Mono project: a portable implementation of the .NET Framework";
+ c.WebMaster = "webmaster@go-mono.com";
+ c.ManagingEditor = "miguel@ximian.com";
+ string t = File.GetLastWriteTime (input).ToString ("r");
+ c.PubDate = t;
+ c.LastBuildDate = t;
+
+ using (FileStream fs = new FileStream (input, FileMode.Open)){
+ using (StreamReader input_stream = new StreamReader (fs)){
+ PopulateRSS (input_stream);
+ }
+ }
+
+ rss.XmlDocument.Save (output);
+ }
+
+ static int Main (string [] args)
+ {
+ switch (args.Length){
+ case 0:
+ MakeRSS ("index", "index.rss");
+ break;
+ case 2:
+ MakeRSS (args [0], args [1]);
+ break;
+
+ default:
+ Console.WriteLine ("Usage is: mono-rss [input output.rss]");
+ return 1;
+ }
+
+ return 0;
+ }
+}
diff --git a/doc/web/process.pl b/doc/web/process.pl
new file mode 100755
index 00000000000..48766f8f0b8
--- /dev/null
+++ b/doc/web/process.pl
@@ -0,0 +1,89 @@
+#!/usr/bin/perl
+#
+# Author:
+# Sean MacIsaac
+#
+
+use strict;
+
+my $full_expand = 1;
+my @template;
+my $n;
+
+if ($#ARGV != 2) {
+ print "process.pl command_file template_file directory_prefix\n";
+ exit ();
+}
+
+my $menu = "";
+
+open COMMANDS, $ARGV[0] || die "Can not open $ARGV[0]";
+while (<COMMANDS>) {
+ chop;
+ my @command = split /,/;
+ if ($command[0] != -1) {
+ $menu .= "\t\t";
+ $menu .= "<tr><td valign=\"top\" class=\"navi" . $command[0];
+ $menu .= "\"><a class=\"navi" . $command[0];
+ $menu .= "\"";
+ $menu .= " HREF=\"$command[2]\">$command[1]</A></td></tr>\n\n";
+ }
+}
+close COMMANDS;
+
+open TEMPLATE, $ARGV[1] || die "Can not open $ARGV[1]";
+while (<TEMPLATE>) {
+ push @template, $_;
+}
+close TEMPLATE;
+
+open COMMANDS, $ARGV[0] || die "Can not open $ARGV[0]";
+while (<COMMANDS>) {
+ chop;
+ my @command = split /,/;
+
+ if ($command[2] =~ /^http:/){
+ } else {
+ $n = $ARGV[2] . "/" . $command[2];
+ open OUTPUT, ">" . $n || die "Can not create $n";
+
+ my $content = "";
+ open INPUT, "src/$command[3]" || die "Can not open $command[3]";
+ while (<INPUT>) {
+ $content .= $_;
+ }
+ close INPUT;
+
+ my $line;
+ my $temp;
+ my $tit;
+ my $title;
+ my $css;
+ my $script;
+
+ $tit = $command[1];
+ $css = $command[4];
+ $script = $command[5];
+
+ foreach $line (@template) {
+ $temp = $line;
+ $title = "$tit / Mono";
+ $temp =~ s/#TITLE#/$title/;
+ $temp =~ s/#CONTENT#/$content/;
+ $temp =~ s/#MENU#/$menu/;
+ if ($css) {
+ $temp =~ s/#CSS#/<LINK rel="stylesheet" type="text\/css" href="$css">/;
+ } else {
+ $temp =~ s/#CSS#//;
+ }
+
+ if ($script) {
+ $temp =~ s/#SCRIPT#/<SCRIPT src="$script"><\/SCRIPT>/;
+ } else {
+ $temp =~ s/#SCRIPT#//;
+ }
+ print OUTPUT $temp;
+ }
+ }
+ close OUTPUT;
+}
diff --git a/doc/web/rss.cs b/doc/web/rss.cs
new file mode 100755
index 00000000000..c8966e51e52
--- /dev/null
+++ b/doc/web/rss.cs
@@ -0,0 +1,262 @@
+//
+// RSS.cs: Some utility classes to generate RSS feeds
+//
+// (C) 2002 Miguel de Icaza (miguel@gnu.org)
+//
+//
+using System;
+using System.Xml;
+using System.IO;
+
+namespace RSS {
+
+ public class Item {
+ XmlDocument doc;
+ XmlNode item;
+ XmlText title, link, description;
+
+ public Item (XmlDocument doc, XmlNode item)
+ {
+ this.doc = doc;
+ this.item = item;
+ }
+
+ XmlText MakeTextElement (string name)
+ {
+ XmlNode node = doc.CreateElement (name);
+ XmlText text = doc.CreateTextNode ("");
+
+ item.AppendChild (node);
+ node.AppendChild (text);
+
+ return text;
+ }
+
+ public string Title {
+ get {
+ if (title == null)
+ return null;
+
+ return title.Value;
+ }
+
+ set {
+ if (title == null)
+ title = MakeTextElement ("title");
+ title.Value = value;
+ }
+ }
+
+ public string Link {
+ get {
+ if (link == null)
+ return null;
+
+ return link.Value;
+ }
+
+ set {
+ if (link == null)
+ link = MakeTextElement ("link");
+ link.Value = value;
+ }
+ }
+
+ public string Description {
+ get {
+ if (description == null)
+ return null;
+
+ return description.Value;
+ }
+
+ set {
+ if (description == null)
+ description = MakeTextElement ("description");
+ description.Value = value;
+ }
+ }
+ }
+
+ public class Channel {
+ XmlDocument doc;
+ XmlNode channel;
+ XmlText title, link, description, language, pubDate, lastBuildDate;
+ XmlText managingEditor, webMaster;
+
+ XmlText MakeTextElement (string name)
+ {
+ XmlNode node = doc.CreateElement (name);
+ XmlText text = doc.CreateTextNode ("");
+
+ channel.AppendChild (node);
+ node.AppendChild (text);
+
+ return text;
+ }
+
+ public Channel (XmlDocument doc, XmlNode node)
+ {
+ this.channel = node;
+ this.doc = doc;
+
+ title = MakeTextElement ("title");
+ link = MakeTextElement ("link");
+ description = MakeTextElement ("description");
+ }
+
+ public Item NewItem ()
+ {
+ XmlNode node = doc.CreateElement ("item");
+ Item item;
+
+ channel.AppendChild (node);
+ item = new Item (doc, node);
+
+ return item;
+ }
+
+ public string Title {
+ get {
+ return title.Value;
+ }
+
+ set {
+ title.Value = value;
+ }
+ }
+
+ public string Link {
+ get {
+ return link.Value;
+ }
+
+ set {
+ link.Value = value;
+ }
+ }
+
+ public string Description {
+ get {
+ return description.Value;
+ }
+
+ set {
+ description.Value = value;
+ }
+ }
+
+#region Optional Values
+ public string ManagingEditor {
+ get {
+ if (managingEditor == null)
+ return null;
+
+ return managingEditor.Value;
+ }
+
+ set {
+ if (managingEditor == null)
+ managingEditor = MakeTextElement ("managingEditor");
+
+ managingEditor.Value = value;
+ }
+ }
+
+ public string WebMaster {
+ get {
+ if (webMaster == null)
+ return null;
+
+ return webMaster.Value;
+ }
+
+ set {
+ if (webMaster == null)
+ webMaster = MakeTextElement ("webMaster");
+ webMaster.Value = value;
+ }
+ }
+
+ public string PubDate {
+ get {
+ if (pubDate == null)
+ return null;
+
+ return pubDate.Value;
+ }
+
+ set {
+ if (pubDate == null)
+ pubDate = MakeTextElement ("pubDate");
+ pubDate.Value = value;
+ }
+ }
+
+ public string LastBuildDate {
+ get {
+ if (lastBuildDate == null)
+ return null;
+
+ return lastBuildDate.Value;
+ }
+
+ set {
+ if (lastBuildDate == null)
+ lastBuildDate = MakeTextElement ("lastBuildDate");
+ lastBuildDate.Value = value;
+ }
+ }
+
+ public string Language {
+ get {
+ if (language == null)
+ return null;
+
+ return language.Value;
+ }
+
+ set {
+ if (language == null)
+ language = MakeTextElement ("language");
+ language.Value = value;
+ }
+ }
+#endregion
+ }
+
+ class RSS {
+ XmlDocument doc;
+ XmlNode rss;
+
+ const string rss_base =
+ "<?xml version=\"1.0\"?> <rss version=\"0.92\"></rss>";
+
+ public RSS ()
+ {
+ doc = new XmlDocument ();
+
+ doc.LoadXml (rss_base);
+ rss = doc.DocumentElement;
+ }
+
+ public Channel NewChannel (string title, string url)
+ {
+ XmlNode node = doc.CreateElement ("channel");
+ Channel c;
+
+ rss.AppendChild (node);
+ c = new Channel (doc, node);
+
+ return c;
+ }
+
+ public XmlDocument XmlDocument {
+ get {
+ return doc;
+ }
+ }
+ }
+}
+
+
diff --git a/doc/web/src/.cvsignore b/doc/web/src/.cvsignore
new file mode 100755
index 00000000000..5053fb08904
--- /dev/null
+++ b/doc/web/src/.cvsignore
@@ -0,0 +1 @@
+*.src
diff --git a/doc/web/template.html.in b/doc/web/template.html.in
new file mode 100644
index 00000000000..b275930ac62
--- /dev/null
+++ b/doc/web/template.html.in
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>#TITLE#</title>
+<link rel="icon" href="../MonoIcon.png" type="image/png">
+<!-- background-image: url("images/bgsquares.gif"); -->
+<style type="text/css">
+<!--
+ body { font-family: "trebuchet ms", lucida, verdana, helvetica;
+
+ background-attachment: fixed; }
+ body, td, table { font-family: "trebuchet ms", lucida, verdana, helvetica;
+ font-size: 14px; }
+
+ .navi0 { font-size: 14px; font-weight: bold; background: #444444; }
+ .navi1 { font-size: 14px; font-weight: bold; left-margin: 10pt}
+ .navi2 { font-size: 10px; font-weight: bold; left-margin: 20pt}
+ .footnote { font-size: 12px; color: #aaaaaa; }
+
+ a.navi0 { color: #ffffff; text-decoration: none}
+ a.navi0:visited { color: #cccccc; }
+ a.navi0:hover { color: #ee9900; text-decoration: underline; }
+
+ a.navi1 { color: #ffffff; text-decoration: none; margin-left: 7px;}
+ a.navi1:visited { color: #cccccc; }
+ a.navi1:hover { color: #ee9900; text-decoration: underline; }
+
+ a.navi2 { color: #ffffff; text-decoration: none; margin-left: 20px;}
+ a.navi2:visited { color: #cccccc; }
+ a.navi2:hover { color: #ee9900; text-decoration: underline; }
+
+// -->
+</style>
+#CSS#
+#SCRIPT#
+</head>
+<body bgcolor="#555555" text="#000000">
+
+<table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td><img src="images/pixel.gif" alt=""></td><!-- left border -->
+ <td colspan="4">
+ <a href="http://www.go-mono.com"><img src="images/mono-new.gif"
+ alt="mono-logo" border="0"></a></td>
+ <td><img src="images/pixel.gif" alt=""></td><!-- right border -->
+ </tr>
+ <tr>
+ <td><img src="images/pixel.gif" width="1" height="1" alt=""></td>
+ <td colspan="3" bgcolor="black"><img src="images/pixel.gif"
+ height="2" alt=""></td>
+ <td bgcolor="black"><img src="images/pixel.gif" width="1" alt=""></td>
+ <td><img src="images/pixel.gif" alt=""></td>
+ </tr>
+ <tr>
+ <td width="100"><img src="images/pixel.gif" alt=""></td>
+ <td valign="top">
+ <table cellpadding="2" valign="top" cellspacing="0" border="0">
+ #MENU#
+ </table>
+ </td>
+ <td bgcolor="black" width="1"><img src="images/pixel.gif"
+ width="1" alt=""></td>
+ <td bgcolor="white" align="left" width="80%" valign="top">
+ <table cellpadding="16">
+ <tr><td>
+ #CONTENT#
+ </td></tr>
+ </table>
+ </td>
+ <td bgcolor="black"><img src="images/pixel.gif" width="1" alt=""></td>
+ <td width="100"><img src="images/pixel.gif" alt=""></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <img src="images/pixel.gif" alt=""></td>
+ <td colspan="2" bgcolor="black"><img src="images/pixel.gif"
+ height="1" alt=""></td>
+ <td bgcolor="black"><img src="images/pixel.gif" width="1" alt=""></td>
+ <td><img src="images/pixel.gif" alt=""></td>
+ </tr>
+
+ <tr>
+ <td colspan="2"></td>
+ <td colspan="2" align="center">
+ <a class="footnote" href="mailto:webmaster@go-mono.com">webmaster@go-mono.com</a>
+ </td>
+ <td colspan="2"></td>
+ </tr>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/doc/winforms b/doc/winforms
new file mode 100644
index 00000000000..91fb22d63ba
--- /dev/null
+++ b/doc/winforms
@@ -0,0 +1,120 @@
+* System.Windows.Forms
+
+ System.Windows.Forms is currently being implemented using the
+ Win32 API, we will be using <a
+ href="http://www.winehq.com">WineLib</a> on Unix systems to
+ emulate the Win32 API.
+
+ This means that those who want to contribute to the effort can
+ develop and test classes today using Windows and P/Invoke
+ calls to Win32 and we will then just run the result on Unix.
+
+ In terms of integrating visually with the desktop, we are
+ hoping to contribute to the Wine project an mechanism to make
+ it use the Gtk+ themes on X11 and Cocoa on MacOS to render the
+ widgets, and get the native look and feel on each of these
+ platforms.
+
+ There are no current plans to support embedded devices, but
+ Gtk/FrameBuffer is an option. If you have suggestions or
+ recommendations, please let us <a
+ href="mailto:mono-hackers-list@ximian.com">let us know</a>
+
+* Contributing
+
+ The Winforms effort is being coordinated in the <a
+ href="mailto:mono-winforms-list@ximian.com:.com">mono-winforms-list@ximian.com</a>.
+ If you are interested in helping out with this effort,
+ subscribe to it by sending an email message to <a
+ href="mailto:mono-winforms-list-request@ximian.com:.com">mono-winforms-list-request@ximian.com</a>.
+
+ If you want to help, you can start by writing a control and
+ testing it with Windows today (or you can also try to build
+ the existing library on Linux, but this is a bit more
+ complicated).
+
+ See the file mcs/class/System.Windows.Forms/CheckOutList for
+ details on who is working on which class.
+
+ Please read the README document in the
+ System.Windows.Forms/WINElib directory for details about how
+ to build the Windows.Forms support for Mono.
+
+* System.Drawing
+
+ Using existing libraries to implement some of the
+ functionality required:
+
+ <ul>
+ * gdk-pixbuf is a generic image loader that loads an image
+ and leaves it into an RGB buffer. It hides all the details
+ about what image file format is being loaded.
+
+ * Libart is a general framework for rendering RGB/RGBA
+ buffers into RGB buffers and rendering postscript-like paths into
+ RGB/RGBA buffers.
+ </ul>
+
+ We want to use gdk-pixbuf as the image loader for the image
+ classes, and then we need operations to render that into the
+ windowing system (Gtk+, MacOS, etc). But notice how there is
+ very little dependnecies in Gdk-pixbuf on gtk, and libart has
+ none.
+
+ They are pretty independent from a windowing system
+ (gdk-pixbuf comes with some "helper" routines for rendering
+ data into a pixmap and to load pixmaps into RGB buffers).
+
+ A few things to keep in mind:
+
+ <ul>
+
+ * gdk-pixbuf can be used to load images for Gtk+,
+ MacOS X and Windows, it should be pretty portable,
+ although we might need in the future to back-port
+ some new features from Gtk head.
+
+ * Libart is probably only going to be used with X11,
+ as the MacOS X provides the same features in Quartz,
+ and Win32 *probably* has that in GDI+. If not, we
+ should use libart in Win32 as well (or for older
+ Windows systems).
+ </ul>
+
+* Directory Layout
+
+<pre>
+ System.Drawing (assembly directory)
+ System.Drawing.Blah
+ Common code for "Blah"
+ Stubs for "Blah" to ease ports.
+
+ Gtk
+ System.Drawing.Blah.
+ Gtk ports of "System.Drawing.Blah"
+ MacOS
+ System.Drawing.Blah
+ MacOS ports of "System.Drawing.Blah"
+ WineLIB
+ System.Drawing.Blah
+ Win32 ports of "System.Drawing.Blah"
+</pre>
+
+ Notice that there is a proof of concept Gtk-backend for
+ Windows.Forms, but nobody is working on it, and for the
+ reasons stated before it is not a long term strategy.
+
+* Open questions:
+
+ I believe that the graphics contexts that are used to render
+ can accept either libart-like rendering operations and
+ X11-like rendering operations. This complicates matters, but
+ I am not sure. Someone needs to investigate this.
+
+* Historical
+
+ Although the original plans were to use Gtk on X and Cocoa on
+ MacOS X, it would be very hard to emulate the event model in
+ which some Winforms applications depend, and it would be very
+ hard to implement the Wndproc method.
+