This file is not empty; it just begins with a few blank lines due to 
preprocessing:
 




 


















                               



















:Help file revision:Revision history:

Help file revision:
$Id: hyperhelp.src,v 3.35 1995/09/11 16:05:22 lupus Exp lupus $

:contents:What is Xfinans?:

Welcome to Xfinans

This is a "hypertext" document, containing __links__ to other parts of
the document. As you see, a link is one or more words between
double underscores. You can follow a link by clicking your left mouse
button at the word between the double underscores. Go ahead, try one
of the __links__ here!

Contents of this help text:

0) How to __navigate__ this hypertext thing
1) __What is Xfinans?__
2) The __functions__ of Xfinans
     2.1) The __account functions__     (the upper row of buttons)
     2.2) The __transaction functions__ (the lower row of buttons)

3) Contacting the __author__, and __copyright-stuff__
4) __Revision history__
5) __Command line options__, and __Environment variables__
6) Alphabetical __index__ of functions

Click one of the above links, or the "Next" button to move on.

:links:contents:

Yes, that's it. Now follow the __contents__ link back to the previous text.

:What is Xfinans?:main window:

1. What is Xfinans?

Xfinans is a program that is meant to provide an overview over the 
balances of your bank accounts. Its basic philosophy is that you enter
the date, a description, and the amount of each transaction you
perform, and Xfinans saves the transactions and calculates the balance 
corresponding to each transaction. 

In addition, Xfinans lets you search your transactions for some
substring, calculate interest, or plot the balances as a function of
time (plotting requires the "Gnuplot" program, however).

Click "Next" to continue.

:comment:comment:
Xfinans is originally developed with Danish titles and labels - that's
why it is still called "Xfinans" instead of "Xfinance" or something
similar. Anyway, "finance" is a somewhat pretentious name, since the
program's functionality is really rather simple and limited.

:main window:functions:

The program's main window consists of five parts, here described from
top to buttom:

1) A row of buttons for selecting, creating, and deleting accounts,
   transferring from one account to another, and leaving the program

2) A list of accounts

3) A row of buttons for creating, editing, and deleting transactions
   (and a few other functions)

4) A header describing the columns of part 5)

5) A list of the transactions in the currently selected account

The following sections describe each of the functions of Xfinans.

Click "next" to move on.

:functions:account functions:

2. The functions of Xfinans

First a few general things to note about Xfinans:

- where floating point numbers are entered, you may use either
  '.' or ',' as decimal point.

- transactions contain either a positive or a negative amount. The
  sign indicates whether a transaction is a deposit or a withdrawal.

- from release 5.3, you can choose between two methods for moving the
  input focus between input fields. Either by moving the mouse
  pointer (the default), or controlled from the keyboard
  (e.g. with arrow/tab/return keys). See __input focus__ for details.

Continue with
       __account functions__ (follow link or click "Next")
       __transaction functions__ 

:input focus:Environment variables:

Input focus.

From release 5.3, you can choose between two methods for moving the
input focus between input fields:

1) By moving the mouse pointer
2) By pressing selected keys on the keyboard

The default is 1). You can select method 2) by setting the environment
variable XFINANSFOCUS to "keyboard" (see also __Environment variables__).

To define the keybindings used with the keyboard focus method, edit the
XFinans application defaults file. The following actions can be bound
to events:
	next-action()      Move focus to the next field
	prev-action()      Move focus to the previous field
	here-action()      Move focus to this field (i.e. the field in
                           which the event happens)
	confirm-action()   Confirm the operation, usually equivalent
                           to clicking an "OK" button.

The default bindings are the following:

XFinans*Text.Translations: #override \ 
        <Key>Tab:  next-action() \n\ 
        <Key>Down: next-action() \n\ 
        <Key>Up:   prev-action() \n\ 
        <Key>Return:   confirm-action() \n\ 
        <Key>KP_Enter: confirm-action() \n\ 
        :<Btn2Down>:   here-action()

The here-action() allows you to set the focus with the mouse, here by
clicking the middle mouse button in the desired input field, even
when keyboard focus is selected.

:Detail:contents:

The "__Detail__:" subsections contain minor points that are less
important in a first reading.

Click "Back" to return to your previous text.

:account functions:transaction functions:

2.1. The account functions 

You should see the following buttons at the top of your Xfinans main
window:

__open__     one of the existing accounts listed in the account list.

__create__   a new account.

__delete__   the selected account. 

__transfer__ an amount from one account to another.

__quit__     Xfinans.

:open:create:

Open

Open one of the existing accounts listed in the account list, i.e.
display the transactions and balance of the account.

First select the desired account by pointing and clicking in the
account list. Then click 'Open'.

You may also open an account simply by double-clicking it in
the account list.

The transactions of the opened account are displayed in the transaction
list. For each transaction is shown the date, a describing text, the
amount (positive or negative), and the balance of the account after
the transaction. Other fields are displayed if selected on the
__options__ menu.

:this is a comment:this is a comment:
__Detail__: By default, Xfinans shows only the N most recent transactions of
	the account, where N is the number of transactions that will
	fit in the window. See the description of the button __misc__,
	and its sub-entry __show all transactions__, for how to change
	this behavior. 

:create:delete:

Create

Create a new account.

Fill in the three fields in the pop-up window: 'File name', 'Name', and
'Account no'.

The 'file name' field names the file that will contain the
transactions of the new account. You can choose file names as you
like, but I suggest that you DON'T postfix them with a number, like
"file.1", "file.2" etc., since such file names are used for temporary
files by the plotting function.

The 'account number' may contain arbitrary characters - it needs not be
an integer.

Click 'Ok' or press return to complete the operation.

__Detail__: If an account in the account list is selected when 'Create' is
	activated, then the new account will be inserted in the list at
	the position just before the selected one. 
	If no account is selected, then the new account is inserted
	as the last in the list.


:selected:contents:

To "select" a transaction or an account, single-click the desired 
item in the transaction- or account list.

Click 'back' to return to the previous text.

:delete:transfer:

Delete

Delete the __selected__ account. 

It may be confusing that the main window contains two 'Delete' buttons
- but remember that the upper buttons concern ACCOUNTS, whereas the
lower buttons concern TRANSACTIONS.

Click the account you wish to delete. Then click the 'delete' button.

Note that it is the SELECTED (i.e. highlighted) account in the account
list that is deleted - not the OPEN account. These need not be the same.

__Detail__: Deleting an account affects the account list only. It does not
	involve a "physical" deletion of the transaction file. This
	may be considered a safety feature :-)

:transfer:quit:

Transfer

Transfer an amount from one account to another.

The invocation of this function is somewhat unusual:

Click the account to transfer FROM
Click the account to transfer TO
Click the 'Transfer' button

A transfer window pops up. Fill in the 'date' field - for convenience,
you may use the 'Today' button to fill in the current date, and the
'+'/'-' buttons to increase/decrease the date. The '+M'/'-M' buttons
increase/decrease the date by one month.

The 'transaction number' field is preset with a new transaction number
which you can modify as desired. 

In most cases you will not want to write anything in the 'text' field.
An appropriate text is generated automatically.

Fill in the 'amount' field. In most cases, you will write the amount
without sign, since it is then withdrawn from the "FROM" account and
deposited on the "TO" account.

Click 'Ok' or press return to complete the operation.

A transfer operation results in two independent "physical"
transactions: the withdrawal and the deposit. This means that if you
later edit or delete, say, the withdrawal transaction, then the
corresponding deposit is NOT automatically updated.

__Detail__: If you select a transaction (by clicking on it in the
	 transaction list) before activating 'Transfer', then the
	 selected transaction is used as a template for the new
	 transactions. 


:quit:account functions:

Quit

Exit from Xfinans.

:transaction functions:author:

2.2. The transaction functions

You should see the following buttons somewhere in the middle of your
Xfinans main window:

__new__     Enter a new transaction in the open account.

__edit__    Edit the selected transaction.

__delete __ Delete the selected transaction.

__commit__  Commit/uncommit the selected transaction.

__misc__    Activates a pop-up menu with various extra functions

__options__ Activates a configuration pop-up menu 

__help__    Pops up this window.

:new:edit:

New

Enter a new transaction in the __open__ account.

Pops up a transaction window. 

Fill in the 'date' field - for convenience, you may use the 'Today'
button to fill in the current date, and the '+'/'-' buttons to
increase/decrease the date. 

