License details for VIM Editor:

*uganda.txt*    For Vim version 7.2.  Last change: 2008 Jun 21


		  VIM REFERENCE MANUAL    by Bram Moolenaar


			*uganda* *Uganda* *copying* *copyright* *license*
SUMMARY
								*iccf* *ICCF*
Vim is Charityware.  You can use and copy it as much as you like, but you are
encouraged to make a donation for needy children in Uganda.  Please see |kcc|
below or visit the ICCF web site, available at these URLs:

	http://iccf-holland.org/
	http://www.vim.org/iccf/
	http://www.iccf.nl/

You can also sponsor the development of Vim.  Vim sponsors can vote for
features.  See |sponsor|.  The money goes to Uganda anyway.

The Open Publication License applies to the Vim documentation, see
|manual-copyright|.

=== begin of license ===

VIM LICENSE

I)  There are no restrictions on distributing unmodified copies of Vim except
    that they must include this license text.  You can also distribute
    unmodified parts of Vim, likewise unrestricted except that they must
    include this license text.  You are also allowed to include executables
    that you made from the unmodified Vim sources, plus your own usage
    examples and Vim scripts.

II) It is allowed to distribute a modified (or extended) version of Vim,
    including executables and/or source code, when the following four
    conditions are met:
    1) This license text must be included unmodified.
    2) The modified Vim must be distributed in one of the following five ways:
       a) If you make changes to Vim yourself, you must clearly describe in
	  the distribution how to contact you.  When the maintainer asks you
	  (in any way) for a copy of the modified Vim you distributed, you
	  must make your changes, including source code, available to the
	  maintainer without fee.  The maintainer reserves the right to
	  include your changes in the official version of Vim.  What the
	  maintainer will do with your changes and under what license they
	  will be distributed is negotiable.  If there has been no negotiation
	  then this license, or a later version, also applies to your changes.
	  The current maintainer is Bram Moolenaar <Bram@vim.org>.  If this
	  changes it will be announced in appropriate places (most likely
	  vim.sf.net, www.vim.org and/or comp.editors).  When it is completely
	  impossible to contact the maintainer, the obligation to send him
	  your changes ceases.  Once the maintainer has confirmed that he has
	  received your changes they will not have to be sent again.
       b) If you have received a modified Vim that was distributed as
	  mentioned under a) you are allowed to further distribute it
	  unmodified, as mentioned at I).  If you make additional changes the
	  text under a) applies to those changes.
       c) Provide all the changes, including source code, with every copy of
	  the modified Vim you distribute.  This may be done in the form of a
	  context diff.  You can choose what license to use for new code you
	  add.  The changes and their license must not restrict others from
	  making their own changes to the official version of Vim.
       d) When you have a modified Vim which includes changes as mentioned
	  under c), you can distribute it without the source code for the
	  changes if the following three conditions are met:
	  - The license that applies to the changes permits you to distribute
	    the changes to the Vim maintainer without fee or restriction, and
	    permits the Vim maintainer to include the changes in the official
	    version of Vim without fee or restriction.
	  - You keep the changes for at least three years after last
	    distributing the corresponding modified Vim.  When the maintainer
	    or someone who you distributed the modified Vim to asks you (in
	    any way) for the changes within this period, you must make them
	    available to him.
	  - You clearly describe in the distribution how to contact you.  This
	    contact information must remain valid for at least three years
	    after last distributing the corresponding modified Vim, or as long
	    as possible.
       e) When the GNU General Public License (GPL) applies to the changes,
	  you can distribute the modified Vim under the GNU GPL version 2 or
	  any later version.
    3) A message must be added, at least in the output of the ":version"
       command and in the intro screen, such that the user of the modified Vim
       is able to see that it was modified.  When distributing as mentioned
       under 2)e) adding the message is only required for as far as this does
       not conflict with the license used for the changes.
    4) The contact information as required under 2)a) and 2)d) must not be
       removed or changed, except that the person himself can make
       corrections.

