GnuCash c935c2f+
Loading...
Searching...
No Matches
finvar.h
1/***************************************************************************
2 * -------------------
3 * create : Sat Jun 17 20:14:13 2000
4 * copyright: (C) 2000 by Terry D. Boldt
5 * email : tboldt@attglobal.net
6 * -------------------
7 ***************************************************************************/
8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16/***************************************************************************
17 * Global Financial Variables
18 * Sat Jun 17 20:14:13 2000
19 *
20 ***************************************************************************/
21
22#ifndef FINVAR_H
23#define FINVAR_H
24
25#if !defined( EOS )
26#define EOS '\x000'
27#endif
28
29#if !defined( TRUE )
30#define TRUE (1)
31#endif
32
33#if !defined( FALSE )
34#define FALSE (0)
35#endif
36
37#define INT_TYPE '\x001'
38#define DBL_TYPE '\x002'
39
40typedef enum
41{
42 PARSER_NO_ERROR = 0,
43 UNBALANCED_PARENS,
44 STACK_OVERFLOW,
45 STACK_UNDERFLOW,
46 UNDEFINED_CHARACTER,
47 NOT_A_VARIABLE,
48 NOT_A_FUNC,
49 PARSER_OUT_OF_MEMORY,
50 NUMERIC_ERROR,
51 EXPRESSION_ERROR,
52 PARSER_NUM_ERRORS
53}
54ParseError;
55
56#define UNUSED_VAR '\x000'
57#define USED_VAR '\x001'
58#define ASSIGNED_TO '\x002'
59
60#define ADD_OP '+'
61#define SUB_OP '-'
62#define DIV_OP '/'
63#define MUL_OP '*'
64#define ASN_OP '='
65
66/* The following structure is used by the expression parser to store
67 * named and temporary variables. */
68
69/* structure used for storing variables - used by expression parser/evaluator
70 */
71typedef struct var_store *var_store_ptr;
72
73/* the type of entity contained in the var_store */
74typedef enum
75{
76 VST_NUMERIC = 0,
77 VST_STRING
78} VarStoreType;
79
80typedef struct var_store
81{
82 char *variable_name; /* variable name if variable, NULL otherwise */
83 char use_flag; /* flag if variable has been assigned to */
84 char assign_flag; /* flag if variable is used */
85 VarStoreType type;
86 void *value; /* pointer to implementation defined numeric value */
87 var_store_ptr next_var; /* pointer to next variable in linked list */
88}
90
91
92/* The following structure is used for the numeric operations
93 * involving double float and integer arithmetic */
94
95/* structure used for storing numeric values - used by routines which
96 * evaluate arithmetic operators '+', '-', '/', '*' */
97typedef struct numeric *numeric_ptr;
98typedef struct numeric
99{
100 char type; /* designates type of value */
101 union
102 {
103 long int int_value; /* long integer value */
104 double dbl_value; /* double value */
105 }
106 value;
107}
108numeric;
109
110/* The following structures are used by the amortization functions for
111 * storing amortization schedule information */
112
113/* structure used by amortization routines for storing annual summary
114 information */
115typedef struct yearly_summary *yearly_summary_ptr;
116typedef struct yearly_summary
117{
118 unsigned year;
119 double interest;
120 double end_balance;
121}
123
124/* structure used by amortization routines for storing information on
125 a single payment */
126typedef struct sched_pmt *sched_pmt_ptr;
127typedef struct sched_pmt
128{
129 unsigned period_num;
130 double interest;
131 double principal;
132 double advanced_pmt;
133 double total_pmt;
134 double balance;
135}
137
138/* structure used by amortization routines for storing information on
139 * payments for a single year */
140typedef struct amort_sched_yr *amort_sched_yr_ptr;
141typedef struct amort_sched_yr
142{
143 unsigned year;
144 unsigned num_periods;
145 sched_pmt_ptr payments;
146 double interest_pd;
147 double principal_pd;
148 double yr_end_balance;
149 double total_interest_pd;
150 double final_pmt;
151 amort_sched_yr_ptr next_yr;
152}
154
155/* structure used by amortization routines for passing and storing
156 * information on a particular amortization transaction */
157typedef struct amort_sched *amort_sched_ptr;
158typedef struct amort_sched
159{
160 /* following information set by function calling amortization
161 functions */
162 unsigned n; /* number of periods */
163 double nint; /* nominal interest rate */
164 double pv; /* present value */
165 double pmt; /* periodic payment */
166 double fv; /* future value */
167 unsigned CF; /* compounding frequency */
168 unsigned PF; /* payment frequency */
169 unsigned disc; /* discrete/continuous compounding flag */
170 unsigned bep; /* beginning/end of period payment flag */
171 unsigned prec; /* roundoff precision */
172 unsigned year_E; /* Effective date - year */
173 unsigned month_E; /* Effective date - month */
174 unsigned day_E; /* Effective date - day of month */
175 unsigned year_I; /* Initial payment date - year */
176 unsigned month_I; /* Initial payment date - month */
177 unsigned day_I; /* Initial payment date - day of month */
178
179 /* following information set by calling function to indicate which
180 * schedule to compute and which type of schedule */
181 unsigned option; /* option flag from 1 to 6 inclusive */
182 char summary; /* summary flag == 'y', 'p', 'a' or 'f' */
183
184 /* following information set by amortization functions */
185 double eint; /* effective interest rate */
186 double bp; /* float value of bep */
187 double total_interest; /* total interest paid */
188 unsigned total_periods; /* total numer of periods in schedule */
189 unsigned long yr_pmt; /* number of payments in first year */
190 double final_pmt_opt_1; /* final payment option 1 */
191 double final_pmt_opt_2; /* final payment option 2 */
192 double final_pmt_opt_3; /* final payment option 3 */
193 double final_pmt_opt_4; /* final payment option 4 */
194 double final_pmt_opt_5; /* final payment option 5 */
195 double final_pmt_opt_6; /* final payment option 6 */
196 double final_pmt; /* final payment */
197 double pve; /* pv adjusted for delayed initial payment */
198 double new_pmt; /* pmt adjusted for delayed initial payment */
199 double cpmt; /* constant payment to principal */
200 double cpmt1; /* constant payment to principal, 1st case */
201 double cpmt2; /* constant payment to principal, 2cd case */
202 double delayed_int; /* interest due to delayed initial payment */
203 double fixed_pmt; /* fixed prepayment amount for amortization */
204 unsigned new_n; /* new number of periods to amortize due to
205 delayed initial payment */
206 unsigned fv_case; /* fv case flag */
207 unsigned long Eff_Date_jdn;
208 unsigned yday_E;
209 unsigned long Init_Date_jdn;
210 unsigned yday_I;
211 union
212 {
213 amort_sched_yr_ptr first_yr;
214 yearly_summary_ptr summary;
215 }
216 schedule;
217}
219
220/* The following structure is used to hold all of the financial
221 * variables used by the financial calculator */
222
223/* structure used by financial computation routines to store financial
224 variables */
225typedef struct financial_info *fi_ptr;
226typedef struct financial_info
227{
228 double ir; /* interest rate */
229 double pv; /* present value */
230 double pmt; /* periodic payment */
231 double fv; /* future value */
232
233 unsigned npp; /* number of payment periods */
234 unsigned CF; /* Compounding frequency */
235 unsigned PF; /* payment frequency */
236 unsigned bep; /* beginning/end of period payment flag */
237 /* TRUE == beginning of period */
238 /* FALSE == end of period */
239 unsigned disc; /* discrete/continuous compounding flag */
240 /* TRUE == discrete compounding */
241 /* FALSE == continuous compounding */
242
243 /* precision of roundoff for pv, pmt and fv.
244 * i, Interest not rounded
245 * n, number of periods rounded to integer value, implicit value of zero, 0
246 *
247 * 2 for US Dollars
248 */
249 unsigned prec;
250}
252
253typedef struct parser_env *parser_env_ptr;
254
255#endif