With each transaction is associated a repeat period - which defaults
to one month. The 'incr'/'decr' buttons increase/decrease the date by
this repeat period. The length of the repeat period is given in the
'by' field. The unit (day, week, month etc.) is selected on the 'unit'
menu. Note that the repeat period doesn't imply that transactions are
repeated automatically. It is thought as help when you need to enter
e.g. periodical payments: You only have to set the period once, and
then click "new (transaction)" -> "incr" -> "ok" the desired number of
times. Or you can select an existing payment, and click 
"new (transaction)" -> "incr" -> "ok" to enter the following payment.

The 'transaction number' field is preset with a new transaction number
which you can modify as desired. 

In the 'text' field, you can enter a description/comment.

In the 'amount' field, prefix the amount with "-" if the transaction
is a withdrawal. You can also set the sign of the transaction with the
'income'/'payment' buttons.

Click 'Ok' or press return to complete the operation.

The 'clear all' button clears the three input fields.

__Detail__: If you have __selected__ a transaction before 
            activating 'new', then the selected transaction is used as
            a template for the new transactions. However, the 
	    transaction number is NOT copied from the selected
	    transaction. A new number is generated instead.

:edit:delete :

Edit

Edit the __selected__ transaction.

First select the desired transaction by clicking it in the transaction
list, then click 'edit'.

Alternatively, you can double-click a transaction to edit it.

A pop-up window equal to the one used by '__new__' is displayed. See __new__
for further description.


:delete :commit:

Delete

Delete the __selected__ transaction.

First select the desired transaction by clicking it in the transaction
list, then click 'delete'.

:commit:misc:

Commit

Commit/uncommit the __selected__ transaction.

First select the desired transaction by clicking it in the transaction
list, then click 'commit'.

Each transaction has associated a "committed" flag. When you enter a
__new__ transaction, it is not yet committed. This is done with
'commit'.

The committed scheme allows you to maintain two running balances for
each account: One for your private bookkeeping and one for the
transactions as registered by your bank.

The idea is that you can enter your transactions in the sequence you
perform them, and then 'commit' each transaction as your bank confirms
it. The function __show committed__ at the __misc__ menu shows the
balance calculated from the committed transactions.

Clicking 'commit' on a committed transaction "uncommits" the
transaction.

:misc:options:

Misc

Activates a pop-up menu with the following entries:

__print__            Print the transactions of the open account.

__search__           Search the transactions of the open account for 
                     a specified substring. Also used for customized 
                     sorting of the transactions.

__interest__         Calculate interest for the open account.

__plot__             Plot the balance of the open account.

__list balances__    List the current balances of a set of accounts.

:print:search:

Print

Print the transactions of the __open__ account.

A small pop-up window requests the date of the first transaction to be
included in the printing, i.e. only newer transactions are printed. If
no date is supplied, then all transactions of the account are printed.

The printed output format is mostly identical to the selected format
of the transaction list in the main window, e.g. concerning 
__date format__ and columns displayed. However, the 
"committed balance" column is only supported with __ASCII text__ 
output.

Note that the __print command__ issued by Xfinans can be selected on
the __options__ menu, where either __PostScript__(TM) or 
__ASCII text__ output is also selected.

:search:interest:

Search

Search the transactions of the __open__ account for a specified
substring and/or sort the transactions in a user defined order.

Pops up the 'search & sort' window. It contains two input fields: one
for the search substring and one for a string that encodes the sorting
order (described below).

Xfinans first performs the search, and then sorts the matching
transactions (if any). 

You can supply the desired substring in the 'search for' field, or you
can leave it empty in which case all transactions will match the
search -- this is useful when you don't want to perform a search, but
rather want to have all the transactions sorted. The search is
case-insensitive. 

The string in the 'sorting order' field should consist of the
following characters:

a (amount)
c (commit)
d (date)
n (transaction number)
t (text)
[y (category - undocumented yet)]

or their uppercase equivalents A, C, D, N, T, Y.

The first character in the string denotes the primary sorting
criteria, the second character the secondary, and so on. Lowercase
chars means increasing order, uppercase chars means decreasing.

Example:

sorting order == tdA

sorts the transactions first alphabetically (lexically increasing),
then by increasing date (where transactions had the same text),
and finally by decreasing amount (where both text and date were
equal). 

The sorting order field may also be left blank, in which case no
sorting takes place - i.e. transactions are listed in the same order
as in the main window.


Click the 'search' button or press return to perform the search and/or
sort of the transactions in the open account.