III) If you distribute a modified version of Vim, you are encouraged to use
     the Vim license for your changes and make them available to the
     maintainer, including the source code.  The preferred way to do this is
     by e-mail or by uploading the files to a server and e-mailing the URL.
     If the number of changes is small (e.g., a modified Makefile) e-mailing a
     context diff will do.  The e-mail address to be used is
     <maintainer@vim.org>

IV)  It is not allowed to remove this license from the distribution of the Vim
     sources, parts of it or from a modified version.  You may use this
     license for previous Vim releases instead of the license that they came
     with, at your option.

=== end of license ===

Note:

- If you are happy with Vim, please express that by reading the rest of this
  file and consider helping needy children in Uganda.

- If you want to support further Vim development consider becoming a
  |sponsor|.  The money goes to Uganda anyway.

- According to Richard Stallman the Vim license is GNU GPL compatible.
  A few minor changes have been made since he checked it, but that should not
  make a difference.

- If you link Vim with a library that goes under the GNU GPL, this limits
  further distribution to the GNU GPL.  Also when you didn't actually change
  anything in Vim.

- Once a change is included that goes under the GNU GPL, this forces all
  further changes to also be made under the GNU GPL or a compatible license.

- If you distribute a modified version of Vim, you can include your name and
  contact information with the "--with-modified-by" configure argument or the
  MODIFIED_BY define.

==============================================================================
Kibaale Children's Centre		*kcc* *Kibaale*  *charity*

Kibaale Children's Centre (KCC) is located in Kibaale, a small town in the
south of Uganda, near Tanzania, in East Africa.  The area is known as Rakai
District.  The population is mostly farmers.  Although people are poor, there
is enough food.  But this district is suffering from AIDS more than any other
part of the world.  Some say that it started there.  Estimations are that 10
to 30% of the Ugandans are infected with HIV.  Because parents die, there are
many orphans.  In this district about 60,000 children have lost one or both
parents, out of a population of 350,000.  And this is still continuing.

The children need a lot of help.  The KCC is working hard to provide the needy
with food, medical care and education.  Food and medical care to keep them
healthy now, and education so that they can take care of themselves in the
future.  KCC works on a Christian base, but help is given to children of any
religion.

The key to solving the problems in this area is education.  This has been
neglected in the past years with president Idi Amin and the following civil
wars.  Now that the government is stable again, the children and parents have
to learn how to take care of themselves and how to avoid infections.  There is
also help for people who are ill and hungry, but the primary goal is to
prevent people from getting ill and to teach them how to grow healthy food.

Most of the orphans are living in an extended family.  An uncle or older
sister is taking care of them.  Because these families are big and the income
(if any) is low, a child is lucky if it gets healthy food.  Clothes, medical
care and schooling is beyond its reach.  To help these needy children, a
sponsorship program was put into place.  A child can be financially adopted.
For a few dollars a month KCC sees to it that the child gets indispensable
items, is healthy, goes to school and KCC takes care of anything else that
needs to be done for the child and the family that supports it.

Besides helping the child directly, the environment where the child grows up
needs to be improved.  KCC helps schools to improve their teaching methods.
There is a demonstration school at the centre and teacher trainings are given.
Health workers are being trained, hygiene education is carried out and
households are stimulated to build a proper latrine.  I helped setting up a
production site for cement slabs.  These are used to build a good latrine.
They are sold below cost price.

There is a small clinic at the project, which provides children and their
family with medical help.  When needed, transport to a hospital is offered.
Immunization programs are carried out and help is provided when an epidemic is
breaking out (measles and cholera have been a problem).
							*donate*
Summer 1994 to summer 1995 I spent a whole year at the centre, working as a
volunteer.  I have helped to expand the centre and worked in the area of water
and sanitation.  I learned that the help that the KCC provides really helps.
When I came back to Holland, I wanted to continue supporting KCC.  To do this
I'm raising funds and organizing the sponsorship program.  Please consider one
of these possibilities:

1.  Sponsor a child in primary school: 17 euro a month (or more).
2.  Sponsor a child in secondary school: 25 euro a month (or more).
3.  Sponsor the clinic: Any amount a month or quarter
4.  A one-time donation

Compared with other organizations that do child sponsorship the amounts are
very low.  This is because the money goes directly to the centre.  Less than
5% is used for administration.  This is possible because this is a small
organization that works with volunteers.  If you would like to sponsor a
child, you should have the intention to do this for at least one year.

How do you know that the money will be spent right?  First of all you have my
personal guarantee as the author of Vim.  I trust the people that are working
at the centre, I know them personally.  Further more, the centre is
co-sponsored and inspected by World Vision, Save the Children Fund and
International Child Care Fund.  The centre is visited about once a year to
check the progress (at our own cost).  I have visited the centre myself in
1996, 1998, 2000, 2001 and 2003.  The visit reports are on the ICCF web site.

If you have any further questions, send me e-mail: <Bram@vim.org>.

The address of the centre is:
			Kibaale Children's Centre
			p.o. box 1658
			Masaka, Uganda, East Africa

Sending money:						*iccf-donations*

Check the ICCF web site for the latest information!  See |iccf| for the URL.


USA:		The methods mentioned below can be used.
		Sending a check to the Nehemiah Group Outreach Society (NGOS)
		is no longer possible, unfortunately. We are looking for
		another way to get you an IRS tax receipt. 
		For sponsoring a child contact KCF in Canada (see below). US
		checks can be sent to them to lower banking costs.

Canada:		Contact Kibaale Children's Fund (KCF) in Surrey, Canada.  They
		take care of the Canadian sponsors for the children in
		Kibaale.  KCF forwards 100% of the money to the project in
		Uganda.  You can send them a one time donation directly.
		Please send me a note so that I know what has been donated
		because of Vim.  Ask KCF for information about sponsorship.
			Kibaale Children's Fund c/o Pacific Academy
			10238-168 Street
			Surrey, B.C. V4N 1Z4
			Canada
			Phone: 604-581-5353
		If you make a donation to Kibaale Children's Fund (KCF) you
		will receive a tax receipt which can be submitted with your
		tax return.

Holland:	Transfer to the account of "Stichting ICCF Holland" in Venlo.
		This will allow for tax deduction if you live in Holland.
			Postbank, nr. 4548774

Germany:	It is possible to make donations that allow for a tax return.
		Check the ICCF web site for the latest information:
			http://iccf-holland.org/germany.html

World:		Use a postal money order.  That should be possible from any
		country, mostly from the post office.  Use this name (which is
		in my passport): "Abraham Moolenaar".  Use Euro for the
		currency if possible.

Europe:		Use a bank transfer if possible.  Your bank should have a form
		that you can use for this.  See "Others" below for the swift
		code and IBAN number.
		Any other method should work.  Ask for information about
		sponsorship.

Credit Card:	You can use PayPal to send money with a Credit card.  This is
		the most widely used Internet based payment system.  It's
		really simple to use.  Use this link to find more info:
		    https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
		The e-mail address for sending the money to is:
		    Bram@iccf-holland.org
		For amounts above 400 Euro ($500) sending a check is
		preferred.

Others:		Transfer to one of these accounts if possible:
		    Postbank, account 4548774
				Swift code: INGB NL 2A
				IBAN: NL47 PSTB 0004 5487 74
			under the name "stichting ICCF Holland", Venlo
		    If that doesn't work:
		    Rabobank Venlo, account 3765.05.117
				Swift code: RABO NL 2U
			under the name "Bram Moolenaar", Venlo
		Otherwise, send a check in euro or US dollars to the address
		below.  Minimal amount: $70 (my bank does not accept smaller
		amounts for foreign check, sorry)

Address to send checks to:
			stichting ICCF Holland
			Bram Moolenaar
			Finsterruetihof 1
			8134 Adliswil
			Switzerland

This address is expected to be valid for a long time.

 vim:tw=78:ts=8:ft=help:norl:
