*uganda.txt*    For Vim version 8.2.  Last change: 2022 Mar 02


		  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:

	https://iccf-holland.org/
	https://www.vim.org/iccf/
	https://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
usually 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 in the past 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.  Although AIDS
is now mostly under control, the problems are 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 clinic at the project, which provides children and their family
medical help.  Since 2020 a maternity ward was added and 24/7 service is
available.  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.  Furthermore, 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.
		If you must send a check send it to our Canadian partner:
		https://www.kuwasha.net/

Canada:		Contact Kuwasha in Surrey, Canada.  They take care of the
		Canadian sponsors for the children in Kibaale.  Kuwasha
		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.  Look on their site for information about
		sponsorship: https://www.kuwasha.net/
		If you make a donation to Kuwasha you will receive a tax
		receipt which can be submitted with your tax return.

Holland:	Transfer to the account of "Stichting ICCF Holland" in
		Amersfoort.  This will allow for tax deduction if you live in
		Holland.  ING bank, IBAN: NL95 INGB 0004 5487 74

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

Europe:		Use a bank transfer if possible.  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

Others:		Transfer to this account if possible:
		    ING bank: 	IBAN: NL95 INGB 0004 5487 74
				Swift code: INGBNL2A
		    under the name "stichting ICCF Holland", Amersfoort
		Checks are not accepted.


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