Matching transactions are listed in the search window. Their amounts
are added together, and their sum is displayed in the 'sum' column
of the search window.

If you leave the search window open and then open another account,
then a new search and/or sort is automatically performed in the new
account.  Matching transactions replace the previous contents of the
search window.

:interest:plot:

Interest

Calculate interest for the __open__ account.

Pops up the interest window. In this window, fill in the 'from date',
'to date', and 'interest rate' fields. Then click the 'calculate'
button.

The result is shown in the interest window as a potential new
transaction. This transaction can be inserted in the account with the
'add interest' button. Otherwise, the window can be closed with the
'cancel' button.

__Detail__: I'm not a banker, and the interest calculation may not be
	correct. But it does its best to calculate the interest based
	on the number of days of each balance. 
	In order to take leap years into account, a year is defined as
	365.25 days, which is not exact. 

:plot:list balances:

Plot

Plot the balance of the __open__ account as a function of time.

Pops up the plot control window. In this window, you can fill in the
'from date' and 'to date' fields to limit the period covered by the
plot. Then click 'plot'/press return. This function requires that the
program "Gnuplot" can be called by Xfinans, since Gnuplot is used for
the actual plotting.

If all goes well, a Gnuplot window pops up with a graph. The unit of
the X-axis is the number of days counted from the supplied 'from
date'. The unit of the Y-axis is what-ever currency you use for your
transactions. 

You may add additional graphs to the same plot simply by opening
another account and clicking 'plot' in the plot control window again
(see the 'Detail' below, however).

The 'reset' button is used for clearing the plot: It removes all
graphs from the plot window and then replots the open account.

You can add a line displaying the average balance of the open account
to the plot via the __avg.__ button.

The 'close' button closes Gnuplot and the plot control window.

__Detail__: If no 'from date' is entered, then the days of the X-axis are
	counted from the date of the first transaction in the plotted
	account. For this reason, a 'from date' should always be
	entered when more than one graph is plotted in the graph
	window, otherwise the graphs may not be properly X-aligned.

:avg.:plot:

Display the average balance of the __open__ account in the plot
window. 

In order to use this feature, you MUST fill in the "from date" and 
"to date" fields in the plot control window.

__Detail__: If you click 'avg.' as the first thing after you open the
            plot control window, then the balance of the open account
	    is plotted as well as the average balance.

:list balances:misc:

List balances

List the current balances of a set of accounts.

Pops up the 'current balances' window. Initially, the list is empty.
Each time you open an account USING THE '__open__' BUTTON (not by
double-clicking), the current balance of the account is added to the
balance list. By subsequently opening the desired set of accounts,
their respective current balances are added to the list, and the sum
of the balances is shown in the 'sum' field.

You can remove a single account from the balance list simply by
clicking the account in the balance list.

The whole balance list can be cleared using the 'clear all' button.

:show all transactions:show committed:

Show all transactions

Show all the transactions of the __open__ account in the transaction
list.

When this option is NOT selected, the program tries to determine how
many transactions will fit in the window, and shows only this many of
the most recent transactions.

When you select 'show all transactions', the entire transaction list is
displayed, and a scrollbar enables you to navigate if the account
contains more transactions than the window can hold.

Selecting 'show all transactions' again returns to the previous state.

__Detail__: The mechanism currently used for determining how many
	transactions fit in the window is too primitive; among other 
	things, it depends on a hard-coded font size. The mechanism is 
        known NOT to work on at least one platform :-( and is known 
        to WORK on at least one other platform :-)

:show committed:show transaction numbers:

Show committed

Show the balance calculated from committed transactions. A transaction
is committed by clicking the __commit__ button. See '__commit__' for
further explanation of the commit concept.

'show committed' shows an additional column in the transaction list.
This new rightmost column shows the sum of the committed transactions:

                                       Amount  Balance Committed Bal.
950301 Initial balance                  200.00  200.00  200.00
950314 Salary                           300.00  500.00  500.00
950401 Check # 1, new car              -200.00  300.00
950414 Salary                           300.00  600.00  800.00

In this example, all transactions except the "Check # 1, new car" have
been committed. A "hole" in the committed balance column thus
indicates an uncommitted transaction. Once the "Check # 1, new car"
is marked as committed, the list is updated and the balances become
identical:
                                       Amount  Balance Committed Bal.
