source: project/release/3/mysql/trunk/mysql.html @ 7902

Last change on this file since 7902 was 7902, checked in by Kon Lovett, 12 years ago

Added more map funcs. Added enum variables. Updated eggdoc.

File size: 21.0 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<!-- Generated by eggdoc Revision: 1.20  -->
3<html>
4<head>
5<title>Eggs Unlimited - mysql</title><style type="text/css"> <!--
6      CODE {
7            color: #666666;
8          }
9/*   DT.definition EM { font-weight: bold; font-style: normal; } */
10
11     DT.definition { 
12                   background: #eee;
13                   color: black;
14                   padding: 0.2em 1em 0.2em 0.7em;
15                   margin-left: 0.2em;
16border: 1px solid #bbc;
17                   font-family: "Andale Mono", monospace;
18                   /* font-size: 1.2em; */
19                   
20                 }
21     DD {
22                   margin-top: 0.8em;
23                   margin-bottom: 0.8em;
24     }
25     DIV.subsection {
26                    border-top: 1px solid #448;
27                    padding-left: 1em;
28                    margin-bottom: 1.2em;
29     }
30     DIV.subsubsection {
31                    border-top: 1px dotted #99c;
32                    /* border-left: 1px solid #99c; */
33                    padding-left: 1em;
34                    margin-bottom: 1.2em;
35     }
36     DIV.subsubsubsection {
37                    border-top: 1px solid #ddf;
38                    padding-left: 1em;
39                    margin-bottom: 1.2em;
40     }
41
42         DIV.section {
43                 margin-bottom: 1.5em;
44         }
45         a:link {
46                 color: #336;
47         }
48         a:visited { color: #666; }
49         a:active  { color: #966; }
50         a:hover   { color: #669; }
51         body { margin: 0; padding: 0; background: #fff; color: #000; font: 9pt "Lucida Grande", "Verdana", sans-serif; }
52         H2 {
53                 background: #336;
54                 color: #fff;
55                 padding-top: 0.5em;
56                 padding-bottom: 0.5em;
57                 padding-left: 16px;
58                 margin: 0 0 1em 0;
59        }
60        UL LI {
61                list-style: none;
62        }
63        TT {
64                font-family: "Andale Mono", monospace;
65                /* font-size: 1.2em; */
66        }
67        H3 {
68                color: #113;
69                margin-bottom: 0.5em;
70        }
71        H4, H5, H6 {
72                color: #113;
73                margin-bottom: 1.0em;
74        }
75        H5 {
76                font-weight: normal;
77                font-style: italic;
78                font-size: 100%;
79                margin-top: 1.2em;
80        }
81        H6 {
82                font-weight: bold;
83                font-size: 85%;
84                margin-top: 1.2em;
85        }
86     DIV#eggheader {
87         text-align: center;
88                 float: right;
89                 margin-right: 2em;
90     }
91     DIV#header IMG {
92            /* display: block; margin-left: auto; margin-right: auto;  */
93            /* float: right; */
94            border: none;  /* firefox */
95     }
96     DIV#footer {
97                background: #bbd;
98                padding: 0.7em ;
99                border-top: 1px solid #cce;
100     }
101     DIV#footer hr {
102                display: none;
103     }
104     DIV#footer a {
105                float: left;
106     }
107     DIV#revision-history {
108         float: right;
109     }
110     
111     DIV#body {
112                 margin: 1em 1em 1em 16px;
113         }
114
115     DIV#examples PRE {
116       background: #eef;
117       padding: 0.1em;
118       border: 1px solid #aac;
119     }
120     PRE#license, DIV#examples PRE {
121       padding: 0.5em;
122     }
123     DIV#examples PRE {
124       /* font-size: 85%; */
125     }
126     PRE { font-family: "Andale Mono", monospace; }
127     TABLE {
128       background: #eef;
129       padding: 0.2em;
130       border: 1px solid #aac;
131       border-collapse: collapse;
132       width: 100%;
133     }
134     TABLE.symbol-table TD.symbol {
135          width: 15em;
136          font-family: "Andale Mono", monospace;
137          /* font-size: 1.2em; */
138     }
139     TH {
140       text-align: left;
141       border-bottom: 1px solid #aac;
142       padding: 0.25em 0.5em 0.25em 0.5em;
143     } 
144     TD { padding: 0.25em 0.5em 0.25em 0.5em; }
145     --></style></head>
146<body>
147<div id="header">
148<h2>mysql</h2>
149<div id="eggheader"><a href="index.html">
150<img src="egg.jpg" alt="[Picture of an egg]" /></a></div></div>
151<div id="body">
152<div class="section">
153<h3>Description</h3>
154<p>MySQL bindings for Chicken.</p></div>
155<div class="section">
156<h3>Author</h3><a href="mailto:toby@butzon.com">Toby Butzon</a></div>
157<div class="section">
158<h3>Version</h3>
159<ul>
160<li>1.3 Additional functions [Kon Lovett].</li>
161<li>1.2 Fix for ticket #297 [Mario Domenech Goulart].</li>
162<li>1.1 Cross-platform compilation fixes, et al.</li>
163<li>1.0 Initial release</li></ul></div>
164<div class="section">
165<h3>Requires</h3>
166<ul>
167<li><span>MySQL client library (<tt>-lmysqlclient</tt>)</span></li></ul></div>
168<div class="section">
169<h3>Usage</h3><tt>(require-extension mysql)</tt></div>
170<div class="section">
171<h3>Download</h3><a href="mysql.egg">mysql.egg</a></div>
172<div class="section">
173<h3>Documentation</h3>
174<p>The MySQL egg provides (most of) the functions offered by the MySQL C API (the <tt>foreign-mysql-*</tt> functions). It also maps those to a set of slightly more convenient Scheme functions (the <tt>mysql-*</tt> functions). Finally, a few extra functions are provided for easy of use.</p>
175<p>Only the most often used MySQL functions are described in this document. If you really want to see the full listing, consult the <a href="mysql-mole.html">mole documentation</a>.</p>
176<p>Please send bug reports and suggestions to <a href="mailto:toby@butzon.com">toby@butzon.com</a>.</p>
177<div class="subsection">
178<h4>Connections</h4>
179<dt class="definition"><strong>procedure:</strong> (mysql-connect [KEYWORDS])</dt>
180<dd>
181<p>Connect to a MySQL server.</p>
182<p>Returns a MySQL connection object suitable for passing to the other MySQL functions. This object is referred to as <tt>DB</tt> when passed by all the other MySQL functions. Returns <tt>#f</tt> when the connection fails.</p>
183<p>Any number of the following <tt>KEYWORDS</tt> may be included:
184<ul>
185<li>host</li>
186<li>user</li>
187<li>passwd</li>
188<li>db</li>
189<li>port</li>
190<li>unix-socket</li>
191<li>client-flag</li></ul></p>
192<p>Note that default values are available for all of these arguments. (Consult the <a href="http://dev.mysql.com/doc/mysql/en/c.html">MySQL C API</a> for details on how these defaults are determined.)</p></dd>
193<dt class="definition"><strong>procedure:</strong> (mysql-close DB)</dt>
194<dd>
195<p>Closes the connection to <tt>DB</tt>. This frees any remaining MySQL resources from memory, but invalidates the MySQL connection object (<tt>DB</tt>) so that it may no longer be used.</p></dd></div>
196<div class="subsection">
197<h4>Basic Operations</h4>
198<dt class="definition"><strong>procedure:</strong> (mysql-query DB SQL-STRING)</dt>
199<dd>
200<p>Executes <tt>SQL-STRING</tt> on the MySQL server and stores the result in memory. Generates an error (calls <tt>error</tt>) if the query fails.</p></dd>
201<dt class="definition"><strong>procedure:</strong> (mysql-fetch-row DB)</dt>
202<dd>
203<p>Fetches a row from the result set returned by the most recent call to <tt>mysql-query</tt>. If the last query failed, or if there are no more rows left in the result set, returns <tt>#f</tt>; otherwise returns a row object.</p><a name='rowobj'></a>
204<p>A row object is defined as a function that takes a single argument. If the argument is a number, the function returns the value of the field for which that number is the index, or <tt>#f</tt> if the index is out of range. Otherwise, the argument must be a symbol or string, in which case the function returns the value of the field for which that string (or symbol converted into a string) is the field/column name. If no such field exists, returns <tt>#f</tt>.</p></dd>
205<dt class="definition"><strong>procedure:</strong> (mysql-rewind DB)</dt>
206<dd>
207<p>Rewinds the result set; that is, resets the pointer used by <tt>mysql-fetch-row</tt> so that the next call to it will return the first row of the result set. If there is no current result set, does nothing.</p></dd>
208<dt class="definition"><strong>procedure:</strong> (mysql-num-rows DB)</dt>
209<dd>
210<p>Returns the number of rows in the current result set. If no result set exists, returns <tt>#f</tt>.</p></dd></div>
211<div class="subsection">
212<h4>Row Mapping</h4>
213<dt class="definition"><strong>procedure:</strong> (mysql-row-fold DB PROC INIT)</dt>
214<dd>
215<p>Iterates over the entire result set (regardless of any rows that may have already been returned by <tt>mysql-fetch-row</tt>), calling <tt>PROC</tt> on each row.</p>
216<p>Returns the final accumulated value.</p>
217<p><tt>PROC</tt> must take three arguments: the row (as <a href="#rowobj">described</a>) for <tt>mysql-fetch-row</tt>, the index of that row in the result set, starting with <tt>1</tt> and ending with <tt>(mysql-num-rows DB)</tt>, and the current accumulated value (initially <tt>INIT</tt>).</p>
218<p><tt>PROC</tt> must return a value.</p></dd>
219<dt class="definition"><strong>procedure:</strong> (mysql-row-for-each DB PROC)</dt>
220<dd>
221<p>Iterates over the entire result set (regardless of any rows that may have already been returned by <tt>mysql-fetch-row</tt>), calling <tt>PROC</tt> on each row.</p>
222<p><tt>PROC</tt> must take three arguments: the row (as <a href="#rowobj">described</a>) for <tt>mysql-fetch-row</tt>, and the index of that row in the result set, starting with <tt>1</tt> and ending with <tt>(mysql-num-rows DB)</tt>.</p></dd>
223<dt class="definition"><strong>procedure:</strong> (mysql-row-map DB PROC)</dt>
224<dd>
225<p>Iterates over the entire result set (regardless of any rows that may have already been returned by <tt>mysql-fetch-row</tt>), calling <tt>PROC</tt> on each row.</p>
226<p>Returns the list of results of the <tt>PROC</tt> invocations.</p>
227<p><tt>PROC</tt> must take three arguments: the row (as <a href="#rowobj">described</a>) for <tt>mysql-fetch-row</tt>, and the index of that row in the result set, starting with <tt>1</tt> and ending with <tt>(mysql-num-rows DB)</tt>.</p>
228<p><tt>PROC</tt> must return a value.</p></dd>
229<dt class="definition"><strong>procedure:</strong> (mysql-query-fold DB QUERY PROC INIT)</dt>
230<dd>
231<p>Combines <tt>mysql-query</tt> and <tt>mysql-row-fold</tt>.</p></dd>
232<dt class="definition"><strong>procedure:</strong> (mysql-query-for-each DB QUERY PROC)</dt>
233<dd>
234<p>Combines <tt>mysql-query</tt> and <tt>mysql-row-for-each</tt>.</p></dd>
235<dt class="definition"><strong>procedure:</strong> (mysql-query-map DB QUERY PROC)</dt>
236<dd>
237<p>Combines <tt>mysql-query</tt> and <tt>mysql-row-map</tt>.</p></dd>
238<dt class="definition"><strong>procedure:</strong> (mysql-foreach-row DB BODY)</dt>
239<dd>
240<p>Synonym for <code>mysql-row-for-each</code>.</p></dd>
241<dt class="definition"><strong>procedure:</strong> (mysql-query-foreach DB QUERY BODY)</dt>
242<dd>
243<p>Synonym for <code>mysql-query-for-each</code>.</p></dd></div>
244<div class="subsection">
245<h4>Field Access</h4>
246<div class="subsubsection">
247<h5>Field Set Access</h5>
248<dt class="definition"><strong>procedure:</strong> (mysql-fetch-field-items DB MYSQL-FIELD-GETTER ...)</dt>
249<dd>
250<p>Returns a list of lists of MYSQL_FIELD entry values, a list for each <tt>MYSQL-FIELD-GETTER</tt>.</p>
251<p><tt>MYSQL-FIELD-GETTER</tt> is a <code>mysql-field-*</code> reference function.</p></dd>
252<dt class="definition"><strong>procedure:</strong> (*mysql-fetch-field-item MYSQL-FIELD-POINTER FIELD-COUNT MYSQL-FIELD-GETTER)</dt>
253<dd>
254<p>Returns a <tt>FIELD-COUNT</tt> length list of MYSQL_FIELD entry (object).</p>
255<p><tt>MYSQL-FIELD-POINTER</tt> is a pointer to a vector of MYSQL_FIELD. <tt>FIELD-COUNT</tt> is the number of entries in the vector. <tt>MYSQL-FIELD-GETTER</tt> is a <code>mysql-field-*</code> reference function.</p></dd></div>
256<div class="subsubsection">
257<h5>Field Entry Access</h5>
258<dt class="definition"><strong>procedure:</strong> (mysql-field-org-name MYSQL-FIELD-POINTER)</dt>
259<dd>
260<p>Returns <code>string</code>.</p></dd>
261<dt class="definition"><strong>procedure:</strong> (mysql-field-name MYSQL-FIELD-POINTER)</dt>
262<dd>
263<p>Returns <code>string</code>.</p></dd>
264<dt class="definition"><strong>procedure:</strong> (mysql-field-org-table MYSQL-FIELD-POINTER)</dt>
265<dd>
266<p>Returns <code>string</code>.</p></dd>
267<dt class="definition"><strong>procedure:</strong> (mysql-field-org-table MYSQL-FIELD-POINTER)</dt>
268<dd>
269<p>Returns <code>string</code>.</p></dd>
270<dt class="definition"><strong>procedure:</strong> (mysql-field-db MYSQL-FIELD-POINTER)</dt>
271<dd>
272<p>Returns <code>pointer -&gt; ?</code>.</p></dd>
273<dt class="definition"><strong>procedure:</strong> (mysql-field-catalog MYSQL-FIELD-POINTER)</dt>
274<dd>
275<p>Returns <code>pointer -&gt; ?</code>.</p></dd>
276<dt class="definition"><strong>procedure:</strong> (mysql-field-def MYSQL-FIELD-POINTER)</dt>
277<dd>
278<p>Returns <code>pointer -&gt; ?</code>.</p></dd>
279<dt class="definition"><strong>procedure:</strong> (mysql-field-table MYSQL-FIELD-POINTER)</dt>
280<dd>
281<p>Returns <code>pointer -&gt; ?</code>.</p></dd>
282<dt class="definition"><strong>procedure:</strong> (mysql-field-type MYSQL-FIELD-POINTER)</dt>
283<dd>
284<p>Returns <code>enum enum_field_types value</code>.</p></dd>
285<dt class="definition"><strong>procedure:</strong> (mysql-field-charsetnr MYSQL-FIELD-POINTER)</dt>
286<dd>
287<p>Returns <code>unsigned-integer</code>.</p></dd>
288<dt class="definition"><strong>procedure:</strong> (mysql-field-flags MYSQL-FIELD-POINTER)</dt>
289<dd>
290<p>Returns <code>unsigned-integer</code>.</p></dd>
291<dt class="definition"><strong>procedure:</strong> (mysql-field-decimals MYSQL-FIELD-POINTER)</dt>
292<dd>
293<p>Returns <code>unsigned-integer</code>.</p></dd>
294<dt class="definition"><strong>procedure:</strong> (mysql-field-def-length MYSQL-FIELD-POINTER)</dt>
295<dd>
296<p>Returns <code>unsigned-integer</code>.</p></dd>
297<dt class="definition"><strong>procedure:</strong> (mysql-field-catalog-length MYSQL-FIELD-POINTER)</dt>
298<dd>
299<p>Returns <code>unsigned-integer</code>.</p></dd>
300<dt class="definition"><strong>procedure:</strong> (mysql-field-db-length MYSQL-FIELD-POINTER)</dt>
301<dd>
302<p>Returns <code>unsigned-integer</code>.</p></dd>
303<dt class="definition"><strong>procedure:</strong> (mysql-field-org-table-length MYSQL-FIELD-POINTER)</dt>
304<dd>
305<p>Returns <code>unsigned-integer</code>.</p></dd>
306<dt class="definition"><strong>procedure:</strong> (mysql-field-table-length MYSQL-FIELD-POINTER)</dt>
307<dd>
308<p>Returns <code>unsigned-integer</code>.</p></dd>
309<dt class="definition"><strong>procedure:</strong> (mysql-field-org-name-length MYSQL-FIELD-POINTER)</dt>
310<dd>
311<p>Returns <code>unsigned-integer</code>.</p></dd>
312<dt class="definition"><strong>procedure:</strong> (mysql-field-name-length MYSQL-FIELD-POINTER)</dt>
313<dd>
314<p>Returns <code>unsigned-integer</code>.</p></dd>
315<dt class="definition"><strong>procedure:</strong> (mysql-field-max-length MYSQL-FIELD-POINTER)</dt>
316<dd>
317<p>Returns <code>unsigned-integer</code>.</p></dd>
318<dt class="definition"><strong>procedure:</strong> (mysql-field-length MYSQL-FIELD-POINTER)</dt>
319<dd>
320<p>Returns <code>unsigned-integer</code>.</p></dd></div></div>
321<div class="subsection">
322<h4>Enumeration Values</h4><table class="symbol-table">enum enum_mysql_set_option
323<tr>
324<td class="symbol">mysql-option-multi-statements-on</td>
325<td></td></tr>
326<tr>
327<td class="symbol">mysql-option-multi-statements-off</td>
328<td></td></tr></table><table class="symbol-table">enum mysql_option
329<tr>
330<td class="symbol">mysql-opt-connect-timeout</td>
331<td></td></tr>
332<tr>
333<td class="symbol">mysql-opt-compress</td>
334<td></td></tr>
335<tr>
336<td class="symbol">mysql-opt-named-pipe</td>
337<td></td></tr>
338<tr>
339<td class="symbol">mysql-init-command</td>
340<td></td></tr>
341<tr>
342<td class="symbol">mysql-read-default-file</td>
343<td></td></tr>
344<tr>
345<td class="symbol">mysql-read-default-group</td>
346<td></td></tr>
347<tr>
348<td class="symbol">mysql-set-charset-dir</td>
349<td></td></tr>
350<tr>
351<td class="symbol">mysql-set-charset-name</td>
352<td></td></tr>
353<tr>
354<td class="symbol">mysql-opt-local-infile</td>
355<td></td></tr>
356<tr>
357<td class="symbol">mysql-opt-protocol</td>
358<td></td></tr>
359<tr>
360<td class="symbol">mysql-shared-memory-base-name</td>
361<td></td></tr>
362<tr>
363<td class="symbol">mysql-opt-read-timeout</td>
364<td></td></tr>
365<tr>
366<td class="symbol">mysql-opt-write-timeout</td>
367<td></td></tr>
368<tr>
369<td class="symbol">mysql-opt-use-result</td>
370<td></td></tr>
371<tr>
372<td class="symbol">mysql-opt-use-remote-connection</td>
373<td></td></tr>
374<tr>
375<td class="symbol">mysql-opt-use-embedded-connection</td>
376<td></td></tr>
377<tr>
378<td class="symbol">mysql-opt-guess-connection</td>
379<td></td></tr>
380<tr>
381<td class="symbol">mysql-set-client-ip</td>
382<td></td></tr>
383<tr>
384<td class="symbol">mysql-secure-auth</td>
385<td></td></tr>
386<tr>
387<td class="symbol">mysql-report-data-truncation</td>
388<td></td></tr></table><table class="symbol-table">enum enum_field_types
389<tr>
390<td class="symbol">mysql-type-decimal</td>
391<td></td></tr>
392<tr>
393<td class="symbol">mysql-type-tiny</td>
394<td></td></tr>
395<tr>
396<td class="symbol">mysql-type-short</td>
397<td></td></tr>
398<tr>
399<td class="symbol">mysql-type-long</td>
400<td></td></tr>
401<tr>
402<td class="symbol">mysql-type-float</td>
403<td></td></tr>
404<tr>
405<td class="symbol">mysql-type-double</td>
406<td></td></tr>
407<tr>
408<td class="symbol">mysql-type-null</td>
409<td></td></tr>
410<tr>
411<td class="symbol">mysql-type-timestamp</td>
412<td></td></tr>
413<tr>
414<td class="symbol">mysql-type-longlong</td>
415<td></td></tr>
416<tr>
417<td class="symbol">mysql-type-int24</td>
418<td></td></tr>
419<tr>
420<td class="symbol">mysql-type-date</td>
421<td></td></tr>
422<tr>
423<td class="symbol">mysql-type-time</td>
424<td></td></tr>
425<tr>
426<td class="symbol">mysql-type-datetime</td>
427<td></td></tr>
428<tr>
429<td class="symbol">mysql-type-year</td>
430<td></td></tr>
431<tr>
432<td class="symbol">mysql-type-newdate</td>
433<td></td></tr>
434<tr>
435<td class="symbol">mysql-type-varchar</td>
436<td></td></tr>
437<tr>
438<td class="symbol">mysql-type-bit</td>
439<td></td></tr>
440<tr>
441<td class="symbol">mysql-type-newdecimal</td>
442<td></td></tr>
443<tr>
444<td class="symbol">mysql-type-enum</td>
445<td></td></tr>
446<tr>
447<td class="symbol">mysql-type-set</td>
448<td></td></tr>
449<tr>
450<td class="symbol">mysql-type-tiny-blob</td>
451<td></td></tr>
452<tr>
453<td class="symbol">mysql-type-medium-blob</td>
454<td></td></tr>
455<tr>
456<td class="symbol">mysql-type-long-blob</td>
457<td></td></tr>
458<tr>
459<td class="symbol">mysql-type-blob</td>
460<td></td></tr>
461<tr>
462<td class="symbol">mysql-type-var-string</td>
463<td></td></tr>
464<tr>
465<td class="symbol">mysql-type-string</td>
466<td></td></tr>
467<tr>
468<td class="symbol">mysql-type-geometry</td>
469<td></td></tr></table></div></div>
470<div class="section">
471<h3>Examples</h3>
472<div id="examples">
473<p>A bulky usage might look like:
474<pre>(use mysql)
475
476(let [(db (mysql-connect host: &quot;mysql.example.com&quot; user: &quot;example&quot;
477                         passwd: &quot;secret&quot;))]
478  (if (not db) (error (conc &quot;MySQL connection failed: &quot; (mysql-error db))))
479  (mysql-query db &quot;SHOW DATABASES&quot;)
480  (do [(row (mysql-fetch-row db) (mysql-fetch-row db))]
481      [(not row)]
482    (display (conc &quot;Row &quot; idx &quot;: &quot; (row &quot;Database&quot;) &quot;\n&quot;)))
483  (mysql-close db))</pre></p>
484<p>A slightly more compact version that does the same thing:
485<pre>(use mysql)
486
487(let [(db (mysql-connect host: &quot;mysql.example.com&quot; user: &quot;example&quot;
488                         passwd: &quot;secret&quot;))]
489  (if (not db) (error (conc &quot;MySQL connection failed: &quot; (mysql-error db))))
490  (mysql-query-foreach db &quot;SHOW DATABASES&quot;
491                       (lambda (row idx)
492                         (display (conc &quot;Row &quot; idx &quot;: &quot; (row &quot;Database&quot;) &quot;\n&quot;))))
493  (mysql-close db))</pre></p></div></div>
494<div class="section">
495<h3>Data Type Conversion</h3>
496<p>All MySQL result data (except NULL) are returned as Scheme strings. The NULL value is represented by <tt>#f</tt>. Booleans are expressed as Scheme strings <tt>&quot;1&quot;</tt> and <tt>&quot;0&quot;</tt>. All remaining types, including numeric types and strings are returned as Scheme strings.</p></div>
497<div class="section">
498<h3>Bugs</h3>
499<p>This is alpha quality software. Only very basic functionality has been tested so far. I look forward to providing a more complete test suite (and probably a slew of bugfixes) with the next release.</p>
500<p>Does not return native types.</p>
501<p><tt>mysql-escape-string</tt> is broken when it's used for binary data.</p>
502<p>Not yet sure how to handle <tt>unsigned long *</tt> for <tt>foreign-mysql-fetch-lengths</tt>.</p>
503<p><tt>foreign-mysql-get-charset-info</tt> isn't yet supported.</p>
504<p>I need to nail down the supported libmysqlclient versions. Right now there are some functions I've put off because they may or may not be supported in my target range. We'll see, soon...</p></div>
505<div class="section">
506<h3>License</h3>
507<pre id="license">Copyright (c) 2005 Toby Butzon.
508
509Permission is hereby granted, free of charge, to any person obtaining a
510copy of this software and associated documentation files (the &quot;Software&quot;),
511to deal in the Software without restriction, including without limitation
512the rights to use, copy, modify, merge, publish, distribute, sublicense,
513and/or sell copies of the Software, and to permit persons to whom the
514Software is furnished to do so, subject to the following conditions:
515
516The above copyright notice and this permission notice shall be included
517in all copies or substantial portions of the Software.
518
519THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
520IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
521FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
522THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
523OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
524ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
525OTHER DEALINGS IN THE SOFTWARE.</pre></div></div>
526<div id="footer">
527<hr /><a href="index.html">&lt; Egg index</a>
528<div id="revision-history">$Revision$ $Date$</div>&nbsp;</div></body></html>
Note: See TracBrowser for help on using the repository browser.