*uganda.txt*    For Vim version 7.3.  Last change: 2010 Aug 07


		  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 has been
co-sponsored and inspected by World Vision, Save the Children Fund and is now
under the supervision of Pacific Academy Outreach Society.  The centre is
visited about once a year to check the progress (at our own cost).  I have
visited the centre myself many times, starting in 1993.  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 Lisse.
		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", Lisse
		    If that doesn't work:
		    Rabobank Lisse, account 3765.05.117
				Swift code: RABO NL 2U
			under the name "Bram Moolenaar", Lisse
		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:
