Virtual U.org
Get Personal Training on VU Today
    
Top shadow
 
 register/help
User Name:

Password:

ofin_rep.cpp Source File
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

ofin_rep.cpp

Go to the documentation of this file.
00001 //Filename    : OFINDISP.cpp
00002 //Description : Finance Class display method definition
00003 //Owner       : Ho
00004 
00005 #include <OBUTTON.H>                              // for this's disp_main
00006 #include <OFONT.H>
00007 #include <OSYS.H>                                 // sys.redraw_all_flag
00008 #include <OWORLDMT.H>                             // ZOOM_??
00009 #include <KEY.H>                                  // KEY_*
00010 #include <OGAMESTR.H>                             // report_str()
00011 #include <OFINANCE.H>
00012 #include <OVGA.H>                                 // for this's disp_main
00013 #include <OIFACE.H>
00014 #include <OINFO.H>
00015 #include <OSTR.H>
00016 #include <OVBROW98.H>
00017 #include <OOPT.H>
00018 
00019 #if(GAME_VERSION>=200)
00020 #include <OVGALOCK.H>
00021 #include <OMATH.H>
00022 #endif
00023 
00024 //----- define constants for report -----//
00025 
00026 #define FIN_REP_SHEET_COLOR   Vga::active_buf->color_down
00027 
00028 enum {
00029     REPORT_X1 = ZOOM_X1+2,
00030     REPORT_Y1 = ZOOM_Y1+15,
00031     REPORT_X2 = ZOOM_X2-2,
00032     REPORT_Y2 = ZOOM_Y2-50,
00033 };
00034 
00035 enum { BG_PIC_ID  = 12};
00036 enum { BUTTON_Y1 = REPORT_Y2+10 };
00037 enum { BUTTON_WIDTH = 105, BUTTON_HEIGHT = 21 };
00038 enum { FINANCIAL_REC_HEIGHT = 18 };
00039 enum { BS_TAB1 = 220, BS_TAB2 = 550,BS_TAB3 = 600 };
00040 
00041 //----- define variables for report -----//
00042 
00043 static ButtonGroup  button_type(REPORT_TYPE_COUNT);
00044 static ButtonGroup  button_year(REPORT_YEAR_COUNT);
00045 static ButtonGroup  button_opt(REPORT_OPT_COUNT);
00046 static Button     button_expand;
00047 static Button     button_prev, button_next;
00048 static VBrowse98    browse_financial;
00049 static int        report_year = 1;                //temp
00050 static void       disp_fin_rep_row(int,int,int,int);
00051 static void       fin_rep_case1(int,int,int);
00052 static void       fin_rep_case2(int,int,int);
00053 static void       fin_rep_case3(int,int,int);
00054 static void       fin_rep_case4(int,int,int);
00055 static void       fin_rep_case8(int,int,int);
00056 static void       fin_rep_case9(int,int,int);
00057 
00058 #if(GAME_VERSION>=200)
00059 
00060 // constant, macro, and function to exporting text file for import to spreadsheet
00061 const RECORD_SEPARATOR_LEN = 2;
00062 static char *RECORD_SEPARATOR = "\r\n";
00063 const FIELD_SEPARATOR_LEN = 1;
00064 static char *FIELD_SEPARATOR = "\t";
00065 
00066 static char *export_num(int value) {
00067     static char num_str[20];
00068     return itoa( value, num_str, 10 );              // 10 is radix
00069 }
00070 
00071 static char *export_num(double value) {
00072     static char num_str[20];
00073     return gcvt( value, 7, num_str );               // a few more more than 7, for negative sign, decimal point and exponent
00074 }
00075 
00076 #define WRITE_FIELD_SEPARATOR(f)      f->file_write(FIELD_SEPARATOR, FIELD_SEPARATOR_LEN)
00077 #define WRITE_STR_FIELD(f,s)          { f->file_write(s, strlen(s)); }
00078 #define WRITE_NUM_FIELD(f,n)          { char *s=export_num(n); f->file_write(s, strlen(s)); }
00079 #define WRITE_RECORD_SEPARATOR(f)     f->file_write(RECORD_SEPARATOR, RECORD_SEPARATOR_LEN)
00080 
00081 // function to export finance report to text file
00082 static void export_fin_rep_case1(File *);
00083 static void export_fin_rep_case2(File *);
00084 static void export_fin_rep_case3(File *);
00085 static void export_fin_rep_case4(File *);
00086 static void export_fin_rep_case5(File *);
00087 static void export_fin_rep_case6(File *);
00088 static void export_fin_rep_case7(File *);
00089 static void export_fin_rep_case8(File *);
00090 static void export_fin_rep_case9(File *);
00091 
00092 static Button button_export;                      // button to export to (spread sheet) text file
00093 #endif
00094 
00095 //----- Begin of function Finance::report ------//
00104 void Finance::disp_report_main(int refreshFlag, int dispButton, char* reportTitle) {
00105     int x=REPORT_X1, y=REPORT_Y1;
00106     vga.use_back();
00107     sys.is_institution_report=1;
00108     if (refreshFlag == INFO_REPAINT) {
00109         // ###### begin Gilbert 25/04/2001 ######//
00110         report_deinit();
00111         // ###### end Gilbert 25/04/2001 ######//
00112 
00113         //------------- paint the background ----------------//
00114 
00115         user_interface.bg_img(BG_PIC_ID, &vga_back);
00116 
00117         if( dispButton )
00118             report_paint_button(refreshFlag);
00119 
00120         int reportY1=REPORT_Y1, reportY2=REPORT_Y2;
00121 
00122         if( reportTitle ) {
00123             reportY1 += 15;
00124             font_charts.center_put( REPORT_X1, ZOOM_Y1, REPORT_X2, reportY1-1, reportTitle );
00125         }
00126 
00127         if( !dispButton )
00128             reportY2 += BUTTON_HEIGHT-8;
00129 
00130         // OPTIMIZATION
00131         if(report_type==REPORT_TYPE_OPTIMIZATION) {
00132             if(finance.report_opt==REPORT_OPT_REVENUE)
00133                 optimization.report_stage_1(refreshFlag);
00134             if(finance.report_opt==REPORT_OPT_FUNCTION)
00135                 optimization.report_stage_2(refreshFlag);
00136             if(finance.report_opt==REPORT_OPT_FACULTY)
00137                 optimization.report_stage_3(refreshFlag);
00138             //                          opt_stage3.report(refreshFlag);
00139         }
00140         else {
00141             //                  user_interface.bar( REPORT_X1, reportY1, REPORT_X2, reportY2,FIN_REP_SHEET_COLOR);
00142 
00143             user_interface.brighten( REPORT_X1, reportY1, REPORT_X2, reportY2);
00144             user_interface.rect( REPORT_X1, reportY1, REPORT_X2, reportY2);
00145 
00146             //-------- set the number of rows for th browser --------//
00147 
00148             int browseRecCount;
00149             if(report_type==REPORT_TYPE_REVENUE||report_type==REPORT_TYPE_BUDGET_VS_ACTUAL) {
00150                 if(report_year!=REPORT_YEAR_THREE_YEARS) {
00151                     browseRecCount=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+9;
00152                 }
00153                 else {
00154                     if( report_is_expanded )
00155                         browseRecCount=REVENUE_ITEM_COUNT+4*EXPENSE_ITEM_COUNT+25;
00156                     else
00157                         browseRecCount=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+9;
00158                 }
00159             }
00160 
00161             if(report_type==REPORT_TYPE_DETAIL_REN)
00162                 browseRecCount=REVENUE_ITEM_COUNT+4*EXPENSE_ITEM_COUNT+25;
00163 
00164             if(report_type==REPORT_TYPE_BALANCE) {
00165                 if(report_year==REPORT_YEAR_THREE_YEARS)
00166                     browseRecCount=ASSET_ITEM_COUNT+LIABILITY_ITEM_COUNT+8;
00167                 else
00168                     browseRecCount=ASSET_ITEM_COUNT+LIABILITY_ITEM_COUNT+7;
00169             }
00170 
00171             //-------------------------------------------//
00172 
00173             browse_financial.init( REPORT_X1, reportY1, REPORT_X2, reportY2,
00174                                    0, FINANCIAL_REC_HEIGHT, browseRecCount,
00175                                    disp_fin_rep_row, NULL ,0);
00176 
00177             browse_financial.open(report_financial_recno);
00178         }
00179 
00180     }
00181     else {                                          // refreshFlag == INFO_REFRESH
00182         if(report_type==REPORT_TYPE_OPTIMIZATION) {
00183             if(finance.report_opt==REPORT_OPT_REVENUE)
00184                 optimization.report_stage_1(refreshFlag);
00185             if(finance.report_opt==REPORT_OPT_FUNCTION)
00186                 optimization.report_stage_2(refreshFlag);
00187             if(finance.report_opt==REPORT_OPT_FACULTY)
00188                 optimization.report_stage_3(refreshFlag);
00189         }
00190         else {
00191             // update only
00192             browse_financial.update();
00193 
00194             if( dispButton )
00195                 report_paint_button(refreshFlag);
00196         }
00197     }
00198 
00199     //---------------------------------------------//
00200     if(report_type==REPORT_TYPE_OPTIMIZATION) {
00201     }
00202     else {
00203         report_financial_recno=browse_financial.recno();
00204     }
00205     vga.blt_buf( ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2 );
00206 }
00207 
00208 //----- End of function Finance::report ------//
00209 
00210 void Finance::report_deinit() {
00211     /*          // OPTIMIZATION
00212                 if(finance.report_type==REPORT_TYPE_OPTIMIZATION)
00213                 {
00214                 if(finance.report_opt==REPORT_OPT_REVENUE)
00215                 optimization.deinit_stage_1(refreshFlag);
00216                 if(finance.report_opt==REPORT_OPT_FUNCTION)
00217                 optimization.deinit_stage_2(refreshFlag);
00218                 if(finance.report_opt==REPORT_OPT_FACULTY)
00219                 optimization.deinit_stage_3(refreshFlag);
00220                 }
00221     */
00222     // ### begin Gilbert 25/04/2001 ######//
00223     optimization.deinit();                          // no need to check current stage, finance report didn't free memory properly
00224 
00225     button_type.deinit_buttons();
00226     button_year.deinit_buttons();
00227     button_opt.deinit_buttons();
00228     button_expand.deinit();
00229     button_prev.deinit();
00230     button_next.deinit();
00231     browse_financial.deinit();
00232     // ### end Gilbert 25/04/2001 ######//
00233 
00234 #if(GAME_VERSION>=200)
00235     button_export.deinit();
00236 #endif
00237 }
00238 
00239 //------- Begin of function Finance::report_detect -------//
00244 void Finance::report_detect(int detectButton) {
00245     if( detectButton ) {
00246         //------- detect type buttons --------//
00247         if( button_type.detect() >= 0 ) {
00248             report_type = button_type.button_pressed;
00249             sys.redraw_all_flag = 1;
00250             report_financial_recno=1;
00251             report_is_expanded = 0;
00252         }
00253 
00254         if(report_type==REPORT_TYPE_OPTIMIZATION) {
00255             if( button_opt.detect() >= 0 ) {
00256                 report_opt = button_opt.button_pressed;
00257                 sys.redraw_all_flag = 1;
00258                 report_financial_recno=1;
00259                 report_is_expanded = 0;
00260             }
00261         }
00262         else if((report_type==REPORT_TYPE_REVENUE)||(report_type==REPORT_TYPE_BALANCE)) {
00263             if( button_year.detect() >= 0 ) {
00264                 report_year = button_year.button_pressed;
00265                 sys.redraw_all_flag = 1;
00266                 report_financial_recno=1;
00267                 report_is_expanded = 0;
00268             }
00269 
00270         }
00271 
00272 #if(GAME_VERSION>=200)
00273         // detect export button
00274 
00275         if((report_type==REPORT_TYPE_REVENUE)||(report_type==REPORT_TYPE_BALANCE)||(report_type==REPORT_TYPE_DETAIL_REN)) {
00276             if( button_export.detect() ) {
00277                 // ask file name now
00278 
00279                 MouseDispCount mouseDispCount;            // redisplay windows cursor
00280 
00281                 char tempFilename[MAX_PATH];
00282 
00283                 tempFilename[0] = '\0';                   // strcpy(tempFilename, "finance.txt");
00284 
00285                 // ask filename now
00286                 OPENFILENAME openFileName;
00287                 memset( &openFileName, 0, sizeof(openFileName) );
00288                 openFileName.lStructSize = sizeof(openFileName);
00289                 openFileName.hwndOwner = sys.main_hwnd;
00290                 openFileName.hInstance = sys.app_hinstance;
00291                 // two '\0' at the end
00292                 openFileName.lpstrFilter = "Text file(*.txt)\0*.txt\0All Files(*.*)\0*.*\0";
00293                 openFileName.lpstrCustomFilter = NULL;
00294                 openFileName.nMaxCustFilter = 0;
00295                 openFileName.nFilterIndex = 0;
00296                 openFileName.lpstrFile =  tempFilename;   // first char is already NULL
00297                 openFileName.nMaxFile = sizeof(tempFilename);
00298                 openFileName.lpstrFileTitle = NULL;       // result filename, without path
00299                 openFileName.nMaxFileTitle = 0;
00300                 openFileName.lpstrInitialDir = ".";       // current directory
00301                 openFileName.lpstrTitle = NULL;
00302                 openFileName.Flags = OFN_OVERWRITEPROMPT | OFN_LONGNAMES | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
00303                 openFileName.nFileOffset = 0;
00304                 openFileName.nFileExtension = 0;
00305                 openFileName.lpstrDefExt = "txt";
00306                 openFileName.lCustData = NULL;
00307                 openFileName.lpfnHook = NULL;
00308                 openFileName.lpTemplateName = NULL;
00309 
00310                 if( GetSaveFileName(&openFileName) ) {
00311                     File exportFile;
00312                     exportFile.file_create( tempFilename );
00313                     if( report_type==REPORT_TYPE_REVENUE) {
00314                         switch(report_year) {
00315                         case 1: export_fin_rep_case1( &exportFile ); break;
00316                         case 2: export_fin_rep_case2( &exportFile ); break;
00317                         case 3: export_fin_rep_case3( &exportFile ); break;
00318                         case 0:                             // fall through
00319                         default: export_fin_rep_case4( &exportFile );
00320                         }
00321                     }
00322                     else if(report_type==REPORT_TYPE_BALANCE) {
00323                         // no matter which report_year, always print export_fin_rep_case8
00324                         export_fin_rep_case8( &exportFile );
00325                     }
00326                     else if(report_type==REPORT_TYPE_DETAIL_REN) {
00327                         export_fin_rep_case9( &exportFile );
00328                     }
00329 
00330                     exportFile.file_close();
00331                 }
00332             }
00333         }
00334 #endif
00335 
00336         if( button_expand.detect() ) {
00337             report_type = REPORT_TYPE_DETAIL_REN;
00338             sys.redraw_all_flag = 1;
00339             report_financial_recno=1;
00340             //                  report_is_expanded = !report_is_expanded;
00341             //                  sys.redraw_all_flag = 1;
00342             //                  report_financial_recno=1;
00343         }
00344     }
00345     if(report_type==REPORT_TYPE_OPTIMIZATION) {
00346         if(finance.report_opt==REPORT_OPT_REVENUE)
00347             optimization.detect_stage_1();
00348         if(finance.report_opt==REPORT_OPT_FUNCTION)
00349             optimization.detect_stage_2();
00350         if(finance.report_opt==REPORT_OPT_FACULTY)
00351             optimization.detect_stage_3();
00352     }
00353     else
00354         browse_financial.detect();
00355 }
00356 
00357 //------- End of function Finance::report_detect -------//
00358 
00359 //------- Begin of function Finance::report_paint_button ------//
00360 
00361 void Finance::report_paint_button(int refreshFlag) {
00362     if( refreshFlag == INFO_REPAINT ) {
00363         //-------- paint type buttons ------------//
00364 
00365         int x=REPORT_X1+10, y=BUTTON_Y1-6;
00366 
00367         button_type[0].create_text( x, y, x+(int)(2.7*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Budget vs Actual" );
00368         x+=(int)(2.7*BUTTON_WIDTH+15);
00369 
00370         button_type[1].create_text( x, y, x+(int)(1.2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Balance sheet" );
00371         x+=(int)(1.2*BUTTON_WIDTH+15);
00372 
00373         button_type[2].create_text( x, y, x+(int)(1.5*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Budget plan" );
00374         x+=(int)(1.5*BUTTON_WIDTH+15);
00375 
00376         button_type[3].create_text( x, y, x+(int)(0.8*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Detail", 0 );
00377         x=REPORT_X1+25, y=BUTTON_Y1+18;
00378 
00379         //---------show year buttons--------------------//
00380 
00381         if(report_type==REPORT_TYPE_OPTIMIZATION) {
00382             button_opt[0].create_text( x, y, x+(int)(2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Revenue and expenditure" );
00383 
00384             x+=(int)(2*BUTTON_WIDTH+20);
00385             button_opt[1].create_text( x, y, x+(int)(2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Allocations");
00386 
00387             x+=(int)(2*BUTTON_WIDTH+20);
00388             button_opt[2].create_text( x, y, x+(int)(2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Faculty hiring");
00389         }
00390 
00391         if((report_type==REPORT_TYPE_REVENUE)
00392            ||(report_type==REPORT_TYPE_BALANCE)) {
00393             String s1;
00394 
00395             int tyear=(int)(info.game_year+(info.game_month-9.0)/12);
00396 
00397             s1="Standard";
00398             button_year[0].create_text( x, y, x+BUTTON_WIDTH+40-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00399 
00400 #if(GAME_VERSION>=200)
00401             x+=BUTTON_WIDTH+65;
00402 #else
00403             x+=BUTTON_WIDTH+105;
00404 #endif
00405             s1="Year ";
00406             s1+=(m.format(tyear-1,4));
00407             button_year[1].create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00408 
00409 #if(GAME_VERSION>=200)
00410             x+=BUTTON_WIDTH+10;
00411 #else
00412             x+=BUTTON_WIDTH+70;
00413 #endif
00414             s1="Year ";
00415             s1+=(m.format(tyear,4));
00416             button_year[2].create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00417 
00418 #if(GAME_VERSION>=200)
00419             x+=BUTTON_WIDTH+10;
00420 #else
00421             x+=BUTTON_WIDTH+75;
00422 #endif
00423             s1="Year ";
00424             s1+=(m.format(tyear+1,4));
00425             button_year[3].create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00426 
00427 #if(GAME_VERSION>=200)
00428             x=REPORT_X2-BUTTON_WIDTH-25;
00429             button_export.create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, "Export" );
00430 #endif
00431         }
00432 
00433 #if(GAME_VERSION>=200)
00434         if(report_type==REPORT_TYPE_DETAIL_REN) {
00435             x=REPORT_X2-BUTTON_WIDTH-25;
00436             button_export.create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, "Export" );
00437         }
00438 #endif
00439 
00440         button_type.paint(report_type);
00441 
00442         if( report_type==REPORT_TYPE_BALANCE) {
00443             //                  for(int k=0;k<4;k++)
00444             //                          button_year[k].paint();
00445             //                  button_year[report_year].disable();
00446             button_year.paint(report_year);
00447 #if(GAME_VERSION>=200)
00448             button_export.paint();
00449 #endif
00450         }
00451         else if(report_type==REPORT_TYPE_OPTIMIZATION) {
00452             if((report_opt<0)||(report_opt>3))
00453                 report_opt=REPORT_OPT_REVENUE;
00454             button_opt.paint(report_opt);
00455         }
00456         else if(report_type==REPORT_TYPE_REVENUE) {
00457             button_year.paint(report_year);
00458 #if(GAME_VERSION>=200)
00459             button_export.paint();
00460 #endif
00461         }
00462         else if(report_type==REPORT_TYPE_DETAIL_REN) {
00463 #if(GAME_VERSION>=200)
00464             button_export.paint();
00465 #endif
00466         }
00467     }
00468 }
00469 
00470 //------- End of function Finance::report_paint_button ------//
00471 
00472 //------ Begin of static function fin_rep_case1 --------//
00473 // Case 1: RENVENUE     and PREVIOUS YEAR
00474 // recNo -- record no. (row no.) to be displayed
00475 // x,y  -- left top position of the display region
00476 //
00477 static void fin_rep_case1(int recNo,int x, int y) {
00478     int i;
00479     //  int     xColumn1=x+305, xColumn2=440, xColumn3=510, xColumn4=590, xColumn5=680;
00480     int xColumn1=370, xColumn2=470, xColumn3=570, xColumn4=670, xColumn5=740;
00481 
00482     // Show title //
00483     if(recNo==1) {
00484         // change in verion 2
00485         // int tyear=(int)(info.game_year+(info.game_month-9.0)/12);
00486         int tyear = info.financial_year();
00488         if(sys.view_mode==MODE_YEAR_END_REPORT)tyear++;
00489 
00490         String str;
00491         str="Previous Year : Year ";
00492         str+=m.format(tyear-1,4);
00493 
00494         font_charts.put(xColumn1-70,y+2,str.str_buf);
00495         return;
00496     }
00497     recNo--;
00498 
00499     if(recNo==1) {
00500         font_chart_red_sm.disp( x, y, "Revenue", x+200 );
00501         font_chart_red_sm.right_put( xColumn2, y+2, "Direct");
00502         font_chart_red_sm.right_put( xColumn3, y+2, "Indirect");
00503         font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00504         font_chart_red_sm.right_put( xColumn5, y+2, "% sources");
00505     }
00506     else if((recNo>1) && (recNo<=REVENUE_ITEM_COUNT+1)) {
00507         i=recNo-2;
00508         if(recNo==5) {
00509             //font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00510             //font_chartsm.disp( xColumn2, y+2, finance.revenue_array[i].direct, 2, xColumn3);
00511             //font_chartsm.disp( xColumn3, y+2, finance.revenue_array[i].indirect, 2, xColumn4);
00512             //font_chartsm.disp( xColumn4, y+2, finance.revenue_array[i].total, 2, xColumn5 );
00513             //font_chartsm.disp( xColumn5, y+2, finance.revenue_array[i].percent, 3, xColumn6 );
00514 
00515             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00516             font_chartsm.right_put( xColumn2, y+2, m.format(finance.revenue_array[i].direct, 2));
00517             font_chartsm.right_put( xColumn3, y+2, m.format(finance.revenue_array[i].indirect, 2));
00518             font_chartsm.right_put( xColumn4, y+2, m.format(finance.revenue_array[i].total, 2));
00519             font_chartsm.right_put( xColumn5, y+2, m.format(finance.revenue_array[i].percent, 24));
00520         }
00521         if((recNo==2)||(recNo==3)) {
00522             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00523             //                          font_chartsm.disp( xColumn4, y+2, finance.revenue_array[i].total, 2, xColumn5 );
00524             font_chartsm.right_put( xColumn4, y+2, m.format(finance.revenue_array[i].total, 2));
00525         }
00526         else {
00527             if( recNo==4 )                              // use blue font for Net tuition income
00528                 font_chart_blue_sm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00529             else
00530                 font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00531 
00532             font_chartsm.right_put( xColumn4, y+2, m.format(finance.revenue_array[i].total, 2));
00533             font_chartsm.right_put( xColumn5, y+2, m.format(finance.revenue_array[i].percent, 24));
00534         }
00535     }
00536     else if(recNo==REVENUE_ITEM_COUNT+2) {
00537         font_chart_blue_sm.disp( x, y,"  Total sources of funds", xColumn1);
00538         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.total_revenue.total, 2));
00539         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.total_revenue.percent, 24));
00540     }
00541     else if(recNo==REVENUE_ITEM_COUNT+3) {
00542         font_chart_red_sm.right_put( xColumn1, y+2, "AY faculty");
00543         font_chart_red_sm.right_put( xColumn2, y+2, "Staff");
00544         font_chart_red_sm.right_put( xColumn3, y+2, "Other");
00545     }
00546     else if(recNo==REVENUE_ITEM_COUNT+4) {
00547         font_chart_red_sm.disp( x, y, "Expenditures", x+200 );
00548         font_chart_red_sm.right_put( xColumn1, y+2, "compensation");
00549         font_chart_red_sm.right_put( xColumn2, y+2, "compensation");
00550         font_chart_red_sm.right_put( xColumn3, y+2, "expenditures");
00551         font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00552         font_chart_red_sm.right_put( xColumn5, y+2, "% uses");
00553     }
00554     else if((recNo>=REVENUE_ITEM_COUNT+5) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00555         i=recNo-5-REVENUE_ITEM_COUNT;
00556         if((recNo>=REVENUE_ITEM_COUNT+7) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00557             font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00558             font_chartsm.right_put( xColumn2, y+2, m.format(finance.expense_array[i].staff, 2));
00559             font_chartsm.right_put( xColumn3, y+2, m.format(finance.expense_array[i].other, 2));
00560             font_chartsm.right_put( xColumn4, y+2, m.format(finance.expense_array[i].total, 2));
00561             font_chartsm.right_put( xColumn5, y+2, m.format(finance.expense_array[i].percent, 24));
00562         }
00563         else {
00564             font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
00565             font_chartsm.right_put( xColumn1, y+2, m.format(finance.expense_array[i].faculty, 2));
00566             font_chartsm.right_put( xColumn2, y+2, m.format(finance.expense_array[i].staff, 2));
00567             font_chartsm.right_put( xColumn3, y+2, m.format(finance.expense_array[i].other, 2));
00568             font_chartsm.right_put( xColumn4, y+2, m.format(finance.expense_array[i].total, 2));
00569             font_chartsm.right_put( xColumn5, y+2, m.format(finance.expense_array[i].percent, 24));
00570         }
00571     }
00572     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) {
00573         font_chart_blue_sm.disp( x, y,"  Total operating expenditures", xColumn1);
00574         font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.total_operating_expense.faculty, 2));
00575         font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.total_operating_expense.staff, 2));
00576         font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.total_operating_expense.other, 2));
00577         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.total_operating_expense.total, 2));
00578         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.total_operating_expense.percent, 24));
00579     }
00580     else if((recNo>REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) && (recNo<=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+5)) {
00581         i=recNo-6-REVENUE_ITEM_COUNT;
00582         font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
00583         font_chartsm.right_put( xColumn3, y+2, m.format(finance.expense_array[i].other, 2));
00584         font_chartsm.right_put( xColumn4, y+2, m.format(finance.expense_array[i].total, 2));
00585         font_chartsm.right_put( xColumn5, y+2, m.format(finance.expense_array[i].percent, 24));
00586     }
00587     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+6) {
00588         font_chart_blue_sm.disp( x, y,"  Total uses of funds", xColumn1);
00589         font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.total_expense.faculty, 2));
00590         font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.total_expense.staff, 2));
00591         font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.total_expense.other, 2));
00592         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.total_expense.total, 2));
00593         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.total_expense.percent, 24));
00594     }
00595     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+7) {
00596         double percent1,percent2,percent3,percent4;
00597         percent1=100*finance.total_expense.faculty/finance.total_expense.total;
00598         percent2=100*finance.total_expense.staff/finance.total_expense.total;
00599         percent3=100*finance.total_expense.other/finance.total_expense.total;
00600         percent4=100;
00601 
00602         font_chartsm.disp( x, y, "\tPercent of total uses",  xColumn1);
00603         font_chartsm.right_put( xColumn1, y+2, m.format(percent1, 24));
00604         font_chartsm.right_put( xColumn2, y+2, m.format(percent2, 24));
00605         font_chartsm.right_put( xColumn3, y+2, m.format(percent3, 24));
00606         font_chartsm.right_put( xColumn4, y+2, m.format(percent4, 24));
00607         //                      font_chartsm.disp( xColumn5, y+2, "% uses", xColumn6 );
00608     }
00609     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+8) {
00610         font_chartsm.disp( x, y,"  Surplus (deficit)", xColumn1);
00611 
00612         if(finance.last_year.surplus_deficit>=0)
00613             font_chart_green_sm.right_put( xColumn4, y+2, m.format(finance.last_year.surplus_deficit, 2) );
00614         else
00615             font_chart_red_sm.right_put( xColumn4, y+2, m.format(finance.last_year.surplus_deficit, 2));
00616     }
00617 
00618 }
00619 
00620 //------ End of static function fin_rep_case1 --------//
00621 
00622 #if(GAME_VERSION>=200)
00623 //------ Begin of static function export_fin_rep_case1 --------//
00624 //
00625 // write fin_rep_case1 to a text file
00626 //
00627 void export_fin_rep_case1( File *filePtr ) {
00628     // year no
00629     int tyear = info.financial_year();
00630     WRITE_STR_FIELD(filePtr, "Previous Year : " ); WRITE_FIELD_SEPARATOR(filePtr);
00631     WRITE_NUM_FIELD(filePtr, tyear-1); WRITE_RECORD_SEPARATOR(filePtr);
00632     // revenue label
00633     WRITE_STR_FIELD(filePtr, "Revenue"); WRITE_FIELD_SEPARATOR(filePtr);
00634     WRITE_FIELD_SEPARATOR(filePtr);                 // blank field
00635     WRITE_STR_FIELD(filePtr, "Direct"); WRITE_FIELD_SEPARATOR(filePtr);
00636     WRITE_STR_FIELD(filePtr, "Indirect"); WRITE_FIELD_SEPARATOR(filePtr);
00637     WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00638     WRITE_STR_FIELD(filePtr, "% sources"); WRITE_RECORD_SEPARATOR(filePtr);
00639 
00640     // revenue
00641     for( int i = 0; i < REVENUE_ITEM_COUNT; ++i ) {
00642         WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i)); WRITE_FIELD_SEPARATOR(filePtr);
00643         WRITE_FIELD_SEPARATOR(filePtr);               // blank field
00644         // only AC_SPONSORED_RESEARCH_REVENUE display direct and indirect
00645         if( i == AC_SPONSORED_RESEARCH_REVENUE ) {
00646             WRITE_NUM_FIELD(filePtr, finance.revenue_array[i].direct); WRITE_FIELD_SEPARATOR(filePtr);
00647             WRITE_NUM_FIELD(filePtr, finance.revenue_array[i].indirect); WRITE_FIELD_SEPARATOR(filePtr);
00648         }
00649         else {
00650             WRITE_FIELD_SEPARATOR(filePtr);
00651             WRITE_FIELD_SEPARATOR(filePtr);
00652         }
00653         WRITE_NUM_FIELD(filePtr, finance.revenue_array[i].total); WRITE_FIELD_SEPARATOR(filePtr);
00654         // don't show % sources AC_GROSS_TUITION_INCOME,AC_FINANCIAL_AID
00655         if( i==AC_GROSS_TUITION_INCOME||i==AC_FINANCIAL_AID ) {
00656             // empty
00657         }
00658         else {
00659             WRITE_NUM_FIELD(filePtr, 0.01*finance.revenue_array[i].percent);
00660         }
00661         WRITE_RECORD_SEPARATOR(filePtr);
00662     }
00663     // total revenue
00664     WRITE_STR_FIELD(filePtr, "  Total sources of funds"); WRITE_FIELD_SEPARATOR(filePtr);
00665     WRITE_FIELD_SEPARATOR(filePtr);                 // blank field
00666     WRITE_FIELD_SEPARATOR(filePtr);                 // direct field
00667     WRITE_FIELD_SEPARATOR(filePtr);                 // indirect field
00668     WRITE_NUM_FIELD(filePtr, finance.total_revenue.total); WRITE_FIELD_SEPARATOR(filePtr);
00669     WRITE_NUM_FIELD(filePtr, finance.total_revenue.percent); WRITE_RECORD_SEPARATOR(filePtr);
00670 
00671   // expenditure label
00672     WRITE_STR_FIELD(filePtr, "Expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00673     WRITE_STR_FIELD(filePtr, "AY faculty compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00674     WRITE_STR_FIELD(filePtr, "Staff compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00675     WRITE_STR_FIELD(filePtr, "Other expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00676     WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00677     WRITE_STR_FIELD(filePtr, "% uses"); WRITE_RECORD_SEPARATOR(filePtr);
00678 
00679   // expenditure item
00680     for( i=0; i < EXPENSE_ITEM_COUNT; ++i ) {
00681         WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT)); WRITE_FIELD_SEPARATOR(filePtr);
00682         if( i==AC_ACADEMIC_DEPARTMENTS || i==AC_SPONSORED_RESEARCH_EXPENSE ) {
00683             WRITE_NUM_FIELD(filePtr, finance.expense_array[i].faculty);
00684         }
00685         WRITE_FIELD_SEPARATOR(filePtr);
00686         if( i < OPERATING_EXPENSE_ITEM_COUNT ) {
00687             WRITE_NUM_FIELD(filePtr, finance.expense_array[i].staff);
00688         }
00689         WRITE_FIELD_SEPARATOR(filePtr);
00690         WRITE_NUM_FIELD(filePtr, finance.expense_array[i].other); WRITE_FIELD_SEPARATOR(filePtr);
00691         WRITE_NUM_FIELD(filePtr, finance.expense_array[i].total); WRITE_FIELD_SEPARATOR(filePtr);
00692         WRITE_NUM_FIELD(filePtr, 0.01*finance.expense_array[i].percent); WRITE_RECORD_SEPARATOR(filePtr);
00693 
00694         // total operatring expenditure
00695         if( i==OPERATING_EXPENSE_ITEM_COUNT-1 ) {
00696             WRITE_STR_FIELD(filePtr, "  Total operating expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00697             WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.faculty); WRITE_FIELD_SEPARATOR(filePtr);
00698             WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.staff); WRITE_FIELD_SEPARATOR(filePtr);
00699             WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.other); WRITE_FIELD_SEPARATOR(filePtr);
00700             WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.total); WRITE_FIELD_SEPARATOR(filePtr);
00701             WRITE_NUM_FIELD(filePtr, 0.01*finance.total_operating_expense.percent); WRITE_RECORD_SEPARATOR(filePtr);
00702         }
00703     }
00704 
00705     // total use of fund
00706     WRITE_STR_FIELD(filePtr, "  Total uses of funds" ); WRITE_FIELD_SEPARATOR(filePtr);
00707     WRITE_NUM_FIELD(filePtr, finance.total_expense.faculty ); WRITE_FIELD_SEPARATOR(filePtr);
00708     WRITE_NUM_FIELD(filePtr, finance.total_expense.staff); WRITE_FIELD_SEPARATOR(filePtr);
00709     WRITE_NUM_FIELD(filePtr, finance.total_expense.other); WRITE_FIELD_SEPARATOR(filePtr);
00710     WRITE_NUM_FIELD(filePtr, finance.total_expense.total); WRITE_FIELD_SEPARATOR(filePtr);
00711     WRITE_NUM_FIELD(filePtr, 0.01*finance.total_expense.percent); WRITE_RECORD_SEPARATOR(filePtr);
00712 
00713   // percentage of total uses
00714     double percent1,percent2,percent3,percent4;
00715     percent1=finance.total_expense.faculty/finance.total_expense.total;
00716     percent2=finance.total_expense.staff/finance.total_expense.total;
00717     percent3=finance.total_expense.other/finance.total_expense.total;
00718     percent4=1.0;
00719 
00720     WRITE_STR_FIELD(filePtr, "    Percent of total uses" ); WRITE_FIELD_SEPARATOR(filePtr);
00721     WRITE_NUM_FIELD(filePtr, percent1); WRITE_FIELD_SEPARATOR(filePtr);
00722     WRITE_NUM_FIELD(filePtr, percent2); WRITE_FIELD_SEPARATOR(filePtr);
00723     WRITE_NUM_FIELD(filePtr, percent3); WRITE_FIELD_SEPARATOR(filePtr);
00724     WRITE_NUM_FIELD(filePtr, percent4); WRITE_FIELD_SEPARATOR(filePtr);
00725     WRITE_RECORD_SEPARATOR(filePtr);                // blank on % uses field
00726 
00727     // surplus
00728     WRITE_STR_FIELD(filePtr, "  Surplus (deficit)"); WRITE_FIELD_SEPARATOR(filePtr);
00729     WRITE_FIELD_SEPARATOR(filePtr);                 // AY faculty compensation field
00730     WRITE_FIELD_SEPARATOR(filePtr);                 // staff compensation field
00731     WRITE_FIELD_SEPARATOR(filePtr);                 // other expenditure field
00732     WRITE_NUM_FIELD(filePtr, finance.last_year.surplus_deficit); WRITE_FIELD_SEPARATOR(filePtr);
00733     WRITE_RECORD_SEPARATOR(filePtr);                // blank on % uses field
00734 }
00735 
00736 //------ End of static function export_fin_rep_case1 --------//
00737 #endif
00738 
00739 //------ Begin of static function fin_rep_case2 --------//
00740 // Case 2: RENVENUE     and LAST YEAR
00741 // recNo -- record no. (row no.) to be displayed
00742 // x,y  -- left top position of the display region
00743 //
00744 static void fin_rep_case2(int recNo,int x, int y) {
00745     int i;
00746     int xColumn1=370, xColumn2=470, xColumn3=570, xColumn4=670, xColumn5=740;
00747 
00748     // Show title //
00749     if(recNo==1) {
00750         // change in version 2
00751         // int tyear=(int)(info.game_year+(info.game_month-9.0)/12);
00752         int tyear = info.financial_year();
00753 
00754         String str;
00755         str="Present Year : Year ";
00756         //                      str+=m.format(tyear,16);    //## chea 061199 2.5.1
00757         str+=m.format(tyear,4);
00758 
00759         //                      str+="-";
00760         //                      str+=m.format(tyear+1,16);  //## chea 061199 2.5.1
00761 
00762         font_charts.put(xColumn1-70,y+2,str.str_buf);
00763         return;
00764     }
00765     recNo--;
00766 
00767     if(recNo==1) {
00768         font_chart_red_sm.disp( x, y, "Revenue", x+200 );
00769         font_chart_red_sm.right_put( xColumn2, y+2, "Direct");
00770         font_chart_red_sm.right_put( xColumn3, y+2, "Indirect");
00771         font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00772         font_chart_red_sm.right_put( xColumn5, y+2, "% sources");
00773     }
00774     else if((recNo>1) && (recNo<=REVENUE_ITEM_COUNT+1)) {
00775         i=recNo-2;
00776         if(recNo==5) {
00777             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00778             font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_revenue_array[i].this_year.direct, 2));
00779             font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_revenue_array[i].this_year.indirect, 2));
00780             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].this_year.total, 2));
00781             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].this_year.percent, 24));
00782         }
00783         if((recNo==2)||(recNo==3)) {
00784             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00785             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].this_year.total, 2));
00786         }
00787         else {
00788             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
00789             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].this_year.total, 2));
00790             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].this_year.percent, 24));
00791         }
00792     }
00793     else if(recNo==REVENUE_ITEM_COUNT+2) {
00794         font_chart_blue_sm.disp( x, y,"  Total sources of funds", xColumn1);
00795         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_revenue.this_year.total, 2));
00796         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_revenue.this_year.percent, 24));
00797     }
00798     else if(recNo==REVENUE_ITEM_COUNT+3) {
00799         font_chart_red_sm.right_put( xColumn1, y+2, "AY faculty");
00800         font_chart_red_sm.right_put( xColumn2, y+2, "Staff");
00801         font_chart_red_sm.right_put( xColumn3, y+2, "Other");
00802     }
00803     else if(recNo==REVENUE_ITEM_COUNT+4) {
00804         font_chart_red_sm.disp( x, y, "Expenditures", x+200 );
00805         font_chart_red_sm.right_put( xColumn1, y+2, "compensation");
00806         font_chart_red_sm.right_put( xColumn2, y+2, "compensation");
00807         font_chart_red_sm.right_put( xColumn3, y+2, "expenditures");
00808         font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00809         font_chart_red_sm.right_put( xColumn5, y+2, "% uses");
00810     }
00811     else if((recNo>=REVENUE_ITEM_COUNT+5) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00812         i=recNo-5-REVENUE_ITEM_COUNT;
00813         if((recNo>=REVENUE_ITEM_COUNT+7) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00814             font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00815             font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].this_year.staff, 2));
00816             font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].this_year.other, 2));
00817             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].this_year.total, 2));
00818             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].this_year.percent, 24));
00819         }
00820         else {
00821             font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00822             font_chartsm.right_put( xColumn1, y+2, m.format(finance.projected_expense_array[i].this_year.faculty, 2));
00823             font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].this_year.staff, 2));
00824             font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].this_year.other, 2));
00825             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].this_year.total, 2));
00826             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].this_year.percent, 24));
00827         }
00828     }
00829     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) {
00830         font_chart_blue_sm.disp( x, y,"  Total operating expenditures", xColumn1);
00831         font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_operating_expense.this_year.faculty, 2));
00832         font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_operating_expense.this_year.staff, 2));
00833         font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_operating_expense.this_year.other, 2));
00834         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_operating_expense.this_year.total, 2));
00835         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_operating_expense.this_year.percent, 24));
00836     }
00837     else if((recNo>REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) && (recNo<=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+5)) {
00838         i=recNo-6-REVENUE_ITEM_COUNT;
00839         font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00840         font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].this_year.other, 2));
00841         font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].this_year.total, 2));
00842         font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].this_year.percent, 24));
00843     }
00844     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+6) {
00845         font_chart_blue_sm.disp( x, y,"  Total uses of funds", xColumn1);
00846         font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_expense.this_year.faculty, 2));
00847         font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_expense.this_year.staff, 2));
00848         font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_expense.this_year.other, 2));
00849         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_expense.this_year.total, 2));
00850         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_expense.this_year.percent, 24));
00851     }
00852     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+7) {
00853         double percent1,percent2,percent3,percent4;
00854         // fix in version 2
00855         //percent1=100*finance.total_expense.faculty/finance.total_expense.total;
00856         //percent2=100*finance.total_expense.staff/finance.total_expense.total;
00857         //percent3=100*finance.total_expense.other/finance.total_expense.total;
00858         percent1=100*finance.projected_total_expense.this_year.faculty/finance.projected_total_expense.this_year.total;
00859         percent2=100*finance.projected_total_expense.this_year.staff/finance.projected_total_expense.this_year.total;
00860         percent3=100*finance.projected_total_expense.this_year.other/finance.projected_total_expense.this_year.total;
00861         percent4=100;
00862 
00863         font_chartsm.disp( x, y, "\tPercent of total uses",  xColumn1);
00864         font_chartsm.right_put( xColumn1, y+2, m.format(percent1, 24));
00865         font_chartsm.right_put( xColumn2, y+2, m.format(percent2, 24));
00866         font_chartsm.right_put( xColumn3, y+2, m.format(percent3, 24));
00867         font_chartsm.right_put( xColumn4, y+2, m.format(percent4, 24));
00868         //                      font_chartsm.disp( xColumn5, y+2, "% uses", xColumn6 );
00869     }
00870     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+8) {
00871         font_chartsm.disp( x, y,"  Surplus (deficit)", xColumn1);
00872         if(finance.this_year.surplus_deficit>0)
00873             font_chart_green_sm.right_put( xColumn4, y+2, m.format(finance.this_year.surplus_deficit, 2));
00874         else
00875             font_chart_red_sm.right_put( xColumn4, y+2, m.format(finance.this_year.surplus_deficit, 2));
00876     }
00877 }
00878 
00879 //------ End of static function fin_rep_case2 --------//
00880 
00881 #if(GAME_VERSION>=200)
00882 //------ Begin of static function export_fin_rep_case2 --------//
00883 //
00884 // write fin_rep_case2 to a text file
00885 //
00886 void export_fin_rep_case2( File *filePtr ) {
00887     // year no
00888     int tyear = info.financial_year();
00889     WRITE_STR_FIELD(filePtr, "Present Year : " ); WRITE_FIELD_SEPARATOR(filePtr);
00890     WRITE_NUM_FIELD(filePtr, tyear); WRITE_RECORD_SEPARATOR(filePtr);
00891     // revenue label
00892     WRITE_STR_FIELD(filePtr, "Revenue"); WRITE_FIELD_SEPARATOR(filePtr);
00893     WRITE_FIELD_SEPARATOR(filePtr);                 // blank field
00894     WRITE_STR_FIELD(filePtr, "Direct"); WRITE_FIELD_SEPARATOR(filePtr);
00895     WRITE_STR_FIELD(filePtr, "Indirect"); WRITE_FIELD_SEPARATOR(filePtr);
00896     WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00897     WRITE_STR_FIELD(filePtr, "% sources"); WRITE_RECORD_SEPARATOR(filePtr);
00898 
00899     // revenue
00900     for( int i = 0; i < REVENUE_ITEM_COUNT; ++i ) {
00901         WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i)); WRITE_FIELD_SEPARATOR(filePtr);
00902         WRITE_FIELD_SEPARATOR(filePtr);               // blank field
00903         // only AC_SPONSORED_RESEARCH_REVENUE display direct and indirect
00904         if( i == AC_SPONSORED_RESEARCH_REVENUE ) {
00905             WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].this_year.direct); WRITE_FIELD_SEPARATOR(filePtr);
00906             WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].this_year.indirect); WRITE_FIELD_SEPARATOR(filePtr);
00907         }
00908         else {
00909             WRITE_FIELD_SEPARATOR(filePtr);
00910             WRITE_FIELD_SEPARATOR(filePtr);
00911         }
00912         WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00913         // don't show % sources AC_GROSS_TUITION_INCOME,AC_FINANCIAL_AID
00914         if( i==AC_GROSS_TUITION_INCOME||i==AC_FINANCIAL_AID ) {
00915             // empty
00916         }
00917         else {
00918             WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_revenue_array[i].this_year.percent);
00919         }
00920         WRITE_RECORD_SEPARATOR(filePtr);
00921     }
00922     // total revenue
00923     WRITE_STR_FIELD(filePtr, "  Total sources of funds"); WRITE_FIELD_SEPARATOR(filePtr);
00924     WRITE_FIELD_SEPARATOR(filePtr);                 // blank field
00925     WRITE_FIELD_SEPARATOR(filePtr);                 // direct field
00926     WRITE_FIELD_SEPARATOR(filePtr);                 // indirect field
00927     WRITE_NUM_FIELD(filePtr, finance.projected_total_revenue.this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00928     WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_total_revenue.this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00929 
00930   // expenditure label
00931     WRITE_STR_FIELD(filePtr, "Expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00932     WRITE_STR_FIELD(filePtr, "AY faculty compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00933     WRITE_STR_FIELD(filePtr, "Staff compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00934     WRITE_STR_FIELD(filePtr, "Other expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00935     WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00936     WRITE_STR_FIELD(filePtr, "% uses"); WRITE_RECORD_SEPARATOR(filePtr);
00937 
00938   // expenditure item
00939     for( i=0; i < EXPENSE_ITEM_COUNT; ++i ) {
00940         WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT)); WRITE_FIELD_SEPARATOR(filePtr);
00941         if( i==AC_ACADEMIC_DEPARTMENTS || i==AC_SPONSORED_RESEARCH_EXPENSE ) {
00942             WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.faculty);
00943         }
00944         WRITE_FIELD_SEPARATOR(filePtr);
00945         if( i < OPERATING_EXPENSE_ITEM_COUNT ) {
00946             WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.staff);
00947         }
00948         WRITE_FIELD_SEPARATOR(filePtr);
00949         WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.other); WRITE_FIELD_SEPARATOR(filePtr);
00950         WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00951         WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_expense_array[i].this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00952 
00953         if( i==OPERATING_EXPENSE_ITEM_COUNT-1 ) {
00954             // total operatring expenditure
00955             WRITE_STR_FIELD(filePtr, "  Total operating expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00956             WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.faculty); WRITE_FIELD_SEPARATOR(filePtr);
00957             WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.staff); WRITE_FIELD_SEPARATOR(filePtr);
00958             WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.other); WRITE_FIELD_SEPARATOR(filePtr);
00959             WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00960             WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_total_operating_expense.this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00961         }
00962     }
00963 
00964     // total use of fund
00965     WRITE_STR_FIELD(filePtr, "  Total uses of funds" ); WRITE_FIELD_SEPARATOR(filePtr);
00966     WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.faculty ); WRITE_FIELD_SEPARATOR(filePtr);
00967     WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.staff); WRITE_FIELD_SEPARATOR(filePtr);
00968     WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.other); WRITE_FIELD_SEPARATOR(filePtr);
00969     WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00970     WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_total_expense.this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00971 
00972   // percentage of total uses
00973     double percent1,percent2,percent3,percent4;
00974     percent1=finance.projected_total_expense.this_year.faculty/finance.projected_total_expense.this_year.total;
00975     percent2=finance.projected_total_expense.this_year.staff/finance.projected_total_expense.this_year.total;
00976     percent3=finance.projected_total_expense.this_year.other/finance.projected_total_expense.this_year.total;
00977     percent4=1.0;
00978 
00979     WRITE_STR_FIELD(filePtr, "    Percent of total uses" ); WRITE_FIELD_SEPARATOR(filePtr);
00980     WRITE_NUM_FIELD(filePtr, percent1); WRITE_FIELD_SEPARATOR(filePtr);
00981     WRITE_NUM_FIELD(filePtr, percent2); WRITE_FIELD_SEPARATOR(filePtr);
00982     WRITE_NUM_FIELD(filePtr, percent3); WRITE_FIELD_SEPARATOR(filePtr);
00983     WRITE_NUM_FIELD(filePtr, percent4); WRITE_FIELD_SEPARATOR(filePtr);
00984     WRITE_RECORD_SEPARATOR(filePtr);                // blank on % uses field
00985 
00986     // surplus
00987     WRITE_STR_FIELD(filePtr, "  Surplus (deficit)"); WRITE_FIELD_SEPARATOR(filePtr);
00988     WRITE_FIELD_SEPARATOR(filePtr);                 // AY faculty compensation field
00989     WRITE_FIELD_SEPARATOR(filePtr);                 // staff compensation field
00990     WRITE_FIELD_SEPARATOR(filePtr);                 // other expenditure field
00991     WRITE_NUM_FIELD(filePtr, finance.this_year.surplus_deficit); WRITE_FIELD_SEPARATOR(filePtr);
00992     WRITE_RECORD_SEPARATOR(filePtr);                // blank on % uses field
00993 }
00994 
00995 //------ End of static function export_fin_rep_case2 --------//
00996 #endif
00997 
00998 //------ Begin of static function fin_rep_case3 --------//
00999 // Case 3: RENVENUE     and NEXT YEAR
01000 // recNo -- record no. (row no.) to be displayed
01001 // x,y  -- left top position of the display region
01002 //
01003 static void fin_rep_case3(int recNo,int x, int y) {
01004     int i;
01005     //  int     xColumn1=x+305, xColumn2=440, xColumn3=510, xColumn4=590, xColumn5=680;
01006     int xColumn1=370, xColumn2=470, xColumn3=570, xColumn4=670, xColumn5=740;
01007 
01008     // Show title //
01009     if(recNo==1) {
01010         // fix in version 2
01011         // int tyear=(int)(info.game_year+(info.game_month-9.0)/12);
01012         int tyear=info.financial_year();
01013 
01014         String str;
01015         str="Next Year : Year ";
01016         //                      str+=m.format(tyear+1,16);     //## chea 061199 2.5.1
01017         str+=m.format(tyear+1,4);
01018 
01019         //                      str+="-";
01020         //                      str+=m.format(tyear+2,16);     //## chea 061199 2.5.1
01021 
01022         font_charts.put(xColumn1-70,y+2,str.str_buf);
01023         return;
01024     }
01025     recNo--;
01026 
01027     if(recNo==1) {
01028         font_chart_red_sm.disp( x, y, "Revenue", x+200 );
01029         font_chart_red_sm.right_put( xColumn2, y+2, "Direct");
01030         font_chart_red_sm.right_put( xColumn3, y+2, "Indirect");
01031         font_chart_red_sm.right_put( xColumn4, y+2, "Total");
01032         font_chart_red_sm.right_put( xColumn5, y+2, "% sources");
01033     }
01034     else if((recNo>1) && (recNo<=REVENUE_ITEM_COUNT+1)) {
01035         i=recNo-2;
01036         if(recNo==5) {
01037             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn1);
01038             font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_revenue_array[i].next_year.direct, 2));
01039             font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_revenue_array[i].next_year.indirect, 2));
01040             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].next_year.total, 2));
01041             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].next_year.percent, 24));
01042         }
01043         if((recNo==2)||(recNo==3)) {
01044             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
01045             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].next_year.total, 2));
01046         }
01047         else {
01048             font_chartsm.disp( x, y, game_str_res.financial_report_str(i),  xColumn2);
01049             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].next_year.total, 2));
01050             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].next_year.percent, 24));
01051         }
01052     }
01053     else if(recNo==REVENUE_ITEM_COUNT+2) {
01054         font_chart_blue_sm.disp( x, y,"  Total sources of funds", xColumn1);
01055         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_revenue.next_year.total, 2));
01056         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_revenue.next_year.percent, 24));
01057     }
01058     else if(recNo==REVENUE_ITEM_COUNT+3) {
01059         font_chart_red_sm.right_put( xColumn1, y+2, "AY faculty");
01060         font_chart_red_sm.right_put( xColumn2, y+2, "Staff");
01061         font_chart_red_sm.right_put( xColumn3, y+2, "Other");
01062     }
01063     else if(recNo==REVENUE_ITEM_COUNT+4) {
01064         font_chart_red_sm.disp( x, y, "Expenditures", x+200 );
01065         font_chart_red_sm.right_put( xColumn1, y+2, "compensation");
01066         font_chart_red_sm.right_put( xColumn2, y+2, "compensation");
01067         font_chart_red_sm.right_put( xColumn3, y+2, "expenditures");
01068         font_chart_red_sm.right_put( xColumn4, y+2, "Total");
01069         font_chart_red_sm.right_put( xColumn5, y+2, "% uses");
01070     }
01071     else if((recNo>=REVENUE_ITEM_COUNT+5) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
01072         i=recNo-5-REVENUE_ITEM_COUNT;
01073         if((recNo>=REVENUE_ITEM_COUNT+7) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
01074             font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
01075             font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].next_year.staff, 2));
01076             font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].next_year.other, 2));
01077             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].next_year.total, 2));
01078             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].next_year.percent, 24));
01079         }
01080         else {
01081             font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
01082             font_chartsm.right_put( xColumn1, y+2, m.format(finance.projected_expense_array[i].next_year.faculty, 2));
01083             font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].next_year.staff, 2));
01084             font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].next_year.other, 2));
01085             font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].next_year.total, 2));
01086             font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].next_year.percent, 24));
01087         }
01088     }
01089     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) {
01090         font_chart_blue_sm.disp( x, y,"  Total operating expenditures", xColumn1);
01091         font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_operating_expense.next_year.faculty, 2));
01092         font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_operating_expense.next_year.staff, 2));
01093         font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_operating_expense.next_year.other, 2));
01094         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_operating_expense.next_year.total, 2));
01095         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_operating_expense.next_year.percent, 24));
01096     }
01097     else if((recNo>REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) && (recNo<=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+5)) {
01098         i=recNo-6-REVENUE_ITEM_COUNT;
01099         font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
01100         font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].next_year.other, 2));
01101         font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].next_year.total, 2));
01102         font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].next_year.percent, 24));
01103     }
01104     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+6) {
01105         font_chart_blue_sm.disp( x, y,"  Total uses of funds", xColumn1);
01106         font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_expense.next_year.faculty, 2));
01107         font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_expense.next_year.staff, 2));
01108         font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_expense.next_year.other, 2));
01109         font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_expense.next_year.total, 2));
01110         font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_expense.next_year.percent, 24));
01111     }
01112     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+7) {
01113         double percent1,percent2,percent3,percent4;
01114         // fix in version 2
01115         //percent1=100*finance.total_expense.faculty/finance.total_expense.total;
01116         //percent2=100*finance.total_expense.staff/finance.total_expense.total;
01117         //percent3=100*finance.total_expense.other/finance.total_expense.total;
01118         percent1=100*finance.projected_total_expense.next_year.faculty/finance.projected_total_expense.next_year.total;
01119         percent2=100*finance.projected_total_expense.next_year.staff/finance.projected_total_expense.next_year.total;
01120         percent3=100*finance.projected_total_expense.next_year.other/finance.projected_total_expense.next_year.total;
01121         percent4=100;
01122 
01123         font_chartsm.disp( x, y, "\tPercent of total uses",  xColumn1);
01124         font_chartsm.right_put( xColumn1, y+2, m.format(percent1, 24));
01125         font_chartsm.right_put( xColumn2, y+2, m.format(percent2, 24));
01126         font_chartsm.right_put( xColumn3, y+2, m.format(percent3, 24));
01127         font_chartsm.right_put( xColumn4, y+2, m.format(percent4, 24));
01128         //                      font_chartsm.disp( xColumn5, y+2, "% uses", xColumn6 );
01129     }
01130     else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+8) {
01131         font_chartsm.disp( x, y,"  Surplus (deficit)", xColumn1);
01132         if(finance.next_year.surplus_deficit>0)
01133             font_chart_green_sm.right_put( xColumn4, y+2, m.format(finance.next_year.surplus_deficit, 2));
01134         else
01135             font_chart_red_sm.right_put( xColumn4, y+2, m.format(finance.next_year.surplus_deficit, 2) );
01136     }
01137 }
01138 
01139 //------ End of static function fin_rep_case3 --------//
01140 
01141 #if(GAME_VERSION>=200)
01142 //------ Begin of static function export_fin_rep_case3 --------//
01143 //
01144 // write fin_rep_case3 to a text file
01145 //
01146 void export_fin_rep_case3( File *filePtr ) {
01147     // year no
01148     int tyear = info.financial_year();
01149     WRITE_STR_FIELD(filePtr, "Next Year : " ); WRITE_FIELD_SEPARATOR(filePtr);
01150     WRITE_NUM_FIELD(filePtr, tyear+1); WRITE_RECORD_SEPARATOR(filePtr);
01151     // revenue label
01152     WRITE_STR_FIELD(filePtr, "Revenue"); WRITE_FIELD_SEPARATOR(filePtr);
01153     WRITE_FIELD_SEPARATOR(filePtr);                 // blank field
01154     WRITE_STR_FIELD(filePtr, "Direct"); WRITE_FIELD_SEPARATOR(filePtr);
01155     WRITE_STR_FIELD(filePtr, "Indirect"); WRITE_FIELD_SEPARATOR(filePtr);
01156     WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
01157     WRITE_STR_FIELD(filePtr, "% sources"); WRITE_RECORD_SEPARATOR(filePtr);
01158 
01159     // revenue
01160     for( int i = 0; i < REVENUE_ITEM_COUNT; ++i ) {
01161         WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i)); WRITE_FIELD_SEPARATOR(filePtr);
01162         WRITE_FIELD_SEPARATOR(filePtr);               // blank field
01163         // only AC_SPONSORED_RESEARCH_REVENUE display direct and indirect
01164         if( i == AC_SPONSORED_RESEARCH_REVENUE ) {
01165             WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].next_year.direct); WRITE_FIELD_SEPARATOR(filePtr);
01166             WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].next_year.indirect); WRITE_FIELD_SEPARATOR(filePtr);
01167         }
01168