/*************************************************************************** * ------------------- * create : Sat Jun 17 20:14:13 2000 * copyright: (C) 2000 by Terry D. Boldt * email : tboldt@attglobal.net * ------------------- ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /*************************************************************************** * Global Financial Variables * Sat Jun 17 20:14:13 2000 * ***************************************************************************/ #ifndef FINVAR_H #define FINVAR_H #if !defined( EOS ) #define EOS '\x000' #endif #if !defined( TRUE ) #define TRUE (1) #endif #if !defined( FALSE ) #define FALSE (0) #endif #define INT_TYPE '\x001' #define DBL_TYPE '\x002' typedef enum { PARSER_NO_ERROR = 0, UNBALANCED_PARENS, STACK_OVERFLOW, STACK_UNDERFLOW, UNDEFINED_CHARACTER, NOT_A_VARIABLE, NOT_A_FUNC, PARSER_OUT_OF_MEMORY, NUMERIC_ERROR, EXPRESSION_ERROR, PARSER_NUM_ERRORS } ParseError; #define UNUSED_VAR '\x000' #define USED_VAR '\x001' #define ASSIGNED_TO '\x002' #define ADD_OP '+' #define SUB_OP '-' #define DIV_OP '/' #define MUL_OP '*' #define ASN_OP '=' /* The following structure is used by the expression parser to store * named and temporary variables. */ /* structure used for storing variables - used by expression parser/evaluator */ typedef struct var_store *var_store_ptr; /* the type of entity contained in the var_store */ typedef enum { VST_NUMERIC = 0, VST_STRING } VarStoreType; typedef struct var_store { char *variable_name; /* variable name if variable, NULL otherwise */ char use_flag; /* flag if variable has been assigned to */ char assign_flag; /* flag if variable is used */ VarStoreType type; void *value; /* pointer to implementation defined numeric value */ var_store_ptr next_var; /* pointer to next variable in linked list */ } var_store; /* The following structure is used for the numeric operations * involving double float and integer arithmetic */ /* structure used for storing numeric values - used by routines which * evaluate arithmetic operators '+', '-', '/', '*' */ typedef struct numeric *numeric_ptr; typedef struct numeric { char type; /* designates type of value */ union { long int int_value; /* long integer value */ double dbl_value; /* double value */ } value; } numeric; /* The following structures are used by the amortization functions for * storing amortization schedule information */ /* structure used by amortization routines for storing annual summary information */ typedef struct yearly_summary *yearly_summary_ptr; typedef struct yearly_summary { unsigned year; double interest; double end_balance; } yearly_summary; /* structure used by amortization routines for storing information on a single payment */ typedef struct sched_pmt *sched_pmt_ptr; typedef struct sched_pmt { unsigned period_num; double interest; double principal; double advanced_pmt; double total_pmt; double balance; } sched_pmt; /* structure used by amortization routines for storing information on * payments for a single year */ typedef struct amort_sched_yr *amort_sched_yr_ptr; typedef struct amort_sched_yr { unsigned year; unsigned num_periods; sched_pmt_ptr payments; double interest_pd; double principal_pd; double yr_end_balance; double total_interest_pd; double final_pmt; amort_sched_yr_ptr next_yr; } amort_sched_yr; /* structure used by amortization routines for passing and storing * information on a particular amortization transaction */ typedef struct amort_sched *amort_sched_ptr; typedef struct amort_sched { /* following information set by function calling amortization functions */ unsigned n; /* number of periods */ double nint; /* nominal interest rate */ double pv; /* present value */ double pmt; /* periodic payment */ double fv; /* future value */ unsigned CF; /* compounding frequency */ unsigned PF; /* payment frequency */ unsigned disc; /* discrete/continuous compounding flag */ unsigned bep; /* beginning/end of period payment flag */ unsigned prec; /* roundoff precision */ unsigned year_E; /* Effective date - year */ unsigned month_E; /* Effective date - month */ unsigned day_E; /* Effective date - day of month */ unsigned year_I; /* Initial payment date - year */ unsigned month_I; /* Initial payment date - month */ unsigned day_I; /* Initial payment date - day of month */ /* following information set by calling function to indicate which * schedule to compute and which type of schedule */ unsigned option; /* option flag from 1 to 6 inclusive */ char summary; /* summary flag == 'y', 'p', 'a' or 'f' */ /* following information set by amortization functions */ double eint; /* effective interest rate */ double bp; /* float value of bep */ double total_interest; /* total interest paid */ unsigned total_periods; /* total numer of periods in schedule */ unsigned long yr_pmt; /* number of payments in first year */ double final_pmt_opt_1; /* final payment option 1 */ double final_pmt_opt_2; /* final payment option 2 */ double final_pmt_opt_3; /* final payment option 3 */ double final_pmt_opt_4; /* final payment option 4 */ double final_pmt_opt_5; /* final payment option 5 */ double final_pmt_opt_6; /* final payment option 6 */ double final_pmt; /* final payment */ double pve; /* pv adjusted for delayed initial payment */ double new_pmt; /* pmt adjusted for delayed initial payment */ double cpmt; /* constant payment to principal */ double cpmt1; /* constant payment to principal, 1st case */ double cpmt2; /* constant payment to principal, 2cd case */ double delayed_int; /* interest due to delayed initial payment */ double fixed_pmt; /* fixed prepayment amount for amortization */ unsigned new_n; /* new number of periods to amortize due to delayed initial payment */ unsigned fv_case; /* fv case flag */ unsigned long Eff_Date_jdn; unsigned yday_E; unsigned long Init_Date_jdn; unsigned yday_I; union { amort_sched_yr_ptr first_yr; yearly_summary_ptr summary; } schedule; } amort_sched; /* The following structure is used to hold all of the financial * variables used by the financial calculator */ /* structure used by financial computation routines to store financial variables */ typedef struct financial_info *fi_ptr; typedef struct financial_info { double ir; /* interest rate */ double pv; /* present value */ double pmt; /* periodic payment */ double fv; /* future value */ unsigned npp; /* number of payment periods */ unsigned CF; /* Compounding frequency */ unsigned PF; /* payment frequency */ unsigned bep; /* beginning/end of period payment flag */ /* TRUE == beginning of period */ /* FALSE == end of period */ unsigned disc; /* discrete/continuous compounding flag */ /* TRUE == discrete compounding */ /* FALSE == continuous compounding */ /* precision of roundoff for pv, pmt and fv. * i, Interest not rounded * n, number of periods rounded to integer value, implicit value of zero, 0 * * 2 for US Dollars */ unsigned prec; } financial_info; typedef struct parser_env *parser_env_ptr; #endif