mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
major updates to support sub-accounts
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@100 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
177
Docs/xacc-accwin.html
Normal file
177
Docs/xacc-accwin.html
Normal file
@@ -0,0 +1,177 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>New Account Window</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>New Account Window</h1>
|
||||
<ul>
|
||||
<li>Bank, Cash, Portfolio, Mutal Fund and Asset accounts are considered to be "assets"
|
||||
<li>Credit Card and Liability accounts are considered to be "liabilities"
|
||||
</ul>
|
||||
A "typical" chart of accounts is shown below. It is a combination of
|
||||
some typical business and personal accounts.
|
||||
<ul>
|
||||
<li>Assets
|
||||
<ul>
|
||||
<li>Cash On Hand
|
||||
<ul>
|
||||
<li>Checking account
|
||||
<li>Money Market Account
|
||||
<li>Certificate of Deposit
|
||||
</ul>
|
||||
<li>Fixed Assets
|
||||
<ul>
|
||||
<li>Furniture
|
||||
<li>Computers
|
||||
<li>Jewelry, Collectibles
|
||||
<li>Tools, Machinery
|
||||
</ul>
|
||||
<li>Investments
|
||||
<ul>
|
||||
<li>Stocks
|
||||
<li>Bonds
|
||||
<li>Mutual Funds
|
||||
<li>Real Estate
|
||||
</ul>
|
||||
</ul>
|
||||
<li>Liabilities
|
||||
<ul>
|
||||
<li>Taxes
|
||||
<ul>
|
||||
<li>Federal Income Tax
|
||||
<li>Social Security
|
||||
<li>Medicare
|
||||
<li>FUTA
|
||||
<li>State Income Tax
|
||||
</ul>
|
||||
<li>Accounts Payable
|
||||
<ul>
|
||||
<li>Mastercard
|
||||
<li>Visa
|
||||
<li>American Express
|
||||
<li>Diner's Club
|
||||
</ul>
|
||||
<li>Loans
|
||||
<ul>
|
||||
<li>Debentures
|
||||
<li>School Loan
|
||||
<li>Uncle Harry's Tide-me-over
|
||||
</ul>
|
||||
</ul>
|
||||
<li>Equity
|
||||
<ul>
|
||||
<li>Retained Earnings
|
||||
<li>Current Year Earnings
|
||||
<li>Historical Adjustments
|
||||
</ul>
|
||||
|
||||
<li>Income
|
||||
<ul>
|
||||
<li>Interest Income
|
||||
<ul>
|
||||
<li>Bank Account Interest
|
||||
<li>Certificate of Deposit
|
||||
<li>Bond Intrest
|
||||
</ul>
|
||||
<li>Dividends
|
||||
<ul>
|
||||
<li>Stock
|
||||
<li>Mutual Fund
|
||||
</ul>
|
||||
<li>Consulting
|
||||
<ul>
|
||||
<li>ABC Design
|
||||
<li>PQR Infomatics
|
||||
</ul>
|
||||
<li>Salary
|
||||
<ul>
|
||||
<li>My Day Job
|
||||
</ul>
|
||||
<li>Commissions
|
||||
<ul>
|
||||
<li>Royalties
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<li>Expenses
|
||||
<ul>
|
||||
<li>Rent and UItilties
|
||||
<ul>
|
||||
<li>Rent
|
||||
<li>Rent Late Fees
|
||||
<li>Electricity
|
||||
<li>Gas
|
||||
<li>Phone
|
||||
<li>Internet
|
||||
<li>Cable TV
|
||||
</ul>
|
||||
<li>Office Expenses
|
||||
<ul>
|
||||
<li>Accounting
|
||||
<li>Legal
|
||||
<li>Software
|
||||
<li>Postage
|
||||
<li>Bank Charges
|
||||
<li>Credit Card Charges
|
||||
<li>Toner, Paper, Paper Clips
|
||||
</ul>
|
||||
<li>Auto Expenses
|
||||
<ul>
|
||||
<li>Gas
|
||||
<li>Insurance
|
||||
<li>Repair
|
||||
<li>Rental
|
||||
</ul>
|
||||
<li>Taxes
|
||||
<ul>
|
||||
<li>Social Security
|
||||
<li>Unemployment
|
||||
<li>IRS penalties
|
||||
</ul>
|
||||
<li>Wages & Salaries
|
||||
<ul>
|
||||
<li>Consulting
|
||||
<li>Wages
|
||||
<li>Health Insurance
|
||||
</ul>
|
||||
<li>Travel
|
||||
<ul>
|
||||
<li>Air
|
||||
<li>Hotel
|
||||
<li>Meals
|
||||
<li>Auto
|
||||
</ul>
|
||||
<li>Marketing
|
||||
<ul>
|
||||
<li>Advertising
|
||||
<li>Trade Shows
|
||||
<li>Give Aways
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h2>Reports</h2>
|
||||
There are two types of reports: a "Balance Sheet" and
|
||||
a "Profit and Loss Statement".
|
||||
<p>
|
||||
A Balance Sheet shows Assets, Liabilities and Equity. The sum of
|
||||
all assets should equal the sum of Liabilites and Equity.
|
||||
<p>
|
||||
A Profit and Loss Statement shows Income and Expenses. The
|
||||
sum of all Income minus all expenses is the Profit or Loss.
|
||||
<p>
|
||||
The change in Equity from day to day (year to year) should
|
||||
equal that day's (year's) profit or loss.
|
||||
<p>
|
||||
<h2>Double Entry</h2>
|
||||
"Double Entry" referes to a method of accounting wherby every
|
||||
transaction appears in two and exactly two accounts. Double-entry
|
||||
helps eliminate accounting errors. The above overview of
|
||||
accounts and reports should now make it clear how to do double entry:
|
||||
In general, every entry into an asset or liability account should
|
||||
have a matching entry in an income or expense account.
|
||||
</body>
|
||||
</html>
|
||||
15
README
15
README
@@ -39,9 +39,16 @@ sorry, no "make install" yet.
|
||||
|
||||
Status:
|
||||
-------
|
||||
As of version 0.9k:
|
||||
As of version 0.9n:
|
||||
Bugs:
|
||||
-- Cash distributions & cash dividends on stock not handled properly
|
||||
-- Cash distributions & cash dividends on stock are confusing
|
||||
without sub-accounts. They should appear as transfers from
|
||||
an income account to the brokerage account, and should be
|
||||
visible in a gneral ledger that shows both the brokerage
|
||||
account, and the stock. However, sub-accounts are not
|
||||
yet implemented fully, and the general-ledger regsiter
|
||||
window is not implemented. Getting close, though.
|
||||
|
||||
-- tabbing between fields for mutual funds does not work correctly.
|
||||
-- should add "number of shares" to transfer popup when transferring
|
||||
from bank account to portfolio.
|
||||
@@ -49,6 +56,10 @@ Bugs:
|
||||
and then closed. Beats the heck out of me.
|
||||
|
||||
|
||||
---------------
|
||||
Started implementation of sub-accounts.
|
||||
This is needed for general ledger capabilites.
|
||||
|
||||
---------------
|
||||
Bare-bones Mutual Fund and Stock Portfolio handling
|
||||
is implemented.
|
||||
|
||||
400
src/AccWindow.c
400
src/AccWindow.c
@@ -2,6 +2,7 @@
|
||||
* AccWindow.c -- window for creating new accounts for xacc *
|
||||
* (X-Accountant) *
|
||||
* Copyright (C) 1997 Robin D. Clark *
|
||||
* Copyright (C) 1997 Linas Vepstas *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
@@ -23,6 +24,8 @@
|
||||
* Huntington Beach, CA 92648-4632 *
|
||||
\********************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
#include <Xm/DialogS.h>
|
||||
#include <Xm/Form.h>
|
||||
@@ -32,33 +35,31 @@
|
||||
#include <Xm/ToggleB.h>
|
||||
#include <Xm/PushB.h>
|
||||
#include <Xm/Text.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "Account.h"
|
||||
#include "AccountMenu.h"
|
||||
#include "Data.h"
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
|
||||
/* NOTE: notes has to be at the beginning of the struct! Order is
|
||||
* important */
|
||||
* important -- hack alert -- why is order important ?? */
|
||||
typedef struct _accwindow {
|
||||
String notes; /* The text from the "Notes" window */
|
||||
/* The account type buttons: */
|
||||
Widget dialog;
|
||||
Widget bank;
|
||||
Widget cash;
|
||||
Widget asset;
|
||||
Widget credit;
|
||||
Widget liability;
|
||||
Widget portfolio;
|
||||
Widget mutual;
|
||||
|
||||
Widget type_widgets[NUM_ACCOUNT_TYPES];
|
||||
|
||||
/* The text fields: */
|
||||
Widget name; /* The account name text field */
|
||||
Widget desc; /* Account description text field */
|
||||
|
||||
AccountMenu *accMenu;
|
||||
} AccWindow;
|
||||
|
||||
/* NOTE: notes has to be at the beginning of the struct! Order is
|
||||
* important */
|
||||
* important -- hack alert -- why is order important ?? */
|
||||
typedef struct _editaccwindow {
|
||||
String notes; /* The text from the "Notes" window */
|
||||
/* The text fields: */
|
||||
@@ -69,15 +70,15 @@ typedef struct _editaccwindow {
|
||||
} EditAccWindow;
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Data *data;
|
||||
extern Widget toplevel;
|
||||
|
||||
/** PROTOTYPES ******************************************************/
|
||||
void closeAccWindow( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void closeEditAccWindow( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void notesCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void createCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void editCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void closeAccWindow ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void closeEditAccWindow ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void notesCB ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void createCB ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void editCB ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void selectAccountCB ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
|
||||
/********************************************************************\
|
||||
* accWindow *
|
||||
@@ -90,9 +91,11 @@ void editCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void
|
||||
accWindow( Widget parent )
|
||||
{
|
||||
int i;
|
||||
Widget dialog, form, frame, rc, widget,
|
||||
label, buttonform;
|
||||
label, buttonform, group_menu, topwid;
|
||||
AccWindow *accData;
|
||||
AccountGroup *grp = topgroup; /* hack alert -- should be passed as argument */
|
||||
|
||||
setBusyCursor( parent );
|
||||
|
||||
@@ -107,9 +110,9 @@ accWindow( Widget parent )
|
||||
XmNwidth, 350,
|
||||
XmNminWidth, 350,
|
||||
XmNmaxWidth, 350,
|
||||
XmNheight, 300,
|
||||
XmNminHeight, 300,
|
||||
XmNmaxHeight, 300,
|
||||
XmNheight, 340,
|
||||
XmNminHeight, 340,
|
||||
XmNmaxHeight, 340,
|
||||
XmNresizable, FALSE,
|
||||
XmNallowShellResize, FALSE,
|
||||
/* XmNtransient, FALSE, /* allow window to be repositioned */
|
||||
@@ -162,61 +165,24 @@ accWindow( Widget parent )
|
||||
NULL );
|
||||
|
||||
/* Create the buttons */
|
||||
accData->bank =
|
||||
XtVaCreateManagedWidget( "Bank",
|
||||
for (i=0; i<NUM_ACCOUNT_TYPES; i++) {
|
||||
accData->type_widgets[i] =
|
||||
XtVaCreateManagedWidget( account_type_name[i],
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
XmNset, True,
|
||||
XmNset, False,
|
||||
NULL);
|
||||
|
||||
accData->cash =
|
||||
XtVaCreateManagedWidget( "Cash",
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
NULL);
|
||||
|
||||
accData->asset =
|
||||
XtVaCreateManagedWidget( "Asset",
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
NULL);
|
||||
|
||||
accData->credit =
|
||||
XtVaCreateManagedWidget( "Credit Card",
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
NULL);
|
||||
|
||||
accData->liability =
|
||||
XtVaCreateManagedWidget( "Liability",
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
NULL);
|
||||
|
||||
accData->portfolio =
|
||||
XtVaCreateManagedWidget( "Portfolio",
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
NULL);
|
||||
/* Portfolio account not supported yet, so grey it out: */
|
||||
/* hack alert
|
||||
XtSetSensitive( accData->portfolio, False );
|
||||
*/
|
||||
|
||||
accData->mutual =
|
||||
XtVaCreateManagedWidget( "Mutual Fund",
|
||||
xmToggleButtonWidgetClass, rc,
|
||||
XmNindicatorType, XmONE_OF_MANY,
|
||||
NULL);
|
||||
/* Mutual Fund account not supported yet, so grey it out: */
|
||||
/* hack alert
|
||||
XtSetSensitive( accData->mutual, False );
|
||||
*/
|
||||
}
|
||||
XtVaSetValues (accData->type_widgets[BANK],
|
||||
XmNset, True,
|
||||
NULL);
|
||||
|
||||
|
||||
/******************************************************************\
|
||||
* Text fields.... *
|
||||
\******************************************************************/
|
||||
|
||||
|
||||
label =
|
||||
XtVaCreateManagedWidget( "Account Name:",
|
||||
xmLabelGadgetClass, form,
|
||||
@@ -261,15 +227,43 @@ accWindow( Widget parent )
|
||||
XmNleftPosition, 35, /* 35% */
|
||||
NULL );
|
||||
|
||||
topwid = accData->desc;
|
||||
label =
|
||||
XtVaCreateManagedWidget( "Parent Account:",
|
||||
xmLabelGadgetClass, form,
|
||||
XmNtopAttachment, XmATTACH_WIDGET,
|
||||
XmNtopWidget, topwid,
|
||||
XmNtopOffset, 10,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, 35, /* 35% */
|
||||
NULL );
|
||||
|
||||
/* put up a pulldown menu to let user choose an account */
|
||||
accData->accMenu = xaccBuildAccountMenu (grp, form, "Pick One");
|
||||
group_menu = xaccGetAccountMenuWidget (accData->accMenu);
|
||||
xaccAccountMenuAddCallback (accData->accMenu, selectAccountCB, (XtPointer) accData);
|
||||
|
||||
XtVaSetValues( group_menu,
|
||||
XmNtopAttachment, XmATTACH_WIDGET,
|
||||
XmNtopWidget, accData->desc,
|
||||
XmNtopOffset, 10,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, 35, /* 35% */
|
||||
NULL );
|
||||
|
||||
XtManageChild (group_menu);
|
||||
|
||||
/******************************************************************\
|
||||
* The buttons at the bottom... *
|
||||
\******************************************************************/
|
||||
|
||||
topwid = group_menu;
|
||||
|
||||
buttonform = XtVaCreateWidget( "form",
|
||||
xmFormWidgetClass, form,
|
||||
XmNfractionBase, 5,
|
||||
XmNtopAttachment, XmATTACH_WIDGET,
|
||||
XmNtopWidget, accData->desc,
|
||||
XmNtopWidget, topwid,
|
||||
XmNtopOffset, 10,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNbottomOffset, 10,
|
||||
@@ -322,10 +316,10 @@ accWindow( Widget parent )
|
||||
XtAddCallback( widget, XmNactivateCallback,
|
||||
createCB, (XtPointer)accData );
|
||||
/* We need to do something to clean up memory too! */
|
||||
/* this is done at endo fo dialog.
|
||||
XtAddCallback( widget, XmNactivateCallback,
|
||||
destroyShellCB, (XtPointer)dialog );
|
||||
*/
|
||||
/* this is done at end of dialog.
|
||||
* XtAddCallback( widget, XmNactivateCallback,
|
||||
* destroyShellCB, (XtPointer)dialog );
|
||||
*/
|
||||
|
||||
XtManageChild(buttonform);
|
||||
|
||||
@@ -353,6 +347,7 @@ closeAccWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
AccWindow *accData = (AccWindow *)cd;
|
||||
|
||||
xaccFreeAccountMenu (accData->accMenu);
|
||||
_free(accData);
|
||||
DEBUG("close AccWindow");
|
||||
}
|
||||
@@ -548,6 +543,9 @@ void
|
||||
closeEditAccWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
EditAccWindow *editAccData = (EditAccWindow *)cd;
|
||||
|
||||
printf ("close edit acc window %x %s \n", editAccData,
|
||||
editAccData->notes);
|
||||
|
||||
_free(editAccData);
|
||||
DEBUG("close EditAccWindow");
|
||||
@@ -562,12 +560,15 @@ closeEditAccWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
* Return: none *
|
||||
* Global: toplevel - the toplevel widget *
|
||||
\********************************************************************/
|
||||
void
|
||||
static void
|
||||
notesCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
AccWindow *accData = (AccWindow *)cd;
|
||||
|
||||
/* hack alert -- isn't this a memory leak ????? */
|
||||
printf ("orig notes are %x %s \n", accData, accData->notes);
|
||||
accData->notes = textBox( toplevel, "Notes", accData->notes, True );
|
||||
printf ("new notes are %s \n", accData->notes);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -582,42 +583,18 @@ notesCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
* Global: data - the data from the datafile *
|
||||
* toplevel - the toplevel widget *
|
||||
\********************************************************************/
|
||||
void
|
||||
static void
|
||||
createCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
int i,num;
|
||||
int i, num, acc_id;
|
||||
Transaction *trans;
|
||||
Account *acc;
|
||||
Account *acc, *parent_acc;
|
||||
AccWindow *accData = (AccWindow *)cd;
|
||||
Boolean set = False;
|
||||
|
||||
String name = XmTextGetString(accData->name);
|
||||
String desc = XmTextGetString(accData->desc);
|
||||
|
||||
#ifdef SHOULDNT_BE_BROKEN_ANYMORE
|
||||
{
|
||||
/* since portfolio & mutual not fully implemented, provide warning */
|
||||
int warn = 0;
|
||||
XtVaGetValues( accData->portfolio, XmNset, &set, NULL );
|
||||
if(set) warn = 1;
|
||||
|
||||
XtVaGetValues( accData->mutual, XmNset, &set, NULL );
|
||||
if(set) warn = 1;
|
||||
|
||||
if (warn) {
|
||||
int do_it_anyway;
|
||||
do_it_anyway = verifyBox (toplevel,
|
||||
"Warning: Portfolio and Mutual Fund \n\
|
||||
Account types are not fully implemented. \n\
|
||||
You can play with the interface here, \n\
|
||||
but doing so may damage your data. \n\
|
||||
You have been warned! \n\
|
||||
Do you want to continue anyway?\n");
|
||||
if (!do_it_anyway) return;
|
||||
}
|
||||
}
|
||||
#endif /* SHOULDNT_BE_BROKEN_ANYMORE */
|
||||
|
||||
/* The account has to have a name! */
|
||||
if( strcmp( name, "" ) == 0 ) {
|
||||
errorBox (toplevel, "The account must be given a name! \n");
|
||||
@@ -631,34 +608,10 @@ Do you want to continue anyway?\n");
|
||||
acc->notes = accData->notes;
|
||||
|
||||
/* figure out account type */
|
||||
|
||||
XtVaGetValues( accData->bank, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = BANK;
|
||||
|
||||
XtVaGetValues( accData->cash, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = CASH;
|
||||
|
||||
XtVaGetValues( accData->asset, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = ASSET;
|
||||
|
||||
XtVaGetValues( accData->credit, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = CREDIT;
|
||||
|
||||
XtVaGetValues( accData->liability, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = LIABILITY;
|
||||
|
||||
XtVaGetValues( accData->portfolio, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = PORTFOLIO;
|
||||
|
||||
XtVaGetValues( accData->mutual, XmNset, &set, NULL );
|
||||
if(set)
|
||||
acc->type = MUTUAL;
|
||||
for (i=0; i<NUM_ACCOUNT_TYPES; i++) {
|
||||
XtVaGetValues( accData->type_widgets[i], XmNset, &set, NULL );
|
||||
if(set) acc->type = i;
|
||||
}
|
||||
|
||||
/* Add an opening balance transaction (as the first transaction) */
|
||||
trans = mallocTransaction();
|
||||
@@ -671,11 +624,19 @@ Do you want to continue anyway?\n");
|
||||
/* add the new transaction to the account */
|
||||
insertTransaction( acc, trans );
|
||||
|
||||
/* once the account is set up, add it to data */
|
||||
insertAccount( data, acc );
|
||||
/* once the account is set up, add it to account group
|
||||
* If the user indicated a parent acccount, make it a
|
||||
* sub account of that */
|
||||
parent_acc = xaccGetAccountMenuSelection (accData->accMenu);
|
||||
if (parent_acc) {
|
||||
xaccInsertSubAccount (parent_acc, acc);
|
||||
} else {
|
||||
insertAccount( topgroup, acc );
|
||||
}
|
||||
|
||||
/* make sure the accountlist is updated to reflect the new account */
|
||||
refreshMainWindow();
|
||||
|
||||
/* open up the account window for the user */
|
||||
regWindow( toplevel, acc );
|
||||
|
||||
@@ -684,7 +645,7 @@ Do you want to continue anyway?\n");
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* editCB -- records the edits made by in the editAccWindow *
|
||||
* editCB -- records the edits made in the editAccWindow *
|
||||
* *
|
||||
* Args: mw - the widget that called us *
|
||||
* cd - editAccData - the struct of data associated with *
|
||||
@@ -693,7 +654,7 @@ Do you want to continue anyway?\n");
|
||||
* Return: none *
|
||||
* Global: data - the data from the datafile *
|
||||
\********************************************************************/
|
||||
void
|
||||
static void
|
||||
editCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
EditAccWindow *editAccData = (EditAccWindow *)cd;
|
||||
@@ -708,7 +669,180 @@ editCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
}
|
||||
|
||||
XtFree(editAccData->account->description);
|
||||
editAccData->account->description = name;
|
||||
editAccData->account->description = desc;
|
||||
|
||||
refreshMainWindow();
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* selectAccountCB -- checks the use account selection *
|
||||
*
|
||||
* Basically, sub-account *must* be of the same category as thier
|
||||
* parent accounts, otherwise chaos will errupt. The five basic
|
||||
* categories are asset, liability, income,. expense, and equity.
|
||||
*
|
||||
* Currently, there are four subcategories for asset accounts:
|
||||
* banks, cash, stocks, bonds, mutual funds.
|
||||
*
|
||||
* *
|
||||
\********************************************************************/
|
||||
static void
|
||||
selectAccountCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
int i, but;
|
||||
Boolean set;
|
||||
AccWindow *menu = (AccWindow *) cd;
|
||||
Account *acc = (Account *) cb;
|
||||
|
||||
/* unset any pressed radio buttons in preparation for
|
||||
* setting insensitive of some of them.
|
||||
*/
|
||||
|
||||
/* figure out which radio button might be set */
|
||||
for (i=0; i<NUM_ACCOUNT_TYPES; i++) {
|
||||
XtVaGetValues( menu->type_widgets[i], XmNset, &set, NULL );
|
||||
if(set) but = i;
|
||||
}
|
||||
|
||||
if (acc) {
|
||||
switch (acc->type) {
|
||||
case BANK:
|
||||
case CASH:
|
||||
case ASSET:
|
||||
case PORTFOLIO:
|
||||
case MUTUAL:
|
||||
XtSetSensitive (menu->type_widgets[BANK], True);
|
||||
XtSetSensitive (menu->type_widgets[CASH], True);
|
||||
XtSetSensitive (menu->type_widgets[ASSET], True);
|
||||
XtSetSensitive (menu->type_widgets[PORTFOLIO], True);
|
||||
XtSetSensitive (menu->type_widgets[MUTUAL], True);
|
||||
XtSetSensitive (menu->type_widgets[LIABILITY], False);
|
||||
XtSetSensitive (menu->type_widgets[CREDIT], False);
|
||||
XtSetSensitive (menu->type_widgets[INCOME], False);
|
||||
XtSetSensitive (menu->type_widgets[EXPENSE], False);
|
||||
XtSetSensitive (menu->type_widgets[EQUITY], False);
|
||||
|
||||
/* unset unavailable buttons */
|
||||
XtVaSetValues (menu->type_widgets[LIABILITY], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[CREDIT], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[INCOME], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[EXPENSE], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[EQUITY], XmNset, False, NULL);
|
||||
|
||||
/* set a default, if an inapporpriate button is pushed */
|
||||
if ((BANK != but) && (CASH != but) &&
|
||||
(ASSET != but) && (PORTFOLIO != but) &&
|
||||
(MUTUAL != but) ) {
|
||||
XtVaSetValues (menu->type_widgets[acc->type], XmNset, True, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case LIABILITY:
|
||||
case CREDIT:
|
||||
XtSetSensitive (menu->type_widgets[BANK], False);
|
||||
XtSetSensitive (menu->type_widgets[CASH], False);
|
||||
XtSetSensitive (menu->type_widgets[ASSET], False);
|
||||
XtSetSensitive (menu->type_widgets[PORTFOLIO], False);
|
||||
XtSetSensitive (menu->type_widgets[MUTUAL], False);
|
||||
XtSetSensitive (menu->type_widgets[LIABILITY], True);
|
||||
XtSetSensitive (menu->type_widgets[CREDIT], True);
|
||||
XtSetSensitive (menu->type_widgets[INCOME], False);
|
||||
XtSetSensitive (menu->type_widgets[EXPENSE], False);
|
||||
XtSetSensitive (menu->type_widgets[EQUITY], False);
|
||||
|
||||
/* unset unavailable buttons */
|
||||
XtVaSetValues (menu->type_widgets[BANK], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[CASH], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[ASSET], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[PORTFOLIO], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[MUTUAL], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[INCOME], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[EXPENSE], XmNset, False, NULL);
|
||||
XtVaSetValues (menu->type_widgets[EQUITY], XmNset, False, NULL);
|
||||
|
||||
/* set a default, if an inapporpriate button is pushed */
|
||||
if ((LIABILITY != but) && (CREDIT != but)) {
|
||||
XtVaSetValues (menu->type_widgets[acc->type], XmNset, True, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case INCOME:
|
||||
XtSetSensitive (menu->type_widgets[BANK], False);
|
||||
XtSetSensitive (menu->type_widgets[CASH], False);
|
||||
XtSetSensitive (menu->type_widgets[ASSET], False);
|
||||
XtSetSensitive (menu->type_widgets[PORTFOLIO], False);
|
||||
XtSetSensitive (menu->type_widgets[MUTUAL], False);
|
||||
XtSetSensitive (menu->type_widgets[LIABILITY], False);
|
||||
XtSetSensitive (menu->type_widgets[CREDIT], False);
|
||||
XtSetSensitive (menu->type_widgets[INCOME], True);
|
||||
XtSetSensitive (menu->type_widgets[EXPENSE], False);
|
||||
XtSetSensitive (menu->type_widgets[EQUITY], False);
|
||||
|
||||
/* unset unavailable buttons */
|
||||
for (i=0; i<NUM_ACCOUNT_TYPES; i++) {
|
||||
XtVaSetValues (menu->type_widgets[i], XmNset, False, NULL);
|
||||
}
|
||||
|
||||
/* set a default, if an inapporpriate button is pushed */
|
||||
XtVaSetValues (menu->type_widgets[acc->type], XmNset, True, NULL);
|
||||
break;
|
||||
|
||||
case EXPENSE:
|
||||
XtSetSensitive (menu->type_widgets[BANK], False);
|
||||
XtSetSensitive (menu->type_widgets[CASH], False);
|
||||
XtSetSensitive (menu->type_widgets[ASSET], False);
|
||||
XtSetSensitive (menu->type_widgets[PORTFOLIO], False);
|
||||
XtSetSensitive (menu->type_widgets[MUTUAL], False);
|
||||
XtSetSensitive (menu->type_widgets[LIABILITY], False);
|
||||
XtSetSensitive (menu->type_widgets[CREDIT], False);
|
||||
XtSetSensitive (menu->type_widgets[INCOME], False);
|
||||
XtSetSensitive (menu->type_widgets[EXPENSE], True);
|
||||
XtSetSensitive (menu->type_widgets[EQUITY], False);
|
||||
|
||||
/* unset unavailable buttons */
|
||||
for (i=0; i<NUM_ACCOUNT_TYPES; i++) {
|
||||
XtVaSetValues (menu->type_widgets[i], XmNset, False, NULL);
|
||||
}
|
||||
|
||||
/* set a default, if an inapporpriate button is pushed */
|
||||
XtVaSetValues (menu->type_widgets[acc->type], XmNset, True, NULL);
|
||||
break;
|
||||
|
||||
case EQUITY:
|
||||
XtSetSensitive (menu->type_widgets[BANK], False);
|
||||
XtSetSensitive (menu->type_widgets[CASH], False);
|
||||
XtSetSensitive (menu->type_widgets[ASSET], False);
|
||||
XtSetSensitive (menu->type_widgets[PORTFOLIO], False);
|
||||
XtSetSensitive (menu->type_widgets[MUTUAL], False);
|
||||
XtSetSensitive (menu->type_widgets[LIABILITY], False);
|
||||
XtSetSensitive (menu->type_widgets[CREDIT], False);
|
||||
XtSetSensitive (menu->type_widgets[INCOME], False);
|
||||
XtSetSensitive (menu->type_widgets[EXPENSE], False);
|
||||
XtSetSensitive (menu->type_widgets[EQUITY], True);
|
||||
|
||||
/* unset unavailable buttons */
|
||||
for (i=0; i<NUM_ACCOUNT_TYPES; i++) {
|
||||
XtVaSetValues (menu->type_widgets[i], XmNset, False, NULL);
|
||||
}
|
||||
|
||||
/* set a default, if an inapporpriate button is pushed */
|
||||
XtVaSetValues (menu->type_widgets[acc->type], XmNset, True, NULL);
|
||||
break;
|
||||
|
||||
}
|
||||
} else {
|
||||
XtSetSensitive (menu->type_widgets[BANK], True);
|
||||
XtSetSensitive (menu->type_widgets[CASH], True);
|
||||
XtSetSensitive (menu->type_widgets[ASSET], True);
|
||||
XtSetSensitive (menu->type_widgets[CREDIT], True);
|
||||
XtSetSensitive (menu->type_widgets[LIABILITY], True);
|
||||
XtSetSensitive (menu->type_widgets[PORTFOLIO], True);
|
||||
XtSetSensitive (menu->type_widgets[MUTUAL], True);
|
||||
XtSetSensitive (menu->type_widgets[INCOME], True);
|
||||
XtSetSensitive (menu->type_widgets[EXPENSE], True);
|
||||
XtSetSensitive (menu->type_widgets[EQUITY], True);
|
||||
}
|
||||
}
|
||||
|
||||
/********************** END OF FILE *********************************\
|
||||
\********************************************************************/
|
||||
|
||||
230
src/Account.c
230
src/Account.c
@@ -29,7 +29,6 @@
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
|
||||
extern Data *data;
|
||||
int next_free_unique_account_id = 0;
|
||||
|
||||
/********************************************************************\
|
||||
@@ -49,27 +48,32 @@ mallocAccount( void )
|
||||
acc->id = next_free_unique_account_id;
|
||||
next_free_unique_account_id ++;
|
||||
|
||||
acc->data = NULL;
|
||||
acc->balance = 0.0;
|
||||
acc->parent = NULL;
|
||||
acc->children = NULL;
|
||||
|
||||
acc->balance = 0.0;
|
||||
acc->cleared_balance = 0.0;
|
||||
|
||||
acc->flags = 0;
|
||||
acc->type = 0;
|
||||
acc->type = -1;
|
||||
|
||||
acc->accountName = NULL;
|
||||
acc->description = NULL;
|
||||
acc->notes = NULL;
|
||||
|
||||
acc->regData = NULL;
|
||||
acc->recnData = NULL;
|
||||
acc->adjBData = NULL;
|
||||
acc->qfRoot = mallocQuickFill();
|
||||
|
||||
acc->numTrans = 0;
|
||||
acc->transaction = NULL; /* Initially there are no transactions
|
||||
* in this account's transaction
|
||||
* array */
|
||||
|
||||
/* private data */
|
||||
acc->arrowb = NULL;
|
||||
acc->expand = 0;
|
||||
acc->regData = NULL;
|
||||
acc->recnData = NULL;
|
||||
acc->adjBData = NULL;
|
||||
acc->qfRoot = mallocQuickFill();
|
||||
|
||||
return acc;
|
||||
}
|
||||
|
||||
@@ -77,36 +81,74 @@ mallocAccount( void )
|
||||
\********************************************************************/
|
||||
void
|
||||
freeAccount( Account *acc )
|
||||
{
|
||||
if( acc != NULL )
|
||||
{
|
||||
int i;
|
||||
|
||||
XtFree(acc->accountName);
|
||||
XtFree(acc->description);
|
||||
XtFree(acc->notes);
|
||||
|
||||
freeQuickFill(acc->qfRoot);
|
||||
|
||||
for( i=0; i<acc->numTrans; i++ ) {
|
||||
Transaction *trans = acc->transaction[i];
|
||||
struct _account * _acc = (struct _account *) acc;
|
||||
{
|
||||
int i;
|
||||
|
||||
/* free the transaction only if its not
|
||||
* a part of a double entry */
|
||||
if (_acc == trans->credit) trans->credit = NULL;
|
||||
if (_acc == trans->debit) trans->debit = NULL;
|
||||
if ( (NULL == trans->debit) && (NULL == trans->credit) ) {
|
||||
freeTransaction( trans );
|
||||
}
|
||||
}
|
||||
if (NULL == acc) return;
|
||||
|
||||
/* free the array of pointers */
|
||||
_free( acc->transaction );
|
||||
|
||||
_free(acc);
|
||||
/* recursively free children */
|
||||
freeAccountGroup (acc->children);
|
||||
|
||||
XtFree(acc->accountName);
|
||||
XtFree(acc->description);
|
||||
XtFree(acc->notes);
|
||||
|
||||
freeQuickFill(acc->qfRoot);
|
||||
|
||||
for( i=0; i<acc->numTrans; i++ ) {
|
||||
Transaction *trans = acc->transaction[i];
|
||||
struct _account * _acc = (struct _account *) acc;
|
||||
|
||||
/* free the transaction only if its not
|
||||
* a part of a double entry */
|
||||
if (_acc == trans->credit) trans->credit = NULL;
|
||||
if (_acc == trans->debit) trans->debit = NULL;
|
||||
if ( (NULL == trans->debit) && (NULL == trans->credit) ) {
|
||||
freeTransaction( trans );
|
||||
}
|
||||
}
|
||||
|
||||
/* free the array of pointers */
|
||||
_free( acc->transaction );
|
||||
|
||||
/* zero out values, just in case stray
|
||||
* pointers are pointing here. */
|
||||
|
||||
acc->parent = NULL;
|
||||
acc->children = NULL;
|
||||
|
||||
acc->balance = 0.0;
|
||||
acc->cleared_balance = 0.0;
|
||||
|
||||
acc->flags = 0;
|
||||
acc->type = -1;
|
||||
|
||||
acc->accountName = NULL;
|
||||
acc->description = NULL;
|
||||
acc->notes = NULL;
|
||||
|
||||
acc->numTrans = 0;
|
||||
acc->transaction = NULL;
|
||||
|
||||
/* hack alert -- shouldn't we destroy this widget ??? */
|
||||
acc->arrowb = NULL;
|
||||
acc->expand = 0;
|
||||
acc->regData = NULL;
|
||||
acc->recnData = NULL;
|
||||
acc->adjBData = NULL;
|
||||
|
||||
_free(acc);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
int
|
||||
xaccGetAccountID (Account *acc)
|
||||
{
|
||||
if (!acc) return -1;
|
||||
return acc->id;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
@@ -137,48 +179,54 @@ getNumOfTransaction( Account *acc, Transaction *trans )
|
||||
\********************************************************************/
|
||||
Transaction *
|
||||
removeTransaction( Account *acc, int num )
|
||||
{
|
||||
{
|
||||
Transaction *trans = NULL;
|
||||
Transaction **oldTrans;
|
||||
int i,j;
|
||||
|
||||
if( acc != NULL )
|
||||
{
|
||||
int i,j;
|
||||
Transaction **oldTrans = acc->transaction;
|
||||
if (NULL == acc) return;
|
||||
|
||||
/* check for valid number */
|
||||
if( (0 > num) || (num >= acc->numTrans) ) return NULL;
|
||||
oldTrans = acc->transaction;
|
||||
|
||||
/* Set this flag, so we know we need to save the data file: */
|
||||
if( data != NULL )
|
||||
data->saved = False;
|
||||
/* check for valid number */
|
||||
if( (0 > num) || (num >= acc->numTrans) ) return NULL;
|
||||
|
||||
/* Set this flag, so we know we need to save the data file: */
|
||||
if( NULL != acc->parent ) acc->parent->saved = False;
|
||||
|
||||
acc->numTrans--;
|
||||
acc->numTrans--;
|
||||
|
||||
if (0 < acc->numTrans) {
|
||||
acc->transaction = (Transaction **)_malloc((acc->numTrans)*
|
||||
sizeof(Transaction *));
|
||||
|
||||
trans = oldTrans[acc->numTrans];/* In case we are deleting last in
|
||||
* old array */
|
||||
for( i=0,j=0; i<acc->numTrans; i++,j++ )
|
||||
{
|
||||
if( j != num )
|
||||
for( i=0,j=0; i<acc->numTrans; i++,j++ ) {
|
||||
if( j != num ) {
|
||||
acc->transaction[i] = oldTrans[j];
|
||||
else
|
||||
{
|
||||
} else {
|
||||
trans = oldTrans[j];
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
_free (oldTrans);
|
||||
|
||||
/* if this is a double-entry transaction, be sure to
|
||||
* unmark it. */
|
||||
if (((Account *)trans->credit) == acc) trans->credit = NULL;
|
||||
if (((Account *)trans->debit) == acc) trans->debit = NULL;
|
||||
|
||||
}
|
||||
} else {
|
||||
if (0 != num) {
|
||||
PERR ("removeTransaction(): num should be zero !");
|
||||
}
|
||||
trans = oldTrans[0];
|
||||
acc->transaction = NULL;
|
||||
}
|
||||
|
||||
_free (oldTrans);
|
||||
|
||||
/* if this is a double-entry transaction, be sure to
|
||||
* unmark it. */
|
||||
if (((Account *)trans->credit) == acc) trans->credit = NULL;
|
||||
if (((Account *)trans->debit) == acc) trans->debit = NULL;
|
||||
|
||||
return trans;
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
@@ -236,47 +284,51 @@ insertTransaction( Account *acc, Transaction *trans )
|
||||
}
|
||||
|
||||
/* mark the data file as needing to be saved: */
|
||||
if( data != NULL )
|
||||
data->saved = False;
|
||||
if( acc->parent != NULL ) acc->parent->saved = False;
|
||||
|
||||
acc->numTrans++;
|
||||
oldTrans = acc->transaction;
|
||||
acc->transaction = (Transaction **)_malloc((acc->numTrans)*
|
||||
sizeof(Transaction *));
|
||||
|
||||
/* dt is the date of the transaction we are inserting, and dj
|
||||
* is the date of the "cursor" transaction... we want to insert
|
||||
* the new transaction before the first transaction of the same
|
||||
* or later date. The !inserted bit is a bit of a kludge to
|
||||
* make sure we only insert the new transaction once! */
|
||||
dt = &(trans->date);
|
||||
for( i=0,j=0; i<acc->numTrans; i++,j++ )
|
||||
{
|
||||
/* if we didn't do this, and we needed to insert into the
|
||||
* last spot in the array, we would walk off the end of the
|
||||
* old array, which is no good! */
|
||||
if( j>=(acc->numTrans-1) )
|
||||
if (oldTrans) {
|
||||
/* dt is the date of the transaction we are inserting, and dj
|
||||
* is the date of the "cursor" transaction... we want to insert
|
||||
* the new transaction before the first transaction of the same
|
||||
* or later date. The !inserted bit is a bit of a kludge to
|
||||
* make sure we only insert the new transaction once! */
|
||||
dt = &(trans->date);
|
||||
for( i=0,j=0; i<acc->numTrans; i++,j++ )
|
||||
{
|
||||
position = i;
|
||||
acc->transaction[i] = trans;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
dj = &(oldTrans[j]->date);
|
||||
if( (datecmp(dj,dt) > 0) & !inserted )
|
||||
/* if we didn't do this, and we needed to insert into the
|
||||
* last spot in the array, we would walk off the end of the
|
||||
* old array, which is no good! */
|
||||
if( j>=(acc->numTrans-1) )
|
||||
{
|
||||
position = i;
|
||||
acc->transaction[i] = trans;
|
||||
j--;
|
||||
inserted = True;
|
||||
break;
|
||||
}
|
||||
else
|
||||
acc->transaction[i] = oldTrans[j];
|
||||
{
|
||||
dj = &(oldTrans[j]->date);
|
||||
if( (datecmp(dj,dt) > 0) & !inserted )
|
||||
{
|
||||
position = i;
|
||||
acc->transaction[i] = trans;
|
||||
j--;
|
||||
inserted = True;
|
||||
}
|
||||
else
|
||||
acc->transaction[i] = oldTrans[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_free(oldTrans);
|
||||
|
||||
_free(oldTrans);
|
||||
} else {
|
||||
acc->transaction[0] = trans;
|
||||
position = 0;
|
||||
}
|
||||
|
||||
if( position != -1 )
|
||||
qfInsertTransaction( acc->qfRoot, trans );
|
||||
|
||||
304
src/AccountMenu.c
Normal file
304
src/AccountMenu.c
Normal file
@@ -0,0 +1,304 @@
|
||||
/********************************************************************\
|
||||
* AccountMenu.c -- the account menu for xacc (X-Accountant) *
|
||||
* (general utility) *
|
||||
* Copyright (C) 1997 Robin D. Clark *
|
||||
* Copyright (C) 1997 Linas Vepstas *
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
* Author: Rob Clark *
|
||||
* Internet: rclark@cs.hmc.edu *
|
||||
* Address: 609 8th Street *
|
||||
* Huntington Beach, CA 92648-4632 *
|
||||
\********************************************************************/
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
#include <Xm/RowColumn.h>
|
||||
|
||||
#include "Account.h"
|
||||
#include "BuildMenu.h"
|
||||
#include "Data.h"
|
||||
#include "util.h"
|
||||
|
||||
typedef struct _accMenuEntry
|
||||
{
|
||||
Account *option;
|
||||
char * label;
|
||||
struct _accountMenu *am;
|
||||
} AccMenuEntry;
|
||||
|
||||
typedef struct _accountMenu
|
||||
{
|
||||
Widget menu_widget;
|
||||
Widget pulldown_widget;
|
||||
Account *choice;
|
||||
int numMenuEntries;
|
||||
AccMenuEntry **menuEntry;
|
||||
|
||||
/* user callbacks */
|
||||
XtCallbackProc callback;
|
||||
XtPointer client_data;
|
||||
} AccountMenu;
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
void
|
||||
xaccFreeAccountMenu (AccountMenu * menu) {
|
||||
int i;
|
||||
|
||||
for( i=0; i<menu->numMenuEntries; i++ ) {
|
||||
if (menu->menuEntry[i]) _free (menu->menuEntry[i]);
|
||||
menu->menuEntry[i] = NULL;
|
||||
}
|
||||
|
||||
_free (menu->menuEntry);
|
||||
menu->menuEntry = NULL;
|
||||
menu->numMenuEntries = 0;
|
||||
|
||||
_free (menu);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
Widget
|
||||
xaccGetAccountMenuWidget (AccountMenu *menu) {
|
||||
return (menu->menu_widget);
|
||||
}
|
||||
|
||||
Account *
|
||||
xaccGetAccountMenuSelection (AccountMenu *menu) {
|
||||
return (menu->choice);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* menuCB -- keeps track of the menu choice *
|
||||
* *
|
||||
* Args: mw - the widget that called us *
|
||||
* cd - menuEntry - has the menu option and a pointer to *
|
||||
* where the selection will be stored *
|
||||
* cb - *
|
||||
* Return: none *
|
||||
\********************************************************************/
|
||||
static
|
||||
void
|
||||
xaccAccountMenuCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
XmString labelStr;
|
||||
AccMenuEntry *menuEntry = (AccMenuEntry *)cd;
|
||||
AccountMenu *menu;
|
||||
|
||||
menu = (AccountMenu *) (menuEntry->am);
|
||||
|
||||
menu->choice = menuEntry->option;
|
||||
|
||||
labelStr = XmStringCreateSimple (menuEntry->label);
|
||||
XtVaSetValues (menu->pulldown_widget,
|
||||
XmNlabelString, labelStr,
|
||||
NULL );
|
||||
XmStringFree (labelStr);
|
||||
|
||||
if (menu->callback) {
|
||||
(*(menu->callback)) (menu->menu_widget, menu->client_data, (XtPointer) menu->choice);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* build menus recuresively *
|
||||
\********************************************************************/
|
||||
|
||||
MenuItem *
|
||||
xaccBuildAccountSubMenu (AccountGroup *grp,
|
||||
AccountMenu *accData,
|
||||
int *offset,
|
||||
int pad)
|
||||
{
|
||||
MenuItem *menuList;
|
||||
int i;
|
||||
int nacc;
|
||||
char * tmp;
|
||||
|
||||
if (NULL == grp) return NULL;
|
||||
|
||||
nacc = grp->numAcc;
|
||||
|
||||
menuList = (MenuItem *) _malloc((2*nacc+pad+1)*sizeof(MenuItem));
|
||||
|
||||
for( i=0; i<pad; i++ )
|
||||
{
|
||||
accData->menuEntry[*offset] = (AccMenuEntry *) _malloc (sizeof (AccMenuEntry));
|
||||
accData->menuEntry[*offset]->option = NULL;
|
||||
accData->menuEntry[*offset]->label = "(none)";
|
||||
accData->menuEntry[*offset]->am = (struct _accountMenu *) accData;
|
||||
|
||||
tmp = (char *) _malloc (strlen ("(none)")+1);
|
||||
strcpy (tmp, "(none)");
|
||||
menuList[i].label = tmp;
|
||||
menuList[i].wclass = &xmPushButtonWidgetClass;
|
||||
menuList[i].mnemonic = 0;
|
||||
menuList[i].accelerator = NULL;
|
||||
menuList[i].accel_text = NULL;
|
||||
menuList[i].callback = xaccAccountMenuCB;
|
||||
menuList[i].callback_data = accData->menuEntry[*offset];
|
||||
|
||||
(*offset) ++;
|
||||
menuList[i].subitems = (MenuItem *)NULL;
|
||||
}
|
||||
for( i=0; i<nacc; i++ )
|
||||
{
|
||||
Account *acc = getAccount( grp, i );
|
||||
|
||||
accData->menuEntry[*offset] = (AccMenuEntry *) _malloc (sizeof (AccMenuEntry));
|
||||
accData->menuEntry[*offset]->option = acc;
|
||||
accData->menuEntry[*offset]->label = acc->accountName;
|
||||
accData->menuEntry[*offset]->am = (struct _accountMenu *) accData;
|
||||
|
||||
tmp = (char *) _malloc (strlen (acc->accountName) + 1);
|
||||
strcpy (tmp, acc->accountName);
|
||||
menuList[i+pad].label = tmp;
|
||||
menuList[i+pad].wclass = &xmPushButtonWidgetClass;
|
||||
menuList[i+pad].mnemonic = 0;
|
||||
menuList[i+pad].accelerator = NULL;
|
||||
menuList[i+pad].accel_text = NULL;
|
||||
menuList[i+pad].callback = xaccAccountMenuCB;
|
||||
menuList[i+pad].callback_data = accData->menuEntry[*offset];
|
||||
menuList[i+pad].subitems = (MenuItem *) NULL;
|
||||
|
||||
(*offset) ++;
|
||||
if (acc->children) {
|
||||
pad ++;
|
||||
accData->menuEntry[*offset] = (AccMenuEntry *) _malloc (sizeof (AccMenuEntry));
|
||||
accData->menuEntry[*offset]->option = acc;
|
||||
accData->menuEntry[*offset]->label = acc->accountName;
|
||||
accData->menuEntry[*offset]->am = (struct _accountMenu *) accData;
|
||||
|
||||
/* submenu lists in the menu will be distintively bracketed for easy visual id */
|
||||
tmp = (char *) _malloc (strlen (acc->accountName) + 3);
|
||||
strcpy (tmp, "[");
|
||||
strcat (tmp, acc->accountName);
|
||||
strcat (tmp, "]");
|
||||
menuList[i+pad].label = tmp;
|
||||
menuList[i+pad].wclass = &xmPushButtonWidgetClass;
|
||||
menuList[i+pad].mnemonic = 0;
|
||||
menuList[i+pad].accelerator = NULL;
|
||||
menuList[i+pad].accel_text = NULL;
|
||||
menuList[i+pad].callback = xaccAccountMenuCB;
|
||||
menuList[i+pad].callback_data = accData->menuEntry[*offset];
|
||||
|
||||
(*offset) ++;
|
||||
menuList[i+pad].subitems = xaccBuildAccountSubMenu (acc->children, accData, offset, 0);
|
||||
}
|
||||
}
|
||||
menuList[i+pad].label= NULL;
|
||||
|
||||
return (menuList);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* free menus recuresively *
|
||||
\********************************************************************/
|
||||
|
||||
void
|
||||
xaccFreeAccountSubMenu (MenuItem *menuList)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (NULL == menuList) return;
|
||||
|
||||
i = 0;
|
||||
while (NULL != menuList[i].label) {
|
||||
_free (menuList[i].label);
|
||||
menuList[i].label = NULL;
|
||||
xaccFreeAccountSubMenu (menuList[i].subitems);
|
||||
i++;
|
||||
}
|
||||
|
||||
_free (menuList);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
void
|
||||
xaccAccountMenuAddCallback (AccountMenu *menu,
|
||||
XtCallbackProc cb,
|
||||
XtPointer cd )
|
||||
{
|
||||
menu -> callback = cb;
|
||||
menu -> client_data = cd;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
AccountMenu *
|
||||
xaccBuildAccountMenu (AccountGroup *grp, Widget parent, char * label)
|
||||
{
|
||||
Widget bar_widget;
|
||||
MenuItem *menuList;
|
||||
AccountMenu *accData;
|
||||
XmString labelStr;
|
||||
int i;
|
||||
int offset = 0;
|
||||
int nacc;
|
||||
int pad = 1;
|
||||
|
||||
if (NULL == grp) return NULL;
|
||||
|
||||
nacc = xaccGetNumAccounts (grp);
|
||||
nacc *= 2; /* quick hack to make room for doubled account labels. */
|
||||
|
||||
accData = (AccountMenu *) _malloc (sizeof (AccountMenu));
|
||||
accData -> choice = NULL;
|
||||
accData -> callback = NULL;
|
||||
accData -> client_data = NULL;
|
||||
|
||||
accData->menuEntry = (AccMenuEntry **)_malloc((nacc+pad)*sizeof(AccMenuEntry *));
|
||||
accData->numMenuEntries = nacc+pad;
|
||||
|
||||
for (i=0; i<accData->numMenuEntries; i++) {
|
||||
accData->menuEntry[i] = NULL;
|
||||
}
|
||||
|
||||
/* top-level widget will be a menu widget; this is the only thing
|
||||
* that will accept cascading menus as a parent */
|
||||
bar_widget = XmCreateMenuBar( parent, "accmenubar", NULL, 0);
|
||||
accData->menu_widget = bar_widget;
|
||||
|
||||
XtVaSetValues (bar_widget,
|
||||
XmNorientation, XmVERTICAL,
|
||||
/* XmNshadowThickness, 0, */
|
||||
NULL );
|
||||
|
||||
XtManageChild (bar_widget);
|
||||
|
||||
offset = 0;
|
||||
menuList = xaccBuildAccountSubMenu (grp, accData, &offset, pad);
|
||||
|
||||
accData->pulldown_widget =
|
||||
BuildMenu( bar_widget, XmMENU_PULLDOWN, label, 'F', False, 0, menuList );
|
||||
|
||||
XtVaSetValues (accData->pulldown_widget,
|
||||
XmNshadowThickness, 0,
|
||||
NULL );
|
||||
|
||||
|
||||
xaccFreeAccountSubMenu (menuList);
|
||||
|
||||
return (accData);
|
||||
}
|
||||
|
||||
/* ********************** END OF FILE *************************/
|
||||
@@ -29,15 +29,15 @@
|
||||
#include <Xm/PanedW.h>
|
||||
#include <Xm/PushB.h>
|
||||
#include <Xm/LabelGP.h>
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
#include "date.h"
|
||||
#include "Data.h"
|
||||
#include "MainWindow.h"
|
||||
|
||||
#include "Account.h"
|
||||
#include "Data.h"
|
||||
#include "date.h"
|
||||
#include "main.h"
|
||||
#include "MainWindow.h"
|
||||
#include "util.h"
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Data *data;
|
||||
|
||||
/** STRUCTS *********************************************************/
|
||||
typedef struct _AdjBWindow
|
||||
@@ -274,8 +274,8 @@ adjBOkCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
double themount=0.0,dcurrAmount=0.0;
|
||||
int i;
|
||||
|
||||
data->saved = False;
|
||||
acc = adjBData->acc;
|
||||
acc->parent->saved = False;
|
||||
|
||||
/* allocate mem for the new transaction */
|
||||
trans = (Transaction *)_malloc(sizeof(Transaction));
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
/* Modified by Rob Clark on Nov 26, 1995
|
||||
* Changes made: reorginization of code, and addition choice of initial
|
||||
* option menu selection
|
||||
* - moved the creation of cascade buttion for
|
||||
* - moved the creation of cascade button for
|
||||
* option and pulldown menu till after the
|
||||
* items in the menu are created... this way
|
||||
* I can specify a widget (item in menu) to
|
||||
@@ -106,11 +106,13 @@ Widget BuildMenu( Widget parent, int menu_type, char *menu_title,
|
||||
*/
|
||||
if( items[i].subitems )
|
||||
{
|
||||
if( menu_type == XmMENU_OPTION )
|
||||
{
|
||||
XtWarning("You can't have submenus from option menu items.");
|
||||
continue;
|
||||
} else {
|
||||
|
||||
if( menu_type == XmMENU_OPTION )
|
||||
{
|
||||
XtWarning("You can't have submenus from option menu items.");
|
||||
continue;
|
||||
} else
|
||||
{
|
||||
widget = BuildMenu( menu, XmMENU_PULLDOWN, items[i].label,
|
||||
items[i].mnemonic, tear_off, 0,
|
||||
items[i].subitems);
|
||||
@@ -187,7 +189,7 @@ Widget BuildMenu( Widget parent, int menu_type, char *menu_title,
|
||||
{
|
||||
str = XmStringCreateLocalized (menu_title);
|
||||
cascade = XtVaCreateManagedWidget( menu_title,
|
||||
xmCascadeButtonGadgetClass, parent,
|
||||
xmCascadeButtonGadgetClass, parent,
|
||||
XmNsubMenuId, menu,
|
||||
XmNlabelString, str,
|
||||
XmNmnemonic, menu_mnemonic,
|
||||
|
||||
423
src/Data.c
423
src/Data.c
@@ -23,60 +23,111 @@
|
||||
* Huntington Beach, CA 92648-4632 *
|
||||
\********************************************************************/
|
||||
|
||||
#include "Data.h"
|
||||
#include "Account.h"
|
||||
#include "Data.h"
|
||||
#include "util.h"
|
||||
|
||||
/********************************************************************\
|
||||
* Because I can't use C++ for this project, doesn't mean that I *
|
||||
* can't pretend too! These functions perform actions on the *
|
||||
* Data data structure, in order to encapsulate the knowledge *
|
||||
* of the internals of the Data in one file. *
|
||||
* AccountGroup data structure, in order to encapsulate the *
|
||||
* knowledge of the internals of the AccountGroup in one file. *
|
||||
\********************************************************************/
|
||||
|
||||
AccountGroup *topgroup = 0x0;
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
Data *
|
||||
mallocData( void )
|
||||
void
|
||||
xaccInitializeAccountGroup (AccountGroup *grp)
|
||||
{
|
||||
Data *data = (Data *)_malloc(sizeof(Data));
|
||||
grp->saved = True;
|
||||
grp->new = False;
|
||||
|
||||
data->saved = True;
|
||||
data->new = False;
|
||||
grp->parent = NULL;
|
||||
grp->numAcc = 0;
|
||||
grp->account = NULL;
|
||||
|
||||
data->numAcc = 0;
|
||||
data->account = NULL;
|
||||
grp->balance = 0.0;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
AccountGroup *
|
||||
mallocAccountGroup( void )
|
||||
{
|
||||
AccountGroup *grp = (AccountGroup *)_malloc(sizeof(AccountGroup));
|
||||
|
||||
return data;
|
||||
xaccInitializeAccountGroup (grp);
|
||||
|
||||
return grp;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
void
|
||||
freeData( Data *data )
|
||||
{
|
||||
if( data != NULL )
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i=0; i<data->numAcc; i++ )
|
||||
freeAccount( data->account[i] );
|
||||
|
||||
_free( data->account );
|
||||
|
||||
_free(data);
|
||||
}
|
||||
freeAccountGroup( AccountGroup *grp )
|
||||
{
|
||||
int i;
|
||||
if (NULL == grp) return;
|
||||
|
||||
if (grp == topgroup) topgroup = NULL; /* safety device */
|
||||
|
||||
for( i=0; i<grp->numAcc; i++ ) {
|
||||
freeAccount( grp->account[i] );
|
||||
}
|
||||
|
||||
_free( grp->account );
|
||||
|
||||
/* null everything out, just in case somebody
|
||||
* tries to traverse freed memory */
|
||||
xaccInitializeAccountGroup (grp);
|
||||
|
||||
_free(grp);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
void
|
||||
xaccAccountGroupMarkSaved (AccountGroup *grp)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!grp) return;
|
||||
grp->saved = True;
|
||||
|
||||
for (i=0; i<grp->numAcc; i++) {
|
||||
xaccAccountGroupMarkSaved (grp->account[i]->children);
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
int
|
||||
xaccAccountGroupNotSaved (AccountGroup *grp)
|
||||
{
|
||||
int not_saved;
|
||||
int i;
|
||||
|
||||
if (!grp) return;
|
||||
if (False == grp->saved) return 1;
|
||||
|
||||
for (i=0; i<grp->numAcc; i++) {
|
||||
not_saved = xaccAccountGroupNotSaved (grp->account[i]->children);
|
||||
if (not_saved) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
Account *
|
||||
getAccount( Data *data, int num )
|
||||
getAccount( AccountGroup *grp, int num )
|
||||
{
|
||||
if( data != NULL )
|
||||
if( grp != NULL )
|
||||
{
|
||||
if( (0 <= num) && (num < data->numAcc) )
|
||||
return data->account[num];
|
||||
if( (0 <= num) && (num < grp->numAcc) )
|
||||
return grp->account[num];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@@ -84,6 +135,81 @@ getAccount( Data *data, int num )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* Get the number of accounts, including subaccounts *
|
||||
\********************************************************************/
|
||||
|
||||
int
|
||||
xaccGetNumAccounts ( AccountGroup *root )
|
||||
{
|
||||
Account *acc;
|
||||
int num_acc = 0;
|
||||
int i;
|
||||
|
||||
if (NULL == root) return 0;
|
||||
|
||||
num_acc = root->numAcc;
|
||||
|
||||
for (i=0; i<root->numAcc; i++) {
|
||||
num_acc += xaccGetNumAccounts (root->account[i]->children);
|
||||
}
|
||||
|
||||
return num_acc;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* Fetch an account, given only it's ID number *
|
||||
\********************************************************************/
|
||||
|
||||
Account *
|
||||
xaccGetAccountFromID ( AccountGroup *root, int acc_id )
|
||||
{
|
||||
Account *acc;
|
||||
int i;
|
||||
|
||||
if (NULL == root) return NULL;
|
||||
if (0 > acc_id) return NULL;
|
||||
|
||||
/* first, look for accounts hanging off the root */
|
||||
for (i=0; i<root->numAcc; i++) {
|
||||
acc = root->account[i];
|
||||
if (acc_id == acc->id) return acc;
|
||||
}
|
||||
|
||||
/* if we are still here, then we haven't found the account yet.
|
||||
* Recursively search the subgroups next */
|
||||
for (i=0; i<root->numAcc; i++) {
|
||||
acc = xaccGetAccountFromID (root->account[i]->children, acc_id);
|
||||
if (acc) return acc;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* Fetch the root of the tree *
|
||||
\********************************************************************/
|
||||
|
||||
AccountGroup *
|
||||
xaccGetAccountRoot (Account * acc)
|
||||
{
|
||||
Account *parent_acc;
|
||||
AccountGroup * grp;
|
||||
AccountGroup * root;
|
||||
|
||||
/* find the root of the account group structure */
|
||||
grp = (AccountGroup *) acc->parent;
|
||||
while (grp) {
|
||||
root = grp;
|
||||
parent_acc = grp -> parent;
|
||||
grp = NULL;
|
||||
if (parent_acc) {
|
||||
grp = (AccountGroup *) parent_acc->parent;
|
||||
}
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* Fetch an account, given only it's ID number *
|
||||
\********************************************************************/
|
||||
@@ -91,18 +217,46 @@ getAccount( Data *data, int num )
|
||||
Account *
|
||||
xaccGetPeerAccountFromID ( Account *acc, int acc_id )
|
||||
{
|
||||
Data * data;
|
||||
AccountGroup * root;
|
||||
Account *peer_acc;
|
||||
int i;
|
||||
|
||||
if (NULL == acc) return NULL;
|
||||
if (-1 >= acc_id) return NULL;
|
||||
|
||||
data = (Data *) acc->data;
|
||||
/* first, find the root of the account group structure */
|
||||
root = xaccGetAccountRoot (acc);
|
||||
|
||||
for (i=0; i<data->numAcc; i++) {
|
||||
peer_acc = data->account[i];
|
||||
if (acc_id == peer_acc->id) return peer_acc;
|
||||
/* now search all acounts hanging off the root */
|
||||
peer_acc = xaccGetAccountFromID (root, acc_id);
|
||||
|
||||
return peer_acc;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* Fetch an account, given it's name *
|
||||
\********************************************************************/
|
||||
|
||||
Account *
|
||||
xaccGetAccountFromName ( AccountGroup *root, char * name )
|
||||
{
|
||||
Account *acc;
|
||||
int i;
|
||||
|
||||
if (NULL == root) return NULL;
|
||||
if (NULL == name) return NULL;
|
||||
|
||||
/* first, look for accounts hanging off the root */
|
||||
for (i=0; i<root->numAcc; i++) {
|
||||
acc = root->account[i];
|
||||
if (!strcmp(acc->accountName, name)) return acc;
|
||||
}
|
||||
|
||||
/* if we are still here, then we haven't found the account yet.
|
||||
* Recursively search the subgroups next */
|
||||
for (i=0; i<root->numAcc; i++) {
|
||||
acc = xaccGetAccountFromName (root->account[i]->children, name);
|
||||
if (acc) return acc;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -115,50 +269,49 @@ xaccGetPeerAccountFromID ( Account *acc, int acc_id )
|
||||
Account *
|
||||
xaccGetPeerAccountFromName ( Account *acc, char * name )
|
||||
{
|
||||
Data * data;
|
||||
AccountGroup * root;
|
||||
Account *peer_acc;
|
||||
int i;
|
||||
|
||||
if (NULL == acc) return NULL;
|
||||
if (NULL == name) return NULL;
|
||||
|
||||
data = (Data *) acc->data;
|
||||
/* first, find the root of the account group structure */
|
||||
root = xaccGetAccountRoot (acc);
|
||||
|
||||
for (i=0; i<data->numAcc; i++) {
|
||||
peer_acc = data->account[i];
|
||||
if (!strcmp(peer_acc->accountName, name)) return peer_acc;
|
||||
}
|
||||
/* now search all acounts hanging off the root */
|
||||
peer_acc = xaccGetAccountFromName (root, name);
|
||||
|
||||
return NULL;
|
||||
return peer_acc;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
Account *
|
||||
removeAccount( Data *data, int num )
|
||||
removeAccount( AccountGroup *grp, int num )
|
||||
{
|
||||
Account *acc = NULL;
|
||||
|
||||
if( data != NULL )
|
||||
if( NULL != grp )
|
||||
{
|
||||
int i,j;
|
||||
Account **oldAcc = data->account;
|
||||
Account **oldAcc = grp->account;
|
||||
|
||||
data->saved = False;
|
||||
grp->saved = False;
|
||||
|
||||
data->numAcc--;
|
||||
data->account = (Account **)_malloc((data->numAcc)*sizeof(Account *));
|
||||
grp->numAcc--;
|
||||
grp->account = (Account **)_malloc((grp->numAcc)*sizeof(Account *));
|
||||
|
||||
acc = oldAcc[data->numAcc]; /* In case we are deleting last in
|
||||
acc = oldAcc[grp->numAcc]; /* In case we are deleting last in
|
||||
* old array */
|
||||
for( i=0,j=0; i<data->numAcc; i++,j++ )
|
||||
for( i=0,j=0; i<grp->numAcc; i++,j++ )
|
||||
{
|
||||
if( j != num )
|
||||
data->account[i] = oldAcc[j];
|
||||
grp->account[i] = oldAcc[j];
|
||||
else
|
||||
{
|
||||
acc = oldAcc[j];
|
||||
j--;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,36 +320,178 @@ removeAccount( Data *data, int num )
|
||||
return acc;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
void
|
||||
xaccRemoveGroup (AccountGroup *grp)
|
||||
{
|
||||
Account *acc;
|
||||
|
||||
if (NULL == grp) return;
|
||||
acc = grp->parent;
|
||||
|
||||
/* if this group has no parent, it must be the topgroup */
|
||||
if (NULL == acc) return;
|
||||
|
||||
acc->children = NULL;
|
||||
|
||||
/* make sure that the parent of the group is marked
|
||||
* as having been modified. */
|
||||
grp = acc -> parent;
|
||||
if (!grp) return;
|
||||
|
||||
grp->saved = False;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
void
|
||||
xaccRemoveAccount (Account *acc)
|
||||
{
|
||||
int i,j;
|
||||
AccountGroup *grp;
|
||||
Account **oldAcc;
|
||||
|
||||
if (NULL == acc) return;
|
||||
grp = acc->parent;
|
||||
acc->parent = NULL;
|
||||
|
||||
/* this routine might be called on accounts which
|
||||
* are not yet parented. */
|
||||
if (NULL == grp) return;
|
||||
|
||||
oldAcc = grp->account;
|
||||
|
||||
grp->saved = False;
|
||||
|
||||
grp->numAcc--;
|
||||
|
||||
if (0 < grp->numAcc) {
|
||||
grp->account = (Account **)_malloc((grp->numAcc)*sizeof(Account *));
|
||||
|
||||
for( i=0,j=0; i<grp->numAcc; i++,j++ ) {
|
||||
if( acc != oldAcc[j] ) {
|
||||
grp->account[i] = oldAcc[j];
|
||||
} else {
|
||||
i--;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
grp->account = NULL;
|
||||
|
||||
/* if this was the last account in a group, delete
|
||||
* the group as well (unless its a root group) */
|
||||
if (grp->parent) {
|
||||
xaccRemoveGroup (grp);
|
||||
freeAccountGroup (grp);
|
||||
}
|
||||
}
|
||||
|
||||
_free(oldAcc);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
int
|
||||
insertAccount( Data *data, Account *acc )
|
||||
xaccInsertSubAccount( Account *adult, Account *child )
|
||||
{
|
||||
int retval;
|
||||
|
||||
if (NULL == adult) return -1;
|
||||
if (NULL == child) return -1;
|
||||
|
||||
/* if a container for the children doesn't yet exist, add it */
|
||||
if (NULL == adult->children) {
|
||||
adult->children = mallocAccountGroup();
|
||||
}
|
||||
|
||||
/* set back-pointer to parent */
|
||||
adult->children->parent = adult;
|
||||
|
||||
retval = insertAccount (adult->children, child);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
int
|
||||
insertAccount( AccountGroup *grp, Account *acc )
|
||||
{
|
||||
int i=-1;
|
||||
Account **oldAcc;
|
||||
|
||||
if (NULL == data) return -1;
|
||||
if (NULL == grp) return -1;
|
||||
if (NULL == acc) return -1;
|
||||
|
||||
/* set back-pointer to the accounts parent */
|
||||
acc->data = (struct _data *) data;
|
||||
acc->parent = (struct _account_group *) grp;
|
||||
|
||||
oldAcc = data->account;
|
||||
oldAcc = grp->account;
|
||||
|
||||
data->saved = False;
|
||||
grp->saved = False;
|
||||
|
||||
data->numAcc++;
|
||||
data->account = (Account **)_malloc((data->numAcc)*sizeof(Account *));
|
||||
|
||||
for( i=0; i<(data->numAcc-1); i++ )
|
||||
data->account[i] = oldAcc[i];
|
||||
|
||||
data->account[i] = acc;
|
||||
|
||||
_free(oldAcc);
|
||||
grp->numAcc++;
|
||||
grp->account = (Account **)_malloc((grp->numAcc)*sizeof(Account *));
|
||||
|
||||
if (1 < grp->numAcc) {
|
||||
for( i=0; i<(grp->numAcc-1); i++ ) {
|
||||
grp->account[i] = oldAcc[i];
|
||||
}
|
||||
_free(oldAcc);
|
||||
} else {
|
||||
i = 0;
|
||||
}
|
||||
grp->account[i] = acc;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
void
|
||||
xaccRecomputeGroupBalance (AccountGroup *grp)
|
||||
{
|
||||
int i;
|
||||
Account *acc;
|
||||
|
||||
if (!grp) return;
|
||||
|
||||
grp->balance = 0.0;
|
||||
for (i=0; i<grp->numAcc; i++) {
|
||||
acc = grp->account[i];
|
||||
|
||||
/* first, get subtotals recursively */
|
||||
if (acc->children) {
|
||||
xaccRecomputeGroupBalance (acc->children);
|
||||
grp->balance += acc->children->balance;
|
||||
}
|
||||
|
||||
/* then add up accounts in this group */
|
||||
xaccRecomputeBalance (acc);
|
||||
grp->balance += acc->balance;
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
AccountGroup *
|
||||
xaccGetRootGroupOfAcct (Account *acc)
|
||||
{
|
||||
AccountGroup *grp;
|
||||
|
||||
if (!acc) return NULL;
|
||||
|
||||
/* recursively walk up the tree of parents */
|
||||
grp = acc->parent;
|
||||
acc = grp->parent;
|
||||
while (acc) {
|
||||
grp = acc->parent;
|
||||
acc = grp->parent;
|
||||
}
|
||||
|
||||
return grp;
|
||||
}
|
||||
|
||||
/****************** END OF FILE *************************************/
|
||||
|
||||
582
src/FileIO.c
582
src/FileIO.c
@@ -35,17 +35,22 @@
|
||||
* *
|
||||
* Version 3 of the file format supports actions (Buy, Sell, etc.) *
|
||||
* *
|
||||
* Version 4 of the file format adds account groups *
|
||||
* *
|
||||
* *
|
||||
* the format of the data in the file: *
|
||||
* file ::== token numAccounts (Account)^numAccounts *
|
||||
* Account ::== num flags type accountName description notes *
|
||||
* numTran (Transaction)^numTrans *
|
||||
* file ::== token Group *
|
||||
* Group ::== numAccounts (Account)^numAccounts *
|
||||
* Account ::== accID flags type accountName description *
|
||||
* notes numTran (Transaction)^numTrans *
|
||||
* numGroups (Group)^numGroups *
|
||||
* Transaction ::== num date description memo catagory reconciled *
|
||||
* amount share_price *
|
||||
* credit_account debit_account *
|
||||
* token ::== int [the version of file format == VERSION] *
|
||||
* numTrans ::== int *
|
||||
* numAccounts ::== int *
|
||||
* accID ::== int *
|
||||
* flags ::== char *
|
||||
* type ::== char *
|
||||
* accountName ::== String *
|
||||
@@ -71,31 +76,42 @@
|
||||
* year ::== int *
|
||||
\********************************************************************/
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
#include <fcntl.h>
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
#include <Xm/Xm.h>
|
||||
|
||||
#include "Account.h"
|
||||
#include "Data.h"
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
|
||||
#define PERMS 0666
|
||||
#define WFLAGS (O_WRONLY | O_CREAT | O_TRUNC)
|
||||
#define RFLAGS O_RDONLY
|
||||
#define VERSION 3
|
||||
#define VERSION 4
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Widget toplevel;
|
||||
|
||||
/** PROTOTYPES ******************************************************/
|
||||
int readAccount( int fd, Account *, int token );
|
||||
Transaction *readTransaction( int fd, Account *, int token );
|
||||
char *readString( int fd, int token );
|
||||
Date *readDate( int fd, int token );
|
||||
static AccountGroup *holder; /* temporary holder for
|
||||
* unclassified accounts */
|
||||
static AccountGroup *maingrp; /* temporary holder for file
|
||||
* being read */
|
||||
|
||||
int writeAccount( int fd, Account *account );
|
||||
int writeTransaction( int fd, Account *, Transaction *trans );
|
||||
int writeString( int fd, char *str );
|
||||
int writeDate( int fd, Date *date );
|
||||
/** PROTOTYPES ******************************************************/
|
||||
static Account *locateAccount (int acc_id);
|
||||
static Account *springAccount (int acc_id);
|
||||
|
||||
static AccountGroup *readGroup( int fd, Account *, int token );
|
||||
static Account *readAccount( int fd, AccountGroup *, int token );
|
||||
static Transaction *readTransaction( int fd, Account *, int token );
|
||||
static char *readString( int fd, int token );
|
||||
static Date *readDate( int fd, int token );
|
||||
|
||||
static int writeGroup( int fd, AccountGroup *grp );
|
||||
static int writeAccount( int fd, Account *account );
|
||||
static int writeTransaction( int fd, Transaction *trans );
|
||||
static int writeString( int fd, char *str );
|
||||
static int writeDate( int fd, Date *date );
|
||||
|
||||
/*******************************************************/
|
||||
/* some endian stuff */
|
||||
@@ -158,7 +174,7 @@ double xaccFlipDouble (double val)
|
||||
* Args: datafile - the file to load the data from *
|
||||
* Return: the struct with the program data in it *
|
||||
\********************************************************************/
|
||||
Data *
|
||||
AccountGroup *
|
||||
readData( char *datafile )
|
||||
{
|
||||
int fd;
|
||||
@@ -166,13 +182,15 @@ readData( char *datafile )
|
||||
int err=0;
|
||||
int token=0;
|
||||
int i;
|
||||
Data *data = mallocData();
|
||||
int num_unclaimed;
|
||||
AccountGroup *grp = 0x0;
|
||||
|
||||
maingrp = 0x0;
|
||||
|
||||
fd = open( datafile, RFLAGS, 0 );
|
||||
if( fd == -1 )
|
||||
{
|
||||
ERROR();
|
||||
freeData(data);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -182,66 +200,109 @@ readData( char *datafile )
|
||||
{
|
||||
ERROR();
|
||||
close(fd);
|
||||
freeData(data);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (token);
|
||||
|
||||
/* If this is an old file, ask the user if the file
|
||||
* should be updated */
|
||||
if( VERSION > token )
|
||||
{
|
||||
char msg[BUFSIZE];
|
||||
sprintf( (char *)&msg, FILE_TOO_OLD_MSG );
|
||||
if( !verifyBox( toplevel, msg ) )
|
||||
if( VERSION > token ) {
|
||||
if( !verifyBox( toplevel, FILE_TOO_OLD_MSG ) ) {
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* If this is a newer file than we know how to deal
|
||||
* with, warn the user */
|
||||
if( VERSION < token )
|
||||
{
|
||||
char msg[BUFSIZE];
|
||||
sprintf( (char *)&msg, FILE_TOO_NEW_MSG );
|
||||
if( !verifyBox( toplevel, msg ) )
|
||||
if( VERSION < token ) {
|
||||
if( !verifyBox( toplevel, FILE_TOO_NEW_MSG ) ) {
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
holder = mallocAccountGroup();
|
||||
grp = readGroup (fd, NULL, token);
|
||||
|
||||
/* the number of unclaimed accounts should be zero if the
|
||||
* read succeeded. But just in case of a very unlikely
|
||||
* error, try to continue anyway. */
|
||||
num_unclaimed = xaccGetNumAccounts (holder);
|
||||
if (num_unclaimed) {
|
||||
if ( !verifyBox( toplevel, FILE_BAD_READ_MSG ) ) {
|
||||
freeAccountGroup (holder);
|
||||
freeAccountGroup (grp);
|
||||
grp = NULL;
|
||||
} else {
|
||||
/* create a lost account, put the missing accounts there */
|
||||
Account *acc = mallocAccount();
|
||||
acc -> accountName = XtNewString ("Lost Accounts");
|
||||
acc -> children = (struct _account_group *) holder;
|
||||
insertAccount (grp, acc);
|
||||
}
|
||||
} else {
|
||||
freeAccountGroup (holder);
|
||||
holder = NULL;
|
||||
}
|
||||
|
||||
maingrp = NULL;
|
||||
|
||||
close(fd);
|
||||
return grp;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* readGroup *
|
||||
* reads in a group of accounts *
|
||||
* *
|
||||
* Args: *
|
||||
* Return: the struct with the program data in it *
|
||||
\********************************************************************/
|
||||
static AccountGroup *
|
||||
readGroup (int fd, Account *aparent, int token)
|
||||
{
|
||||
int numAcc;
|
||||
int err=0;
|
||||
int i;
|
||||
AccountGroup *grp = mallocAccountGroup();
|
||||
|
||||
ENTER ("readGroup");
|
||||
|
||||
if (NULL == aparent) {
|
||||
maingrp = grp;
|
||||
}
|
||||
|
||||
/* read numAccs */
|
||||
err = read( fd, &numAcc, sizeof(int) );
|
||||
if( err == -1 )
|
||||
{
|
||||
close(fd);
|
||||
freeData(data);
|
||||
freeAccountGroup (grp);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (numAcc);
|
||||
|
||||
/* malloc the accounts, in preparation for reading.
|
||||
* Mmalloc all of them; they will be needed for up front
|
||||
* for inserting the double-entry transactions */
|
||||
for( i=0; i<numAcc; i++ )
|
||||
{
|
||||
Account *acc = mallocAccount();
|
||||
insertAccount( data, acc );
|
||||
}
|
||||
INFO_2 ("readGroup(): expecting %d accounts \n", numAcc);
|
||||
|
||||
/* read in the accounts */
|
||||
for( i=0; i<numAcc; i++ )
|
||||
{
|
||||
Account *acc = getAccount (data, i);
|
||||
err = readAccount( fd, acc, token );
|
||||
if( -1 == err )
|
||||
{
|
||||
close(fd);
|
||||
printf(" numAcc = %d, i = %d\n",numAcc,i);
|
||||
return data;
|
||||
Account * acc = readAccount( fd, grp, token );
|
||||
if( NULL == acc ) {
|
||||
printf("Error: readGroup(): Short group read: \n");
|
||||
printf("expected %d, got %d accounts\n",numAcc,i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return data;
|
||||
|
||||
/* if reading an account subgroup, place the subgroup
|
||||
* into the parent account */
|
||||
grp->parent = aparent;
|
||||
if (aparent) {
|
||||
aparent->children = grp;
|
||||
}
|
||||
return grp;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* readAccount *
|
||||
@@ -252,77 +313,48 @@ readData( char *datafile )
|
||||
* token - the datafile version *
|
||||
* Return: error value, 0 if OK, else -1 *
|
||||
\********************************************************************/
|
||||
int
|
||||
readAccount( int fd, Account *acc, int token )
|
||||
static Account *
|
||||
readAccount( int fd, AccountGroup *grp, int token )
|
||||
{
|
||||
int err=0;
|
||||
int i;
|
||||
int numTrans, nacc;
|
||||
int numTrans, accID;
|
||||
Account *acc;
|
||||
|
||||
ENTER ("readAccount");
|
||||
|
||||
/* version 1 does not store the account number */
|
||||
if (1 < token) {
|
||||
err = read( fd, &nacc, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
XACC_FLIP_INT (nacc);
|
||||
|
||||
/* normalize the account numbers -- positive-definite.
|
||||
* That is, the unique id must never decrease,
|
||||
* nor must it overalp any existing account id */
|
||||
acc->id = nacc;
|
||||
if (next_free_unique_account_id <= nacc) {
|
||||
next_free_unique_account_id = nacc+1;
|
||||
}
|
||||
err = read( fd, &accID, sizeof(int) );
|
||||
if( err != sizeof(int) ) { return NULL; }
|
||||
XACC_FLIP_INT (accID);
|
||||
acc = locateAccount (accID);
|
||||
} else {
|
||||
acc = mallocAccount();
|
||||
insertAccount (holder, acc);
|
||||
}
|
||||
|
||||
err = read( fd, &(acc->flags), sizeof(char) );
|
||||
if( err != sizeof(char) )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
if( err != sizeof(char) ) { return NULL; }
|
||||
|
||||
err = read( fd, &(acc->type), sizeof(char) );
|
||||
if( err != sizeof(char) )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
if( err != sizeof(char) ) { return NULL; }
|
||||
|
||||
acc->accountName = readString( fd, token );
|
||||
if( acc->accountName == NULL )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
if( acc->accountName == NULL ) { return NULL; }
|
||||
INFO_2 ("readAccount(): reading acct %s \n", acc->accountName);
|
||||
|
||||
acc->description = readString( fd, token );
|
||||
if( acc->description == NULL )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
if( acc->description == NULL ) { return NULL; }
|
||||
|
||||
acc->notes = readString( fd, token );
|
||||
if( acc->notes == NULL )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
if( acc->notes == NULL ) { return NULL; }
|
||||
|
||||
err = read( fd, &numTrans, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
{
|
||||
freeAccount(acc);
|
||||
return -1;
|
||||
}
|
||||
if( err != sizeof(int) ) { return NULL; }
|
||||
XACC_FLIP_INT (numTrans);
|
||||
|
||||
INFO_2 ("Info: readAccount(): expecting %d transactions \n", numTrans);
|
||||
/* read the transactions */
|
||||
for( i=0; i<numTrans; i++ )
|
||||
{
|
||||
@@ -330,15 +362,103 @@ readAccount( int fd, Account *acc, int token )
|
||||
trans = readTransaction( fd, acc, token );
|
||||
if( trans == NULL )
|
||||
{
|
||||
printf("Error: readAccount: Premature termination: \n");
|
||||
printf (" numTrans = %d i = %d\n",numTrans,i);
|
||||
return 0;
|
||||
PERR ("readAccount(): Short Transaction Read: \n");
|
||||
printf (" expected %d got %d transactions \n",numTrans,i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
springAccount (acc->id);
|
||||
insertAccount (grp, acc);
|
||||
|
||||
/* version 4 is the first file version that introduces
|
||||
* sub-accounts */
|
||||
if (4 <= token) {
|
||||
int numGrps;
|
||||
err = read( fd, &numGrps, sizeof(int) );
|
||||
if( err != sizeof(int) ) {
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (numGrps);
|
||||
if (numGrps) {
|
||||
readGroup (fd, acc, token);
|
||||
}
|
||||
}
|
||||
|
||||
return acc;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* locateAccount
|
||||
*
|
||||
* With the double-entry system, the file may reference accounts
|
||||
* that have not yet been read or properly parented. Thus, we need
|
||||
* a way of dealing with this, and this routine performs this
|
||||
* work. Basically, accounts are requested by thier id. If an
|
||||
* account with the indicated ID does not exist, it is created
|
||||
* and placed in a temporary holding cell. Accounts in the
|
||||
* holding cell can be located, (so that transactions can be
|
||||
* added to them) and sprung (so that they can be properly
|
||||
* parented into a group).
|
||||
\********************************************************************/
|
||||
|
||||
static Account *
|
||||
locateAccount (int acc_id)
|
||||
{
|
||||
Account * acc;
|
||||
/* negative account ids denote no account */
|
||||
if (0 > acc_id) return NULL;
|
||||
|
||||
/* first, see if we've already created the account */
|
||||
acc = xaccGetAccountFromID (maingrp, acc_id);
|
||||
if (acc) return acc;
|
||||
|
||||
/* next, see if its an unclaimed account */
|
||||
acc = xaccGetAccountFromID (holder, acc_id);
|
||||
if (acc) return acc;
|
||||
|
||||
/* if neither, then it does not yet exist. Create it.
|
||||
* Put it in the drunk tank. */
|
||||
acc = mallocAccount ();
|
||||
acc->id = acc_id;
|
||||
insertAccount (holder, acc);
|
||||
|
||||
/* normalize the account numbers -- positive-definite.
|
||||
* That is, the unique id must never decrease,
|
||||
* nor must it overalp any existing account id */
|
||||
if (next_free_unique_account_id <= acc_id) {
|
||||
next_free_unique_account_id = acc_id+1;
|
||||
}
|
||||
|
||||
return acc;
|
||||
}
|
||||
|
||||
static Account *
|
||||
springAccount (int acc_id)
|
||||
{
|
||||
Account * acc;
|
||||
|
||||
/* first, see if we're confused about the account */
|
||||
acc = xaccGetAccountFromID (maingrp, acc_id);
|
||||
if (acc) {
|
||||
printf ("Internal Error: springAccount(): \n");
|
||||
printf ("account already parented \n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* next, see if we've got it */
|
||||
acc = xaccGetAccountFromID (holder, acc_id);
|
||||
if (acc) {
|
||||
xaccRemoveAccount (acc);
|
||||
return acc;
|
||||
}
|
||||
|
||||
/* if we got to here, its an error */
|
||||
printf ("Internal Error: springAccount(): \n");
|
||||
printf ("Couldn't find account \n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* readTransaction *
|
||||
* reads in the data for a transaction from the datafile *
|
||||
@@ -347,7 +467,8 @@ readAccount( int fd, Account *acc, int token )
|
||||
* token - the datafile version *
|
||||
* Return: the transaction structure *
|
||||
\********************************************************************/
|
||||
Transaction *
|
||||
|
||||
static Transaction *
|
||||
readTransaction( int fd, Account *acc, int token )
|
||||
{
|
||||
int err=0;
|
||||
@@ -360,17 +481,16 @@ readTransaction( int fd, Account *acc, int token )
|
||||
trans->num = readString( fd, token );
|
||||
if( trans->num == NULL )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at num");
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at num");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
date = readDate( fd, token );
|
||||
if( date == NULL )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at date");
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at date");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
trans->date = *date;
|
||||
@@ -379,32 +499,26 @@ readTransaction( int fd, Account *acc, int token )
|
||||
trans->description = readString( fd, token );
|
||||
if( trans->description == NULL )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at description");
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at description");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
trans->memo = readString( fd, token );
|
||||
if( trans->memo == NULL )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at memo");
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at memo");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* actin first introduced in version 3 of the file format */
|
||||
/* action first introduced in version 3 of the file format */
|
||||
if (3 <= token) {
|
||||
trans->action = readString( fd, token );
|
||||
if( trans->action == NULL )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at memo");
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
XtFree(trans->memo);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at memo");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -412,12 +526,8 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &(trans->catagory), sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at catagory");
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->action);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at catagory");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (trans->catagory);
|
||||
@@ -425,11 +535,8 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &(trans->reconciled), sizeof(char) );
|
||||
if( err != sizeof(char) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at reconciled");
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at reconciled");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -457,11 +564,8 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &amount, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at V1 amount");
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at V1 amount");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (amount);
|
||||
@@ -473,11 +577,8 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &damount, sizeof(double) );
|
||||
if( err != sizeof(double) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at amount");
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at amount");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_DOUBLE (damount);
|
||||
@@ -487,17 +588,14 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &damount, sizeof(double) );
|
||||
if( err != sizeof(double) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at share_price");
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
_free(trans);
|
||||
PERR ("Premature end of Transaction at share_price");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_DOUBLE (damount);
|
||||
trans->share_price = damount;
|
||||
}
|
||||
DEBUGCMD(printf ("Info: readTransaction(): amount %f \n", trans->damount));
|
||||
INFO_2 ("readTransaction(): amount %f \n", trans->damount);
|
||||
|
||||
/* Read the account numbers for double-entry */
|
||||
/* These are first used in Version 2 of the file format */
|
||||
@@ -507,15 +605,13 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &acc_id, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at credit");
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
PERR ("Premature end of Transaction at credit");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (acc_id);
|
||||
DEBUGCMD (printf ("Info: readTransaction(): credit %d\n", acc_id));
|
||||
peer_acc = xaccGetPeerAccountFromID (acc, acc_id);
|
||||
INFO_2 ("readTransaction(): credit %d\n", acc_id);
|
||||
peer_acc = locateAccount (acc_id);
|
||||
trans -> credit = (struct _account *) peer_acc;
|
||||
|
||||
/* insert the transaction into both the debit and
|
||||
@@ -526,15 +622,13 @@ readTransaction( int fd, Account *acc, int token )
|
||||
err = read( fd, &acc_id, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
{
|
||||
DEBUG ("Error: Premature end of Transaction at debit");
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->num);
|
||||
PERR ("Premature end of Transaction at debit");
|
||||
freeTransaction(trans);
|
||||
return NULL;
|
||||
}
|
||||
XACC_FLIP_INT (acc_id);
|
||||
DEBUGCMD (printf ("Info: readTransaction(): debit %d\n", acc_id));
|
||||
peer_acc = xaccGetPeerAccountFromID (acc, acc_id);
|
||||
INFO_2 ("readTransaction(): debit %d\n", acc_id);
|
||||
peer_acc = locateAccount (acc_id);
|
||||
trans -> debit = (struct _account *) peer_acc;
|
||||
|
||||
/* insert the transaction into both the debit and
|
||||
@@ -547,7 +641,7 @@ readTransaction( int fd, Account *acc, int token )
|
||||
}
|
||||
|
||||
return trans;
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* readString *
|
||||
@@ -557,7 +651,7 @@ readTransaction( int fd, Account *acc, int token )
|
||||
* token - the datafile version *
|
||||
* Return: the string *
|
||||
\********************************************************************/
|
||||
char *
|
||||
static char *
|
||||
readString( int fd, int token )
|
||||
{
|
||||
int err=0;
|
||||
@@ -589,7 +683,7 @@ readString( int fd, int token )
|
||||
* token - the datafile version *
|
||||
* Return: the Date struct *
|
||||
\********************************************************************/
|
||||
Date *
|
||||
static Date *
|
||||
readDate( int fd, int token )
|
||||
{
|
||||
int err=0;
|
||||
@@ -626,6 +720,43 @@ readDate( int fd, int token )
|
||||
********************** SAVE DATA ***********************************
|
||||
\********************************************************************/
|
||||
|
||||
static void
|
||||
xaccResetWriteFlags (AccountGroup *grp)
|
||||
{
|
||||
int i, numAcc;
|
||||
if (!grp) return;
|
||||
|
||||
/* Zero out the write flag on all of the
|
||||
* transactions. The write_flag is used to determine
|
||||
* if a given transaction has already been written
|
||||
* out to the file. This flag is necessary, since
|
||||
* double-entry transactions appear in two accounts,
|
||||
* while they should be written only once to the file.
|
||||
* The write_flag is used ONLY by the routines in this
|
||||
* module.
|
||||
*/
|
||||
numAcc = grp ->numAcc;
|
||||
for( i=0; i<numAcc; i++ ) {
|
||||
int n=0;
|
||||
Account *acc;
|
||||
Transaction * trans;
|
||||
acc = getAccount (grp,i) ;
|
||||
|
||||
/* recursively do sub-accounts */
|
||||
xaccResetWriteFlags (acc->children);
|
||||
|
||||
/* zip over all accounts */
|
||||
trans = getTransaction (acc, 0);
|
||||
n++;
|
||||
while (trans) {
|
||||
trans->write_flag = 0;
|
||||
trans = getTransaction (acc, n);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* writeData *
|
||||
* flattens the program data and saves it in a file *
|
||||
@@ -634,31 +765,24 @@ readDate( int fd, int token )
|
||||
* Return: -1 on failure *
|
||||
\********************************************************************/
|
||||
int
|
||||
writeData( char *datafile, Data *data )
|
||||
writeData( char *datafile, AccountGroup *grp )
|
||||
{
|
||||
int i,numAcc;
|
||||
int err = 0;
|
||||
int token = VERSION; /* The file format version */
|
||||
int fd;
|
||||
|
||||
if (NULL == data) return -1;
|
||||
if (NULL == grp) return -1;
|
||||
|
||||
/* first, zero out the write flag on all of the
|
||||
* transactions */
|
||||
numAcc = data ->numAcc;
|
||||
for( i=0; i<numAcc; i++ ) {
|
||||
int n=0;
|
||||
Account *acc;
|
||||
Transaction * trans;
|
||||
acc = getAccount (data,i) ;
|
||||
trans = getTransaction (acc, n);
|
||||
n++;
|
||||
while (trans) {
|
||||
trans->write_flag = 0;
|
||||
trans = getTransaction (acc, n);
|
||||
n++;
|
||||
}
|
||||
}
|
||||
* transactions. The write_flag is used to determine
|
||||
* if a given transaction has already been written
|
||||
* out to the file. This flag is necessary, since
|
||||
* double-entry transactions appear in two accounts,
|
||||
* while they should be written only once to the file.
|
||||
* The write_flag is used ONLY by the routines in this
|
||||
* module.
|
||||
*/
|
||||
xaccResetWriteFlags (grp);
|
||||
|
||||
/* now, open the file and start writing */
|
||||
fd = open( datafile, WFLAGS, PERMS );
|
||||
@@ -677,20 +801,44 @@ writeData( char *datafile, Data *data )
|
||||
return -1;
|
||||
}
|
||||
|
||||
numAcc = data->numAcc;
|
||||
err = writeGroup (fd, grp);
|
||||
|
||||
close(fd);
|
||||
return err;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* writeGroup *
|
||||
* writes out a group of accounts to a file *
|
||||
* *
|
||||
* Args: fd -- file descriptor *
|
||||
* grp -- account group *
|
||||
* *
|
||||
* Return: -1 on failure *
|
||||
\********************************************************************/
|
||||
static int
|
||||
writeGroup (int fd, AccountGroup *grp )
|
||||
{
|
||||
int i,numAcc;
|
||||
int err = 0;
|
||||
|
||||
ENTER ("writeGroup");
|
||||
|
||||
if (NULL == grp) return 0;
|
||||
|
||||
numAcc = grp->numAcc;
|
||||
XACC_FLIP_INT (numAcc);
|
||||
err = write( fd, &numAcc, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
return -1;
|
||||
|
||||
for( i=0; i<data->numAcc; i++ )
|
||||
for( i=0; i<grp->numAcc; i++ )
|
||||
{
|
||||
err = writeAccount( fd, getAccount(data,i) );
|
||||
err = writeAccount( fd, getAccount(grp,i) );
|
||||
if( err == -1 )
|
||||
return err;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -702,16 +850,18 @@ writeData( char *datafile, Data *data )
|
||||
* acc - the account data to save *
|
||||
* Return: -1 on failure *
|
||||
\********************************************************************/
|
||||
int
|
||||
static int
|
||||
writeAccount( int fd, Account *acc )
|
||||
{
|
||||
Transaction *trans;
|
||||
int err=0;
|
||||
int i,numTrans, ntrans;
|
||||
int i, numUnwrittenTrans, ntrans;
|
||||
int acc_id;
|
||||
int numChildren = 0;
|
||||
|
||||
INFO_2 ("writeAccount(): writing acct %s \n", acc->accountName);
|
||||
|
||||
acc_id = acc->id;
|
||||
DEBUGCMD (printf ("Info: writeAccount: writing acct id %d %x \n", acc_id, acc));
|
||||
XACC_FLIP_INT (acc_id);
|
||||
err = write( fd, &acc_id, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
@@ -741,25 +891,41 @@ writeAccount( int fd, Account *acc )
|
||||
* number of transactions in this account, because some
|
||||
* of the double entry transactions will already have been
|
||||
* written. */
|
||||
numTrans = 0;
|
||||
i = 0;
|
||||
trans = getTransaction (acc, i);
|
||||
while (trans) {
|
||||
i++;
|
||||
if (0 == trans->write_flag) numTrans ++;
|
||||
trans = getTransaction (acc, i);
|
||||
numUnwrittenTrans = 0;
|
||||
for( i=0; i<acc->numTrans; i++ ) {
|
||||
trans = getTransaction(acc,i);
|
||||
if (0 == trans->write_flag) numUnwrittenTrans ++;
|
||||
}
|
||||
|
||||
ntrans = numTrans;
|
||||
ntrans = numUnwrittenTrans;
|
||||
XACC_FLIP_INT (ntrans);
|
||||
err = write( fd, &ntrans, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
return -1;
|
||||
|
||||
for( i=0; i<numTrans; i++ ) {
|
||||
err = writeTransaction( fd, acc, getTransaction(acc,i) );
|
||||
INFO_2 ("writeAccount(): will write %d trans\n", numUnwrittenTrans);
|
||||
for( i=0; i<acc->numTrans; i++ ) {
|
||||
trans = getTransaction(acc,i);
|
||||
if (0 == trans->write_flag) {
|
||||
err = writeTransaction( fd, trans );
|
||||
}
|
||||
if( err == -1 ) return err;
|
||||
}
|
||||
|
||||
if (acc->children) {
|
||||
numChildren = 1;
|
||||
} else {
|
||||
numChildren = 0;
|
||||
}
|
||||
|
||||
XACC_FLIP_INT (numChildren);
|
||||
err = write( fd, &numChildren, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
return -1;
|
||||
|
||||
if (acc->children) {
|
||||
err = writeGroup (fd, acc->children);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -773,8 +939,8 @@ writeAccount( int fd, Account *acc )
|
||||
* trans - the transaction data to save *
|
||||
* Return: -1 on failure *
|
||||
\********************************************************************/
|
||||
int
|
||||
writeTransaction( int fd, Account * acc, Transaction *trans )
|
||||
static int
|
||||
writeTransaction( int fd, Transaction *trans )
|
||||
{
|
||||
int err=0;
|
||||
int tmp, acc_id;
|
||||
@@ -782,8 +948,10 @@ writeTransaction( int fd, Account * acc, Transaction *trans )
|
||||
Account *xfer_acc;
|
||||
|
||||
ENTER ("writeTransaction");
|
||||
/* if we've already written this transaction, don't write it again */
|
||||
/* that is, prevent double-entry transactions from being written twice */
|
||||
/* If we've already written this transaction, don't write
|
||||
* it again. That is, prevent double-entry transactions
|
||||
* from being written twice
|
||||
*/
|
||||
if (trans->write_flag) return 4;
|
||||
trans->write_flag = 1;
|
||||
|
||||
@@ -818,7 +986,7 @@ writeTransaction( int fd, Account * acc, Transaction *trans )
|
||||
return -1;
|
||||
|
||||
damount = trans->damount;
|
||||
DEBUGCMD (printf ("Info: writeTransaction: amount=%f \n", damount));
|
||||
INFO_2 ("writeTransaction: amount=%f \n", damount);
|
||||
XACC_FLIP_DOUBLE (damount);
|
||||
err = write( fd, &damount, sizeof(double) );
|
||||
if( err != sizeof(double) )
|
||||
@@ -834,7 +1002,7 @@ writeTransaction( int fd, Account * acc, Transaction *trans )
|
||||
xfer_acc = (Account *) (trans->credit);
|
||||
acc_id = -1;
|
||||
if (xfer_acc) acc_id = xfer_acc -> id;
|
||||
DEBUGCMD (printf ("Info: writeTransaction: credit %d \n", acc_id));
|
||||
INFO_2 ("writeTransaction: credit %d \n", acc_id);
|
||||
XACC_FLIP_INT (acc_id);
|
||||
err = write( fd, &acc_id, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
@@ -843,7 +1011,7 @@ writeTransaction( int fd, Account * acc, Transaction *trans )
|
||||
xfer_acc = (Account *) (trans->debit);
|
||||
acc_id = -1;
|
||||
if (xfer_acc) acc_id = xfer_acc -> id;
|
||||
DEBUGCMD (printf ("Info: writeTransaction: debit %d \n", acc_id));
|
||||
INFO_2 (" writeTransaction: debit %d \n", acc_id);
|
||||
XACC_FLIP_INT (acc_id);
|
||||
err = write( fd, &acc_id, sizeof(int) );
|
||||
if( err != sizeof(int) )
|
||||
@@ -860,7 +1028,7 @@ writeTransaction( int fd, Account * acc, Transaction *trans )
|
||||
* str - the String to save *
|
||||
* Return: -1 on failure *
|
||||
\********************************************************************/
|
||||
int
|
||||
static int
|
||||
writeString( int fd, char *str )
|
||||
{
|
||||
int err=0;
|
||||
@@ -895,7 +1063,7 @@ writeString( int fd, char *str )
|
||||
* date - the Date to save *
|
||||
* Return: -1 on failure *
|
||||
\********************************************************************/
|
||||
int
|
||||
static int
|
||||
writeDate( int fd, Date *date )
|
||||
{
|
||||
int err=0;
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
* Huntington Beach, CA 92648-4632 *
|
||||
\********************************************************************/
|
||||
|
||||
#define USEDEBUG
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
617
src/MainWindow.c
617
src/MainWindow.c
@@ -24,41 +24,52 @@
|
||||
\********************************************************************/
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
#include <Xm/PanedW.h>
|
||||
#include <Xm/ArrowB.h>
|
||||
#include <Xm/Form.h>
|
||||
#include <Xm/MainW.h>
|
||||
#include <Xm/Label.h>
|
||||
#include <Xm/LabelGP.h>
|
||||
#include <Xm/List.h>
|
||||
#include <Xm/MainW.h>
|
||||
#include <Xm/PanedW.h>
|
||||
#include <Xm/RowColumn.h>
|
||||
#include <Xm/Text.h>
|
||||
#include <Xbae/Matrix.h>
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
#include "Data.h"
|
||||
|
||||
#include "Account.h"
|
||||
#include "FileIO.h"
|
||||
#include "FileBox.h"
|
||||
#include "BuildMenu.h"
|
||||
#include "Data.h"
|
||||
#include "FileBox.h"
|
||||
#include "FileIO.h"
|
||||
#include "HelpWindow.h"
|
||||
#include "main.h"
|
||||
#include "MainWindow.h"
|
||||
#include "RegWindow.h"
|
||||
#include "util.h"
|
||||
#include "XferWindow.h"
|
||||
#include "HelpWindow.h"
|
||||
|
||||
/** PROTOTYPES ******************************************************/
|
||||
void closeMainWindow( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void listCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void fileMenubarCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void accountMenubarCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void helpMenubarCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void xaccMainWindowRedisplayBalance (void);
|
||||
static void closeMainWindow ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void listCB ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
static void expandListCB ( Widget mw, XtPointer cd, XtPointer cb );
|
||||
|
||||
static void ArrowEventCallback (Widget w, XtPointer pClientData,
|
||||
XEvent *event, Boolean *ContDispatch);
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Data *data;
|
||||
extern char *datafile;
|
||||
extern Widget toplevel;
|
||||
int row; /* The selected row of accountlist */
|
||||
Widget accountlist;
|
||||
char *type[] = { "Bank","Cash","Asset","Credit Card",
|
||||
"Liability","Portfolio","Mutual Fund" };
|
||||
static Account *selected_acc = NULL; /* The selected account */
|
||||
static Widget accountlist;
|
||||
static Widget baln_widget;
|
||||
|
||||
/* the english-language names here should match
|
||||
* the enumerated types in Account.h */
|
||||
char *account_type_name[] =
|
||||
{ "Bank","Cash","Asset","Credit Card",
|
||||
"Liability","Stock","Mutual Fund",
|
||||
"Income", "Expense", "Equity" };
|
||||
|
||||
/* Pixel values are used to color the balance field text
|
||||
* when computing the balance */
|
||||
#ifndef USE_NO_COLOR
|
||||
@@ -68,6 +79,133 @@ Pixel posPixel, negPixel;
|
||||
Boolean havePixels = False;
|
||||
#endif
|
||||
|
||||
#define XACC_MAIN_NUM_COLS 4
|
||||
#define XACC_MAIN_ACC_ARRW 0
|
||||
#define XACC_MAIN_ACC_NAME 1
|
||||
#define XACC_MAIN_ACC_TYPE 2
|
||||
#define XACC_MAIN_ACC_BALN 3
|
||||
|
||||
/********************************************************************\
|
||||
* xaccMainWindowAddAcct *
|
||||
* *
|
||||
* Args: none *
|
||||
* Return: none *
|
||||
\********************************************************************/
|
||||
void
|
||||
xaccMainWindowAddAcct (Widget acctrix, AccountGroup *grp, int depth )
|
||||
{
|
||||
|
||||
int i, j, currow;
|
||||
char buf[BUFSIZE];
|
||||
|
||||
/* Add all the top-level accounts to the list */
|
||||
for( i=0; i<grp->numAcc; i++ )
|
||||
{
|
||||
String cols[XACC_MAIN_NUM_COLS];
|
||||
Transaction *trans=NULL;
|
||||
Account *acc = getAccount( grp, i );
|
||||
double dbalance;
|
||||
|
||||
/* fill in the arrow and the account type fileds */
|
||||
cols[XACC_MAIN_ACC_ARRW] = XtNewString("");
|
||||
cols[XACC_MAIN_ACC_TYPE] = account_type_name[acc->type];
|
||||
|
||||
/* fill in the account name field, indenting for sub-accounts */
|
||||
buf[0] = 0x0;
|
||||
for (j=0; j<depth; j++) {
|
||||
strcat (buf, " ");
|
||||
}
|
||||
strcat (buf, acc->accountName);
|
||||
cols[XACC_MAIN_ACC_NAME] = XtNewString(buf);
|
||||
|
||||
/* fill in the balance column */
|
||||
dbalance = acc->balance;
|
||||
/* if the account has children, add in thier balance */
|
||||
if (acc->children) {
|
||||
dbalance += acc->children->balance;
|
||||
}
|
||||
|
||||
/* the meaning of "balance" for income and expense
|
||||
* accounts is reversed, since a deposit of a paycheck in a
|
||||
* bank account will appear as a debit of the corresponding
|
||||
* amount in the income account */
|
||||
if ((EXPENSE == acc->type) ||
|
||||
(INCOME == acc->type) ) {
|
||||
dbalance = -dbalance;
|
||||
}
|
||||
if( 0.0 > dbalance )
|
||||
sprintf( buf,"-$%.2f\0", DABS(dbalance) );
|
||||
else
|
||||
sprintf( buf,"$%.2f\0", DABS(dbalance) );
|
||||
cols[XACC_MAIN_ACC_BALN] = XtNewString(buf);
|
||||
|
||||
XtVaGetValues (acctrix, XmNrows, &currow, NULL);
|
||||
XbaeMatrixAddRows( acctrix, currow, cols, NULL, NULL, 1 );
|
||||
|
||||
#ifndef USE_NO_COLOR
|
||||
/* Set the color of the text, depending on whether the
|
||||
* balance is negative or positive */
|
||||
if( 0.0 > dbalance )
|
||||
XbaeMatrixSetCellColor( acctrix, currow, XACC_MAIN_ACC_BALN, negPixel );
|
||||
else
|
||||
XbaeMatrixSetCellColor( acctrix, currow, XACC_MAIN_ACC_BALN, posPixel );
|
||||
#endif
|
||||
|
||||
/* associate a pointer to the actual account with the row */
|
||||
XbaeMatrixSetRowUserData ( acctrix, currow, (XtPointer *) acc);
|
||||
|
||||
/* If the account has sub-accounts, then add an arrow button
|
||||
* next to the account name. Clicking on the arrow button will
|
||||
* expand the display to list the sub-accounts. The arrow button
|
||||
* will be a cell-wdiget, and will be stored with the account
|
||||
* structure */
|
||||
if (acc->children) {
|
||||
/* if the arrow button doesn't exist, add it */
|
||||
if (NULL == acc->arrowb) {
|
||||
acc->arrowb = XtVaCreateManagedWidget ("accarrow",
|
||||
xmArrowButtonWidgetClass, acctrix,
|
||||
XmNshadowThickness, 0,
|
||||
XmNarrowDirection, XmARROW_DOWN,
|
||||
NULL);
|
||||
}
|
||||
XbaeMatrixSetCellWidget (acctrix, currow, XACC_MAIN_ACC_ARRW, acc->arrowb);
|
||||
XtManageChild (acc->arrowb);
|
||||
|
||||
XtAddCallback (acc->arrowb, XmNactivateCallback,
|
||||
expandListCB, (XtPointer *) acc);
|
||||
|
||||
#define __XACC_DO_ARROW_CALLBACK
|
||||
#ifdef __XACC_DO_ARROW_CALLBACK
|
||||
/* add a button press event handler just in case the
|
||||
* XmNactivate callback is broken. See notes for the
|
||||
* ArrowEventCallback for details. -- Linas */
|
||||
acc->PreviousArrowReason = 0;
|
||||
XtAddEventHandler(acc->arrowb,
|
||||
ButtonPressMask | ButtonReleaseMask,
|
||||
False, (XtEventHandler) ArrowEventCallback,
|
||||
(XtPointer) acc);
|
||||
#endif /* __XACC_DO_ARROW_CALLBACK */
|
||||
|
||||
|
||||
/* recursively display children accounts */
|
||||
if (acc->expand) {
|
||||
xaccMainWindowAddAcct (acctrix, acc->children, depth+1);
|
||||
}
|
||||
} else {
|
||||
/* if there are no children, make sure that there is no
|
||||
* arrow too. This situation can occur if a sub-account
|
||||
* has been deleted.
|
||||
*/
|
||||
if (acc->arrowb) {
|
||||
XbaeMatrixSetCellWidget (acctrix, currow, XACC_MAIN_ACC_ARRW, NULL);
|
||||
XtUnmanageChild (acc->arrowb);
|
||||
XtDestroyWidget (acc->arrowb);
|
||||
acc->arrowb = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* refreshMainWindow *
|
||||
* *
|
||||
@@ -79,45 +217,118 @@ Boolean havePixels = False;
|
||||
void
|
||||
refreshMainWindow( void )
|
||||
{
|
||||
int i,nrows;
|
||||
char buf[BUFSIZE];
|
||||
|
||||
int nrows;
|
||||
AccountGroup *grp = topgroup; /* hack -- should pass as argument ... */
|
||||
|
||||
XtVaGetValues( accountlist, XmNrows, &nrows, NULL );
|
||||
XbaeMatrixDeleteRows( accountlist, 0, nrows );
|
||||
|
||||
/* Add all the accounts to the list */
|
||||
for( i=0; i<data->numAcc; i++ )
|
||||
{
|
||||
String rows[3];
|
||||
Transaction *trans=NULL;
|
||||
Account *acc = getAccount( data, i );
|
||||
double dbalance;
|
||||
|
||||
xaccRecomputeBalance (acc);
|
||||
dbalance = acc->balance;
|
||||
|
||||
if( 0.0 > dbalance )
|
||||
sprintf( buf,"-$%.2f\0", DABS(dbalance) );
|
||||
else
|
||||
sprintf( buf,"$%.2f\0", DABS(dbalance) );
|
||||
|
||||
rows[0] = acc->accountName;
|
||||
rows[1] = type[acc->type];
|
||||
rows[2] = XtNewString(buf);
|
||||
XtVaGetValues( accountlist, XmNrows, &nrows, NULL );
|
||||
XbaeMatrixAddRows( accountlist, nrows, rows, NULL, NULL, 1 );
|
||||
|
||||
#ifndef USE_NO_COLOR
|
||||
/* Set the color of the text, depending on whether the
|
||||
* balance is negative or positive */
|
||||
if( 0.0 > dbalance )
|
||||
XbaeMatrixSetCellColor( accountlist, nrows, 2, negPixel );
|
||||
else
|
||||
XbaeMatrixSetCellColor( accountlist, nrows, 2, posPixel );
|
||||
#endif
|
||||
xaccRecomputeGroupBalance (grp);
|
||||
xaccMainWindowAddAcct (accountlist, grp, 0);
|
||||
xaccMainWindowRedisplayBalance ();
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* This callback is provided in order to have a separate means of detecting
|
||||
* the arrow button activation. It seems that some (all?) versions of Motif
|
||||
* have trouble correctly computing the XmCR_ACTIVATE reason for the arrow
|
||||
* button. In particular, this occurs when the ArrowButton widget has been
|
||||
* reparented. (XbaeMatrix will reparent a widget so that it will
|
||||
* be properly clipped, e.g. when it is inside of a scrolling window.
|
||||
* The clipping is vitally important to get the widget properly drawn).
|
||||
*
|
||||
* In a way, one might argue that it is not surpirsing that a reparented
|
||||
* window (XReparentWindow) will confuse the widget: after all, the widget
|
||||
* coordinets with respect to the parent widget differ from the window
|
||||
* coordinates compared to the parent window. However, this argument
|
||||
* seems flawed: Motif seems to be able to correctly compute and deliver
|
||||
* the XmCR_ARM reason when a button is pressed. Why can't it get the
|
||||
* the XmCR_ACTIVATE reason when the very same button is relased?
|
||||
* Also, the very same versions of Motif have no problem recognizing
|
||||
* that a button press and release has occured in the window, and have
|
||||
* no problem calling this callback. So, somehow, the activate computation
|
||||
* seems broken.
|
||||
*
|
||||
* Thus, this callback provides an alternate way of getting the arrow
|
||||
* button to work properly. -- Linas Vepstas October 1997
|
||||
*/
|
||||
|
||||
static void
|
||||
ArrowEventCallback(Widget w, XtPointer pClientData,
|
||||
XEvent *event, Boolean *ContDispatch)
|
||||
|
||||
{
|
||||
Account *acc = (Account *) pClientData;
|
||||
XButtonEvent *bev = (XButtonEvent *) event;
|
||||
XmArrowButtonCallbackStruct many;
|
||||
|
||||
/* if its not the left mouse button, return */
|
||||
if (1 != bev->button) return;
|
||||
|
||||
/* emulate the arm and activate callbacks */
|
||||
switch ( event->type ) {
|
||||
case ButtonPress:
|
||||
many.reason = XmCR_ARM;
|
||||
many.event = event;
|
||||
many.click_count = 1;
|
||||
expandListCB (w, pClientData, (XtPointer) &many);
|
||||
break;
|
||||
case ButtonRelease:
|
||||
many.reason = XmCR_ACTIVATE;
|
||||
many.event = event;
|
||||
many.click_count = 1;
|
||||
expandListCB (w, pClientData, (XtPointer) &many);
|
||||
break;
|
||||
}
|
||||
} /* ArrowEventCallback */
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
static void
|
||||
expandListCB( Widget mw, XtPointer pClientData, XtPointer cb)
|
||||
{
|
||||
XmAnyCallbackStruct *info = (XmAnyCallbackStruct *) cb;
|
||||
Account *acc = (Account *)pClientData;
|
||||
|
||||
/* a "fix" to avoid double invocation */
|
||||
switch ( info->reason ) {
|
||||
case XmCR_ACTIVATE:
|
||||
/* avoid double invocation */
|
||||
if (XmCR_ACTIVATE == acc->PreviousArrowReason) return;
|
||||
acc -> PreviousArrowReason = XmCR_ACTIVATE;
|
||||
break;
|
||||
|
||||
default:
|
||||
case XmCR_ARM:
|
||||
/* avoid double invocation */
|
||||
if (XmCR_ARM == acc->PreviousArrowReason) return;
|
||||
acc -> PreviousArrowReason = XmCR_ARM;
|
||||
return;
|
||||
}
|
||||
|
||||
/* change arrow direction, mark account as needing expansion */
|
||||
if (acc->expand) {
|
||||
acc->expand = 0;
|
||||
XtVaSetValues (mw,
|
||||
XmNarrowDirection, XmARROW_DOWN,
|
||||
NULL);
|
||||
} else {
|
||||
acc->expand = 1;
|
||||
XtVaSetValues (mw,
|
||||
XmNarrowDirection, XmARROW_UP,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* finally, redraw the main window */
|
||||
refreshMainWindow ();
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* mainWindow -- the main window... (normally) the first window *
|
||||
* that pops up. Has list of accounts that the user can open. *
|
||||
@@ -129,10 +340,11 @@ refreshMainWindow( void )
|
||||
* Global: data - the data from the datafile *
|
||||
* accountlist - the widget that has the list of accounts *
|
||||
\********************************************************************/
|
||||
|
||||
void
|
||||
mainWindow( Widget parent )
|
||||
{
|
||||
Widget mainwindow,menubar,actionform,controlform,pane,widget;
|
||||
Widget mainwindow,menubar,actionform,buttonform,pane,button,widget;
|
||||
int position;
|
||||
|
||||
/******************************************************************\
|
||||
@@ -183,6 +395,8 @@ mainWindow( Widget parent )
|
||||
helpMenubarCB, (XtPointer)HMB_ABOUT, (MenuItem *)NULL },
|
||||
{ "Help...", &xmPushButtonWidgetClass, 'H', NULL, NULL,
|
||||
helpMenubarCB, (XtPointer)HMB_MAIN, (MenuItem *)NULL },
|
||||
{ "Accounts...", &xmPushButtonWidgetClass, 'H', NULL, NULL,
|
||||
helpMenubarCB, (XtPointer)HMB_ACC, (MenuItem *)NULL },
|
||||
{ "", &xmSeparatorWidgetClass, 0, NULL, NULL,
|
||||
NULL, NULL, (MenuItem *)NULL },
|
||||
{ "License...", &xmPushButtonWidgetClass, 'L', NULL, NULL,
|
||||
@@ -193,10 +407,8 @@ mainWindow( Widget parent )
|
||||
mainwindow = XtVaCreateManagedWidget( "mainwindow",
|
||||
xmMainWindowWidgetClass, parent,
|
||||
XmNdeleteResponse, XmDESTROY,
|
||||
/*linas hack */
|
||||
XmNwidth, 650,
|
||||
XmNheight, 300,
|
||||
|
||||
XmNwidth, 450,
|
||||
XmNheight, 240,
|
||||
NULL );
|
||||
|
||||
/* Umm... this doesn't seem to be getting called */
|
||||
@@ -271,19 +483,22 @@ mainWindow( Widget parent )
|
||||
* use the matrix instead of a list to get the accounts
|
||||
* up in columns */
|
||||
{
|
||||
String labels[3] = {"Account Name","Type","Balance"};
|
||||
short colWidths[] = {16,10,8};
|
||||
unsigned char alignments[3] = {XmALIGNMENT_BEGINNING,
|
||||
String labels[XACC_MAIN_NUM_COLS] = {"", "Account Name","Type","Balance"};
|
||||
short colWidths[] = {2,20,10,12};
|
||||
unsigned char alignments[XACC_MAIN_NUM_COLS] = {
|
||||
XmALIGNMENT_CENTER,
|
||||
XmALIGNMENT_BEGINNING,
|
||||
XmALIGNMENT_CENTER,
|
||||
XmALIGNMENT_END};
|
||||
|
||||
accountlist
|
||||
= XtVaCreateWidget( "list",
|
||||
xbaeMatrixWidgetClass, actionform,
|
||||
XmNvisibleRows, 7,
|
||||
XmNcolumns, 3,
|
||||
XmNvisibleRows, 8,
|
||||
XmNcolumns, XACC_MAIN_NUM_COLS,
|
||||
XmNcolumnWidths, colWidths,
|
||||
XmNcolumnAlignments, alignments,
|
||||
XmNcolumnLabelAlignments, alignments,
|
||||
XmNcolumnLabels, labels,
|
||||
XmNtraversalOn, False,
|
||||
XmNfill, True,
|
||||
@@ -307,9 +522,6 @@ mainWindow( Widget parent )
|
||||
accountMenubarCB, (XtPointer)AMB_OPEN );
|
||||
}
|
||||
|
||||
refreshMainWindow();
|
||||
XtManageChild(accountlist);
|
||||
|
||||
/******************************************************************\
|
||||
* The button area -- has buttons to create a new account, or *
|
||||
* delete an account, or whatever other button I think up *
|
||||
@@ -320,22 +532,22 @@ mainWindow( Widget parent )
|
||||
/* create form that will contain most everything in this window...
|
||||
* The fractionbase divides the form into segments, so we have
|
||||
* better control over where to put the buttons */
|
||||
controlform = XtVaCreateWidget( "form",
|
||||
buttonform = XtVaCreateWidget( "form",
|
||||
xmFormWidgetClass, pane,
|
||||
XmNfractionBase, 5,
|
||||
XmNfractionBase, 22,
|
||||
NULL );
|
||||
|
||||
position = 0; /* puts the buttons in the right place */
|
||||
|
||||
/* The "Open" button */
|
||||
widget = XtVaCreateManagedWidget( "Open",
|
||||
xmPushButtonWidgetClass, controlform,
|
||||
xmPushButtonWidgetClass, buttonform,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+1,
|
||||
XmNrightPosition, position+3,
|
||||
XmNshowAsDefault, True,
|
||||
NULL );
|
||||
|
||||
@@ -343,15 +555,15 @@ mainWindow( Widget parent )
|
||||
accountMenubarCB, (XtPointer)AMB_OPEN );
|
||||
|
||||
/* The "New" button, to create a new account */
|
||||
position ++;
|
||||
position += 3;
|
||||
widget = XtVaCreateManagedWidget( "New",
|
||||
xmPushButtonWidgetClass, controlform,
|
||||
xmPushButtonWidgetClass, buttonform,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+1,
|
||||
XmNrightPosition, position+3,
|
||||
XmNshowAsDefault, True,
|
||||
NULL );
|
||||
|
||||
@@ -359,15 +571,15 @@ mainWindow( Widget parent )
|
||||
accountMenubarCB, (XtPointer)AMB_NEW );
|
||||
|
||||
/* The "Edit" button */
|
||||
position ++;
|
||||
position += 3;
|
||||
widget = XtVaCreateManagedWidget( "Edit",
|
||||
xmPushButtonWidgetClass, controlform,
|
||||
xmPushButtonWidgetClass, buttonform,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+1,
|
||||
XmNrightPosition, position+3,
|
||||
XmNshowAsDefault, True,
|
||||
NULL );
|
||||
|
||||
@@ -375,42 +587,81 @@ mainWindow( Widget parent )
|
||||
accountMenubarCB, (XtPointer)AMB_EDIT );
|
||||
|
||||
/* The "Delete" button */
|
||||
position ++;
|
||||
position += 3;
|
||||
widget = XtVaCreateManagedWidget( "Delete",
|
||||
xmPushButtonWidgetClass, controlform,
|
||||
xmPushButtonWidgetClass, buttonform,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+1,
|
||||
XmNrightPosition, position+3,
|
||||
XmNshowAsDefault, True,
|
||||
NULL );
|
||||
|
||||
XtAddCallback( widget, XmNactivateCallback,
|
||||
accountMenubarCB, (XtPointer)AMB_DEL );
|
||||
|
||||
button = widget;
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
/* The Asset and Profit field labels: */
|
||||
position +=5;
|
||||
widget = XtVaCreateManagedWidget( "Assets:",
|
||||
xmLabelGadgetClass, buttonform,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+3,
|
||||
NULL );
|
||||
widget = XtVaCreateManagedWidget( "Profits:",
|
||||
xmLabelGadgetClass, buttonform,
|
||||
XmNtopAttachment, XmATTACH_WIDGET,
|
||||
XmNtopWidget, widget,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+3,
|
||||
NULL );
|
||||
|
||||
/* and the balance fields: */
|
||||
position += 3;
|
||||
widget = XtVaCreateManagedWidget( "text",
|
||||
xmTextWidgetClass, buttonform,
|
||||
XmNeditable, False,
|
||||
XmNeditMode, XmMULTI_LINE_EDIT,
|
||||
XmNcursorPositionVisible, False,
|
||||
XmNmarginHeight, 0,
|
||||
XmNmarginWidth, 1,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_POSITION,
|
||||
XmNleftPosition, position,
|
||||
XmNrightAttachment, XmATTACH_POSITION,
|
||||
XmNrightPosition, position+5,
|
||||
NULL );
|
||||
baln_widget = widget;
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
refreshMainWindow();
|
||||
XtManageChild(accountlist);
|
||||
|
||||
/* Fix button area of the pane to its current size, and not let
|
||||
* it resize. */
|
||||
XtManageChild( controlform );
|
||||
XtManageChild( buttonform );
|
||||
{
|
||||
Dimension h;
|
||||
XtVaGetValues( widget, XmNheight, &h, NULL );
|
||||
XtVaSetValues( controlform, XmNpaneMaximum, h, XmNpaneMinimum, h, NULL );
|
||||
XtVaGetValues( button, XmNheight, &h, NULL );
|
||||
XtVaSetValues( buttonform, XmNpaneMaximum, h, XmNpaneMinimum, h, NULL );
|
||||
}
|
||||
|
||||
/* Fix action area of the pane to its current size, and not let
|
||||
* it resize. */
|
||||
XtManageChild( actionform );
|
||||
{
|
||||
Dimension h;
|
||||
XtVaGetValues( accountlist, XmNheight, &h, NULL );
|
||||
XtVaSetValues( actionform, XmNpaneMaximum, h, XmNpaneMinimum, h, NULL );
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
XtManageChild(pane);
|
||||
XtManageChild( pane );
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -427,11 +678,67 @@ void
|
||||
closeMainWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
|
||||
#ifdef __XACC_DO_ARROW_CALLBACK
|
||||
/* this remove core-dumps motif, Don't know why --linas */
|
||||
/* XtRemoveEventHandler(mw->arrowb,
|
||||
* ButtonPressMask | ButtonReleaseMask,
|
||||
* True, (XtEventHandler) ArrowEventCallback,
|
||||
* (XtPointer) mw);
|
||||
*/
|
||||
#endif /* __XACC_DO_ARROW_CALLBACK */
|
||||
|
||||
DEBUG("closed MainWindow");
|
||||
DEBUGCMD(printf(" coresize = %d\n",_coresize()));
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* compute profits and asssets
|
||||
\********************************************************************/
|
||||
static void
|
||||
xaccMainWindowRedisplayBalance (void)
|
||||
{
|
||||
int i;
|
||||
double assets = 0.0;
|
||||
double profits = 0.0;
|
||||
char buf[BUFSIZE];
|
||||
AccountGroup *grp = topgroup;
|
||||
Account *acc;
|
||||
|
||||
for (i=0; i<grp->numAcc; i++) {
|
||||
acc = grp->account[i];
|
||||
|
||||
switch (acc->type) {
|
||||
case BANK:
|
||||
case CASH:
|
||||
case ASSET:
|
||||
case PORTFOLIO:
|
||||
case MUTUAL:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
assets += acc->balance;
|
||||
if (acc->children) {
|
||||
assets += acc->children->balance;
|
||||
}
|
||||
break;
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
profits -= acc->balance; /* flip the sign !! */
|
||||
if (acc->children) {
|
||||
profits -= acc->children->balance; /* flip the sign !! */
|
||||
}
|
||||
break;
|
||||
case EQUITY:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sprintf( buf, "$ %.2f\n$ %.2f", assets, profits);
|
||||
|
||||
XmTextSetString( baln_widget, buf );
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* listCB -- makes the matrix widget behave like a list widget *
|
||||
* *
|
||||
@@ -441,7 +748,7 @@ closeMainWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
* Return: none *
|
||||
* Global: accountlist - the widget that has the list of accounts *
|
||||
\********************************************************************/
|
||||
void
|
||||
static void
|
||||
listCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
XbaeMatrixEnterCellCallbackStruct *cbs =
|
||||
@@ -451,9 +758,10 @@ listCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
cbs->doit = False;
|
||||
cbs->map = False;
|
||||
|
||||
row = cbs->row;
|
||||
selected_acc = (Account *) XbaeMatrixGetRowUserData (accountlist, cbs->row);
|
||||
|
||||
XbaeMatrixDeselectAll(accountlist);
|
||||
XbaeMatrixSelectRow( accountlist, row );
|
||||
XbaeMatrixSelectRow( accountlist, cbs->row );
|
||||
}
|
||||
|
||||
|
||||
@@ -471,6 +779,7 @@ listCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
void
|
||||
fileMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
AccountGroup *grp = topgroup;
|
||||
int button = (int)cd;
|
||||
|
||||
/*
|
||||
@@ -485,54 +794,59 @@ fileMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
switch( button )
|
||||
{
|
||||
case FMB_NEW:
|
||||
DEBUG("FMB_NEW");
|
||||
if( (!(data->saved)) && (datafile != NULL) )
|
||||
DEBUG("FMB_NEW\n");
|
||||
if( xaccAccountGroupNotSaved (grp) )
|
||||
{
|
||||
char *msg = SAVE_MSG;
|
||||
if( verifyBox(toplevel,msg) )
|
||||
if( verifyBox (toplevel, FMB_SAVE_MSG) )
|
||||
fileMenubarCB( mw, (XtPointer)FMB_SAVE, cb );
|
||||
}
|
||||
datafile = NULL;
|
||||
freeData(data);
|
||||
data = mallocData();
|
||||
data->new = True; /* so we have to do a "SaveAs" when
|
||||
freeAccountGroup (grp);
|
||||
grp = mallocAccountGroup();
|
||||
grp->new = True; /* so we have to do a "SaveAs" when
|
||||
* the file is first saved */
|
||||
topgroup = grp;
|
||||
break;
|
||||
|
||||
case FMB_OPEN: {
|
||||
char * newfile;
|
||||
DEBUG("FMB_OPEN");
|
||||
if( (!(data->saved)) && (datafile != NULL) )
|
||||
{
|
||||
char *msg = SAVE_MSG;
|
||||
if( verifyBox(toplevel,msg) )
|
||||
DEBUG("FMB_OPEN\n");
|
||||
if( xaccAccountGroupNotSaved (grp) ) {
|
||||
if( verifyBox(toplevel, FMB_SAVE_MSG) ) {
|
||||
fileMenubarCB( mw, (XtPointer)FMB_SAVE, cb );
|
||||
}
|
||||
}
|
||||
newfile = fileBox(toplevel,OPEN);
|
||||
if (newfile) {
|
||||
datafile = newfile;
|
||||
freeData(data);
|
||||
freeAccountGroup (grp);
|
||||
|
||||
/* load the accounts from the users datafile */
|
||||
data = readData(datafile);
|
||||
grp = readData (datafile);
|
||||
|
||||
if( data == NULL ) {
|
||||
if( NULL == grp ) {
|
||||
/* the file could not be found */
|
||||
data = mallocData();
|
||||
grp = mallocAccountGroup();
|
||||
}
|
||||
topgroup = grp;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FMB_SAVE:
|
||||
DEBUG("FMB_SAVE");
|
||||
/* ??? Somehow make sure all in-progress edits get committed! */
|
||||
writeData( datafile, data );
|
||||
data->saved = True;
|
||||
DEBUG("FMB_SAVE\n");
|
||||
/* hack alert -- Somehow make sure all in-progress edits get committed! */
|
||||
if (NULL == datafile) {
|
||||
fileMenubarCB( mw, (XtPointer)FMB_SAVEAS, cb );
|
||||
break;
|
||||
}
|
||||
|
||||
writeData( datafile, grp );
|
||||
xaccAccountGroupMarkSaved (grp);
|
||||
break;
|
||||
|
||||
case FMB_SAVEAS: {
|
||||
char * newfile;
|
||||
DEBUG("FMB_SAVEAS");
|
||||
DEBUG("FMB_SAVEAS\n");
|
||||
|
||||
newfile = fileBox(toplevel,OPEN);
|
||||
if ( newfile ) {
|
||||
@@ -542,39 +856,39 @@ fileMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
break;
|
||||
}
|
||||
case FMB_QUIT:
|
||||
DEBUG("FMB_QUIT");
|
||||
DEBUG("FMB_QUIT\n");
|
||||
{
|
||||
Account *acc;
|
||||
int i=0;
|
||||
while( (acc=getAccount(data,i++)) != NULL )
|
||||
while( (acc=getAccount (grp,i++)) != NULL )
|
||||
{
|
||||
if( acc->regData != NULL )
|
||||
{
|
||||
/* ??? */
|
||||
/* ??? -- hack alert -- should free */
|
||||
acc->regData = NULL;
|
||||
}
|
||||
if( acc->recnData != NULL )
|
||||
{
|
||||
/* ??? */
|
||||
/* ??? -- hack alert -- should free */
|
||||
acc->recnData = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if( (!(data->saved)) && (datafile != NULL) )
|
||||
if( !(grp->saved) )
|
||||
{
|
||||
char *msg = SAVE_MSG;
|
||||
if( verifyBox(toplevel,msg) )
|
||||
if( verifyBox(toplevel, FMB_SAVE_MSG) )
|
||||
fileMenubarCB( mw, (XtPointer)FMB_SAVE, cb );
|
||||
}
|
||||
|
||||
freeData(data);
|
||||
freeAccountGroup (grp);
|
||||
topgroup = NULL;
|
||||
XtUnmapWidget(toplevel); /* make it disappear quickly */
|
||||
XtDestroyWidget(toplevel);
|
||||
return; /* to avoid the refreshMainWindow */
|
||||
}
|
||||
break;
|
||||
default:
|
||||
DEBUG("We shouldn't be here!");
|
||||
PERR("fileMenubarCB(): We shouldn't be here!");
|
||||
}
|
||||
refreshMainWindow();
|
||||
}
|
||||
@@ -586,9 +900,9 @@ fileMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
* cd - const that lets us know which choice was selected *
|
||||
* cb - *
|
||||
* Return: none *
|
||||
* Global: data - the data from the datafile *
|
||||
* row - the selected row number *
|
||||
* toplevel - the toplevel widget *
|
||||
* Global: data - the data from the datafile *
|
||||
* selected_acc - the selected account *
|
||||
* toplevel - the toplevel widget *
|
||||
\********************************************************************/
|
||||
void
|
||||
accountMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
@@ -596,6 +910,7 @@ accountMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
int button = (int)cd;
|
||||
int *posList;
|
||||
int numPos;
|
||||
AccountGroup *grp = topgroup;
|
||||
|
||||
/*
|
||||
* which of the file menubar options was chosen
|
||||
@@ -609,18 +924,15 @@ accountMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
switch( button )
|
||||
{
|
||||
case AMB_NEW:
|
||||
DEBUG("AMB_NEW");
|
||||
DEBUG("AMB_NEW\n");
|
||||
accWindow(toplevel);
|
||||
break;
|
||||
case AMB_OPEN:
|
||||
DEBUG("AMB_OPEN");
|
||||
DEBUG("AMB_OPEN\n");
|
||||
{
|
||||
Account *acc = getAccount(data,row);
|
||||
Account *acc = selected_acc;
|
||||
if( NULL == acc ) {
|
||||
int make_new = verifyBox (toplevel,
|
||||
"Do you want to create a new account?\n\
|
||||
If not, then please select an account\n\
|
||||
account to open in the main window.\n");
|
||||
int make_new = verifyBox (toplevel, ACC_NEW_MSG);
|
||||
if (make_new) {
|
||||
accWindow(toplevel);
|
||||
}
|
||||
@@ -633,48 +945,49 @@ account to open in the main window.\n");
|
||||
}
|
||||
break;
|
||||
case AMB_EDIT:
|
||||
DEBUG("AMB_EDIT");
|
||||
DEBUG("AMB_EDIT\n");
|
||||
{
|
||||
Account *acc = getAccount(data,row);
|
||||
Account *acc = selected_acc;
|
||||
if( NULL == acc ) {
|
||||
errorBox (toplevel,
|
||||
"To edit an account, you must first \n\
|
||||
choose an account to delete.\n");
|
||||
errorBox (toplevel, ACC_EDIT_MSG);
|
||||
} else {
|
||||
editAccWindow( toplevel, getAccount(data,row) );
|
||||
editAccWindow( toplevel, acc );
|
||||
}
|
||||
}
|
||||
break;
|
||||
case AMB_DEL:
|
||||
DEBUG("AMB_DEL");
|
||||
DEBUG("AMB_DEL\n");
|
||||
{
|
||||
Account *acc = getAccount(data,row);
|
||||
Account *acc = selected_acc;
|
||||
if( NULL == acc ) {
|
||||
errorBox (toplevel,
|
||||
"To delete an account, you must first \n\
|
||||
choose an account to delete.\n");
|
||||
errorBox (toplevel, ACC_DEL_MSG);
|
||||
} else {
|
||||
char *msg = "Are you sure you want to delete this account?";
|
||||
char msg[1000];
|
||||
sprintf (msg,
|
||||
"Are you sure you want to delete the %s account?",
|
||||
acc->accountName);
|
||||
if( verifyBox(toplevel,msg) ) {
|
||||
freeAccount( removeAccount(data,row) );
|
||||
xaccRemoveAccount (selected_acc);
|
||||
freeAccount (selected_acc);
|
||||
selected_acc = NULL;
|
||||
refreshMainWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case AMB_TRNS:
|
||||
DEBUG("AMB_TRNS");
|
||||
DEBUG("AMB_TRNS\n");
|
||||
xferWindow(toplevel);
|
||||
break;
|
||||
case AMB_RPRT:
|
||||
DEBUG("AMB_RPRT");
|
||||
DEBUG("AMB_RPRT\n");
|
||||
simpleReportWindow(toplevel);
|
||||
break;
|
||||
case AMB_CAT:
|
||||
DEBUG("AMB_CAT");
|
||||
DEBUG("AMB_CAT\n");
|
||||
break;
|
||||
default:
|
||||
DEBUG("We shouldn't be here!");
|
||||
PERR ("AccountMenuBarCB(): We shouldn't be here!\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -709,6 +1022,10 @@ helpMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
DEBUG("HMB_ABOUT");
|
||||
helpWindow( toplevel, "About", HH_ABOUT );
|
||||
break;
|
||||
case HMB_ACC:
|
||||
DEBUG("HMB_ACC");
|
||||
helpWindow( toplevel, "Help", HH_ACC );
|
||||
break;
|
||||
case HMB_REGWIN:
|
||||
/* When the user selects "Help" in the RegWindow */
|
||||
DEBUG("HMB_REGWIN");
|
||||
@@ -738,3 +1055,5 @@ helpMenubarCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
DEBUG("We shouldn't be here!");
|
||||
}
|
||||
}
|
||||
|
||||
/********************* END OF FILE **********************************/
|
||||
|
||||
774
src/Makefile
774
src/Makefile
@@ -26,7 +26,8 @@
|
||||
######################################################################
|
||||
# DO NOT EDIT THE STUFF BELOW THIS LINE! #
|
||||
|
||||
OBJS = Account.o AccWindow.o Action.o AdjBWindow.o BuildMenu.o Data.o date.o \
|
||||
OBJS = Account.o AccountMenu.o AccWindow.o Action.o AdjBWindow.o \
|
||||
BuildMenu.o Data.o date.o \
|
||||
FileBox.o FileIO.o HelpWindow.o main.o MainWindow.o PopBox.o \
|
||||
QIFIO.o QuickFill.o RecnWindow.o RegWindow.o Reports.o \
|
||||
Transaction.o util.o XferBox.o XferWindow.o
|
||||
@@ -56,3 +57,774 @@ really_clean:
|
||||
makedepend -- --
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
Account.o: ../include/Account.h ../include/QuickFill.h
|
||||
Account.o: ../include/Transaction.h /usr/include/Xm/Xm.h
|
||||
Account.o: /usr/include/X11/Intrinsic.h /usr/include/X11/X11/Xlib.h
|
||||
Account.o: /usr/include/sys/types.h /usr/include/linux/types.h
|
||||
Account.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h
|
||||
Account.o: /usr/include/asm/types.h /usr/include/sys/bitypes.h
|
||||
Account.o: /usr/include/X11/X11/X11/X.h /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
Account.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
Account.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
Account.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
Account.o: /usr/include/string.h /usr/include/features.h
|
||||
Account.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
Account.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
Account.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
Account.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
Account.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
Account.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
Account.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
Account.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
Account.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
Account.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
Account.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
Account.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
Account.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
Account.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
Account.o: /usr/include/Xm/XmIm.h ../include/date.h ../include/Data.h
|
||||
Account.o: ../include/main.h ../include/util.h /usr/include/stdio.h
|
||||
Account.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/errno.h
|
||||
Account.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
AccWindow.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
AccWindow.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
AccWindow.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
AccWindow.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
AccWindow.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
AccWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
AccWindow.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
AccWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
AccWindow.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
AccWindow.o: /usr/include/string.h /usr/include/features.h
|
||||
AccWindow.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
AccWindow.o: /usr/include/X11/X11/Composite.h
|
||||
AccWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
AccWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
AccWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
AccWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
AccWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
AccWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
AccWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
AccWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
AccWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
AccWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
AccWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
AccWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
AccWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
AccWindow.o: /usr/include/Xm/DialogS.h /usr/include/Xm/Form.h
|
||||
AccWindow.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/Frame.h
|
||||
AccWindow.o: /usr/include/Xm/RowColumn.h /usr/include/Xm/LabelGP.h
|
||||
AccWindow.o: /usr/include/Xm/LabelG.h /usr/include/Xm/GadgetP.h
|
||||
AccWindow.o: /usr/include/Xm/XmP.h /usr/include/X11/IntrinsicP.h
|
||||
AccWindow.o: /usr/include/X11/X11/CoreP.h /usr/include/X11/X11/CompositeP.h
|
||||
AccWindow.o: /usr/include/X11/X11/ConstrainP.h /usr/include/X11/X11/ObjectP.h
|
||||
AccWindow.o: /usr/include/X11/X11/RectObjP.h /usr/include/Xm/ColorP.h
|
||||
AccWindow.o: /usr/include/Xm/AccColorT.h /usr/include/Xm/BaseClassP.h
|
||||
AccWindow.o: /usr/include/Xm/ExtObjectP.h /usr/include/Xm/ToggleB.h
|
||||
AccWindow.o: /usr/include/Xm/PushB.h /usr/include/Xm/Text.h
|
||||
AccWindow.o: /usr/include/stdio.h /usr/include/libio.h
|
||||
AccWindow.o: /usr/include/_G_config.h ../include/Account.h
|
||||
AccWindow.o: ../include/QuickFill.h ../include/Transaction.h
|
||||
AccWindow.o: ../include/date.h ../include/Data.h ../include/main.h
|
||||
AccWindow.o: ../include/util.h /usr/include/errno.h
|
||||
AccWindow.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
Action.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
Action.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
Action.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
Action.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
Action.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
Action.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
Action.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
Action.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
Action.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
Action.o: /usr/include/string.h /usr/include/features.h
|
||||
Action.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
Action.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
Action.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
Action.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
Action.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
Action.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
Action.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
Action.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
Action.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
Action.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
Action.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
Action.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
Action.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
Action.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
Action.o: /usr/include/Xm/XmIm.h ../include/Action.h ../include/PopBox.h
|
||||
Action.o: ../include/Data.h ../include/Account.h ../include/QuickFill.h
|
||||
Action.o: ../include/Transaction.h ../include/date.h ../include/util.h
|
||||
Action.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
|
||||
Action.o: /usr/include/errno.h /usr/include/linux/errno.h
|
||||
Action.o: /usr/include/asm/errno.h
|
||||
AdjBWindow.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
AdjBWindow.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
AdjBWindow.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
AdjBWindow.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
AdjBWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
AdjBWindow.o: /usr/include/string.h /usr/include/features.h
|
||||
AdjBWindow.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/Composite.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
AdjBWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
AdjBWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
AdjBWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
AdjBWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
AdjBWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
AdjBWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
AdjBWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
AdjBWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
AdjBWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
AdjBWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
AdjBWindow.o: /usr/include/Xm/Form.h /usr/include/Xm/BulletinB.h
|
||||
AdjBWindow.o: /usr/include/Xm/Text.h /usr/include/stdio.h
|
||||
AdjBWindow.o: /usr/include/libio.h /usr/include/_G_config.h
|
||||
AdjBWindow.o: /usr/include/Xm/DialogS.h /usr/include/Xm/PanedW.h
|
||||
AdjBWindow.o: /usr/include/Xm/PushB.h /usr/include/Xm/LabelGP.h
|
||||
AdjBWindow.o: /usr/include/Xm/LabelG.h /usr/include/Xm/GadgetP.h
|
||||
AdjBWindow.o: /usr/include/Xm/XmP.h /usr/include/X11/IntrinsicP.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/CoreP.h /usr/include/X11/X11/CompositeP.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/ConstrainP.h
|
||||
AdjBWindow.o: /usr/include/X11/X11/ObjectP.h /usr/include/X11/X11/RectObjP.h
|
||||
AdjBWindow.o: /usr/include/Xm/ColorP.h /usr/include/Xm/AccColorT.h
|
||||
AdjBWindow.o: /usr/include/Xm/BaseClassP.h /usr/include/Xm/ExtObjectP.h
|
||||
AdjBWindow.o: ../include/main.h ../include/date.h ../include/Transaction.h
|
||||
AdjBWindow.o: ../include/util.h /usr/include/errno.h
|
||||
AdjBWindow.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
AdjBWindow.o: ../include/Data.h ../include/Account.h ../include/QuickFill.h
|
||||
AdjBWindow.o: ../include/MainWindow.h
|
||||
BuildMenu.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
BuildMenu.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
BuildMenu.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
BuildMenu.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
BuildMenu.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
BuildMenu.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
BuildMenu.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
BuildMenu.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
BuildMenu.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
BuildMenu.o: /usr/include/string.h /usr/include/features.h
|
||||
BuildMenu.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
BuildMenu.o: /usr/include/X11/X11/Composite.h
|
||||
BuildMenu.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
BuildMenu.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
BuildMenu.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
BuildMenu.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
BuildMenu.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
BuildMenu.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
BuildMenu.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
BuildMenu.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
BuildMenu.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
BuildMenu.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
BuildMenu.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
BuildMenu.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
BuildMenu.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
BuildMenu.o: /usr/include/X11/cursorfont.h /usr/include/Xm/DrawingA.h
|
||||
BuildMenu.o: /usr/include/Xm/Form.h /usr/include/Xm/BulletinB.h
|
||||
BuildMenu.o: /usr/include/Xm/RowColumn.h /usr/include/Xm/MainW.h
|
||||
BuildMenu.o: /usr/include/Xm/FileSB.h /usr/include/Xm/MessageB.h
|
||||
BuildMenu.o: /usr/include/Xm/DialogS.h /usr/include/Xm/PanedW.h
|
||||
BuildMenu.o: /usr/include/Xm/ScrolledW.h /usr/include/Xm/DrawnB.h
|
||||
BuildMenu.o: /usr/include/Xm/ToggleB.h /usr/include/Xm/ToggleBG.h
|
||||
BuildMenu.o: /usr/include/Xm/PushB.h /usr/include/Xm/PushBG.h
|
||||
BuildMenu.o: /usr/include/Xm/CascadeBG.h /usr/include/Xm/Label.h
|
||||
BuildMenu.o: /usr/include/Xm/LabelG.h /usr/include/Xm/Scale.h
|
||||
BuildMenu.o: /usr/include/Xm/Text.h /usr/include/stdio.h /usr/include/libio.h
|
||||
BuildMenu.o: /usr/include/_G_config.h /usr/include/Xm/TextF.h
|
||||
BuildMenu.o: /usr/include/Xm/SeparatoG.h ../include/BuildMenu.h
|
||||
BuildMenu.o: /usr/include/Xm/Separator.h
|
||||
Data.o: ../include/Account.h ../include/QuickFill.h ../include/Transaction.h
|
||||
Data.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
Data.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
Data.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
Data.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
Data.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
Data.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
Data.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
Data.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
Data.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
Data.o: /usr/include/string.h /usr/include/features.h
|
||||
Data.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
Data.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
Data.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
Data.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
Data.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
Data.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
Data.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
Data.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
Data.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
Data.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
Data.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
Data.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
Data.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
Data.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
Data.o: /usr/include/Xm/XmIm.h ../include/date.h ../include/Data.h
|
||||
Data.o: ../include/util.h /usr/include/stdio.h /usr/include/libio.h
|
||||
Data.o: /usr/include/_G_config.h /usr/include/errno.h
|
||||
Data.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
date.o: /usr/include/time.h /usr/include/features.h /usr/include/sys/cdefs.h
|
||||
date.o: /usr/include/sys/time.h /usr/include/linux/types.h
|
||||
date.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h
|
||||
date.o: /usr/include/asm/types.h /usr/include/linux/time.h
|
||||
date.o: /usr/include/sys/types.h /usr/include/sys/bitypes.h ../include/date.h
|
||||
date.o: ../include/util.h /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
date.o: /usr/include/X11/X11/Xlib.h /usr/include/X11/X11/X11/X.h
|
||||
date.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
date.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
date.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
date.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
date.o: /usr/include/string.h /usr/include/X11/X11/Core.h
|
||||
date.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
date.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
date.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
date.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
date.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
date.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
date.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
date.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
date.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
date.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
date.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
date.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
date.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
date.o: /usr/include/Xm/XmIm.h /usr/include/stdio.h /usr/include/libio.h
|
||||
date.o: /usr/include/_G_config.h /usr/include/errno.h
|
||||
date.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
FileBox.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
FileBox.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
FileBox.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
FileBox.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
FileBox.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
FileBox.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
FileBox.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
FileBox.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
FileBox.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
FileBox.o: /usr/include/string.h /usr/include/features.h
|
||||
FileBox.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
FileBox.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
FileBox.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
FileBox.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
FileBox.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
FileBox.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
FileBox.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
FileBox.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
FileBox.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
FileBox.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
FileBox.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
FileBox.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
FileBox.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
FileBox.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
FileBox.o: /usr/include/Xm/XmIm.h /usr/include/Xm/FileSB.h
|
||||
FileBox.o: ../include/FileBox.h ../include/util.h /usr/include/stdio.h
|
||||
FileBox.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/errno.h
|
||||
FileBox.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
FileIO.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
FileIO.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
FileIO.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
FileIO.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
FileIO.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
FileIO.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
FileIO.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
FileIO.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
FileIO.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
FileIO.o: /usr/include/string.h /usr/include/features.h
|
||||
FileIO.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
FileIO.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
FileIO.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
FileIO.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
FileIO.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
FileIO.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
FileIO.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
FileIO.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
FileIO.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
FileIO.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
FileIO.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
FileIO.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
FileIO.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
FileIO.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
FileIO.o: /usr/include/Xm/XmIm.h /usr/include/fcntl.h
|
||||
FileIO.o: /usr/include/gnu/types.h /usr/include/linux/fcntl.h
|
||||
FileIO.o: /usr/include/asm/fcntl.h ../include/main.h ../include/date.h
|
||||
FileIO.o: ../include/Transaction.h ../include/util.h /usr/include/stdio.h
|
||||
FileIO.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/errno.h
|
||||
FileIO.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
FileIO.o: ../include/Account.h ../include/QuickFill.h ../include/Data.h
|
||||
HelpWindow.o: /usr/include/sys/types.h /usr/include/linux/types.h
|
||||
HelpWindow.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h
|
||||
HelpWindow.o: /usr/include/asm/types.h /usr/include/sys/bitypes.h
|
||||
HelpWindow.o: /usr/include/sys/stat.h /usr/include/features.h
|
||||
HelpWindow.o: /usr/include/sys/cdefs.h /usr/include/linux/stat.h
|
||||
HelpWindow.o: /usr/include/fcntl.h /usr/include/gnu/types.h
|
||||
HelpWindow.o: /usr/include/linux/fcntl.h /usr/include/asm/fcntl.h
|
||||
HelpWindow.o: /usr/include/unistd.h /usr/include/posix_opt.h
|
||||
HelpWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
HelpWindow.o: /usr/include/confname.h /usr/include/Xm/Xm.h
|
||||
HelpWindow.o: /usr/include/X11/Intrinsic.h /usr/include/X11/X11/Xlib.h
|
||||
HelpWindow.o: /usr/include/X11/X11/X11/X.h
|
||||
HelpWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
HelpWindow.o: /usr/include/X11/X11/X11/Xosdefs.h /usr/include/X11/X11/Xutil.h
|
||||
HelpWindow.o: /usr/include/X11/X11/Xresource.h /usr/include/string.h
|
||||
HelpWindow.o: /usr/include/X11/X11/Core.h /usr/include/X11/X11/Composite.h
|
||||
HelpWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
HelpWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
HelpWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
HelpWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
HelpWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
HelpWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
HelpWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
HelpWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
HelpWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
HelpWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
HelpWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
HelpWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
HelpWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
HelpWindow.o: /usr/include/Xm/DialogS.h /usr/include/Xm/PanedW.h
|
||||
HelpWindow.o: /usr/include/Xm/Frame.h /usr/include/Xm/Form.h
|
||||
HelpWindow.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/PushB.h
|
||||
HelpWindow.o: /usr/include/X11/xpm.h ../include/main.h ../include/date.h
|
||||
HelpWindow.o: ../include/Transaction.h ../include/util.h /usr/include/stdio.h
|
||||
HelpWindow.o: /usr/include/libio.h /usr/include/_G_config.h
|
||||
HelpWindow.o: /usr/include/errno.h /usr/include/linux/errno.h
|
||||
HelpWindow.o: /usr/include/asm/errno.h ../libhtmlw/HTML.h
|
||||
main.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
main.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
main.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
main.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
main.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
main.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
main.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
main.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
main.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
main.o: /usr/include/string.h /usr/include/features.h
|
||||
main.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
main.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
main.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
main.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
main.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
main.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
main.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
main.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
main.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
main.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
main.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
main.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
main.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
main.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
main.o: /usr/include/Xm/XmIm.h ../include/BuildMenu.h /usr/include/Xm/PushB.h
|
||||
main.o: /usr/include/Xm/Separator.h ../include/RegWindow.h
|
||||
main.o: ../include/Account.h ../include/QuickFill.h ../include/Transaction.h
|
||||
main.o: ../include/date.h ../include/FileIO.h ../include/Data.h
|
||||
main.o: ../include/FileBox.h ../include/util.h /usr/include/stdio.h
|
||||
main.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/errno.h
|
||||
main.o: /usr/include/linux/errno.h /usr/include/asm/errno.h ../include/main.h
|
||||
MainWindow.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
MainWindow.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
MainWindow.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
MainWindow.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
MainWindow.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
MainWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
MainWindow.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
MainWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
MainWindow.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
MainWindow.o: /usr/include/string.h /usr/include/features.h
|
||||
MainWindow.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
MainWindow.o: /usr/include/X11/X11/Composite.h
|
||||
MainWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
MainWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
MainWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
MainWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
MainWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
MainWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
MainWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
MainWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
MainWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
MainWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
MainWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
MainWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
MainWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
MainWindow.o: /usr/include/Xm/PanedW.h /usr/include/Xm/Form.h
|
||||
MainWindow.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/MainW.h
|
||||
MainWindow.o: /usr/include/Xm/Label.h /usr/include/Xm/LabelGP.h
|
||||
MainWindow.o: /usr/include/Xm/LabelG.h /usr/include/Xm/GadgetP.h
|
||||
MainWindow.o: /usr/include/Xm/XmP.h /usr/include/X11/IntrinsicP.h
|
||||
MainWindow.o: /usr/include/X11/X11/CoreP.h /usr/include/X11/X11/CompositeP.h
|
||||
MainWindow.o: /usr/include/X11/X11/ConstrainP.h
|
||||
MainWindow.o: /usr/include/X11/X11/ObjectP.h /usr/include/X11/X11/RectObjP.h
|
||||
MainWindow.o: /usr/include/Xm/ColorP.h /usr/include/Xm/AccColorT.h
|
||||
MainWindow.o: /usr/include/Xm/BaseClassP.h /usr/include/Xm/ExtObjectP.h
|
||||
MainWindow.o: /usr/include/Xm/List.h /usr/include/Xm/RowColumn.h
|
||||
MainWindow.o: ../Xbae-4.6.2-linas/Xbae/Matrix.h
|
||||
MainWindow.o: ../Xbae-4.6.2-linas/Xbae/Xbae/patchlevel.h ../include/main.h
|
||||
MainWindow.o: ../include/date.h ../include/Transaction.h ../include/util.h
|
||||
MainWindow.o: /usr/include/stdio.h /usr/include/libio.h
|
||||
MainWindow.o: /usr/include/_G_config.h /usr/include/errno.h
|
||||
MainWindow.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
MainWindow.o: ../include/Data.h ../include/Account.h ../include/QuickFill.h
|
||||
MainWindow.o: ../include/FileIO.h ../include/FileBox.h ../include/BuildMenu.h
|
||||
MainWindow.o: /usr/include/Xm/PushB.h /usr/include/Xm/Separator.h
|
||||
MainWindow.o: ../include/MainWindow.h ../include/RegWindow.h
|
||||
MainWindow.o: ../include/XferWindow.h ../include/HelpWindow.h
|
||||
PopBox.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
PopBox.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
PopBox.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
PopBox.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
PopBox.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
PopBox.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
PopBox.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
PopBox.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
PopBox.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
PopBox.o: /usr/include/string.h /usr/include/features.h
|
||||
PopBox.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
PopBox.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
PopBox.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
PopBox.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
PopBox.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
PopBox.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
PopBox.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
PopBox.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
PopBox.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
PopBox.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
PopBox.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
PopBox.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
PopBox.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
PopBox.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
PopBox.o: /usr/include/Xm/XmIm.h ../ComboBox-1.33/ComboBox.h
|
||||
PopBox.o: ../Xbae-4.6.2-linas/Xbae/Matrix.h
|
||||
PopBox.o: ../Xbae-4.6.2-linas/Xbae/Xbae/patchlevel.h ../include/util.h
|
||||
PopBox.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
|
||||
PopBox.o: /usr/include/errno.h /usr/include/linux/errno.h
|
||||
PopBox.o: /usr/include/asm/errno.h
|
||||
QIFIO.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
QIFIO.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
QIFIO.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
QIFIO.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
QIFIO.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
QIFIO.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
QIFIO.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
QIFIO.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
QIFIO.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
QIFIO.o: /usr/include/string.h /usr/include/features.h
|
||||
QIFIO.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
QIFIO.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
QIFIO.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
QIFIO.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
QIFIO.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
QIFIO.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
QIFIO.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
QIFIO.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
QIFIO.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
QIFIO.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
QIFIO.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
QIFIO.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
QIFIO.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
QIFIO.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
QIFIO.o: /usr/include/Xm/XmIm.h /usr/include/fcntl.h /usr/include/gnu/types.h
|
||||
QIFIO.o: /usr/include/linux/fcntl.h /usr/include/asm/fcntl.h
|
||||
QIFIO.o: ../include/main.h ../include/date.h ../include/Transaction.h
|
||||
QIFIO.o: ../include/util.h /usr/include/stdio.h /usr/include/libio.h
|
||||
QIFIO.o: /usr/include/_G_config.h /usr/include/errno.h
|
||||
QIFIO.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
QIFIO.o: ../include/Account.h ../include/QuickFill.h ../include/Data.h
|
||||
QuickFill.o: /usr/include/string.h /usr/include/features.h
|
||||
QuickFill.o: /usr/include/sys/cdefs.h
|
||||
QuickFill.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
QuickFill.o: ../include/util.h /usr/include/Xm/Xm.h
|
||||
QuickFill.o: /usr/include/X11/Intrinsic.h /usr/include/X11/X11/Xlib.h
|
||||
QuickFill.o: /usr/include/sys/types.h /usr/include/linux/types.h
|
||||
QuickFill.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h
|
||||
QuickFill.o: /usr/include/asm/types.h /usr/include/sys/bitypes.h
|
||||
QuickFill.o: /usr/include/X11/X11/X11/X.h
|
||||
QuickFill.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
QuickFill.o: /usr/include/X11/X11/X11/Xosdefs.h /usr/include/X11/X11/Xutil.h
|
||||
QuickFill.o: /usr/include/X11/X11/Xresource.h /usr/include/X11/X11/Core.h
|
||||
QuickFill.o: /usr/include/X11/X11/Composite.h
|
||||
QuickFill.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
QuickFill.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
QuickFill.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
QuickFill.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
QuickFill.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
QuickFill.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
QuickFill.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
QuickFill.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
QuickFill.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
QuickFill.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
QuickFill.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
QuickFill.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
QuickFill.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
QuickFill.o: /usr/include/stdio.h /usr/include/libio.h
|
||||
QuickFill.o: /usr/include/_G_config.h /usr/include/errno.h
|
||||
QuickFill.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
QuickFill.o: ../include/main.h ../include/date.h ../include/Transaction.h
|
||||
QuickFill.o: ../include/Account.h ../include/QuickFill.h
|
||||
RecnWindow.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
RecnWindow.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
RecnWindow.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
RecnWindow.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
RecnWindow.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
RecnWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
RecnWindow.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
RecnWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
RecnWindow.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
RecnWindow.o: /usr/include/string.h /usr/include/features.h
|
||||
RecnWindow.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
RecnWindow.o: /usr/include/X11/X11/Composite.h
|
||||
RecnWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
RecnWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
RecnWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
RecnWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
RecnWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
RecnWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
RecnWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
RecnWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
RecnWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
RecnWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
RecnWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
RecnWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
RecnWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
RecnWindow.o: /usr/include/Xm/RowColumn.h /usr/include/Xm/Form.h
|
||||
RecnWindow.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/Text.h
|
||||
RecnWindow.o: /usr/include/stdio.h /usr/include/libio.h
|
||||
RecnWindow.o: /usr/include/_G_config.h /usr/include/Xm/DialogS.h
|
||||
RecnWindow.o: /usr/include/Xm/PanedW.h /usr/include/Xm/Frame.h
|
||||
RecnWindow.o: /usr/include/Xm/PushB.h /usr/include/Xm/LabelGP.h
|
||||
RecnWindow.o: /usr/include/Xm/LabelG.h /usr/include/Xm/GadgetP.h
|
||||
RecnWindow.o: /usr/include/Xm/XmP.h /usr/include/X11/IntrinsicP.h
|
||||
RecnWindow.o: /usr/include/X11/X11/CoreP.h /usr/include/X11/X11/CompositeP.h
|
||||
RecnWindow.o: /usr/include/X11/X11/ConstrainP.h
|
||||
RecnWindow.o: /usr/include/X11/X11/ObjectP.h /usr/include/X11/X11/RectObjP.h
|
||||
RecnWindow.o: /usr/include/Xm/ColorP.h /usr/include/Xm/AccColorT.h
|
||||
RecnWindow.o: /usr/include/Xm/BaseClassP.h /usr/include/Xm/ExtObjectP.h
|
||||
RecnWindow.o: ../Xbae-4.6.2-linas/Xbae/Matrix.h
|
||||
RecnWindow.o: ../Xbae-4.6.2-linas/Xbae/Xbae/patchlevel.h ../include/Data.h
|
||||
RecnWindow.o: ../include/Account.h ../include/QuickFill.h
|
||||
RecnWindow.o: ../include/Transaction.h ../include/date.h
|
||||
RecnWindow.o: ../include/RegWindow.h ../include/MainWindow.h
|
||||
RecnWindow.o: ../include/main.h ../include/util.h /usr/include/errno.h
|
||||
RecnWindow.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
RegWindow.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
RegWindow.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
RegWindow.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
RegWindow.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
RegWindow.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
RegWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
RegWindow.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
RegWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
RegWindow.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
RegWindow.o: /usr/include/string.h /usr/include/features.h
|
||||
RegWindow.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
RegWindow.o: /usr/include/X11/X11/Composite.h
|
||||
RegWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
RegWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
RegWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
RegWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
RegWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
RegWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
RegWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
RegWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
RegWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
RegWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
RegWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
RegWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
RegWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
RegWindow.o: /usr/include/Xm/DialogS.h /usr/include/Xm/Form.h
|
||||
RegWindow.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/Frame.h
|
||||
RegWindow.o: /usr/include/Xm/LabelGP.h /usr/include/Xm/LabelG.h
|
||||
RegWindow.o: /usr/include/Xm/GadgetP.h /usr/include/Xm/XmP.h
|
||||
RegWindow.o: /usr/include/X11/IntrinsicP.h /usr/include/X11/X11/CoreP.h
|
||||
RegWindow.o: /usr/include/X11/X11/CompositeP.h
|
||||
RegWindow.o: /usr/include/X11/X11/ConstrainP.h /usr/include/X11/X11/ObjectP.h
|
||||
RegWindow.o: /usr/include/X11/X11/RectObjP.h /usr/include/Xm/ColorP.h
|
||||
RegWindow.o: /usr/include/Xm/AccColorT.h /usr/include/Xm/BaseClassP.h
|
||||
RegWindow.o: /usr/include/Xm/ExtObjectP.h /usr/include/Xm/PanedW.h
|
||||
RegWindow.o: /usr/include/Xm/PushB.h /usr/include/Xm/RowColumn.h
|
||||
RegWindow.o: /usr/include/Xm/Text.h /usr/include/stdio.h /usr/include/libio.h
|
||||
RegWindow.o: /usr/include/_G_config.h ../Xbae-4.6.2-linas/Xbae/Matrix.h
|
||||
RegWindow.o: ../Xbae-4.6.2-linas/Xbae/Xbae/patchlevel.h ../include/Account.h
|
||||
RegWindow.o: ../include/QuickFill.h ../include/Transaction.h
|
||||
RegWindow.o: ../include/date.h ../include/Action.h ../include/AdjBWindow.h
|
||||
RegWindow.o: ../include/BuildMenu.h /usr/include/Xm/Separator.h
|
||||
RegWindow.o: ../include/Data.h ../include/main.h ../include/MainWindow.h
|
||||
RegWindow.o: ../include/PopBox.h ../include/RecnWindow.h ../include/util.h
|
||||
RegWindow.o: /usr/include/errno.h /usr/include/linux/errno.h
|
||||
RegWindow.o: /usr/include/asm/errno.h
|
||||
Reports.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
Reports.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
Reports.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
Reports.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
Reports.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
Reports.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
Reports.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
Reports.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
Reports.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
Reports.o: /usr/include/string.h /usr/include/features.h
|
||||
Reports.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
Reports.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
Reports.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
Reports.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
Reports.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
Reports.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
Reports.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
Reports.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
Reports.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
Reports.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
Reports.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
Reports.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
Reports.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
Reports.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
Reports.o: /usr/include/Xm/XmIm.h /usr/include/Xm/Form.h
|
||||
Reports.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/Text.h
|
||||
Reports.o: /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h
|
||||
Reports.o: /usr/include/Xm/DialogS.h /usr/include/Xm/PanedW.h
|
||||
Reports.o: /usr/include/Xm/Frame.h /usr/include/Xm/PushB.h
|
||||
Reports.o: /usr/include/Xm/LabelGP.h /usr/include/Xm/LabelG.h
|
||||
Reports.o: /usr/include/Xm/GadgetP.h /usr/include/Xm/XmP.h
|
||||
Reports.o: /usr/include/X11/IntrinsicP.h /usr/include/X11/X11/CoreP.h
|
||||
Reports.o: /usr/include/X11/X11/CompositeP.h
|
||||
Reports.o: /usr/include/X11/X11/ConstrainP.h /usr/include/X11/X11/ObjectP.h
|
||||
Reports.o: /usr/include/X11/X11/RectObjP.h /usr/include/Xm/ColorP.h
|
||||
Reports.o: /usr/include/Xm/AccColorT.h /usr/include/Xm/BaseClassP.h
|
||||
Reports.o: /usr/include/Xm/ExtObjectP.h ../include/Reports.h
|
||||
Reports.o: ../include/util.h /usr/include/errno.h /usr/include/linux/errno.h
|
||||
Reports.o: /usr/include/asm/errno.h
|
||||
Transaction.o: ../include/Transaction.h /usr/include/Xm/Xm.h
|
||||
Transaction.o: /usr/include/X11/Intrinsic.h /usr/include/X11/X11/Xlib.h
|
||||
Transaction.o: /usr/include/sys/types.h /usr/include/linux/types.h
|
||||
Transaction.o: /usr/include/linux/posix_types.h
|
||||
Transaction.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
Transaction.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
Transaction.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
Transaction.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
Transaction.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
Transaction.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
Transaction.o: /usr/include/string.h /usr/include/features.h
|
||||
Transaction.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
Transaction.o: /usr/include/X11/X11/Composite.h
|
||||
Transaction.o: /usr/include/X11/X11/Constraint.h
|
||||
Transaction.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
Transaction.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
Transaction.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
Transaction.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
Transaction.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
Transaction.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
Transaction.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
Transaction.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
Transaction.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
Transaction.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
Transaction.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
Transaction.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
Transaction.o: /usr/include/Xm/XmIm.h ../include/date.h ../include/util.h
|
||||
Transaction.o: /usr/include/stdio.h /usr/include/libio.h
|
||||
Transaction.o: /usr/include/_G_config.h /usr/include/errno.h
|
||||
Transaction.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
util.o: /usr/include/X11/X11/X11/X.h /usr/include/X11/X11/Xlib.h
|
||||
util.o: /usr/include/sys/types.h /usr/include/linux/types.h
|
||||
util.o: /usr/include/linux/posix_types.h /usr/include/asm/posix_types.h
|
||||
util.o: /usr/include/asm/types.h /usr/include/sys/bitypes.h
|
||||
util.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
util.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
util.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
util.o: /usr/include/X11/cursorfont.h /usr/include/Xm/Xm.h
|
||||
util.o: /usr/include/X11/Intrinsic.h /usr/include/X11/X11/Xutil.h
|
||||
util.o: /usr/include/X11/X11/Xresource.h /usr/include/string.h
|
||||
util.o: /usr/include/features.h /usr/include/sys/cdefs.h
|
||||
util.o: /usr/include/X11/X11/Core.h /usr/include/X11/X11/Composite.h
|
||||
util.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
util.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
util.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
util.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
util.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
util.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
util.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
util.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
util.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
util.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
util.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
util.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
util.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
util.o: /usr/include/Xm/Text.h /usr/include/stdio.h /usr/include/libio.h
|
||||
util.o: /usr/include/_G_config.h /usr/include/Xm/PanedW.h
|
||||
util.o: /usr/include/Xm/Form.h /usr/include/Xm/BulletinB.h
|
||||
util.o: /usr/include/Xm/PushB.h /usr/include/Xm/DialogS.h
|
||||
util.o: /usr/include/Xm/RowColumn.h /usr/include/Xm/MessageB.h
|
||||
util.o: ../Xbae-4.6.2-linas/Xbae/Matrix.h
|
||||
util.o: ../Xbae-4.6.2-linas/Xbae/Xbae/patchlevel.h ../include/util.h
|
||||
util.o: /usr/include/errno.h /usr/include/linux/errno.h
|
||||
util.o: /usr/include/asm/errno.h
|
||||
XferBox.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
XferBox.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
XferBox.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
XferBox.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
XferBox.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
XferBox.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
XferBox.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
XferBox.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
XferBox.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
XferBox.o: /usr/include/string.h /usr/include/features.h
|
||||
XferBox.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
XferBox.o: /usr/include/X11/X11/Composite.h /usr/include/X11/X11/Constraint.h
|
||||
XferBox.o: /usr/include/X11/X11/Object.h /usr/include/X11/X11/RectObj.h
|
||||
XferBox.o: /usr/include/X11/Shell.h /usr/include/X11/X11/SM/SMlib.h
|
||||
XferBox.o: /usr/include/X11/SM/SM.h /usr/include/X11/ICE/ICElib.h
|
||||
XferBox.o: /usr/include/X11/ICE/ICE.h /usr/include/X11/Xatom.h
|
||||
XferBox.o: /usr/include/Xm/XmStrDefs.h /usr/include/X11/StringDefs.h
|
||||
XferBox.o: /usr/include/Xm/VirtKeys.h /usr/include/Xm/Transfer.h
|
||||
XferBox.o: /usr/include/Xm/DragDrop.h /usr/include/Xm/DragC.h
|
||||
XferBox.o: /usr/include/Xm/Display.h /usr/include/Xm/DropSMgr.h
|
||||
XferBox.o: /usr/include/Xm/DragIcon.h /usr/include/Xm/DropTrans.h
|
||||
XferBox.o: /usr/include/Xm/DragOverS.h /usr/include/Xm/Primitive.h
|
||||
XferBox.o: /usr/include/Xm/Manager.h /usr/include/Xm/Gadget.h
|
||||
XferBox.o: /usr/include/Xm/TxtPropCv.h /usr/include/Xm/VendorS.h
|
||||
XferBox.o: /usr/include/Xm/XmIm.h ../include/Data.h ../include/Account.h
|
||||
XferBox.o: ../include/QuickFill.h ../include/Transaction.h ../include/date.h
|
||||
XferBox.o: ../include/PopBox.h ../include/util.h /usr/include/stdio.h
|
||||
XferBox.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/errno.h
|
||||
XferBox.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
XferWindow.o: /usr/include/Xm/Xm.h /usr/include/X11/Intrinsic.h
|
||||
XferWindow.o: /usr/include/X11/X11/Xlib.h /usr/include/sys/types.h
|
||||
XferWindow.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
|
||||
XferWindow.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
|
||||
XferWindow.o: /usr/include/sys/bitypes.h /usr/include/X11/X11/X11/X.h
|
||||
XferWindow.o: /usr/include/X11/X11/X11/Xfuncproto.h
|
||||
XferWindow.o: /usr/include/X11/X11/X11/Xosdefs.h
|
||||
XferWindow.o: /usr/lib/gcc-lib/i486-linux/2.7.2/include/stddef.h
|
||||
XferWindow.o: /usr/include/X11/X11/Xutil.h /usr/include/X11/X11/Xresource.h
|
||||
XferWindow.o: /usr/include/string.h /usr/include/features.h
|
||||
XferWindow.o: /usr/include/sys/cdefs.h /usr/include/X11/X11/Core.h
|
||||
XferWindow.o: /usr/include/X11/X11/Composite.h
|
||||
XferWindow.o: /usr/include/X11/X11/Constraint.h /usr/include/X11/X11/Object.h
|
||||
XferWindow.o: /usr/include/X11/X11/RectObj.h /usr/include/X11/Shell.h
|
||||
XferWindow.o: /usr/include/X11/X11/SM/SMlib.h /usr/include/X11/SM/SM.h
|
||||
XferWindow.o: /usr/include/X11/ICE/ICElib.h /usr/include/X11/ICE/ICE.h
|
||||
XferWindow.o: /usr/include/X11/Xatom.h /usr/include/Xm/XmStrDefs.h
|
||||
XferWindow.o: /usr/include/X11/StringDefs.h /usr/include/Xm/VirtKeys.h
|
||||
XferWindow.o: /usr/include/Xm/Transfer.h /usr/include/Xm/DragDrop.h
|
||||
XferWindow.o: /usr/include/Xm/DragC.h /usr/include/Xm/Display.h
|
||||
XferWindow.o: /usr/include/Xm/DropSMgr.h /usr/include/Xm/DragIcon.h
|
||||
XferWindow.o: /usr/include/Xm/DropTrans.h /usr/include/Xm/DragOverS.h
|
||||
XferWindow.o: /usr/include/Xm/Primitive.h /usr/include/Xm/Manager.h
|
||||
XferWindow.o: /usr/include/Xm/Gadget.h /usr/include/Xm/TxtPropCv.h
|
||||
XferWindow.o: /usr/include/Xm/VendorS.h /usr/include/Xm/XmIm.h
|
||||
XferWindow.o: /usr/include/Xm/DialogS.h /usr/include/Xm/Form.h
|
||||
XferWindow.o: /usr/include/Xm/BulletinB.h /usr/include/Xm/LabelGP.h
|
||||
XferWindow.o: /usr/include/Xm/LabelG.h /usr/include/Xm/GadgetP.h
|
||||
XferWindow.o: /usr/include/Xm/XmP.h /usr/include/X11/IntrinsicP.h
|
||||
XferWindow.o: /usr/include/X11/X11/CoreP.h /usr/include/X11/X11/CompositeP.h
|
||||
XferWindow.o: /usr/include/X11/X11/ConstrainP.h
|
||||
XferWindow.o: /usr/include/X11/X11/ObjectP.h /usr/include/X11/X11/RectObjP.h
|
||||
XferWindow.o: /usr/include/Xm/ColorP.h /usr/include/Xm/AccColorT.h
|
||||
XferWindow.o: /usr/include/Xm/BaseClassP.h /usr/include/Xm/ExtObjectP.h
|
||||
XferWindow.o: /usr/include/Xm/PushB.h /usr/include/Xm/Text.h
|
||||
XferWindow.o: /usr/include/stdio.h /usr/include/libio.h
|
||||
XferWindow.o: /usr/include/_G_config.h ../include/Account.h
|
||||
XferWindow.o: ../include/QuickFill.h ../include/Transaction.h
|
||||
XferWindow.o: ../include/date.h ../include/BuildMenu.h
|
||||
XferWindow.o: /usr/include/Xm/Separator.h ../include/Data.h ../include/main.h
|
||||
XferWindow.o: ../include/util.h /usr/include/errno.h
|
||||
XferWindow.o: /usr/include/linux/errno.h /usr/include/asm/errno.h
|
||||
|
||||
19
src/QIFIO.c
19
src/QIFIO.c
@@ -33,12 +33,13 @@
|
||||
* *
|
||||
\********************************************************************/
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
#include <fcntl.h>
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
#include <Xm/Xm.h>
|
||||
|
||||
#include "Account.h"
|
||||
#include "Data.h"
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
|
||||
#define PERMS 0666
|
||||
#define WFLAGS (O_WRONLY | O_CREAT | O_TRUNC)
|
||||
@@ -356,19 +357,19 @@ char * xaccReadQIFTransaction (int fd, Transaction *trans)
|
||||
* Args: datafile - the file to load the data from *
|
||||
* Return: the struct with the program data in it *
|
||||
\********************************************************************/
|
||||
Data *
|
||||
AccountGroup *
|
||||
xaccReadQIFData( char *datafile )
|
||||
{
|
||||
int fd;
|
||||
int skip = 0;
|
||||
char * qifline;
|
||||
Data *data = mallocData();
|
||||
AccountGroup *grp = mallocAccountGroup();
|
||||
|
||||
fd = open( datafile, RFLAGS, 0 );
|
||||
if( fd == -1 )
|
||||
{
|
||||
ERROR();
|
||||
freeData(data);
|
||||
freeAccountGroup(grp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -378,7 +379,7 @@ xaccReadQIFData( char *datafile )
|
||||
{
|
||||
ERROR();
|
||||
close(fd);
|
||||
freeData(data);
|
||||
freeAccountGroup(grp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -428,7 +429,7 @@ xaccReadQIFData( char *datafile )
|
||||
freeAccount(acc);
|
||||
continue;
|
||||
}
|
||||
insertAccount( data, acc );
|
||||
insertAccount( grp, acc );
|
||||
|
||||
/* spin until start of transaction records */
|
||||
/* in theory, in a perfect file, the transaction data follows immediately */
|
||||
@@ -467,7 +468,7 @@ xaccReadQIFData( char *datafile )
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return data;
|
||||
return grp;
|
||||
}
|
||||
|
||||
/* ========================== END OF FILE ======================= */
|
||||
|
||||
@@ -23,18 +23,18 @@
|
||||
\********************************************************************/
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
#include <Xm/RowColumn.h>
|
||||
#include <Xm/Form.h>
|
||||
#include <Xm/Text.h>
|
||||
#include <Xm/DialogS.h>
|
||||
#include <Xm/PanedW.h>
|
||||
#include <Xm/Form.h>
|
||||
#include <Xm/Frame.h>
|
||||
#include <Xm/PushB.h>
|
||||
#include <Xm/LabelGP.h>
|
||||
#include <Xm/PanedW.h>
|
||||
#include <Xm/PushB.h>
|
||||
#include <Xm/RowColumn.h>
|
||||
#include <Xm/Text.h>
|
||||
#include <Xbae/Matrix.h>
|
||||
|
||||
#include "Data.h"
|
||||
#include "Account.h"
|
||||
#include "Data.h"
|
||||
#include "RegWindow.h"
|
||||
#include "MainWindow.h"
|
||||
#include "main.h"
|
||||
@@ -61,7 +61,6 @@ void recnOkCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
void recnCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Data *data;
|
||||
extern XtAppContext app;
|
||||
|
||||
/********************************************************************/
|
||||
@@ -761,6 +760,7 @@ recnOkCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
int nrows,i;
|
||||
Transaction *trans;
|
||||
RecnWindow *recnData = (RecnWindow *)cd;
|
||||
AccountGroup *grp = topgroup; /* hack alert -- should pass as arg .. */
|
||||
|
||||
/* Update the debit transactions: */
|
||||
XtVaGetValues( recnData->debit, XmNrows, &nrows, NULL );
|
||||
@@ -772,7 +772,7 @@ recnOkCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
trans = (Transaction *)XbaeMatrixGetRowUserData( recnData->debit, i );
|
||||
trans->reconciled = YREC;
|
||||
/* mark the datafile as needing to be saved: */
|
||||
data->saved = False;
|
||||
grp->saved = False;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -786,7 +786,7 @@ recnOkCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
trans = (Transaction *)XbaeMatrixGetRowUserData( recnData->credit, i );
|
||||
trans->reconciled = YREC;
|
||||
/* mark the datafile as needing to be saved: */
|
||||
data->saved = False;
|
||||
grp->saved = False;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
118
src/RegWindow.c
118
src/RegWindow.c
@@ -84,7 +84,6 @@ void dateCellFormat( Widget mw, XbaeMatrixModifyVerifyCallbackStruct *mvcbs, int
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Widget toplevel;
|
||||
extern Data *data;
|
||||
|
||||
/* The XrmQuarks are used by regCB to figure out the kind of traversal
|
||||
* that is going on */
|
||||
@@ -264,6 +263,9 @@ regRefresh( RegWindow *regData )
|
||||
case ASSET:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
case EQUITY:
|
||||
themount = xaccGetAmount (acc, trans);
|
||||
if( 0.0 > themount )
|
||||
{
|
||||
@@ -295,7 +297,7 @@ regRefresh( RegWindow *regData )
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fprintf( stderr, "Ineternal Error: Account type: %d is unknown!\n", acc->type);
|
||||
fprintf( stderr, "Internal Error: Account type: %d is unknown!\n", acc->type);
|
||||
}
|
||||
|
||||
newData[row+1][PAY_CELL_C] = XtNewString("");
|
||||
@@ -313,6 +315,9 @@ regRefresh( RegWindow *regData )
|
||||
case ASSET:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
case EQUITY:
|
||||
break;
|
||||
case PORTFOLIO:
|
||||
case MUTUAL:
|
||||
@@ -331,7 +336,7 @@ regRefresh( RegWindow *regData )
|
||||
|
||||
break;
|
||||
default:
|
||||
fprintf( stderr, "Ineternal Error: Account type: %d is unknown!\n", acc->type);
|
||||
fprintf( stderr, "Internal Error: Account type: %d is unknown!\n", acc->type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -409,6 +414,16 @@ regRecalculateBalance( RegWindow *regData )
|
||||
dclearedBalance = xaccGetClearedBalance (acc, trans);
|
||||
share_balance = xaccGetShareBalance (acc, trans);
|
||||
|
||||
/* for income and expense acounts, we have to reverse
|
||||
* the meaning of balance, since, in a cual entry
|
||||
* system, income will show up as a credit to a
|
||||
* bank account, and a debit to the income account.
|
||||
* Thus, positive and negative are interchanged */
|
||||
if( (EXPENSE == acc->type) ||
|
||||
(INCOME == acc->type) ) {
|
||||
dbalance = - dbalance;
|
||||
}
|
||||
|
||||
if( reg != NULL )
|
||||
{
|
||||
#ifdef USE_NO_COLOR
|
||||
@@ -563,14 +578,14 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
if (MOD_NONE == regData->changed) return;
|
||||
|
||||
/* Be sure to prompt the user to save to disk after changes are made! */
|
||||
acc->data->saved = False;
|
||||
acc->parent->saved = False;
|
||||
|
||||
trans = getTransaction( acc, position );
|
||||
|
||||
if( trans == NULL )
|
||||
{
|
||||
/* This must be a new transaction */
|
||||
DEBUG("New Transaction");
|
||||
DEBUG("New Transaction\n");
|
||||
|
||||
trans = mallocTransaction();
|
||||
trans->credit = (struct _account *) acc;
|
||||
@@ -585,7 +600,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
}
|
||||
if( regData->changed & MOD_NUM )
|
||||
{
|
||||
DEBUG("MOD_NUM");
|
||||
DEBUG("MOD_NUM\n");
|
||||
/* ...the transaction number (String)... */
|
||||
XtFree( trans->num );
|
||||
trans->num = XtNewString( XbaeMatrixGetCell(regData->reg,row,NUM_CELL_C) );
|
||||
@@ -596,7 +611,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
/* ... the transfer ... */
|
||||
char * name;
|
||||
Account *xfer_acct = xaccGetOtherAccount (acc, trans);
|
||||
DEBUG("MOD_XFER");
|
||||
DEBUG("MOD_XFER\n");
|
||||
|
||||
if (xfer_acct) {
|
||||
/* remove the transaction from wherever it used to be */
|
||||
@@ -621,7 +636,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
|
||||
if( regData->changed & MOD_DESC )
|
||||
{
|
||||
DEBUG("MOD_DESC");
|
||||
DEBUG("MOD_DESC\n");
|
||||
/* ... the description... */
|
||||
XtFree( trans->description );
|
||||
trans->description =
|
||||
@@ -632,7 +647,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
{
|
||||
String tmp;
|
||||
String memo = NULL;
|
||||
DEBUG("MOD_MEMO");
|
||||
DEBUG("MOD_MEMO\n");
|
||||
/* ... the memo ... */
|
||||
XtFree( trans->memo );
|
||||
tmp = XbaeMatrixGetCell(regData->reg,row+MEMO_CELL_R,MEMO_CELL_C);
|
||||
@@ -644,7 +659,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
((MUTUAL == acc->type) || (PORTFOLIO==acc->type)) )
|
||||
{
|
||||
String actn = NULL;
|
||||
DEBUG("MOD_ACTN");
|
||||
DEBUG("MOD_ACTN\n");
|
||||
/* ... the action ... */
|
||||
XtFree( trans->action );
|
||||
actn = XbaeMatrixGetCell(regData->reg,row,ACTN_CELL_C);
|
||||
@@ -653,7 +668,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
|
||||
if( regData->changed & MOD_RECN )
|
||||
{
|
||||
DEBUG("MOD_RECN");
|
||||
DEBUG("MOD_RECN\n");
|
||||
/* ...the reconciled flag (char)... */
|
||||
trans->reconciled = (XbaeMatrixGetCell(regData->reg,row,RECN_CELL_C))[0];
|
||||
}
|
||||
@@ -664,7 +679,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
float val=0.0; /* must be float for sscanf to work */
|
||||
double themount = 0.0;
|
||||
|
||||
DEBUG("MOD_AMNT");
|
||||
DEBUG("MOD_AMNT\n");
|
||||
/* ...and the amounts */
|
||||
amount = XbaeMatrixGetCell(regData->reg,row,DEP_CELL_C);
|
||||
sscanf( amount, "%f", &val );
|
||||
@@ -700,7 +715,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
String price;
|
||||
float val=0.0; /* must be float for sscanf to work */
|
||||
|
||||
DEBUG("MOD_PRIC");
|
||||
DEBUG("MOD_PRIC\n");
|
||||
/* ...the price flag ... */
|
||||
|
||||
price = XbaeMatrixGetCell(regData->reg,row,PRIC_CELL_C);
|
||||
@@ -715,7 +730,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
{
|
||||
Boolean outOfOrder = False;
|
||||
|
||||
DEBUG("MOD_DATE");
|
||||
DEBUG("MOD_DATE\n");
|
||||
/* read in the date stuff... */
|
||||
sscanf( XbaeMatrixGetCell(regData->reg,row+DATE_CELL_R,DATE_CELL_C),"%d/%d",
|
||||
&(trans->date.month),
|
||||
@@ -804,6 +819,7 @@ regSaveTransaction( RegWindow *regData, int position )
|
||||
RegWindow *
|
||||
regWindow( Widget parent, Account *acc )
|
||||
{
|
||||
AccountGroup *grp;
|
||||
Transaction *trans;
|
||||
RegWindow *regData;
|
||||
Widget menubar, pane, buttonform, frame, reg, widget;
|
||||
@@ -954,6 +970,9 @@ regWindow( Widget parent, Account *acc )
|
||||
case ASSET:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
case EQUITY:
|
||||
acc->columnLocation [DATE_COL_ID] = 0;
|
||||
acc->columnLocation [NUM_COL_ID] = 1;
|
||||
acc->columnLocation [DESC_COL_ID] = 2;
|
||||
@@ -979,7 +998,7 @@ regWindow( Widget parent, Account *acc )
|
||||
acc -> numCols = 10;
|
||||
break;
|
||||
default:
|
||||
fprintf( stderr, "Ineternal Error: Account type: %d is unknown!\n", acc->type);
|
||||
fprintf( stderr, "Internal Error: Account type: %d is unknown!\n", acc->type);
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
@@ -1000,6 +1019,9 @@ regWindow( Widget parent, Account *acc )
|
||||
case ASSET:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
case EQUITY:
|
||||
break;
|
||||
case PORTFOLIO:
|
||||
case MUTUAL:
|
||||
@@ -1027,6 +1049,9 @@ regWindow( Widget parent, Account *acc )
|
||||
case ASSET:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
case EQUITY:
|
||||
break;
|
||||
|
||||
case PORTFOLIO:
|
||||
@@ -1056,6 +1081,9 @@ regWindow( Widget parent, Account *acc )
|
||||
case ASSET:
|
||||
case CREDIT:
|
||||
case LIABILITY:
|
||||
case INCOME:
|
||||
case EXPENSE:
|
||||
case EQUITY:
|
||||
break;
|
||||
case PORTFOLIO:
|
||||
case MUTUAL:
|
||||
@@ -1087,6 +1115,18 @@ regWindow( Widget parent, Account *acc )
|
||||
acc -> rows[0][PAY_CELL_C] = "Increase";
|
||||
acc -> rows[0][DEP_CELL_C] = "Decrease";
|
||||
break;
|
||||
case INCOME:
|
||||
acc -> rows[0][PAY_CELL_C] = "Income";
|
||||
acc -> rows[0][DEP_CELL_C] = "Charge";
|
||||
break;
|
||||
case EXPENSE:
|
||||
acc -> rows[0][PAY_CELL_C] = "Rebate";
|
||||
acc -> rows[0][DEP_CELL_C] = "Expense";
|
||||
break;
|
||||
case EQUITY:
|
||||
acc -> rows[0][PAY_CELL_C] = "Surplus";
|
||||
acc -> rows[0][DEP_CELL_C] = "Deficit";
|
||||
break;
|
||||
case PORTFOLIO:
|
||||
case MUTUAL:
|
||||
acc -> rows[0][PAY_CELL_C] = "Sold";
|
||||
@@ -1126,16 +1166,18 @@ regWindow( Widget parent, Account *acc )
|
||||
XtAddCallback( reg, XmNmodifyVerifyCallback, regCB, (XtPointer)regData );
|
||||
XtAddCallback( reg, XmNtraverseCellCallback, regCB, (XtPointer)regData );
|
||||
|
||||
XtManageChild(reg);
|
||||
XtManageChild(frame);
|
||||
|
||||
XtManageChild (reg);
|
||||
XtManageChild (frame);
|
||||
XtManageChild (pane);
|
||||
|
||||
|
||||
/* create action box for the first time */
|
||||
regData->actbox = actionBox (reg);
|
||||
|
||||
/* create the xfer account box for the first time */
|
||||
regData->xferbox = xferBox (reg, data);
|
||||
|
||||
/* but first, find the topmost group */
|
||||
grp = xaccGetRootGroupOfAcct (acc);
|
||||
regData->xferbox = xferBox (reg, grp);
|
||||
|
||||
/******************************************************************\
|
||||
* The button area... also contains balance fields *
|
||||
@@ -1198,7 +1240,7 @@ regWindow( Widget parent, Account *acc )
|
||||
|
||||
position+=2;
|
||||
|
||||
/* Fix button area of the pane to its current size, and not let
|
||||
/* Fix button area of the buttonform to its current size, and not let
|
||||
* it resize. */
|
||||
{
|
||||
Dimension h;
|
||||
@@ -1289,7 +1331,7 @@ closeRegWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
_free(regData);
|
||||
acc->regData = NULL;
|
||||
|
||||
DEBUG("closed RegWindow");
|
||||
DEBUG("closed RegWindow\n");
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -1362,7 +1404,7 @@ deleteCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
trans = getTransaction (acc, regData->lastTrans );
|
||||
if( NULL != trans)
|
||||
{
|
||||
char *msg = "Are you sure you want\nto delete this transaction?";
|
||||
char *msg = TRANS_DEL_MSG;
|
||||
|
||||
if( verifyBox( toplevel, msg ) )
|
||||
{
|
||||
@@ -1430,13 +1472,13 @@ regCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
switch( cbs->reason )
|
||||
{
|
||||
case XbaeEnterCellReason: {
|
||||
DEBUG("XbaeEnterCellReason");
|
||||
DEBUG("XbaeEnterCellReason\n");
|
||||
DEBUGCMD(printf(" row = %d\n col = %d\n",row,col));
|
||||
/* figure out if we are editing a different transaction... if we
|
||||
* are, then we need to save the transaction we left */
|
||||
if( regData->lastTrans != (row-1)/2 )
|
||||
{
|
||||
DEBUG("Save Transaction");
|
||||
DEBUG("Save Transaction\n");
|
||||
DEBUGCMD(printf(" lastTrans = %d\n currTrans = %d\n",
|
||||
regData->lastTrans, (row+1)/2 ));
|
||||
|
||||
@@ -1502,7 +1544,7 @@ regCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
}
|
||||
|
||||
case XbaeModifyVerifyReason:
|
||||
DEBUG("XbaeModifyVerifyReason");
|
||||
DEBUG("XbaeModifyVerifyReason\n");
|
||||
{
|
||||
XbaeMatrixModifyVerifyCallbackStruct *mvcbs =
|
||||
(XbaeMatrixModifyVerifyCallbackStruct *)cb;
|
||||
@@ -1543,7 +1585,7 @@ regCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
{
|
||||
int i;
|
||||
regData->insert = mvcbs->verify->currInsert;
|
||||
DEBUG("resyncing quickfill!");
|
||||
DEBUG("resyncing quickfill!\n");
|
||||
DEBUGCMD(printf(" insert = %d\n currInsert = %d\n",
|
||||
regData->insert,
|
||||
mvcbs->verify->currInsert ));
|
||||
@@ -1679,7 +1721,7 @@ regCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
break;
|
||||
|
||||
case XbaeTraverseCellReason:
|
||||
DEBUG("XbaeTraverseCellReason");
|
||||
DEBUG("XbaeTraverseCellReason\n");
|
||||
/* This ensure that whenever the user hits TAB, they go to the
|
||||
* next valid cell. Also, if regData->qf and regData->qf->trans
|
||||
* aren't NULL, then fill the field we are entering with the
|
||||
@@ -1763,7 +1805,7 @@ regCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
}
|
||||
break;
|
||||
default:
|
||||
DEBUG("We shouldn't get here!");
|
||||
PERR("regDB(): We shouldn't get here!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1833,42 +1875,42 @@ dateCellFormat( Widget mw, XbaeMatrixModifyVerifyCallbackStruct *mvcbs, int do_y
|
||||
case '+':
|
||||
case '=': /* '+' without the shift! */
|
||||
/* next day */
|
||||
DEBUG("next day");
|
||||
DEBUG("next day\n");
|
||||
adjustDay( &date, 1 );
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
break;
|
||||
case '-':
|
||||
/* prev day */
|
||||
DEBUG("prev day");
|
||||
DEBUG("prev day\n");
|
||||
adjustDay( &date, -1 );
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
break;
|
||||
case 't':
|
||||
/* today */
|
||||
DEBUG("today");
|
||||
DEBUG("today\n");
|
||||
todaysDate( &date );
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
break;
|
||||
case 'm':
|
||||
/* beginning of month */
|
||||
DEBUG("beginning of month");
|
||||
DEBUG("beginning of month\n");
|
||||
date.day = 1;
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
break;
|
||||
case 'h':
|
||||
/* end of month */
|
||||
DEBUG("end of month");
|
||||
DEBUG("end of month\n");
|
||||
date.day = daysInMonth( date.month );
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
break;
|
||||
case 'y':
|
||||
/* beginning of year */
|
||||
DEBUG("beginning of year");
|
||||
DEBUG("beginning of year\n");
|
||||
date.day = 1;
|
||||
date.month = 1;
|
||||
mvcbs->verify->doit = False;
|
||||
@@ -1876,7 +1918,7 @@ dateCellFormat( Widget mw, XbaeMatrixModifyVerifyCallbackStruct *mvcbs, int do_y
|
||||
break;
|
||||
case 'r':
|
||||
/* end of year */
|
||||
DEBUG("end of year");
|
||||
DEBUG("end of year\n");
|
||||
date.day = 31;
|
||||
date.month = 12;
|
||||
mvcbs->verify->doit = False;
|
||||
@@ -1884,14 +1926,14 @@ dateCellFormat( Widget mw, XbaeMatrixModifyVerifyCallbackStruct *mvcbs, int do_y
|
||||
break;
|
||||
case ']':
|
||||
/* next month */
|
||||
DEBUG("next month");
|
||||
DEBUG("next month\n");
|
||||
adjustMonth( &date, +1 );
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
break;
|
||||
case '[':
|
||||
/* prev month */
|
||||
DEBUG("prev month");
|
||||
DEBUG("prev month\n");
|
||||
adjustMonth( &date, -1 );
|
||||
mvcbs->verify->doit = False;
|
||||
changed = True;
|
||||
|
||||
@@ -83,17 +83,40 @@ mallocTransaction( void )
|
||||
void
|
||||
freeTransaction( Transaction *trans )
|
||||
{
|
||||
if( trans != NULL ) {
|
||||
if (!trans) return;
|
||||
|
||||
XtFree(trans->num);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->action);
|
||||
/* free a transaction only if it is not claimed
|
||||
* by any accounts. */
|
||||
if (trans->debit) return;
|
||||
if (trans->credit) return;
|
||||
|
||||
initTransaction (trans); /* just in case someone looks up freed memory ... */
|
||||
_free(trans);
|
||||
}
|
||||
}
|
||||
XtFree(trans->num);
|
||||
XtFree(trans->description);
|
||||
XtFree(trans->memo);
|
||||
XtFree(trans->action);
|
||||
|
||||
/* just in case someone looks up freed memory ... */
|
||||
trans->num = 0x0;
|
||||
trans->description = 0x0;
|
||||
trans->memo = 0x0;
|
||||
trans->action = 0x0;
|
||||
trans->catagory = 0;
|
||||
trans->reconciled = NREC;
|
||||
trans->damount = 0.0;
|
||||
trans->share_price = 1.0;
|
||||
|
||||
trans->credit_balance = 0.0;
|
||||
trans->credit_cleared_balance = 0.0;
|
||||
trans->debit_balance = 0.0;
|
||||
trans->debit_cleared_balance = 0.0;
|
||||
|
||||
trans->date.year = 1900;
|
||||
trans->date.month = 1;
|
||||
trans->date.day = 1;
|
||||
|
||||
trans->write_flag = 0;
|
||||
_free(trans);
|
||||
}
|
||||
|
||||
/************************ END OF ************************************\
|
||||
\************************* FILE *************************************/
|
||||
|
||||
@@ -32,23 +32,35 @@
|
||||
* Return: PopBox - the xfer GUI structure *
|
||||
\********************************************************************/
|
||||
|
||||
PopBox *
|
||||
xferBox (Widget parent, Data *dayta)
|
||||
static void
|
||||
XferBoxTraverse (PopBox *popGUI, AccountGroup *grp)
|
||||
{
|
||||
PopBox *popGUI;
|
||||
Account * acc;
|
||||
int n;
|
||||
|
||||
popGUI = popBox (parent);
|
||||
if (!grp) return;
|
||||
|
||||
/* build the xfer menu out of account names */
|
||||
/* traverse sub-accounts ecursively */
|
||||
n = 0;
|
||||
acc = getAccount (dayta, n);
|
||||
acc = getAccount (grp, n);
|
||||
while (acc) {
|
||||
AddPopBoxMenuItem (popGUI, acc->accountName);
|
||||
XferBoxTraverse (popGUI, acc->children);
|
||||
n++;
|
||||
acc = getAccount (dayta, n);
|
||||
acc = getAccount (grp, n);
|
||||
}
|
||||
}
|
||||
|
||||
PopBox *
|
||||
xferBox (Widget parent, AccountGroup *grp)
|
||||
{
|
||||
PopBox *popGUI;
|
||||
Account * acc;
|
||||
|
||||
popGUI = popBox (parent);
|
||||
|
||||
XferBoxTraverse (popGUI, grp);
|
||||
|
||||
return popGUI;
|
||||
}
|
||||
|
||||
@@ -27,18 +27,17 @@
|
||||
#include <Xm/Xm.h>
|
||||
#include <Xm/DialogS.h>
|
||||
#include <Xm/Form.h>
|
||||
#include <Xm/LabelGP.h>
|
||||
#include <Xm/LabelG.h>
|
||||
#include <Xm/PushB.h>
|
||||
#include <Xm/Text.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "BuildMenu.h"
|
||||
#include "Account.h"
|
||||
#include "BuildMenu.h"
|
||||
#include "Data.h"
|
||||
#include "main.h"
|
||||
#include "util.h"
|
||||
|
||||
extern Widget toplevel;
|
||||
|
||||
typedef struct _menuData
|
||||
{
|
||||
@@ -60,7 +59,7 @@ typedef struct _xferwindow
|
||||
} XferWindow;
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
extern Data *data;
|
||||
extern Widget toplevel;
|
||||
|
||||
/** PROTOTYPES ******************************************************/
|
||||
void closeXferWindow( Widget mw, XtPointer cd, XtPointer cb );
|
||||
@@ -73,7 +72,7 @@ void xferCB( Widget mw, XtPointer cd, XtPointer cb );
|
||||
* *
|
||||
* Args: parent - the parent of the window to be created *
|
||||
* Return: none *
|
||||
* Global: data - the accounts, and stuff... *
|
||||
* Global: topgroup - the accounts, and stuff... *
|
||||
\********************************************************************/
|
||||
void
|
||||
xferWindow( Widget parent )
|
||||
@@ -85,11 +84,10 @@ xferWindow( Widget parent )
|
||||
XferWindow *xferData;
|
||||
int position,i;
|
||||
int initial = 0;
|
||||
AccountGroup *grp = topgroup; /* hack alert -- should be pased as arg */
|
||||
|
||||
if (1 >= (data->numAcc)) {
|
||||
errorBox (toplevel,
|
||||
"There must be at least two accounts\n\
|
||||
created before you can transfer funds.\n");
|
||||
if (1 >= (grp->numAcc)) {
|
||||
errorBox (toplevel, XFER_NSF_MSG);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -225,7 +223,7 @@ created before you can transfer funds.\n");
|
||||
* The popup menus that let the user choose the account to *
|
||||
* transfer to and the account to transfer from *
|
||||
\******************************************************************/
|
||||
accountMenu = (MenuItem *)_malloc((data->numAcc+1)*sizeof(MenuItem));
|
||||
accountMenu = (MenuItem *)_malloc((grp->numAcc+1)*sizeof(MenuItem));
|
||||
|
||||
/* We have to keep track of the menuData stuff so we can free this
|
||||
* memory when the transfer window is closed... the even slots in
|
||||
@@ -233,15 +231,15 @@ created before you can transfer funds.\n");
|
||||
* used by the "To" menu. (The even/odd way was a simple way to
|
||||
* still use i as a index to the array... it makes sense to me,
|
||||
* at least) */
|
||||
xferData->menuData = (MenuData **)_malloc(2*data->numAcc*sizeof(MenuData *));
|
||||
xferData->numMenuData = 2 * data->numAcc;
|
||||
xferData->menuData = (MenuData **)_malloc(2*grp->numAcc*sizeof(MenuData *));
|
||||
xferData->numMenuData = 2 * grp->numAcc;
|
||||
|
||||
for( i=0; i<xferData->numMenuData; i++ )
|
||||
xferData->menuData[i] = NULL;
|
||||
|
||||
for( i=0; i<data->numAcc; i++ )
|
||||
for( i=0; i<grp->numAcc; i++ )
|
||||
{
|
||||
Account *acc = getAccount( data, i );
|
||||
Account *acc = getAccount( grp, i );
|
||||
|
||||
/* This account menu uses the even menuData slots (ie (2*i) ) */
|
||||
xferData->menuData[2*i] = (MenuData *)_malloc(sizeof(MenuData));
|
||||
@@ -272,9 +270,9 @@ created before you can transfer funds.\n");
|
||||
|
||||
XtManageChild(widget);
|
||||
|
||||
for( i=0; i<data->numAcc; i++ )
|
||||
for( i=0; i<grp->numAcc; i++ )
|
||||
{
|
||||
Account *acc = getAccount( data, i );
|
||||
Account *acc = getAccount( grp, i );
|
||||
|
||||
/* This account menu uses the odd menuData slots (ie (2*i)+1 ) */
|
||||
xferData->menuData[2*i+1] = (MenuData *)_malloc(sizeof(MenuData));
|
||||
@@ -395,7 +393,7 @@ closeXferWindow( Widget mw, XtPointer cd, XtPointer cb )
|
||||
|
||||
_free(xferData);
|
||||
|
||||
DEBUG("close XferWindow");
|
||||
DEBUG("close XferWindow\n");
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -423,7 +421,7 @@ menuCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
* the XfewWindow *
|
||||
* cb - *
|
||||
* Return: none *
|
||||
* Global: data - the data from the datafile *
|
||||
* Global: topgroup - the topgroup of accounts *
|
||||
\********************************************************************/
|
||||
void
|
||||
xferCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
@@ -433,14 +431,15 @@ xferCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
Account *acc;
|
||||
String str;
|
||||
float val=0.0;
|
||||
AccountGroup *grp = topgroup; /* hack alert -- should pass as arg */
|
||||
|
||||
/* silently reject transfers into-out-of the same account */
|
||||
if (xferData->from == xferData->to) {
|
||||
errorBox (toplevel, "The \"From\" and \"To\" accounts\n must be different!\n");
|
||||
errorBox (toplevel, XFER_DIFF_MSG);
|
||||
return;
|
||||
}
|
||||
|
||||
data->saved = False;
|
||||
grp->saved = False;
|
||||
|
||||
/* a double-entry transfer -- just one record, two accounts */
|
||||
trans = mallocTransaction();
|
||||
@@ -461,11 +460,11 @@ xferCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
trans->reconciled = NREC;
|
||||
|
||||
/* make note of which accounts this was transfered from & to */
|
||||
trans->debit = (struct _account *) getAccount(data,xferData->from);
|
||||
trans->credit = (struct _account *) getAccount(data,xferData->to);
|
||||
trans->debit = (struct _account *) getAccount(grp,xferData->from);
|
||||
trans->credit = (struct _account *) getAccount(grp,xferData->to);
|
||||
|
||||
/* insert transaction into from acount */
|
||||
acc = getAccount(data,xferData->from);
|
||||
acc = getAccount(grp,xferData->from);
|
||||
insertTransaction( acc, trans );
|
||||
|
||||
/* Refresh the "from" account register window */
|
||||
@@ -474,7 +473,7 @@ xferCB( Widget mw, XtPointer cd, XtPointer cb )
|
||||
recnRefresh(acc->recnData);
|
||||
|
||||
/* insert transaction into to acount */
|
||||
acc = getAccount(data,xferData->to);
|
||||
acc = getAccount(grp,xferData->to);
|
||||
insertTransaction( acc, trans );
|
||||
|
||||
/* Refresh the "to" account register window */
|
||||
|
||||
49
src/main.c
49
src/main.c
@@ -23,24 +23,25 @@
|
||||
\********************************************************************/
|
||||
|
||||
#include <Xm/Xm.h>
|
||||
|
||||
#include "BuildMenu.h"
|
||||
#include "RegWindow.h"
|
||||
#include "FileIO.h"
|
||||
#include "Data.h"
|
||||
#include "FileBox.h"
|
||||
#include "util.h"
|
||||
#include "FileIO.h"
|
||||
#include "main.h"
|
||||
#include "RegWindow.h"
|
||||
#include "util.h"
|
||||
|
||||
/** PROTOTYPES ******************************************************/
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
Data *data = NULL;
|
||||
char *datafile;
|
||||
Widget toplevel;
|
||||
Boolean realized=False; /* Has the toplevel been realized? */
|
||||
char *datafile = NULL;
|
||||
Widget toplevel = 0;
|
||||
Boolean realized = False; /* Has the toplevel been realized? */
|
||||
XtAppContext app;
|
||||
|
||||
/* The names of the different types of accounts. For resource
|
||||
* specification */
|
||||
* specification. Must match the enums in Account.h */
|
||||
String accRes[] ={
|
||||
"bank",
|
||||
"cash",
|
||||
@@ -48,7 +49,10 @@ String accRes[] ={
|
||||
"credit",
|
||||
"liability",
|
||||
"portfolio",
|
||||
"mutual"
|
||||
"mutual",
|
||||
"income",
|
||||
"expense",
|
||||
"equity"
|
||||
};
|
||||
|
||||
/** FALLBACK RESOURCES **********************************************/
|
||||
@@ -64,14 +68,18 @@ String fbRes[] = {
|
||||
/* MenuBar stuff: */
|
||||
"*menubar*marginHeight: 1",
|
||||
"*menubar*marginWidth: 1",
|
||||
|
||||
/* Register window account type specific stuff: */
|
||||
"*regbank.oddRowBackground: #ffffaa",
|
||||
"*regbank.oddRowBackground: #aaccff",
|
||||
"*regcash.oddRowBackground: #ccffcc",
|
||||
"*regasset.oddRowBackground: #ccffcc",
|
||||
"*regcredit.oddRowBackground: #ccccff",
|
||||
"*regasset.oddRowBackground: #aaffcc",
|
||||
"*regcredit.oddRowBackground: #ffffaa",
|
||||
"*regliability.oddRowBackground: #ffcccc",
|
||||
"*regportfolio.oddRowBackground: grey",
|
||||
"*regmutual.oddRowBackground: grey",
|
||||
"*regportfolio.oddRowBackground: #ccffff",
|
||||
"*regmutual.oddRowBackground: #ccffff",
|
||||
"*regincome.oddRowBackground: #aaccff",
|
||||
"*regexpense.oddRowBackground: #ffcccc",
|
||||
"*regequity.oddRowBackground: #ffffaa",
|
||||
"*regportfolio.evenRowBackground:grey",
|
||||
"*regmutual.evenRowBackground: grey",
|
||||
/* Other register window account stuff: */
|
||||
@@ -107,7 +115,7 @@ String fbRes[] = {
|
||||
* Args: argc, the number of command line arguments, and argv, *
|
||||
* the array of command line args *
|
||||
* Return: *
|
||||
* Global: data - the data from the datafile *
|
||||
* Global: topgroup - the data from the datafile *
|
||||
* datafile - the name of the user's datafile *
|
||||
* toplevel - the toplevel widget, for creating new windows *
|
||||
* app - the XtAppContext *
|
||||
@@ -123,7 +131,6 @@ main( int argc, char *argv[] )
|
||||
printf(" coresize = %d\n",_coresize());
|
||||
DEBUG("Done initializing memory");
|
||||
#endif
|
||||
data = NULL;
|
||||
|
||||
toplevel = XtVaAppInitialize( &app, "Xacc", NULL, 0,
|
||||
&argc, argv, fbRes,
|
||||
@@ -137,13 +144,13 @@ main( int argc, char *argv[] )
|
||||
datafile = fileBox( toplevel, OPEN );
|
||||
|
||||
if( datafile != NULL )
|
||||
data = readData(datafile); /* load the accounts data from datafile*/
|
||||
/* data = xaccReadQIFData(datafile); /* load the accounts data from datafile*/
|
||||
topgroup = readData(datafile); /* load the accounts data from datafile*/
|
||||
/* topgroup = xaccReadQIFData(datafile); /* load the accounts data from datafile*/
|
||||
|
||||
if( data == NULL )
|
||||
if( NULL == topgroup )
|
||||
{
|
||||
data = mallocData(); /* the file could not be found */
|
||||
data->new = True;
|
||||
topgroup = mallocAccountGroup(); /* the file could not be found */
|
||||
topgroup->new = True;
|
||||
}
|
||||
|
||||
/* Make main window */
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#include "util.h"
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
int loglevel = 1;
|
||||
|
||||
extern XtAppContext app;
|
||||
extern int realized;
|
||||
|
||||
@@ -57,8 +59,9 @@ dfree( void *ptr )
|
||||
void*
|
||||
dmalloc( size_t size )
|
||||
{
|
||||
char *ptr = (char *)malloc(size);
|
||||
int i;
|
||||
char *ptr;
|
||||
ptr = (char *)malloc(size);
|
||||
for( i=0; i<size; i++ )
|
||||
ptr[i] = '.';
|
||||
|
||||
|
||||
4
xacc.lsm
4
xacc.lsm
@@ -1,6 +1,6 @@
|
||||
Begin3
|
||||
Title: xacc -- simple single-user accounting program
|
||||
Version: 0.9h-stable
|
||||
Version: 0.9m
|
||||
Entered-date: 1NOV97
|
||||
Description: xacc is a program to keep track of your finances. It
|
||||
offers a simple check-book register style interface.
|
||||
@@ -31,7 +31,7 @@ Maintained-by: linas@linas.org (Linas Vepstas)
|
||||
Primary-site: http://www3.hmc.edu/~rclark/xacc/
|
||||
Alternate-site: http://linas.org/linux/xacc
|
||||
Alternate-site: sunsite.unc.edu /pub/Linux/apps/financial/accounting/
|
||||
497kB xacc-0.9h-stable.tar.gz
|
||||
521kB xacc-0.9m.tar.gz
|
||||
Platforms: Linux/Unix/X Windows/Lesstif/Motif/Sparc/Intel
|
||||
Copying-policy: GPL
|
||||
End
|
||||
|
||||
Reference in New Issue
Block a user