*uganda.txt*    For Vim version 7.0.  Last change: 2006 Apr 24


		  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/

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 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.
Now that I'm back in Holland, I would like 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.  Alternatively, you
		can send a check to the Nehemiah Group Outreach Society
		(NGOS).  This will reduce banking costs and you can get an IRS
		tax receipt.  The NGOS forwards the funds directly to the
		Kibaale project in Uganda.  Checks must be made payable to
		NGOS but please note on the check "donation Kibaale".  Mail
		checks to:
			NGOS
			P.O. Box 50862
			Indianapolis, IN 45250
		Questions regarding the Nehemiah Group Outreach Society (NGOS)
		should be directed to: Ross deMerchant, Executive Director -
		r.demerchant AT sbcglobal DOT net.
		For sponsoring a child contact KCF in Canada (see below) and
		send the check to NGOS in Indianapolis.

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/affil/pal=Bram%40iccf-holland.org
		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
			Molenstraat 2
			2161 HP Lisse
			The Netherlands

This address is expected to be valid for a long time.  The address in Venlo
will not be valid after June 2006.

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