950301 Initial balance                  200.00  200.00  200.00
950314 Salary                           300.00  500.00  500.00
950401 Check # 1, new car              -200.00  300.00  300.00
950414 Salary                           300.00  600.00  600.00

:show transaction numbers:dep./widthdr. in sep. cols.:

Show transaction numbers

Display the transaction numbers in a column next to the dates in the
transaction list. 

:options:help:

Options

__show all transactions__  Show all the transactions of the open account.

__show committed__   Show the balance calculated from committed 
                     transactions.

__show transaction numbers__    Show the transaction numbers in a column
                     next to the dates.

__dep./widthdr. in sep. cols.__ Place deposits and withdrawals in
                     separate columns.

__date format__      Is in itself a dummy entry: The date format is
                     selected with one of the 'yymmdd' etc. entries
                     following it.

__print command__    Pop up a dialog window requesting the command 
                     to be used for printing.

__PostScript__       Select PostScript(TM) output.

__ASCII text__       Select ASCII output.

__number of decimals__ Select the currency output format.

__save options__     Save the current configuration as the default for
                     future sessions.

:dep./widthdr. in sep. cols.:date format:

Dep./widthdr. in sep. cols.

Place deposits and withdrawals in separate columns, instead of the
default one-column layout.

:date format:print command:

Date format

The supported date formats are shown in the __options__ menu,
following the 'date format:' entry. 

Most of these are predefined formats, but the entry __user defined__
allows you to define your own format.

The selected date format determines both the format in which dates are
displayed, and the expected format for dates entered by the user. So
you must remember to use the date format you select :-)

In most cases, Xfinans accepts malformed dates simply as dates with
strange values, like year zero. A warning message is printed about
strange date values, though, so you can correct the date later, if
required (for instance by editing the transaction).

:user defined:date format:

User defined

When this date format is selected, a dialog window pops up requesting
a format string. This is a format string as used by the the C language
"printf" function. The format string should contain three "%d" format
specifiers, for the year, month, and day, respectively. You can insert
your favorite separating characters (or spaces) between the "%d"
specifiers. Note that the format string must allow unambiguous parsing
of input dates.

The order of year, month, and day is selected on the "order" menu on
the dialog window, where you can also select either 2- or 4-digit year
format. 

:print command:PostScript:

Print command

Pop up a dialog window requesting the command to be used for printing.
The default print command is "lpr -Plp".

:PostScript:ASCII text:

PostScript

Generate PostScript(TM) output with the __print__ feature.

You may want to specify the name of your PostScript printer as part of
the __print command__ when selecting PostScript output.

:ASCII text:number of decimals:

ASCII text

Generate ASCII text output with the __print__ feature. The output line
width is set to 80 characters. This output format is suitable for most
line-oriented printers.

You may want to specify the name of your line printer as part of the
__print command__ when selecting  ASCII text output.

:number of decimals:save options:

Number of decimals

Pops up a dialog window where you can specify the desired number of
decimals on currency amounts.

:save options:options:

Save options

Saves the current configuration in the file "xfinans.cnf". The
configuration is loaded automatically in future Xfinans sessions
initiated in the same working directory.

:help:transaction functions:

Help

Pops up the help window, displaying this text.

Hypertext structure enables you to __navigate__ in the help text.

:author:copyright-stuff:

3. Contacting the author

Xfinans is written by Niels C. Larsen (lupus@iesd.auc.dk).

__credits__

I would like to hear from the users of Xfinans. Comments and suggestions 
are welcome; or just say "hi" if you find the program useful.

Also tell me if you are having trouble with compiling or running the
program - I will then try to improve its portability, but give no promise
for success!

The above Internet e-mail address is valid until June, 1996.

If you have access to the World Wide Web, then you can check out the
Xfinans homepage which contains the most recent info about new
releases etc.:
               http://www.iesd.auc.dk/~lupus/xfinans.html

You may also write to me using paper mail, my address is then:

Niels C. Larsen
Hedevej 161
9800 Hjorring
DENMARK

:copyright-stuff:Revision history:

COPYRIGHT (C) 1995 Niels C. Larsen (__author__)

    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., 675 Mass Ave, Cambridge, MA 02139, USA.

The full text of the GNU General Public License is included in the file
__GNU_GPL__.

