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.46 1996/08/21 16:54:25 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 six 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

6) Two input fields for supplying a __date range__ for transactions 
   to be shown in part 5)

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\ 
        :<Btn3Down>:   here-action()

The here-action() allows you to set the focus with the mouse, here by
clicking the right 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 __limit trans.list by date__, 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.  From
version 5.7 it is also possible to set up automatic recurring
transactions, see __recurring__ under the __misc__ menu.

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

The 'category number' field lets you specify a category for this
transaction. See __categories__ for a description of the category
concept. Since category numbers are rather hard and boring to
remember, you can open the __category window__ via the __misc__ menu
and use the category list there to pick the desired category. Clicking
a category in the list inserts the selection in the 'category number'
field in the 'transaction' window.

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.

__recurring__        Enter/edit recurring transactions.

__categories__       List/create/edit categories.

: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 number)

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:recurring:


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.

:recurring:categories:

Recurring transactions

Pops up the "recurring transactions" window. This window contains a
list of the transactions that have been entered as recurring, and a
set of buttons to manipulate this set of recurring transactions.

Recurring transactions are like "ordinary" transactions, except that
they are automatically repeated with a given period. The mechanism
makes the program check at each start-up which recurring transactions
have happened since last "run"/start-up. For each such recurring
transaction, the usual "new transaction" pop-up is presented for
confirmation.

The buttons shown in the window are the following:

__new  __  enter a new recurring transaction

  edit     edit an existing recurring transaction

  delete   delete a recurring transaction

__run  __  run the recurring transactions up to some given date

  close    close the "recurring transactions" window

:new  :run  :

Enter a new recurring transaction

Pops up a window which in most respects is equal to the usual "new
transaction" window (see also __new__ transaction).

The main difference is that the "recurring transaction" window
contains two fields for specifying a "from" and a "to" account. The
"from" account should always be specified, whereas "to" account is
only specified if the transaction is to be a transfer. These account
fields are not directly editable, the accounts must be selected via
the account list in the main window. When accounts are clicked in the
account list, they are filled into the "from" and "to" fields,
alternatingly.

The account name and -number are used as identification of the
account. Therefore, this combination must be unique among
accounts (This is noted here because this requirement is introduced
with the "recurring transaction" feature). 

:run  :recurring:

Run the recurring transactions up to some given date

It is sometimes desirable to run the recurring transactions up to some
point in the future. This is possible with this function, which pops
up a dialog window requesting the date to run the recurring
transactions up to. 

Note that the use of "run" is optional. Xfinans automatically performs
a "run" up to the current date at each start-up.

:categories:misc:

Categories

This menu entry pops up the category window. The category concept is
somewhat complicated, and the description is therefore split up into 
the following parts:

    main __principles and ideas__

    __category window__ and its functions

    __category definitions__

    category-related __variables__ and support routines

:principles and ideas:category window:

Categories: the principles and ideas

The idea behind the category concept in Xfinans is to allow
transactions to be associated with a "logical" category as well as
with the "physical" account a transaction belongs to (in the usual
Xfinans "account" sense).

Categories are similar to accounts in that they (logically) contain a
set of transactions from which a balance can be calculated and
displayed. They differ from accounts in that the accounts "own"
the transactions; transactions must be entered, edited, deleted
etc. via an account, this cannot be done directly via categories. The
contents of the categories are thus derived from the contents of the
accounts.

You can define the set of categories, for instance "salary", "car
expences", "misc. expences" and whatever you would like to categorize
your transactions into. A category consists of a unique number, a
name, and a definition (more about the __category definitions__ follow).

You can then associated each transaction with a category by entering
the category number in the "category" field in the transaction pop-up
window. 

An important characteristic of categories is that they can be used to
perform additional calculation on the transactions. A few examples:

- Categories can be "linked", i.e. each transaction entered in category
  "X" can be automatically copied to categories "Y" and "Z". 
  This is useful for making "total" categories, for instance if we have
  the categories "salary" and "misc.income", then we can set up the
  category definitions to copy each transaction entered in each of
  these categories to the category "total income".

- Transactions entered in a category can be modified in arbitrary
  ways before they are actually added to the category.
  It is thus possible to e.g. split up the amount of each transaction
  (for instance in the amount before tax, to be entered in one category,
   and the tax to be entered in a separate category).

The key to these possibilities is in the __category definitions__.  A
category definition is a piece of Perl code, so some knowledge of this
extremely useful language is probably an advantage. However, basic use
of Xfinans categories should be possible given the description in this
document.

:category window:category definitions:

The category window

Contains a list of categories, some buttons, and a name input field.

The "name" field lets you enter a substring of category names;
clicking "filter" (or hitting the <enter> key) then shows the
categories whose names match the given substring in the category
list. To see all categories, clear the "name" field and click "filter"
again.

