rework the ledger utils

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@480 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas
1998-02-01 20:43:24 +00:00
parent 50ded778d2
commit bd6ffa19e4
2 changed files with 85 additions and 154 deletions

View File

@@ -170,158 +170,4 @@ xaccGroupToList (Account *acc)
return list;
}
/* ------------------------------------------------------ */
int
ledgerListCount (struct _RegWindow **list)
{
struct _RegWindow *reg;
int n;
if (!list) return 0;
n = 0;
reg = list[0];
while (reg) {
n++;
reg = list[n];
}
return n;
}
/* ------------------------------------------------------ */
void
ledgerListAdd (Account * acc, struct _RegWindow *addreg)
{
struct _RegWindow **oldlist;
struct _RegWindow **newlist;
struct _RegWindow *reg;
int n;
if (!acc) return;
if (!addreg) return;
/* oldlist = acc->ledgerList; */
n = ledgerListCount (oldlist);
newlist = (struct _RegWindow **)
_malloc ((n+2) * sizeof (struct _RegWindow *));
n = 0;
if (oldlist) {
reg = oldlist[0];
while (reg) {
newlist[n] = reg;
n++;
reg = oldlist[n];
}
_free (oldlist);
}
newlist[n] = addreg;
newlist[n+1] = NULL;
/* acc->ledgerList = newlist; */
}
/* ------------------------------------------------------ */
void
ledgerListRemove (Account * acc, struct _RegWindow *delreg)
{
struct _RegWindow **oldlist;
struct _RegWindow **newlist;
struct _RegWindow *reg;
int n, i;
if (!acc) return;
if (!delreg) return;
/* oldlist = acc->ledgerList; */
n = ledgerListCount (oldlist);
newlist = (struct _RegWindow **)
_malloc ((n+1) * sizeof (struct _RegWindow *));
n = 0;
i = 0;
if (oldlist) {
reg = oldlist[0];
while (reg) {
newlist[i] = reg;
if (delreg == reg) i--;
i++;
n++;
reg = oldlist[n];
}
_free (oldlist);
}
newlist[i] = NULL;
/* acc->ledgerList = newlist; */
}
/* ------------------------------------------------------ */
int
ledgerListIsMember (Account * acc, struct _RegWindow *memreg)
{
struct _RegWindow **list;
struct _RegWindow *reg;
int n;
if (!acc) return 0;
if (!memreg) return 0;
/* list = acc->ledgerList; */
if (!list) return 0;
n = 0;
reg = list[0];
while (reg) {
if (memreg == reg) return 1;
n++;
reg = list[n];
}
return 0;
}
/* ------------------------------------------------------ */
void
ledgerListAddList (Account ** list, struct _RegWindow *reg)
{
Account *acc;
int n = 0;
if (!list) return;
if (!reg) return;
acc = list[0];
while (acc) {
ledgerListAdd (acc, reg);
n++;
acc = list[n];
}
}
/* ------------------------------------------------------ */
void
ledgerListRemoveList (Account ** list, struct _RegWindow *reg)
{
Account *acc;
int n = 0;
if (!list) return;
if (!reg) return;
acc = list[0];
while (acc) {
ledgerListRemove (acc, reg);
n++;
acc = list[n];
}
}
/************************** END OF FILE *************************/

View File

@@ -99,6 +99,91 @@ static void recordCB( Widget mw, XtPointer cd, XtPointer cb );
static void deleteCB( Widget mw, XtPointer cd, XtPointer cb );
static void cancelCB( Widget mw, XtPointer cd, XtPointer cb );
/********************************************************************\
* Ledger utilities *
\********************************************************************/
int
ledgerListCount (RegWindow **list)
{
int n = 0;
if (!list) return 0;
while (list[n]) n++;
return n;
}
/* ------------------------------------------------------ */
RegWindow **
ledgerListAdd (RegWindow **oldlist, RegWindow *addreg)
{
RegWindow **newlist;
RegWindow *reg;
int n;
if (!addreg) return oldlist;
n = ledgerListCount (oldlist);
newlist = (RegWindow **) _malloc ((n+2) * sizeof (RegWindow *));
n = 0;
if (oldlist) {
reg = oldlist[0];
while (reg) {
newlist[n] = reg;
n++;
reg = oldlist[n];
}
_free (oldlist);
}
newlist[n] = addreg;
newlist[n+1] = NULL;
return newlist;
}
/* ------------------------------------------------------ */
void
ledgerListRemove (RegWindow **list, RegWindow *delreg)
{
RegWindow *reg;
int n, i;
if (!list) return;
if (!delreg) return;
n = 0;
i = 0;
while (list[n]) {
list[i] = list[n];
if (delreg == list[n]) i--;
i++;
n++;
}
list[i] = NULL;
}
/* ------------------------------------------------------ */
int
ledgerIsMember (RegWindow *reg, Account * acc)
{
int n;
if (!acc) return 0;
if (!reg) return 0;
if (acc == reg->leader) return 1;
n = 0;
while (reg->blackacc[n]) {
if (acc == reg->blackacc[n]) return 1;
n++;
}
return 0;
}
/********************************************************************\
* regWindowSimple *
* opens up a register window for Account account *