:GNU_GPL:copyright-stuff:

		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                          675 Mass Ave, Cambridge, MA 02139, USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  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 Library General Public License instead.)  You can apply it to
your programs, too.

  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.

  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.

  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.

  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.

  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.

  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.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  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".

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.

  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.

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.

  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:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    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.

    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.)

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.

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.

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.

  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:

    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,

    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,

    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.)

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.

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.

  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.

  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.

  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.

  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.

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.

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.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  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.

  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.

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.

  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.

			    NO WARRANTY

  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

	Appendix: 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.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) 19yy  <name of author>

    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., 675 Mass Ave, Cambridge, MA 02139, 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) 19yy 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 Library General
Public License instead of this License.

__contents__

:index:contents:

6. Index of functions

__ASCII text__       Select ASCII text output for printing (__options__)
__commit__           Commit/uncommit the selected transaction
                       (__transaction functions__)
__create__           Create a new account (__account functions__)
__delete__           Delete the selected account (__account functions__)
__delete __          Delete the selected transaction
                       (__transaction functions__)
__edit__             Edit the selected transaction
                       (__transaction functions__)
__help__             Pop up this window (__transaction functions__)
__interest__         Calculate interest for the open account (__misc__ )
__list balances__    List the current balances of a set of accounts
                       (__misc__)
__misc__             Activates a pop-up menu with various extra functions
                       (__transaction functions__)
__new__              Enter a new transaction to the open account
                       (__transaction functions__)
__number of decimals__ Configure the currency output format (__options__)
__open__             Open one of the accounts shown in the account list
                       (__account functions__)
__options__          Activates a configuration pop-up menu 
                       (__transaction functions__)
__plot__             Plot the balance of the open account (__misc__)
__PostScript__       Select PostScript(TM) output for printing.
                       (__options__)
__print__            Print the transactions of the open account (__misc__)
__print command__    Select the command used for printing (__options__)
__quit__             Exit Xfinans (__account functions__)
__search__           Search the transactions of the open account for
                       a specified substring and/or sort the transactions
                       (__misc__)
__show all transactions__  Show all the transactions of the open account
                       (__options__)
__show committed__   Show the balance calculated from committed transactions
                       (__options__)
__show transaction numbers__ Display transaction numbers in the
                       transaction list (__options__)
__transfer__         Transfer an amount from one account to another
                       (__account functions__)

:file not found:necessary support files:

File not found. Check the working directory of Xfinans; are the
__necessary support files__ present? Otherwise copy them from 
the distribution.

You can set the Xfinans working directory by using 
__Environment variables__

:necessary support files:contents:

The following more or less necessary support files should be present
in the Xfinans working directory:

        hyperhelp         (help file - this text)
	hyperhelp.index
        finans.bkd        (account data base)
        xfin.ps           (PostScript-header file)
        check.acc         (demo account)
        giro.acc          (    ---     )
        savings.acc       (    ---     )

If some of these are missing, you can copy them form the distribution.

The demo accounts can be deleted once you __create__ your own account
files.

:max accounts:contents:

Internal limit reached. You can change the #define MAX_KONTI definition in
'xfinans.h' and recompile, if you need more accounts.

:can't create:contents:

The transaction file cannot be created. Check the filename and permissions
on the working directory.

:can't update:contents:

The transaction file cannot be updated. Check the permissions
on Xfinans's working directory.

:can't write:contents:

Cannot write file. Check the permissions on the working directory.

:can't plot:plot:

This account cannot be plotted in the current version. Only "ordinary"
accounts can plotted.

:no gnuplot:plot:

The plot functions depends on the program "Gnuplot". Check your PATH if
Gnuplot is installed but still refuses to work.

:max transactions:contents:

This account has reached the internal limit of number of transactions
per account. You can carry on, since most functions (but not all) will
still work correctly, and the program will not break down. However,
you should consider creating a new account, e.g. with the same name
and account number as the current, but with new file under a different
file name, and add future transactions to this file.

You could also increase the internal limit, which is the 

in "xfinans.h", and recompile. But the internal data structures and
algorithms are not very efficient for long transaction lists anyway.

:bad date:new:

The date is invalid. Be sure to enter dates in the date format
selected on the __options__ menu.

:no PS header:print:

The PostScript header file 'xfin.ps' not found. Check that the file
exists in the working directory, and is readable. Copy the file from
the Xfinans distribution if required.