The "new" button lets you create a new category. It can also be used
to EDIT a category; just highlight the desired category in the list
before clicking "new", then the selected category will be taken as a
template. The general clue is that entering a new category with the
same number as an existing category will replace the old one.

  The "new category" window contains three input fields; "number",
  "name", and "definition". [Note about the keyboard inputfocus
  selection mechanism: in the "definition" field, multiline text is
  supported, which means that up/down arrow keys can't move the input
  focus out of this field; use the <tab> key instead]

  See __category definitions__ for a description of the syntax and
  semantics of the "definition" field's contents.

The "delete" button deletes the selected category.

The "variables" button pops up a window where various variables and
support routines can be defined, see __variables__.

The "list" and "balance" buttons call a Perl engine to perform
calculations. It may take a while before the result shows up, but if
nothing happens, then check that you have Perl installed and reachable
from your PATH.

The __variables__ affect the "list" and "balance" display, e.g. by
defining the first and last dates of transactions to be displayed.

The "list" button pops up a window displaying the transactions in the
selected category. 

The "balance" button displays the balance of all categories; three
figures are calculated for each category: the initial (opening)
balance at the "from" date (in __variables__), the closing balance at
the "to" date, and the difference between the two 
(closing - opening balance).

:category definitions:variables:

Category definitions

The Perl code in a category definition can be thought of as the body
of a procedure which is called with each transaction you enter (via an
account) in the particular category.

The transaction is accessible as "parameter" in a category definition
in form of the following Perl variables:
   $catNum  the transaction's category number. This parameter is
            somewhat redundant, since the category number is
            implicitly given by the context of the category definition.
   $date    the transaction's date. All dates in the category
            subsystem have the format yyyymmdd, independent of the
            selected date format in Xfinans.
   $transNum transaction number.
   $text    transaction text.
   $amount  transaction amount (negative if withdrawal).
   $commit  1 if the transaction is committed, 0 otherwise.

You can write any Perl code in the category definition that uses and
modifies these variables. To actually add the transaction to the
category, you can call the pre-defined procedure enter():

&enter($catNum, $date, $transNum, $text, $amount, $commit);

(note the '&' sign on procedure calls in Perl; I tend to forget it
 most of the time :-)

This call adds the transaction given by the above parameters to the
category $catNum without further processing (that is, without calling
the category definition (again)). This procedure is the
most basic building element for category definitions. 

If you don't need to modify the transaction (i.e. change any of the
above parameters that represent it) before you call enter(), then you
can use one of the more convenient procedures std_income() and
std_expense() instead; they are simple procedures without parameters,
and they simply call enter() with the parameters above:

sub std_income {
#enter the transaction without modification
    &enter($catNum, $date, $transNum, $text, $amount, $commit);
}

sub std_expense {
#change the sign of the amount, to have positive numbers in the 
#category
    &enter($catNum, $date, $transNum, $text, -$amount, $commit);
}

Thus a simple category definition can consist of a single call, e.g.:

&std_income();


Now for the more interesting possibilities. 

You can define your own "global" variables and support routines in the
__variables__ window; these variables and procedures will be
accessible in all category definitions. This is useful e.g. for
defining tax rates and procedures for calculating the tax-part of a
given amount. See __variables__ for an example.


When categories are to be "linked" together, i.e. transactions in one
category are to be copied to other categories as well, then the
enter() procedure described above is often not satisfactory. enter()
_can_ be used, as in the following example category definition (assume
this category definition is for category number 100):

#enter transaction in "this" category:
$firstCategory = 100;
&enter($firstCategory, $date, $transNum, $text, $amount, $commit);

#also enter a copy  in category 200:
$secondCategory = 200;
&enter($secondCategory, $date, $transNum, $text, $amount, $commit);


The problem is that enter() adds the "raw" transaction to category 200
without further processing; in most cases we would like to call THE
DEFINITION of category 200 with the transaction instead, so that the
transaction can be further processed at that point -- and perhaps even
be modified/distributed further to other categories, according to the
definition of category 200. To allow this, there exists another
pre-defined procedure, recursiveEnter(). It is equal to enter() except
that it calls the category definition with the transaction as
parameter instead of directly adding the transaction to the category.

&recursiveEnter($catNum, $date, $transNum, $text, $amount, $commit);

Obviously, care must be taken with recursiveEnter() to avoid infinite
recursion -- usually you will not want to call
recursiveEnter($categoryNumber, ...) from within the definition of
the category  $categoryNumber  itself!

As with enter(), there is also a simplified version of
recursiveEnter() called copy_to(). As its name indicates, it is
intended for copying the transaction to another category:

sub copy_to {
    local($catN) = @_;
    &recursiveEnter($catN, $date, $transNum, $text, $amount, $commit);
}

