diff --git a/LICENSE b/LICENSE
index 7689f30..d6a9326 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,214 +1,340 @@
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
-LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
-CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-1. DEFINITIONS
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-"Contribution" means:
+ Preamble
-a) in the case of the initial Contributor, the initial code and
-documentation distributed under this Agreement, and
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
-b) in the case of each subsequent Contributor:
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
-i) changes to the Program, and
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
-ii) additions to the Program;
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
-where such changes and/or additions to the Program originate from and are
-distributed by that particular Contributor. A Contribution 'originates' from
-a Contributor if it was added to the Program by such Contributor itself or
-anyone acting on such Contributor's behalf. Contributions do not include
-additions to the Program which: (i) are separate modules of software
-distributed in conjunction with the Program under their own license
-agreement, and (ii) are not derivative works of the Program.
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
-"Contributor" means any person or entity that distributes the Program.
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
-"Licensed Patents" mean patent claims licensable by a Contributor which are
-necessarily infringed by the use or sale of its Contribution alone or when
-combined with the Program.
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
-"Program" means the Contributions distributed in accordance with this
-Agreement.
+ The precise terms and conditions for copying, distribution and
+modification follow.
-"Recipient" means anyone who receives the Program under this Agreement,
-including all Contributors.
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-2. GRANT OF RIGHTS
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
-a) Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide, royalty-free copyright license to
-reproduce, prepare derivative works of, publicly display, publicly perform,
-distribute and sublicense the Contribution of such Contributor, if any, and
-such derivative works, in source code and object code form.
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
-b) Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide, royalty-free patent license under
-Licensed Patents to make, use, sell, offer to sell, import and otherwise
-transfer the Contribution of such Contributor, if any, in source code and
-object code form. This patent license shall apply to the combination of the
-Contribution and the Program if, at the time the Contribution is added by the
-Contributor, such addition of the Contribution causes such combination to be
-covered by the Licensed Patents. The patent license shall not apply to any
-other combinations which include the Contribution. No hardware per se is
-licensed hereunder.
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
-c) Recipient understands that although each Contributor grants the licenses
-to its Contributions set forth herein, no assurances are provided by any
-Contributor that the Program does not infringe the patent or other
-intellectual property rights of any other entity. Each Contributor disclaims
-any liability to Recipient for claims brought by any other entity based on
-infringement of intellectual property rights or otherwise. As a condition to
-exercising the rights and licenses granted hereunder, each Recipient hereby
-assumes sole responsibility to secure any other intellectual property rights
-needed, if any. For example, if a third party patent license is required to
-allow Recipient to distribute the Program, it is Recipient's responsibility
-to acquire that license before distributing the Program.
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
-d) Each Contributor represents that to its knowledge it has sufficient
-copyright rights in its Contribution, if any, to grant the copyright license
-set forth in this Agreement.
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
-3. REQUIREMENTS
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
-A Contributor may choose to distribute the Program in object code form under
-its own license agreement, provided that:
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
-a) it complies with the terms and conditions of this Agreement; and
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
-b) its license agreement:
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
-i) effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose;
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
-ii) effectively excludes on behalf of all Contributors all liability for
-damages, including direct, indirect, special, incidental and consequential
-damages, such as lost profits;
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
-iii) states that any provisions which differ from this Agreement are offered
-by that Contributor alone and not by any other party; and
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
-iv) states that source code for the Program is available from such
-Contributor, and informs licensees how to obtain it in a reasonable manner on
-or through a medium customarily used for software exchange.
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
-When the Program is made available in source code form:
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
-a) it must be made available under this Agreement; and
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
-b) a copy of this Agreement must be included with each copy of the Program.
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
-Contributors may not remove or alter any copyright notices contained within
-the Program.
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
-Each Contributor must identify itself as the originator of its Contribution,
-if any, in a manner that reasonably allows subsequent Recipients to identify
-the originator of the Contribution.
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
-4. COMMERCIAL DISTRIBUTION
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
-Commercial distributors of software may accept certain responsibilities with
-respect to end users, business partners and the like. While this license is
-intended to facilitate the commercial use of the Program, the Contributor who
-includes the Program in a commercial product offering should do so in a
-manner which does not create potential liability for other Contributors.
-Therefore, if a Contributor includes the Program in a commercial product
-offering, such Contributor ("Commercial Contributor") hereby agrees to defend
-and indemnify every other Contributor ("Indemnified Contributor") against any
-losses, damages and costs (collectively "Losses") arising from claims,
-lawsuits and other legal actions brought by a third party against the
-Indemnified Contributor to the extent caused by the acts or omissions of such
-Commercial Contributor in connection with its distribution of the Program in
-a commercial product offering. The obligations in this section do not apply
-to any claims or Losses relating to any actual or alleged intellectual
-property infringement. In order to qualify, an Indemnified Contributor must:
-a) promptly notify the Commercial Contributor in writing of such claim, and
-b) allow the Commercial Contributor tocontrol, and cooperate with the
-Commercial Contributor in, the defense and any related settlement
-negotiations. The Indemnified Contributor may participate in any such claim
-at its own expense.
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
-For example, a Contributor might include the Program in a commercial product
-offering, Product X. That Contributor is then a Commercial Contributor. If
-that Commercial Contributor then makes performance claims, or offers
-warranties related to Product X, those performance claims and warranties are
-such Commercial Contributor's responsibility alone. Under this section, the
-Commercial Contributor would have to defend claims against the other
-Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
-5. NO WARRANTY
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
-AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
-EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
-CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
-PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
-appropriateness of using and distributing the Program and assumes all risks
-associated with its exercise of rights under this Agreement , including but
-not limited to the risks and costs of program errors, compliance with
-applicable laws, damage to or loss of data, programs or equipment, and
-unavailability or interruption of operations.
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
-6. DISCLAIMER OF LIABILITY
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
-CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
-LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGES.
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
-7. GENERAL
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public 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.
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of the
-remainder of the terms of this Agreement, and without further action by the
-parties hereto, such provision shall be reformed to the minimum extent
-necessary to make such provision valid and enforceable.
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
-If Recipient institutes patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Program itself
-(excluding combinations of the Program with other software or hardware)
-infringes such Recipient's patent(s), then such Recipient's rights granted
-under Section 2(b) shall terminate as of the date such litigation is filed.
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
-All Recipient's rights under this Agreement shall terminate if it fails to
-comply with any of the material terms or conditions of this Agreement and
-does not cure such failure in a reasonable period of time after becoming
-aware of such noncompliance. If all Recipient's rights under this Agreement
-terminate, Recipient agrees to cease use and distribution of the Program as
-soon as reasonably practicable. However, Recipient's obligations under this
-Agreement and any licenses granted by Recipient relating to the Program shall
-continue and survive.
+ NO WARRANTY
-Everyone is permitted to copy and distribute copies of this Agreement, but in
-order to avoid inconsistency the Agreement is copyrighted and may only be
-modified in the following manner. The Agreement Steward reserves the right to
-publish new versions (including revisions) of this Agreement from time to
-time. No one other than the Agreement Steward has the right to modify this
-Agreement. The Eclipse Foundation is the initial Agreement Steward. The
-Eclipse Foundation may assign the responsibility to serve as the Agreement
-Steward to a suitable separate entity. Each new version of the Agreement will
-be given a distinguishing version number. The Program (including
-Contributions) may always be distributed subject to the version of the
-Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly
-stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
-licenses to the intellectual property of any Contributor under this
-Agreement, whether expressly, by implication, estoppel or otherwise. All
-rights in the Program not expressly granted under this Agreement are
-reserved.
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {description}
+ Copyright (C) {year} {fullname}
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ {signature of Ty Coon}, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
-This Agreement is governed by the laws of the State of New York and the
-intellectual property laws of the United States of America. No party to this
-Agreement will bring a legal action under this Agreement more than one year
-after the cause of action arose. Each party waives its rights to a jury trial
-in any resulting litigation.
diff --git a/README.md b/README.md
index 983f0dd..30555e0 100644
--- a/README.md
+++ b/README.md
@@ -1,120 +1,5 @@
# mw3
+MW3 is intended to be a re-implementation of MicroWorld in ClojureScript: the third reimplementation, although not nearly as dramatic as the shift from C to Clojure!
-## Development
-
-Open a terminal and type `lein repl` to start a Clojure REPL
-(interactive prompt).
-
-In the REPL, type
-
-```clojure
-(run)
-(browser-repl)
-```
-
-The call to `(run)` starts the Figwheel server at port 3449, which takes care of
-live reloading ClojureScript code and CSS. Figwheel's server will also act as
-your app server, so requests are correctly forwarded to the http-handler you
-define.
-
-Running `(browser-repl)` starts the Weasel REPL server, and drops you into a
-ClojureScript REPL. Evaluating expressions here will only work once you've
-loaded the page, so the browser can connect to Weasel.
-
-When you see the line `Successfully compiled "resources/public/app.js" in 21.36
-seconds.`, you're ready to go. Browse to `http://localhost:3449` and enjoy.
-
-**Attention: It is not needed to run `lein figwheel` separately. Instead we
-launch Figwheel directly from the REPL**
-
-## Trying it out
-
-If all is well you now have a browser window saying 'Hello Chestnut',
-and a REPL prompt that looks like `cljs.user=>`.
-
-Open `resources/public/css/style.css` and change some styling of the
-H1 element. Notice how it's updated instantly in the browser.
-
-Open `src/cljs/mw3/core.cljs`, and change `dom/h1` to
-`dom/h2`. As soon as you save the file, your browser is updated.
-
-In the REPL, type
-
-```
-(ns mw3.core)
-(swap! app-state assoc :text "Interactivity FTW")
-```
-
-Notice again how the browser updates.
-
-### Lighttable
-
-Lighttable provides a tighter integration for live coding with an inline
-browser-tab. Rather than evaluating cljs on the command line with weasel repl,
-evaluate code and preview pages inside Lighttable.
-
-Steps: After running `(run)`, open a browser tab in Lighttable. Open a cljs file
-from within a project, go to the end of an s-expression and hit Cmd-ENT.
-Lighttable will ask you which client to connect. Click 'Connect a client' and
-select 'Browser'. Browse to [http://localhost:3449](http://localhost:3449)
-
-View LT's console to see a Chrome js console.
-
-Hereafter, you can save a file and see changes or evaluate cljs code (without saving a file). Note that running a weasel server is not required to evaluate code in Lighttable.
-
-### Emacs/Cider
-
-Start a repl in the context of your project with `M-x cider-jack-in`.
-
-Switch to repl-buffer with `C-c C-z` and start web and figwheel servers with
-`(run)`, and weasel server with `(browser-repl`). Load
-[http://localhost:3449](http://localhost:3449) on an external browser, which
-connects to weasel, and start evaluating cljs inside Cider.
-
-To run the Clojurescript tests, do
-
-```
-lein doo phantom
-```
-
-## Deploying to Heroku
-
-This assumes you have a
-[Heroku account](https://signup.heroku.com/dc), have installed the
-[Heroku toolbelt](https://toolbelt.heroku.com/), and have done a
-`heroku login` before.
-
-``` sh
-git init
-git add -A
-git commit
-heroku create
-git push heroku master:master
-heroku open
-```
-
-## Running with Foreman
-
-Heroku uses [Foreman](http://ddollar.github.io/foreman/) to run your
-app, which uses the `Procfile` in your repository to figure out which
-server command to run. Heroku also compiles and runs your code with a
-Leiningen "production" profile, instead of "dev". To locally simulate
-what Heroku does you can do:
-
-``` sh
-lein with-profile -dev,+production uberjar && foreman start
-```
-
-Now your app is running at
-[http://localhost:5000](http://localhost:5000) in production mode.
-## License
-
-Copyright © 2016 FIXME
-
-Distributed under the Eclipse Public License either version 1.0 or (at
-your option) any later version.
-
-## Chestnut
-
-Created with [Chestnut](http://plexus.github.io/chestnut/) 0.9.1 (3a675806).
+It is a very long way from finished and does not even nearly work yet. Come back in a month or two.
diff --git a/code_of_conduct.md b/code_of_conduct.md
deleted file mode 100644
index 8108287..0000000
--- a/code_of_conduct.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Contributor Code of Conduct
-
-As contributors and maintainers of this project, we pledge to respect
-all people who contribute through reporting issues, posting feature
-requests, updating documentation, submitting pull requests or patches,
-and other activities.
-
-We are committed to making participation in this project a
-harassment-free experience for everyone, regardless of level of
-experience, gender, gender identity and expression, sexual
-orientation, disability, personal appearance, body size, race, age, or
-religion.
-
-Examples of unacceptable behavior by participants include the use of
-sexual language or imagery, derogatory comments or personal attacks,
-trolling, public or private harassment, insults, or other
-unprofessional conduct.
-
-Project maintainers have the right and responsibility to remove, edit,
-or reject comments, commits, code, wiki edits, issues, and other
-contributions that are not aligned to this Code of Conduct. Project
-maintainers who do not follow the Code of Conduct may be removed from
-the project team.
-
-Instances of abusive, harassing, or otherwise unacceptable behavior
-may be reported by opening an issue or contacting one or more of the
-project maintainers.
-
-This Code of Conduct is adapted from the
-[Contributor Covenant](http:contributor-covenant.org), version 1.0.0,
-available at
-[http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
diff --git a/project.clj b/project.clj
index 20b55eb..5b7e69a 100644
--- a/project.clj
+++ b/project.clj
@@ -4,13 +4,14 @@
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
- :dependencies [[org.clojure/clojure "1.8.0-RC5"]
+ :dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/clojurescript "1.7.228" :scope "provided"]
[ring "1.4.0"]
[ring/ring-defaults "0.1.5"]
[bk/ring-gzip "0.1.1"]
[ring.middleware.logger "0.5.0"]
[compojure "1.4.0"]
+ [prismatic/dommy "1.1.0"] ;; probably don't need both this and om in the longer term
[org.omcljs/om "1.0.0-alpha28"]
[environ "1.0.2"]]
diff --git a/resources/public/css/phone.css b/resources/public/css/phone.css
new file mode 100644
index 0000000..fd3cac6
--- /dev/null
+++ b/resources/public/css/phone.css
@@ -0,0 +1,150 @@
+body {
+ font-family: sans-serif;
+ font-size: larger;
+}
+
+/* ids generally in document order */
+/* Overall container div, holds all content of page. Yes, I know it shouldn't have fixed width */
+#main-container{
+ clear: both;
+ width:100%;
+}
+
+/* footer of the document */
+#footer {
+ display: none;
+}
+
+#header {
+ width:100%;
+ padding: 0.25em 5% 0.25em 5%;
+ background-color: black;
+ color: white;
+}
+
+#header h1 {
+ background-color: transparent;
+}
+
+#nav{
+ margin: 0;
+ padding: 0;
+ position: fixed;
+ z-index: 149;
+ background:rgba(40,40,40,0.8);
+}
+
+#nav:hover #nav-menu {
+ display: inline;
+}
+
+#nav-icon {
+ padding: 0.25em;
+}
+
+#nav-menu {
+ display: none;
+}
+
+#nav ul li {
+ padding: 0;
+ margin: 0;
+ display: inline;
+}
+
+#nav ul li a {
+ color: white;
+ text-decoration: none;
+ font-weight: bold;
+ padding: 0.1em 0.75em;
+ margin: 0;
+}
+#nav ul li.active a { background: silver;}
+li.nav-item a:hover { background: rgb( 240, 240, 240) }
+li.nav-item a:active { background: gray; color: white; }
+
+.error {
+ background-color: red;
+ color: white;
+}
+
+/* there isn't enough room on a phone display for optional elements, and
+ load/save isn't going to work on a phone anyway */
+.nav-optional {
+ display: none;
+}
+
+.widget {
+ margin: 0;
+ padding: 0.25em 1em;
+ border: thin solid white;
+}
+
+.world {
+ font-size: 8pt;
+}
+
+div.error {
+ width: 100%;
+}
+
+form {
+ width: 100%;
+ background-color: silver;
+ border: thin solid silver;
+}
+
+h1 {
+ font-size: 300%;
+}
+
+h1, h2, h3, h4, h5 {
+ background-color: black;
+ color: white;
+}
+
+p, pre, ul, ol, dl, h1, h2, h3, h4, h5 {
+ width: 100%;
+ padding: 0.25em 1em;
+}
+
+input {
+ background-color: white;
+}
+
+input.submit {
+ background-color: green;
+}
+
+input.required:after {
+ content: " \*";
+ color: red;
+}
+
+label {
+ min-width: 35%;
+}
+
+label, input {
+ padding: 0.25em 1em;
+ margin: 0 0.5em;
+}
+
+label {
+ border-right: thin solid gray;
+}
+
+menu li {
+ display: inline;
+}
+
+menu li::before {
+ content: "|| ";
+}
+
+
+div.world table, div.world tr td {
+ padding: 0;
+ margin: 0;
+ border: none;
+}
diff --git a/resources/public/css/standard.css b/resources/public/css/standard.css
new file mode 100644
index 0000000..a08f588
--- /dev/null
+++ b/resources/public/css/standard.css
@@ -0,0 +1,150 @@
+body {
+ font-family: sans-serif;
+}
+
+/* ids generally in document order */
+/* Overall container div, holds all content of page. Yes, I know it shouldn't have fixed width */
+#main-container{
+ clear: both;
+/* width:100%; */
+}
+
+/* footer of the document */
+#footer {
+ clear: both;
+ font-size: smaller;
+ padding: 0 2em;
+ text-align: center;
+ color:white;
+ background:rgba(196,196,196,0.95);
+ width: 100%;
+ margin: 0;
+ bottom:0;
+ position:fixed;
+ z-index:150;
+ _position:absolute;
+ _top:expression(eval(document.documentElement.scrollTop+
+ (document.documentElement.clientHeight-this.offsetHeight)));
+}
+
+#header {
+ width:100%;
+ padding: 2em 0 0.25em 0;
+ background-color: black;
+ color: white;
+}
+
+#tab-bar {
+ margin: 0;
+ width: 100%;
+ padding: 0.25em 10%;
+ position: fixed;
+ z-index: 149;
+ color: white;
+ background: rgba(40,40,40,0.8);
+}
+
+#tab-bar li {
+ padding: 0;
+ margin: 0;
+ display: inline;
+ color: white;
+ background: rgba(40,40,40,0.8);
+}
+
+#tab-bar li a {
+ color: white;
+ text-decoration: none;
+ font-weight: bold;
+ padding: 0.1em 0.75em;
+ margin: 0;
+}
+
+#tab-bar li.active a { background: silver;}
+li.tab a:hover { background: rgb( 240, 240, 240) }
+li.tab a:active { background: gray; color: white; }
+
+.error {
+ background-color: red;
+ color: white;
+}
+
+.widget {
+ background-color: silver;
+ border: thin solid white;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.world {
+ font-size: 8pt;
+}
+
+div.error {
+ width: 100%;
+}
+
+form {
+ border: thin solid silver;
+}
+
+h1 {
+ font-size: 300%;
+ width: 100%;
+ margin: 0;
+ padding: 1em 10% 0.25em 10%;
+ text-decoration: none;
+}
+
+h1, h2, h3, h4, h5 {
+ background-color: black;
+ color: white;
+}
+
+div.content, form, p, pre, ul, ol, dl, menu, h2, h3, h4, h5 {
+ padding: 0.25em 10%;
+}
+
+input {
+ background-color: white;
+}
+
+input.submit {
+ background-color: green;
+}
+
+input.required:after {
+ content: " \*";
+ color: red;
+}
+
+label {
+ width: 30em;
+ min-width: 20em;
+ border-right: thin solid gray;
+}
+
+menu li {
+ display: inline;
+}
+
+menu li::before {
+ content: "|| ";
+}
+
+div.world table, div.world table tr td {
+ padding: 0;
+ margin: 0;
+ border-collapse: collapse;
+ border: none;
+}
+
+table.music-ruled tr:nth-child(odd) {
+ background-color: silver;
+}
+
+th, td {
+ text-align: left;
+ padding: 0 0.25em;
+}
+
diff --git a/resources/public/css/states.css b/resources/public/css/states.css
new file mode 100644
index 0000000..466c708
--- /dev/null
+++ b/resources/public/css/states.css
@@ -0,0 +1,52 @@
+td.waste {
+ background-color: gray;
+}
+
+td.water {
+ background-color: blue;
+}
+
+td.pasture, td.grassland, td.meadow {
+ background-color: lime;
+}
+
+td.crop {
+ background-color: yellow;
+}
+
+td.camp, td.house, td.inn, td.market {
+ background-color: gray;
+}
+
+td.ploughland {
+ background-color: brown;
+}
+
+td.heath {
+ background-color: chartreuse;
+}
+
+td.scrub {
+ background-color: lime;
+}
+
+td.forest {
+ background-color: forestgreen;
+}
+
+td.climax {
+ background-color: olive;
+}
+
+td.fire {
+ background-color: orange;
+}
+
+td.error, td.plague {
+ background-color: red;
+}
+
+td.snow, td.ice {
+ background-color: white;
+}
+
diff --git a/resources/public/css/tablet.css b/resources/public/css/tablet.css
new file mode 100644
index 0000000..f34e510
--- /dev/null
+++ b/resources/public/css/tablet.css
@@ -0,0 +1,166 @@
+body {
+ font-family: sans-serif;
+}
+
+/* ids generally in document order */
+/* Overall container div, holds all content of page. Yes, I know it shouldn't have fixed width */
+#main-container{
+ clear: both;
+ width:100%;
+}
+
+/* footer of the document */
+#footer {
+ clear: both;
+ font-size: smaller;
+ padding: 0 2em;
+ text-align: center;
+ color:white;
+ background:rgba(196,196,196,0.95);
+ width: 100%;
+ margin: 0;
+ bottom:0;
+ position:fixed;
+ z-index:150;
+ _position:absolute;
+ _top:expression(eval(document.documentElement.scrollTop+
+ (document.documentElement.clientHeight-this.offsetHeight)));
+}
+
+#footer:hover #credits {
+ font-size: normal;
+}
+
+#header {
+ width:100%;
+ padding: 0.25em 5% 0.25em 5%;
+ background-color: black;
+ color: white;
+}
+
+#header h1 {
+ background-color: transparent;
+}
+
+#nav{
+ margin: 0;
+ padding: 0;
+ position: fixed;
+ z-index: 149;
+ background:rgba(40,40,40,0.8);
+}
+
+#nav:hover #nav-menu {
+ display: inline;
+}
+
+#nav-icon {
+ padding: 0.25em;
+}
+
+#nav-menu {
+ display: none;
+}
+
+#nav ul li {
+ padding: 0;
+ margin: 0;
+ display: inline;
+}
+
+#nav ul li a {
+ color: white;
+ text-decoration: none;
+ font-weight: bold;
+ padding: 0.1em 0.75em;
+ margin: 0;
+}
+#nav ul li.active a { background: silver;}
+li.nav-item a:hover { background: rgb( 240, 240, 240) }
+li.nav-item a:active { background: gray; color: white; }
+
+.error {
+ background-color: red;
+ color: white;
+}
+
+/* there isn't enough room on a tablet display for optional elements, and
+ load/save isn't going to work on a tablet anyway */
+.nav-optional {
+ display: none;
+}
+
+.widget {
+ margin: 0;
+ padding: 0.25em 1em;
+ border: thin solid white;
+}
+
+.world {
+ font-size: 8pt;
+}
+
+div.error {
+ width: 100%;
+}
+
+form {
+ width: 100%;
+ background-color: silver;
+ border: thin solid silver;
+}
+
+h1 {
+ font-size: 300%;
+}
+
+h1, h2, h3, h4, h5 {
+ background-color: black;
+ color: white;
+}
+
+p, pre, ul, ol, dl, h1, h2, h3, h4, h5 {
+ width: 100%;
+ padding: 0.25em 1em;
+}
+
+input {
+ background-color: white;
+}
+
+input.submit {
+ background-color: green;
+}
+
+input.required:after {
+ content: " \*";
+ color: red;
+}
+
+label {
+ min-width: 35%;
+}
+
+label, input {
+ padding: 0.25em 1em;
+ margin: 0 0.5em;
+}
+
+label {
+ border-right: thin solid gray;
+}
+
+menu li {
+ display: inline;
+}
+
+menu li::before {
+ content: "|| ";
+}
+
+
+div.world table, div.world tr td {
+ padding: 0;
+ margin: 0;
+ border: none;
+}
diff --git a/resources/public/img/clojure-icon.gif b/resources/public/img/clojure-icon.gif
new file mode 100644
index 0000000..84eee16
Binary files /dev/null and b/resources/public/img/clojure-icon.gif differ
diff --git a/resources/public/img/earth-space-strip.jpg b/resources/public/img/earth-space-strip.jpg
new file mode 100644
index 0000000..6f54286
Binary files /dev/null and b/resources/public/img/earth-space-strip.jpg differ
diff --git a/resources/public/img/heightmaps/great_britain_and_ireland_med.png b/resources/public/img/heightmaps/great_britain_and_ireland_med.png
new file mode 100644
index 0000000..558e79b
Binary files /dev/null and b/resources/public/img/heightmaps/great_britain_and_ireland_med.png differ
diff --git a/resources/public/img/heightmaps/great_britain_and_ireland_original.png b/resources/public/img/heightmaps/great_britain_and_ireland_original.png
new file mode 100644
index 0000000..a3dd035
Binary files /dev/null and b/resources/public/img/heightmaps/great_britain_and_ireland_original.png differ
diff --git a/resources/public/img/heightmaps/great_britain_and_ireland_small.png b/resources/public/img/heightmaps/great_britain_and_ireland_small.png
new file mode 100644
index 0000000..c6777f7
Binary files /dev/null and b/resources/public/img/heightmaps/great_britain_and_ireland_small.png differ
diff --git a/resources/public/img/heightmaps/isle_of_man.png b/resources/public/img/heightmaps/isle_of_man.png
new file mode 100644
index 0000000..7de05e9
Binary files /dev/null and b/resources/public/img/heightmaps/isle_of_man.png differ
diff --git a/resources/public/img/heightmaps/life_gosperglidergun.png b/resources/public/img/heightmaps/life_gosperglidergun.png
new file mode 100644
index 0000000..c11c56c
Binary files /dev/null and b/resources/public/img/heightmaps/life_gosperglidergun.png differ
diff --git a/resources/public/img/heightmaps/small_hill.png b/resources/public/img/heightmaps/small_hill.png
new file mode 100644
index 0000000..8be86e4
Binary files /dev/null and b/resources/public/img/heightmaps/small_hill.png differ
diff --git a/resources/public/img/heightmaps/test.heightmap.png b/resources/public/img/heightmaps/test.heightmap.png
new file mode 100644
index 0000000..0065257
Binary files /dev/null and b/resources/public/img/heightmaps/test.heightmap.png differ
diff --git a/resources/public/img/screenshot.png b/resources/public/img/screenshot.png
new file mode 100644
index 0000000..f28b1e6
Binary files /dev/null and b/resources/public/img/screenshot.png differ
diff --git a/resources/public/img/screenshot_med.png b/resources/public/img/screenshot_med.png
new file mode 100644
index 0000000..baa65c1
Binary files /dev/null and b/resources/public/img/screenshot_med.png differ
diff --git a/resources/public/img/threelines.png b/resources/public/img/threelines.png
new file mode 100644
index 0000000..f26babb
Binary files /dev/null and b/resources/public/img/threelines.png differ
diff --git a/resources/public/img/tiles/abandoned.png b/resources/public/img/tiles/abandoned.png
new file mode 100644
index 0000000..1492e7e
Binary files /dev/null and b/resources/public/img/tiles/abandoned.png differ
diff --git a/resources/public/img/tiles/black.png b/resources/public/img/tiles/black.png
new file mode 100644
index 0000000..9e48aa6
Binary files /dev/null and b/resources/public/img/tiles/black.png differ
diff --git a/resources/public/img/tiles/camp.png b/resources/public/img/tiles/camp.png
new file mode 100644
index 0000000..c2ecf86
Binary files /dev/null and b/resources/public/img/tiles/camp.png differ
diff --git a/resources/public/img/tiles/climax.png b/resources/public/img/tiles/climax.png
new file mode 100644
index 0000000..03f0273
Binary files /dev/null and b/resources/public/img/tiles/climax.png differ
diff --git a/resources/public/img/tiles/crop.png b/resources/public/img/tiles/crop.png
new file mode 100644
index 0000000..b154cdc
Binary files /dev/null and b/resources/public/img/tiles/crop.png differ
diff --git a/resources/public/img/tiles/error.png b/resources/public/img/tiles/error.png
new file mode 100644
index 0000000..f4409bc
Binary files /dev/null and b/resources/public/img/tiles/error.png differ
diff --git a/resources/public/img/tiles/fire.png b/resources/public/img/tiles/fire.png
new file mode 100644
index 0000000..e4537be
Binary files /dev/null and b/resources/public/img/tiles/fire.png differ
diff --git a/resources/public/img/tiles/forest.png b/resources/public/img/tiles/forest.png
new file mode 100644
index 0000000..0d159c4
Binary files /dev/null and b/resources/public/img/tiles/forest.png differ
diff --git a/resources/public/img/tiles/grassland.png b/resources/public/img/tiles/grassland.png
new file mode 100644
index 0000000..85296c9
Binary files /dev/null and b/resources/public/img/tiles/grassland.png differ
diff --git a/resources/public/img/tiles/heath.png b/resources/public/img/tiles/heath.png
new file mode 100644
index 0000000..eba54f5
Binary files /dev/null and b/resources/public/img/tiles/heath.png differ
diff --git a/resources/public/img/tiles/house.png b/resources/public/img/tiles/house.png
new file mode 100644
index 0000000..222e81a
Binary files /dev/null and b/resources/public/img/tiles/house.png differ
diff --git a/resources/public/img/tiles/ice.png b/resources/public/img/tiles/ice.png
new file mode 100644
index 0000000..1349ef0
Binary files /dev/null and b/resources/public/img/tiles/ice.png differ
diff --git a/resources/public/img/tiles/inn.png b/resources/public/img/tiles/inn.png
new file mode 100644
index 0000000..67cbf58
Binary files /dev/null and b/resources/public/img/tiles/inn.png differ
diff --git a/resources/public/img/tiles/market.png b/resources/public/img/tiles/market.png
new file mode 100644
index 0000000..a4f3bdb
Binary files /dev/null and b/resources/public/img/tiles/market.png differ
diff --git a/resources/public/img/tiles/meadow.png b/resources/public/img/tiles/meadow.png
new file mode 100644
index 0000000..44453f9
Binary files /dev/null and b/resources/public/img/tiles/meadow.png differ
diff --git a/resources/public/img/tiles/pasture.png b/resources/public/img/tiles/pasture.png
new file mode 100644
index 0000000..44453f9
Binary files /dev/null and b/resources/public/img/tiles/pasture.png differ
diff --git a/resources/public/img/tiles/plague.png b/resources/public/img/tiles/plague.png
new file mode 100644
index 0000000..4235d08
Binary files /dev/null and b/resources/public/img/tiles/plague.png differ
diff --git a/resources/public/img/tiles/ploughland.png b/resources/public/img/tiles/ploughland.png
new file mode 100644
index 0000000..0df26f8
Binary files /dev/null and b/resources/public/img/tiles/ploughland.png differ
diff --git a/resources/public/img/tiles/scrub.png b/resources/public/img/tiles/scrub.png
new file mode 100644
index 0000000..f4dd581
Binary files /dev/null and b/resources/public/img/tiles/scrub.png differ
diff --git a/resources/public/img/tiles/snow.png b/resources/public/img/tiles/snow.png
new file mode 100644
index 0000000..1349ef0
Binary files /dev/null and b/resources/public/img/tiles/snow.png differ
diff --git a/resources/public/img/tiles/waste.png b/resources/public/img/tiles/waste.png
new file mode 100644
index 0000000..0f6b6a4
Binary files /dev/null and b/resources/public/img/tiles/waste.png differ
diff --git a/resources/public/img/tiles/water.png b/resources/public/img/tiles/water.png
new file mode 100644
index 0000000..008b705
Binary files /dev/null and b/resources/public/img/tiles/water.png differ
diff --git a/resources/public/img/tiles/white.png b/resources/public/img/tiles/white.png
new file mode 100644
index 0000000..0012011
Binary files /dev/null and b/resources/public/img/tiles/white.png differ
diff --git a/resources/public/index.html b/resources/public/index.html
index b2f7e67..48f0d1f 100644
--- a/resources/public/index.html
+++ b/resources/public/index.html
@@ -4,9 +4,360 @@
+
+
+
+
+
Welcome to MicroWorld!
-
+
+
+ Home
+
+
+ Params
+
+
+ Rules
+
+
+ World
+
+
+ Documentation
+
+
+
+
+
+ Welcome to MicroWorld!
+
+
+
What this is about
+
+
+ MicroWorld is a rule driven cellular automaton. What does that mean? Well, it's a two dimensional world made up of squares called cells . The world develops in steps, and at each step, each cell is modified by applying the rules.
+
Go and watch it running for a few moments, then come back here.
The demonstration world is a mountain, with snow at the top and the sea at the bottom. as you watched, you probably saw the bright green of grass on the lower slopes of the mountain turn to the darker green of forest. You may have seen some forest fires break out.
+
That's all controlled by rules. You make the rules. To start Noah's flood, go to the rules page now, and add this rule at the very top:
+
+ if altitude is less than 200 then state should be water
+
+
then, go and watch the world again. What happens? You should see water spread across everywhere except the very top of the mountain. But after the flood, the waters should drain away again. Go back to rules and add this rule at the very top:
+
+ if altitude is more than 9 and state is water then state should be grassland
+
+
Now the world alternates between new and grassland . That's no good! Go back to rules and delete the rule that you first added - the one that says
+
+ if altitude is less than 200 then state should be water
+
+
And see! The world starts growing again.
+
What you can do next
+
Change some rules
+
Change some of the other rules and see what happens. Very likely, one of the first things that will happen is that you will get a message like this:
+
+ I did not understand 'if state is grassland then 1 chance in 10 state will be heath'
+
+
That means that you changed a rule in a way that the engine could no longer understand it. To find out what the engine will understand, have a look at the documentation .
+
Invent some rules of your own!
+
What happens when people come into the world? Where would they make their first camp? Would they want to be near the water, so they could fish? Would they want to be near fertile grassland, to graze their sheep and cattle?
+
Write a rule which adds some camps to the world
+
What happens to the land around a camp? Do the people burn down forest to make new grassland? Do they convert the grassland into meadow, or into crop?
+
Does growing crops reduce the soil fertility? What makes people decide that their camp is a good enough place to build a proper house?
+
Write some rules which describe this
+
How many squares of meadow or crop does it take to feed each house full of people? What happens when there are too many houses and not enough fields? Can houses catch fire? What happens to a house which is next to a fire?
+
How many houses do you need for a market place? Where would people build a harbour?
+
Change the rules completely
+
I've provided rules which use the MicroWorld cellular automaton to make a simple model of the changes to land in Europe after the ice age. But you don't have to use it like that, at all.
+
Conway's Game of Life is one of the famous uses of a cellular automaton. The rules for the Game of Life are very simple. To set up your game of life you'll need some initialisation rules, one for every cell you want to start live (we'll use black for live, and white for dead):
+
+ if x is equal to 4 and y is equal to 4 and state is new then state should be black
+
Add as many of these as you need for your starting pattern. Then add a rule, after all those:
+
+ if state is new then state should be white
+
+
I'll leave you to work out what the rules of life are for yourself, from the Wiki page I linked to.
+
CHEAT You'll find other rule sets you can explore if you go to the Parameters page .
+
+
+
+
+
+ Set your parameters
+
+
+
+
+
+
+ Edit your rules
+
+
+
+
+
+
+
+ Read the documentation
+
+
+
+
+
+ Top
+ Rule language
+ Implemented states
+ API documentation
+ For teachers
+
+
+
+ {{parser|safe}}
+
+
+
+ Top
+ Rule language
+ Implemented states
+ API documentation
+ For teachers
+
+
+
Implemented states
+
As it says in the rule language documentation, above, you can use
+ any sequence of alphanumeric characters you want as the name of a state
+ - you can call it whatever you like. However, if you use state
+ names that there aren't already tiles for, and aren't already classes
+ for in the CSS file, your states won't be displayed nicely in the
+ World display. The states for which
+ there are already tiles are:
+
+ {% for state in states %}
+
+ {{state}}
+
+
+ {% endfor %}
+
+
+
+
+
+ Top
+ Rule language
+ Implemented states
+ API documentation
+ For teachers
+
+
+
API documentation
+
+
If you're adventurous you may want to modify the MicroWorld engine
+ itself. To do that you'll need this documentation.
+
+
+
+
+
+
+ Top
+ Rule language
+ Implemented states
+ API documentation
+ For teachers
+
+
+
For teachers
+
MicroWorld was written in the hope that it would be of use for teachers,
+ particularly teachers in primary schools. The reason for attempting to write
+ a very simple rule language was that young people would be able to create
+ their own rules and rule sets.
+
+
Classroom setup
+
MicroWorld will run on a Raspberry Pi, and I plan to produce a
+ downloadable SD card image which auto-runs it. One ideal classroom setup
+ would be to have one Raspberry Pi running MicroWorld to every group of
+ two or three children.
+
MicroWorld will also run on any ordinary PC, including Windows,
+ Macintosh and Linux machines. I plan to produce a packaged installer
+ for each operating system.
+
Servers and clients
+
MicroWorld is a web-app, which means it runs in a web server and the
+ user interface is a web browser. It would be possible to arrange a
+ classroom with one copy of MicroWorld on a single server, and each child's
+ machine running MicroWorld from that single server.
+
However, many users accessing the same server at the same time may
+ lead to poor performance.
+ Check performance on your system before introducing a class to it, and if in doubt,
+ running a separate copy on each machine used by children may well be more
+ satisfactory.
+
If many users are using the same shared machine, you should make sure
+ that they don't use the 'original' or 'med' versions of the Great Britain
+ and Ireland map - both of these are big, and performance will inevitably
+ be poor.
+
+
Subject areas
+
One of my main objectives in writing MicroWorld was to create a system
+ which would be engaging for children and would enable them to see
+ computing in the context of other subject areas.
+
Geography
+
Maps of Great Britain and Ireland, and of the Isle of Man, are included
+ in the distribution; however, only the 'small' version of the map of
+ Great Britain and Ireland is really useable, the others are too big and
+ will be two slow. However, you can cut a map of your local area from the
+ larger maps if that is helpful to your class.
+
The following rulesets are of potential use in geography teaching:
+
+ basic
+ A very simple ruleset which simply establishes vegetation in the
+ landscape. Not particularly useful in itself, but a good ruleset for
+ children to use as a basis for their own projects.
+ iceage
+ illustrates ice thawing gradually. Because of inadequacies in the
+ rule language, currently the ice retreats from north to south, which is
+ of course wrong for the northern hemisphere; but the principle of
+ retreating ice, the way in which ice retreats up mountains, and the way
+ in which ecosystems establish themselves.
+ ecology
+ Attempts to model the effects of browsers and predators - represented
+ by deer and wolves, respectively - on the landscape.
+ settlement
+ illustrates human settlement appearing first on coastal promontaries
+ (e.g. kitchen-midden people), gradually spreads inland (in this model as
+ nomadic pastoralists), and forms permanent settlements where conditions
+ are favourable. This helps explore why the towns in your locality are
+ where they are. The model is obviously simplified, but produces a
+ potentially useful account of settlement in at least north-western Europe
+ from paleolithic up to at least late bronze age. Note that unless
+ your map has at least some coastal promontaries this ruleset will need
+ to be modified.
+
+
+
All of these rulesets are deliberately simple. This is so that
+ children have something to start with, but so that they can actually make
+ real, demonstrable improvements quite simply.
+
History
+
The settlement ruleset is probably the best starting point for
+ history exploration. As described above, it essentially covers only
+ pre-history; the development of the feudal system, for example, or of
+ industrialisation, are not modelled. They could be, as (more advanced)
+ class projects. Writing rules will enable discussion of why castles, or
+ mills, are positioned where they are, and what the social consequences of
+ these developments are.
+
You might also want to explore the conditions for the spread of epidemic
+ disease - such as the black death - I've provided a state for this,
+ but no rules.
+
IT/Informatics
+
Obviously, any of the rulesets but particularly the life
+ ruleset are good introduction points to informatics lessons. The rule
+ language is sufficiently simple that introducing children to writing
+ their own rules can begin almost as soon as basic literacy is
+ established.
+
In more advanced IT lessons, at the upper end of primary school or in
+ secondary schools, I would encourage you to explore modifying the engine
+ itself in your classes. Also, it would be interesting to write an
+ export program which would export MicroWorld maps to Minecraft, or
+ render them as explorable three dimensional spaces using
+ JMonkeyEngine
+ or NightMod .
+
Art and design
+
A number of projects, progressively more ambitious, are possible in
+ art and design.
+
+ The tiles I've drawn are pretty basic - again, that's
+ intentional, children can easily produce better ones. They don't have to
+ be 32x32, but they do all have to be the same size.
+ The stylesheets providing the overall look and feel of the system
+ could be modified
+ If you have an IT project to render a 3d world, you will need 3d
+ models of each of the states, instead of tiles. That might be a job for
+ Blender .
+
+
Lesson plans
+
+
+
+ Top
+ Rule language
+ Implemented states
+ API documentation
+ For teachers
+
+
+
+
+