For a list of files that should be present in the Xfinans working
directory, see __necessary support files__.

:do select:contents:

This operation requires that you __open__ an account first.

:can't print:print:

This account cannot be printed in the current version. Only "ordinary"
accounts can printed.

:navigate:home:

There are various ways to navigate in the hypertext:

1) Follow a link by clicking your left mouse button between a
   pair of double underscores

2) Use the __home__, __back__, and __next__ buttons

:home:back:

The 'home' button takes you to the "root" node of the hypertext, which
is the "Welcome to Xfinans" page also containing a table of contents.

:back:next:

The 'back' button takes you to the previous page you visisted, if any.

The function is based on a stack of pages. Each time you jump to a new
page by following a link or by clicking __next__ or __home__, the page
you leave is pushed onto this stack.

The 'back' function pops and jumps to the top element.

:next:contents:

Many pages are linked together with a "next"-link which you can follow
by pressing the 'next' button. The label next to the 'next' button :-)
indicates where you go if you press 'next'.

:Revision history:Command line options:

4. Revision history

__Program revisions__

__Help file revision__

:Program revisions:Revision history:

Some highlights from the evolution of Xfinans:

   931231   1.1   Initial version.
   940522   2.4   Redesign of the main window, now built with "panes"
   940607   2.6   First support for PostScript output
   940615   2.8   Search-function 
   940801   3.0   First help window; contains plain text
   940822   3.1   Printer name selectable at run-time
		  Improved PostScript layout
   941105   3.3   "Show current balances" added
   950101   3.4   Error/warning/help messages shown in a pop-up window
   950103   3.5   Plot via Gnuplot
   950228   4.0   The 'misc' pop-up menu added
   950311   4.2   First public release
   950316   4.3   Bug fixes, first announced public release
   950331   4.5   Hypertext-help
   950414   4.6   Double-click a transaction to edit it; environment
                  variable XFINANSDIR sets the working directory;
                  transfer works "correctly", also when given a text.
   950429   4.7   Average balance can be displayed on plots
   950529   4.9   Commit support now enabled in the official release.
                  Options menu for selecting date format etc.
   950609   5.1   Header line naming the columns of the transaction list
                  User defined date format
                  Selectable currency format (number of decimals)
   950705   5.3   4 digit years in the native date format.
   		  Repeat-period on transactions. Transaction numbers.
		  Keyboard controlable input focus
   950912   5.6   New transactions are now entered in the list according
                  to date (increasing), amount (decreasing), and text
                  (lexically increasing).
                  Compile option for signed transactions in two-column mode.
                  Sorting function and header line added to the search-window.

:Command line options:Environment variables:

Command line options

Xfinans understands the standard X Toolkit options. 
No application-specific options are used.

:Environment variables:index:

Environment variables

XFINANSDIR    The directory where the Xfinans data-files are kept.
              If XFINANSDIR isn't set, Xfinans assumes that they are
              found in it's current working directory.
              For a list of files that should be present in XFINANSDIR
              or the current working directory, 
              see __necessary support files__.

XFINANSFOCUS  Selects method for moving input focus between input fields.
	      If set to "keyboard", then the input focus is controlled
              from the keyboard.
	      Otherwise (the default), the input focus follows the
              mouse pointer.
	      See __input focus__ for details.

:strange date:date format:

"Strange" date value

A user-supplied date has a strange value (such as month<1 or
month>12, day<1 or day>31). The date will be accepted by Xfinans, but
you may want to correct it anyway.

The cause of a strange date value may be that the date was entered in
another format than the one selected on the __options__ menu, see also
__date format__.

To correct a strange date in the transaction list, you may have to
select __show all transactions__ on the __options__ menu, because the
transaction could be inserted at the top of the list rather than where
it was intended (due to the strange date value). When you find the
transaction, simply __edit__ it as usual. 

In special cases, it may not be possible to correct the date -- for
instance when it's the start date for print-outs. The result is that
all transactions are printed. Bad luck. :-)

:credits:author:

Numerous people have contributed with useful suggestions for
improving Xfinans. Thanks to them.

Listed below are only the people who have contributed with actual
source code that has become part of the Xfinans distribution:

Steven Lembark:  The new generation of date handling functions.

Walter Obermiller: The new PostScript header-file.