copy_to() takes a single parameter which is the destination category
number. As with recursiveEnter(), you will probably not want to call
copy_to($categoryNumber) from within the definition of the category 
$categoryNumber.

As an example, assume that category 100 is "salary" and that category
200 is "total income". We wish to set up a link that copies each
transaction in category 100 to category 200.

The definition of category 100 could be:

#enter the transaction in "this" category (salary)
$std_income();
$copy_to(200);

And the definition of category 200:

#enter the transaction in "this" category (total income)
$std_income();


Note that it is completely up to the category definition to decide
what to do with "incoming" transactions (i.e. transactions entered
directly by you via the accounts or indirectly via recursiveEnter() )
-- if a category definition is empty, incoming transactions are simply
ignored.

:variables:categories:

Variables

The "variables" button in the __category window__ pops up the display
of the Perl variables and routines for use in the category
definitions. The view of the variables is editable.

There are two pre-defined variables, $fromDate and $toDate, which you
can set as desired. Only transactions within this period are included
by the "list" category function. Note that all dates in the category
subsystem have the format yyyymmdd, independent of the date format
otherwise selected in Xfinans.

You can also define your own "global" variables and support routines;
these variables and procedures will be accessible in all 
__category definitions__. This is useful e.g. for defining tax rates
and procedures for calculating the tax-part of a given amount, for
instance:

#Danish sales tax rate
$danish_tax_rate = 0.25;

#function to calculate sales tax
sub the_tax_of {         # calculate the tax of parameter
  local($amount) = @_;   # use:  tax = &the_tax_of(1000);

  return $amount*$danish_tax_rate;
}

:date range:default date range:

Transaction list date range

It is possible to limit the transactions displayed in the list to
those within a given period. In order to use this feature, be sure to
select __limit trans.list by date__ on the __options__ menu.

The period (date range) is given by the two date input fields at the
bottom of the __main window__. Any of these input fields may be left
empty in which case no "from" and/or "to" date limit is set, and all
past and/or future transactions in the account will be displayed.

It is also possible to set up a __default date range__ which the
program then uses to fill in default values in the two date input
fields at each start-up.

:default date range:number of decimals:

Transaction list default date range

This entry on the __options__ menu lets you specify a default 
__date range__ which is then used to fill in default values in the two
date range input fields at the __main window__ at each program
start-up. 

A pop-up window is presented containing two input fields. You can
specify the range relative to the current date (at program startup) by
supplying the desired number of days to look back in the past and into
the future, respectively. A special value -1 means "no limit", ie. the
corresponding date input field at the main window will be left blank.

Remember to select __save options__ after changing the default date
range. The selected date range is then used next time Xfinans is
started.

:limit trans.list by date:show committed:

Limit transaction list by date

Show the transactions of the __open__ account within the period given
by the __date range__ fields in the __main window__.

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 (and future) transactions.

When you select 'limit transaction list by date', the transaction list
contains the transactions within the period given by the 
__date range__. A scrollbar enables you to navigate if the account 
contains more transactions in the selected period than the window can
hold.

If the __date range__ fields are left empty, then all transactions in
the account will be shown when 'limit transaction list by date' is
selected. 

__Detail__: The mechanism currently used for determining how many
	transactions fit in the window is rather 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

__limit trans.list by date__  Show transactions within the period
                     given by the __date range__ fields in
                     the __main window__.

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

__default date range__ Select the default transaction list __date range__.

__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:default date range:

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 at least until December 31
1996. After this date, mail will probably be forwarded to my new
address, so it should continue to work for some time.

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
Enghavevej 12 st.th.
7430 Ikast
DENMARK

:copyright-stuff:Revision history:

COPYRIGHT (C) 1995-1996 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__)
__categories__       Main page for the category concept and mechanisms
                       (__misc__)
__commit__           Commit/uncommit the selected transaction
                       (__transaction functions__)
__create__           Create a new account (__account functions__)
__default date range__ Select the default transaction list __date range__
                       (__options__)
__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__ )
__limit trans.list by date__  Show the transactions within the given  
                       __date range__ (__options__)
__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__)
__recurring__        Create/edit/delete recurring transactions (__misc__)
__search__           Search the transactions of the open account for
                       a specified substring and/or sort the transactions
                       (__misc__)
__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)
	categories        (category database)
	variables         (user defined variables and routines
                           for the category definitions)
	category_engine   (Perl category engine)
        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
   960114   5.8   Recurring transactions. Categories.
   960706   5.9   Transaction list date range limit.

: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
clear the __date range__ fields and select __limit trans.list by date__
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 before
the operation using it proceeds -- for instance when it is a start
date given for a print-out. The result is that all transactions will
be 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.

Rick Scott: Recurring transactions.

