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

Password:

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

Oscor_if.cpp

Go to the documentation of this file.
00001 //Filename    : OSCOR_IF.CPP
00002 //Description : Score Report
00003 
00004 #include <KEY.H>
00005 #include <OVGA.H>
00006 #include <OFONT.H>
00007 #include <OWORLD.H>
00008 #include <OSYS.H>
00009 #include <OSCHLRES.H>
00010 #include <OPEERSCH.H>                             // enrollment
00011 #include <OINFO.H>
00012 #include <OGRPHYR.H>
00013 #include <OIFACE.H>
00014 #include <OBUTTON.H>
00015 #include <ODEPT.H>
00016 #include <OPSCHOOL.H>
00017 #include <OSTUDENT.H>
00018 #include <OTEXT.H>
00019 #include <OLgTEXT.H>
00020 #include <OGAMESTR.H>
00021 #include <OPIECHRT.H>
00022 #include <OGRPH_PM.H>
00023 #include <OHELPIF.H>
00024 #include <OVBROW98.H>
00025 #include <OAUDIO.H>
00026 #include <OCONFIG.H>
00027 #include <OTASK.H>                                //## chea 200899 added task
00028 
00029 //---------- Define constant ------------//
00030 
00031 enum {
00032     REPORT_X1 = ZOOM_X1+15,
00033     REPORT_Y1 = ZOOM_Y1+10,
00034     REPORT_X2 = ZOOM_X2-15,
00035     REPORT_Y2 = ZOOM_Y2-40,
00036 };
00037 
00038 enum {
00039     BOTTOM_BUTTON_WIDTH = 100,
00040     BOTTOM_BUTTON_WIDTH2 = 150,
00041     BOTTOM_BUTTON_WIDTH3 = 220,
00042     BOTTOM_BUTTON_HEIGHT = 25,
00043     BOTTOM_BUTTON_DISTANCE
00044     = (REPORT_X2-REPORT_X1-BOTTOM_BUTTON_WIDTH*6)/6+30  ,
00045     BOTTOM_BUTTON_DISTANCE2
00046     = (REPORT_X2-REPORT_X1-BOTTOM_BUTTON_WIDTH2*2)/24,
00047     BOTTOM_BUTTON_DISTANCE3
00048     = (REPORT_X2-REPORT_X1-BOTTOM_BUTTON_WIDTH3*3)/3-5
00049 };
00050 
00051 enum {
00052     WINDOW_X1 = REPORT_X1+10,
00053     WINDOW_Y1 = REPORT_Y1+16,
00054     WINDOW_X2 = REPORT_X2-10,
00055     //                  WINDOW_Y2 = REPORT_Y2-44,
00056     WINDOW_Y2 = REPORT_Y2-52,
00057 };
00058 
00059 enum {                                            // the bg image id
00060     BG_PIC_ID = 10
00061 };
00062 
00063 enum {
00064     MODE_OVERALL=0,
00065     MODE_RANK=1,
00066     MODE_OUTPUTS=2,
00067     MODE_GENERAL_INSTITUTIONAL_PERFORMANCE=3,
00068     MODE_ATTITUDES_TOWARD_THE_INSTITUTION=4,
00069     MODE_FINANCE=5,
00070     MODE_MANAGEMENT=6,
00071     MODE_ADMISSION=7,
00072 };
00073 
00074 static char     report_init_flag=0;
00075 
00076 static ButtonGroup type_button_group(8);
00077 
00078 static Button help_button_array[9];
00079 
00080 static short *type_button_up_bitmap[8];
00081 
00082 static short *type_button_down_bitmap[8];
00083 
00084 static char  *type_button_label[8]= {
00085     "Overall","Rank","Outputs",
00086     "Performance indicators",
00087     "Attitudes toward the institution",
00088     "Financial indicators","Management","Admission"
00089 };
00090 
00091 static void report_overall(int);
00092 static void report_rank(int);
00093 static void report_outputs(int);
00094 static void report_general(int);
00095 static void report_attitudes(int);
00096 static void report_management(int);
00097 static void report_finance(int);
00098 
00099 static int detect_overall();
00100 static int detect_rank();
00101 static int detect_outputs();
00102 static int detect_general();
00103 static int detect_attitudes();
00104 static int detect_management();
00105 static int detect_finance();
00106 
00107 static void deinit_overall();
00108 static void deinit_rank();
00109 static void deinit_outputs();
00110 static void deinit_general();
00111 static void deinit_attitudes();
00112 static void deinit_management();
00113 static void deinit_finance();
00114 
00115 static void overall_disp_rep_row(int recNo, int x, int y, int refreshFlag);
00116 static void rank_disp_rep_row(int recNo, int x, int y, int refreshFlag);
00117 
00118 typedef void (*ReportFP)(int refreshFlag);
00119 typedef int (*DetectFP)();
00120 typedef void (*DeinitFP)();
00121 
00122 static ReportFP report_func_ptr[] = {
00123     &report_overall,
00124     &report_rank,
00125     &report_outputs,
00126     &report_general,
00127     &report_attitudes,
00128     //  &report_management,
00129     &report_finance,
00130 };
00131 
00132 static DetectFP detect_func_ptr[] = {
00133     &detect_overall,
00134     &detect_rank,
00135     &detect_outputs,
00136     &detect_general,
00137     &detect_attitudes,
00138     //  &detect_management,
00139     &detect_finance,
00140 };
00141 
00142 static DeinitFP deinit_func_ptr[] = {
00143     &deinit_overall,
00144     &deinit_rank,
00145     &deinit_outputs,
00146     &deinit_general,
00147     &deinit_attitudes,
00148     //  &deinit_management,
00149     &deinit_finance,
00150 };
00151 
00152 void PlayerSchool::score_report(int refreshFlag) {
00153     const static tab1=10,tab2=150,tab3=320,tab4=420,tab5=490,tab6=620,tab7=680;
00154     const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00155 
00156     vga.use_back();
00157     sys.is_institution_report=1;
00158     if( refreshFlag == INFO_REPAINT ) {
00159 
00160         if( report_init_flag )                        // deinit it first if it has already been initialized
00161             score_report_deinit();
00162         report_init_flag = 1;
00163 
00164         //----- initialize the bottom sub-menus buttons -----//
00165 
00166         user_interface.bg_img(BG_PIC_ID, &vga_back);
00167 
00168         // top title
00169         user_interface.brighten(REPORT_X1+100,REPORT_Y1-10,REPORT_X1+630,REPORT_Y1+13);
00170         user_interface.rect(REPORT_X1+100,REPORT_Y1-10,REPORT_X1+630,REPORT_Y1+13,1);
00171         font_charts.put(REPORT_X1+300,REPORT_Y1-4,"Game Score");
00172 
00173         for (int i = 0; i < 6 ;i++) {
00174             type_button_up_bitmap[i] = NULL;
00175             type_button_down_bitmap[i] = NULL;
00176         }
00177 
00178         int x=REPORT_X1+tab1;
00179         int y=REPORT_Y1+vtab4;
00180 
00181         user_interface.create_button_bitmap(x, y,
00182                                             x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00183                                             type_button_label[0], &type_button_up_bitmap[0],
00184                                             &type_button_down_bitmap[0], &vga_back);
00185 
00186         type_button_group[0].create_bitmapW(x, y,
00187                                             x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00188                                             ((i == current_score_report_type) ?
00189                                              type_button_down_bitmap[0] :
00190                                              type_button_up_bitmap[0])+4);
00191 
00192         y+=30;
00193 
00194         user_interface.create_button_bitmap(x, y,
00195                                             x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00196                                             type_button_label[1], &type_button_up_bitmap[1],
00197                                             &type_button_down_bitmap[1], &vga_back);
00198 
00199         type_button_group[1].create_bitmapW(x, y,
00200                                             x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00201                                             ((i == current_score_report_type) ?
00202                                              type_button_down_bitmap[1] :
00203                                              type_button_up_bitmap[1])+4);
00204 
00205         x=REPORT_X1+tab2;
00206         y=REPORT_Y1+vtab4;
00207 
00208         user_interface.create_button_bitmap(x, y,
00209                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00210                                             type_button_label[2], &type_button_up_bitmap[2],
00211                                             &type_button_down_bitmap[2], &vga_back);
00212         type_button_group[2].create_bitmapW(x, y,
00213                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00214                                             ((i == current_score_report_type) ?
00215                                              type_button_down_bitmap[2] :
00216                                              type_button_up_bitmap[2])+4);
00217 
00218         x+=BOTTOM_BUTTON_WIDTH3+BOTTOM_BUTTON_DISTANCE;
00219 
00220         user_interface.create_button_bitmap(x, y,
00221                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00222                                             type_button_label[3], &type_button_up_bitmap[3],
00223                                             &type_button_down_bitmap[3], &vga_back);
00224         type_button_group[3].create_bitmapW(x, y,
00225                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00226                                             ((i == current_score_report_type) ?
00227                                              type_button_down_bitmap[3] :
00228                                              type_button_up_bitmap[3])+4);
00229 
00230         x=REPORT_X1+tab2;
00231         y=REPORT_Y1+vtab4+30;
00232         user_interface.create_button_bitmap(x, y,
00233                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00234                                             type_button_label[4], &type_button_up_bitmap[4],
00235                                             &type_button_down_bitmap[4], &vga_back);
00236 
00237         type_button_group[4].create_bitmapW(x, y,
00238                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00239                                             ((current_score_report_type==4)?
00240                                              type_button_down_bitmap[4] :
00241                                              type_button_up_bitmap[4])+4);
00242 
00243         x+=BOTTOM_BUTTON_WIDTH3+BOTTOM_BUTTON_DISTANCE;
00244 
00245         user_interface.create_button_bitmap(x, y,
00246                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00247                                             type_button_label[5], &type_button_up_bitmap[5],
00248                                             &type_button_down_bitmap[5], &vga_back);
00249 
00250         type_button_group[5].create_bitmapW(x, y,
00251                                             x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00252                                             ((current_score_report_type==5)?
00253                                              type_button_down_bitmap[5] :
00254                                              type_button_up_bitmap[5])+4);
00255 
00256         if(current_score_report_type>1) {
00257 #if(GAME_VERSION>=200)
00258             user_interface.brighten(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00259             user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00260             user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y1+vtab1);
00261             font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1-17,"Contributing factors");
00262             font_chartsm.put(WINDOW_X1+tab3-100,WINDOW_Y1+vtab1-17,"Current value");
00263             font_chartsm.put(WINDOW_X1+tab4-95,WINDOW_Y1+vtab1-17,"Weight");
00264             font_chartsm.right_put(WINDOW_X1+tab5, WINDOW_Y1+vtab1-17,"Change in last year");
00265             font_chartsm.put(WINDOW_X1+tab5+10,WINDOW_Y1+vtab1-17,"Change since start");
00266             font_chartsm.put(WINDOW_X1+tab6,WINDOW_Y1+vtab1-17,"Trend");
00267 #else
00268             user_interface.brighten(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00269             user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00270             user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y1+vtab1);
00271             font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1-17,"Contributing factors");
00272             font_chartsm.put(WINDOW_X1+tab3-20,WINDOW_Y1+vtab1-17,"Current value");
00273             font_chartsm.put(WINDOW_X1+tab4-15,WINDOW_Y1+vtab1-17,"Weight");
00274             font_chartsm.put(WINDOW_X1+tab5-20,WINDOW_Y1+vtab1-17,"Change since start");
00275             font_chartsm.put(WINDOW_X1+tab6,WINDOW_Y1+vtab1-17,"Trend");
00276 #endif
00277         }
00278         else {
00279             user_interface.brighten(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00280             user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00281         }
00282     }
00283     type_button_group.paint(current_score_report_type);
00284 
00285     vga.use_back();
00286     (*report_func_ptr[current_score_report_type])(refreshFlag);
00287 
00288     vga.blt_buf(ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2);
00289     //##trevor 2807
00290     vga.use_front();
00291 
00292 }
00293 
00294 void PlayerSchool::score_report_detect() {
00295     //------- detect type buttons --------//
00296     int summaryButtonGroupDetect;
00297 
00298     if((summaryButtonGroupDetect = type_button_group.detect()) >= 0) {
00299         type_button_group[current_score_report_type].body_ptr = (void *) (type_button_up_bitmap[current_score_report_type] + 4);
00300         current_score_report_type = summaryButtonGroupDetect;
00301         type_button_group[current_score_report_type].body_ptr = (void *) (type_button_down_bitmap[current_score_report_type] + 4);
00302         sys.redraw_all_flag = 1;
00303     }
00304     (*detect_func_ptr[current_score_report_type])();
00305 }
00306 
00307 void PlayerSchool::score_report_deinit() {
00308     //------- deinit type buttons --------//
00309     type_button_group.deinit_buttons();
00310     if (*type_button_up_bitmap) {
00311         for (int i = 0; i < 6; i++) {
00312             mem_del(type_button_up_bitmap[i]);
00313             mem_del(type_button_down_bitmap[i]);
00314             type_button_up_bitmap[i] = NULL;
00315             type_button_down_bitmap[i] = NULL;
00316         }
00317     }
00318     for(int i=0;i<6;i++)
00319         (*deinit_func_ptr[i])();
00320 
00321     report_init_flag = 0;
00322 }
00323 
00324 //--------------------- sub screen (7) ----------------------//
00325 
00326 static overall_report_init_flag=0;
00327 //static LargeText overall_text[5];
00328 static LargeText overall_text[6];                 //## chea 200899 to added a bouns pt
00329 static GraphPerformanceIndicatorMonth overall_graphicon1;
00330 static GraphPerformanceIndicatorMonth overall_graphicon2;
00331 
00332 static void report_overall(int refreshFlag) {
00333     const static tab1=10,tab2=450,tab3=560,tab4=680;
00334     const static vtab1=40,vtab2=135,vtab3=110,vtab4=285;
00335     char *label[]= {
00336 #if(GAME_VERSION>=200)
00337         "\tCurrent game score",
00338 #else
00339         "\tCurrent trustee evaluation",
00340 #endif
00341         "\tLast month change",
00342         "\tTrustee evaluation at the beginning of the game",
00343         "\tNumber of gaming years",
00344         // maintenance upgrade August 2001
00345         "\tCumulative game score",                    // "\tGame score",
00346 #if(GAME_VERSION>=200)
00347         "\t=    (Current game score - Initial trustee evaluation) X 10",
00348 #else
00349         "\t=    (Current trustee evaluation - Initial trustee evaluation) X 10",
00350 #endif
00351         "\t      + Number of gaming years",           //## chea 200899 to added a bouns pt
00352         "\t      + Total bonus points",               //## chea 200899 to added a bouns pt
00353         "\t=   ",
00354     };
00355 
00356     static int data_num=HISTORY_MONTH_COUNT;
00357     static float *dataArray;
00358     static int *dataArray2;
00359     static float v[6];
00360 
00361     v[0]=player_school.cur_game_score;
00362     //### begin zb 02/22/99
00363     v[1]=(float)( (int)player_school.game_score_history[HISTORY_MONTH_COUNT-1]-
00364                   (int)player_school.game_score_history[HISTORY_MONTH_COUNT-2] );
00365     //### end zb 02/22/99
00366     v[2]=player_school.init_game_score;
00367     //  v[2]=(float)player_school.ultimate_game_score;
00368     v[3]=(float)info.year_passed-1;
00369     v[4]=(float)player_school.ultimate_game_score;
00370 #if(GAME_VERSION>=200)
00371     static float totalBonusPoint;
00372     totalBonusPoint = task_array.total_bonus_pt + player_school.bonus_point + player_school.threshold_event_bonus;
00373 #endif
00374     dataArray=player_school.game_score_history;
00375     dataArray2=player_school.ultimate_game_score_history;
00376     vga.use_back();
00377     if( refreshFlag == INFO_REPAINT ) {
00378         if( overall_report_init_flag )                // deinit it first if it has already been initialized
00379             deinit_overall();
00380         overall_report_init_flag = 1;
00381 
00382 #if(GAME_VERSION>=200)
00383         overall_graphicon1.init(
00384             WINDOW_X1+tab3-30,WINDOW_Y1+50,
00385             WINDOW_X1+tab4-30,WINDOW_Y1+123,
00386             1 ,&data_num ,dataArray, 1, 0, 3);
00387         overall_graphicon1.paint();
00388 #else
00389         overall_graphicon1.init(
00390             WINDOW_X1+tab3-30,WINDOW_Y1+20,
00391             WINDOW_X1+tab4-30,WINDOW_Y1+93,
00392             1 ,&data_num ,dataArray, 1, 0, 3);
00393         overall_graphicon1.paint();
00394 #endif
00395 
00396         overall_graphicon2.init(
00397             WINDOW_X1+tab3-30,WINDOW_Y1+170,
00398             WINDOW_X1+tab4-30,WINDOW_Y1+243,
00399             1 ,&data_num ,dataArray2, 1, 0, 3);
00400         overall_graphicon2.paint();
00401 
00402 #if(GAME_VERSION>=200)
00403         font_chartsm.put( WINDOW_X1+tab3-123,WINDOW_Y1+5, "Change in last year" );
00404         font_chartsm.put( WINDOW_X1+tab3+5,WINDOW_Y1+5, "Change in since start" );
00405 
00406         float zn = player_school.get_protagonist_info(1)->normalizing_factor;
00407         // 1 year before
00408         float trend = (v[0] - player_school.game_score_history[THIS_MONTH-12]) / zn;
00409         float level = (v[0] - player_school.init_game_score) / zn;
00410 
00411         font_chartsm.put( WINDOW_X1+tab3-88, WINDOW_Y1+5+5+vtab1-25, m.format(trend,24) );
00412         font_chartsm.put( WINDOW_X1+tab3+45, WINDOW_Y1+5+5+vtab1-25, m.format(level,24) );
00413 
00414         for(int i=0;i<4;i++)
00415             overall_text[i].right_put
00416                 (WINDOW_X1+tab2-25,WINDOW_Y1+vtab1+(i-1)*25+5+5,(float*)(&v[i]),4);
00417 #else
00418         for(int i=0;i<4;i++)
00419             //                  overall_text[i].right_put
00420             //                          (WINDOW_X1+tab2+30,WINDOW_Y1+vtab1+(i-1)*35+5,(float*)(&v[i]),4);
00421             //## chea 200899 to added a bouns pt
00422             overall_text[i].right_put
00423                 (WINDOW_X1+tab2+30,WINDOW_Y1+vtab1+(i-1)*25+5,(float*)(&v[i]),4);
00424 #endif
00425 
00426 #if(GAME_VERSION>=200)
00427         overall_text[4].right_put
00428             (WINDOW_X1+tab2-25,WINDOW_Y1+vtab1+(3)*25+5,&totalBonusPoint,4);
00429 #else
00430         overall_text[4].right_put
00431             (WINDOW_X1+tab2+30,WINDOW_Y1+vtab1+(3)*25+5,task_array.total_bonus_pt,4);
00432 #endif
00433 
00434         //              overall_text[4].put  //## chea 200899 to added a bouns pt
00435         //              (WINDOW_X1+tab1+70,WINDOW_Y1+vtab2+140,(float*)(&v[4]),4);
00436         overall_text[5].put
00437             (WINDOW_X1+tab1+70,WINDOW_Y1+vtab2+125,(float*)(&v[4]),4);
00438 
00439     }
00440 
00441     user_interface.bar(WINDOW_X1+tab1,WINDOW_Y1+vtab1+105,WINDOW_X1+tab4,WINDOW_Y1+vtab1+106,V_BROWN);
00442 
00443 #if(GAME_VERSION>=200)
00444     for(int i=0;i<4;i++)
00445         //font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(i-1)*35+5,label[i]);
00446         //## chea 200899 to added a bouns pt
00447         font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(i-1)*25+5+5,label[i]);
00448 
00449     //## chea 200899 to added a bouns pt
00450     font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(3)*25+5+5,"\tTotal bonus points");
00451 #else
00452     for(int i=0;i<4;i++)
00453         //font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(i-1)*35+5,label[i]);
00454         //## chea 200899 to added a bouns pt
00455         font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(i-1)*25+5,label[i]);
00456 
00457     //## chea 200899 to added a bouns pt
00458     font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(3)*25+5,"\tTotal bonus points");
00459 #endif
00460 
00461     //  for(i=4;i<8;i++)
00462     for(i=4;i<9;i++)                                //## chea 200899 to added a bouns pt
00463         font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab2+(i-3)*25,label[i]);
00464 
00465     overall_graphicon1.refresh();
00466     overall_graphicon2.refresh();
00467     // ##### begin Gilbert 25/04/2001 #######//
00468     for(i=0;i<6;i++)                                // for(i=0;i<5;i++)
00469         overall_text[i].refresh();
00470     // ##### end Gilbert 25/04/2001 #######//
00471 };
00472 
00473 static int detect_overall() {
00474     //  overall_vbrowse.detect();
00475     return 0;
00476 };
00477 
00478 static void deinit_overall() {
00479     if(overall_report_init_flag==0)return;
00480     overall_graphicon1.deinit();
00481     overall_graphicon2.deinit();
00482     // ##### begin Gilbert 25/04/2001 #######//
00483     for(int i=0;i<6;i++)                            // for(int i=0;i<5;i++)
00484         overall_text[i].deinit();
00485     overall_report_init_flag=0;
00486     // ##### end Gilbert 25/04/2001 #######//
00487 };
00488 
00489 static void overall_disp_rep_row(int recNo, int x, int y, int refreshFlag) {
00490 };
00491 
00492 #define REC_HEIGHT 16
00493 #define SHEET_COLOR Vga::active_buf->color_down
00494 
00495 static rank_report_init_flag=0;
00496 static short* rank_text_refresh_bitmap1;
00497 static GraphPerformanceIndicatorMonth rank_graphicon;
00498 static VBrowse98 rank_vbrowse;
00499 
00500 //### begin zb 02/22/99
00501 static int sort_peer_school_score_function( const void *a, const void *b ) {
00502     float valueA = school_res.peer_school_array[(*((short*)a))].game_score;
00503     float valueB = school_res.peer_school_array[(*((short*)b))].game_score;
00504 
00505     float rc = valueA - valueB;
00506 
00507     if( rc > 0 )
00508         return -1;
00509     else if( rc <= 0 )
00510         return 1;
00511     else
00512         return 0;
00513 }
00514 
00515 //### end zb 02/22/99
00516 
00517 static void report_rank(int refreshFlag) {
00518     const static tab1=10,tab2=450,tab3=560,tab4=680;
00519     const static vtab1=20,vtab2=105,vtab3=110,vtab4=285;
00520     static int report_recno=1;
00521 
00522     vga.use_back();
00523 
00524     //### begin zb 02/22/99
00525     if((int)school_res.player_peer_school->game_score!=(int)player_school.cur_game_score) {
00526         school_res.player_peer_school->game_score=player_school.cur_game_score;
00527         qsort( school_res.peer_school_rank, school_res.peer_school_count, sizeof(school_res.peer_school_rank[0]), sort_peer_school_score_function );
00528     }
00529     //### end zb 02/22/99
00530 
00531     if( refreshFlag == INFO_REPAINT ) {
00532         if( rank_report_init_flag )                   // deinit it first if it has already been initialized
00533             deinit_rank();
00534         rank_report_init_flag = 1;
00535 
00536         rank_vbrowse.init(
00537             WINDOW_X1+tab1,WINDOW_Y1+vtab1+10,
00538             WINDOW_X2-tab1,WINDOW_Y1+vtab4,
00539             0, REC_HEIGHT, school_res.peer_school_count,
00540             rank_disp_rep_row,NULL,0);
00541 
00542         rank_vbrowse.open(report_recno);
00543     }
00544     font_chartsm.put(WINDOW_X1+200,WINDOW_Y1+vtab1+10,"");
00545     rank_vbrowse.update();
00546     report_recno=rank_vbrowse.recno();
00547 };
00548 
00549 static int detect_rank() {
00550     rank_vbrowse.detect();
00551     return 0;
00552 };
00553 
00554 static void deinit_rank() {
00555     if(rank_report_init_flag==0)return;
00556     // ####### begin Gilbert 25/04/2001 ######//
00557     rank_vbrowse.deinit();
00558     rank_report_init_flag = 0;
00559     // ####### end Gilbert 25/04/2001 ######//
00560 };
00561 
00562 static void rank_disp_rep_row(int recNo, int x, int y, int refreshFlag) {
00563     int tab1=10,tab2=60,tab3=400,tab4=600;
00564 
00565     //  vga_back.bar_down(x,y,x+tab4,y+20);
00566 
00567     if(recNo==1) {
00568         font_chartsm.put(x+tab1,y,"Rank");
00569         font_chartsm.put(x+tab2,y,"University");
00570         font_chartsm.put(x+tab3,y,"Current trustee evaluation");
00571         return;
00572     }
00573     else {
00574         int idx = school_res.peer_school_rank[recNo-2];
00575 
00576         PeerSchool *ps = &(school_res.peer_school_array[idx]);
00577         if(ps==school_res.player_peer_school) {
00578             font_chart_blue_sm.right_put(x+tab1+20,y,m.format(recNo-1,4));
00579             font_chart_blue_sm.put(x+tab2,y,ps->name);
00580             font_chart_blue_sm.right_put(x+tab3+70,y,m.format((int)ps->game_score,4));
00581         }
00582         else {
00583             font_chartsm.right_put(x+tab1+20,y,m.format(recNo-1,4));
00584             font_chartsm.put(x+tab2,y,ps->name);
00585             font_chartsm.right_put(x+tab3+70,y,m.format((int)ps->game_score,4));
00586         }
00587     }
00588 
00589 };
00590 
00591 //-- screen 2 : outputs ---/
00592 #define OUTPUTS_ITEMS_NUM 2
00593 static outputs_report_init_flag=0;
00594 static GraphPerformanceIndicatorMonth outputs_graphicon[OUTPUTS_ITEMS_NUM];
00595 static Text outputs_text1[OUTPUTS_ITEMS_NUM];
00596 static Text outputs_text2[OUTPUTS_ITEMS_NUM];
00597 static Text outputs_text3[OUTPUTS_ITEMS_NUM];
00598 #if(GAME_VERSION>=200)
00599 static Text outputs_text4[OUTPUTS_ITEMS_NUM];
00600 #endif
00601 
00602 #if(GAME_VERSION>=200)
00603 static char * outputs_help_title[OUTPUTS_ITEMS_NUM]= {
00604     "Degrees granted",
00605     // maintenance upgrade August 2001
00606     // "Sponsored performance"
00607     "Faculty research performance"
00608 };
00609 #else
00610 static char * outputs_help_title[OUTPUTS_ITEMS_NUM]= {
00611     "Degrees granted",
00612     // maintenance upgrade August 2001
00613     // "Sponsored performance"
00614     "Sponsored research performance"
00615 };
00616 #endif
00617 
00618 static void report_outputs(int refreshFlag) {
00619     const static tab1=30,tab2=320,tab3=420,tab4=490;
00620     const static tab5=620,tab6=680,tab7=660,tab8=760;
00621     const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00622 
00623     static int data_num=HISTORY_MONTH_COUNT;
00624     static float *dataArray[OUTPUTS_ITEMS_NUM];
00625     static float v1[OUTPUTS_ITEMS_NUM];
00626     static float v2[OUTPUTS_ITEMS_NUM];
00627     static float v3[OUTPUTS_ITEMS_NUM];
00628 #if(GAME_VERSION>=200)
00629     static float v4[OUTPUTS_ITEMS_NUM];
00630 #endif
00631 
00632     int i,j;
00633     for(i=0,j=S_DEGREES_GRANTED;i<OUTPUTS_ITEMS_NUM;i++,j++) {
00634         dataArray[i]=player_school.sub_score[j];
00635         v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
00636         v2[i]=player_school.sub_score_weight[j];
00637         v3[i]=player_school.sub_score_change[j];
00638 #if(GAME_VERSION>=200)
00639         float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
00640         // 1 year before
00641         float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
00642         float level = (v1[i] - player_school.sub_score_start[j]) / zn;
00643         v4[i] = trend;
00644         v3[i] = level;
00645 #endif
00646     }
00647 
00648     vga.use_back();
00649     if( refreshFlag == INFO_REPAINT ) {
00650         if( outputs_report_init_flag )                // deinit it first if it has already been initialized
00651             deinit_outputs();
00652         outputs_report_init_flag = 1;
00653 
00654         for(int i=0;i<OUTPUTS_ITEMS_NUM;i++) {
00655             outputs_graphicon[i].init(
00656                 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*32-10,
00657                 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*32+20,
00658                 1 ,&data_num ,dataArray[i], 1, 0, 3);
00659             outputs_graphicon[i].paint();
00660 #if(GAME_VERSION>=200)
00661             outputs_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00662             outputs_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*32,v2+i,24);
00663             outputs_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*32, v4+i, 24);
00664             //## chea 110899
00665             outputs_text3[i].right_put(WINDOW_X1+tab4+95,WINDOW_Y1+vtab2+i*32,v3+i,24);
00666 #else
00667             outputs_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00668             outputs_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*32,v2+i,24);
00669             //## chea 110899
00670             outputs_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*32,v3+i,24);
00671 #endif
00672 
00673             if(user_interface.backgd_flag==1) {
00674                 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_UP");
00675                 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*32+16,"?");
00676             }
00677         }
00678     }
00679 
00680     for(i=0;i<OUTPUTS_ITEMS_NUM;i++) {
00681         outputs_text1[i].refresh();
00682         outputs_text2[i].refresh();
00683         outputs_text3[i].refresh();
00684 #if(GAME_VERSION>=200)
00685         outputs_text4[i].refresh();
00686 #endif
00687         outputs_graphicon[i].refresh();
00688         font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*32,outputs_help_title[i]);
00689     }
00690 
00691     vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
00692 
00693     vga.use_front();
00694 };
00695 
00696 static int detect_outputs() {
00697     const static tab1=30,vtab2=37;
00698     vga.use_back();
00699     for(int i=0;i<OUTPUTS_ITEMS_NUM;i++)
00700         if(help_button_array[i].detect()) {
00701             // ## begin chwg1022  create the global ResTxt help_resource later //
00702             String str;
00703             str  = DIR_RES;
00704             str += "SCORE";
00705 
00706             ResTxt rs;
00707             rs.init(str);
00708             // ## chwg1022 end ////////////////////////
00709 
00710             image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_DN");
00711             vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*32+16);
00712             sys.back_view_mode=sys.view_mode;
00713             help_if.help_textlist.topic_id=rs.locate_topic(outputs_help_title[i]);
00714             if(help_if.help_textlist.topic_id>0) {
00715                 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
00716                 sys.set_view_mode(MODE_HELP_DESC);
00717                 sys.redraw_all_flag = 1;
00718                 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
00719             }
00720             return 1;
00721         }
00722     return 0;
00723 };
00724 
00725 static void deinit_outputs() {
00726 
00727     if(outputs_report_init_flag==0)return;
00728 
00729     for(int i=0;i<OUTPUTS_ITEMS_NUM;i++) {
00730         outputs_graphicon[i].deinit();
00731         outputs_text1[i].deinit();
00732         outputs_text2[i].deinit();
00733         outputs_text3[i].deinit();
00734         // ##### begin Gilbert 28/04/2001 #####//
00735         help_button_array[i].deinit();
00736         // ##### end Gilbert 28/04/2001 #####//
00737     }
00738     // ###### begin Gilbert 25/04/2001 #######//
00739     outputs_report_init_flag = 0;
00740     // ###### end Gilbert 25/04/2001 #######//
00741 
00742 };
00743 
00744 //-- screen 3 : general ---/
00745 #define GENERAL_ITEMS_NUM 6
00746 static char * general_help_title[GENERAL_ITEMS_NUM]= {
00747     "Institutional prestige",
00748     "Educational quality",
00749     "Scholarship, broadly defined",
00750     "Student diversity",
00751     "Faculty diversity",
00752     "Percentage of alumni who have donated during the last five years",
00753 };
00754 
00755 static general_report_init_flag=0;
00756 static GraphPerformanceIndicatorMonth general_graphicon[GENERAL_ITEMS_NUM];
00757 static Text general_text1[GENERAL_ITEMS_NUM];
00758 static Text general_text2[GENERAL_ITEMS_NUM];
00759 static Text general_text3[GENERAL_ITEMS_NUM];
00760 #if(GAME_VERSION>=200)
00761 static Text general_text4[GENERAL_ITEMS_NUM];
00762 #endif
00763 
00764 static void report_general(int refreshFlag) {
00765     const static tab1=30,tab2=320,tab3=420,tab4=490;
00766     const static tab5=620,tab6=680,tab7=660,tab8=760;
00767     const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00768 
00769     static int data_num=HISTORY_MONTH_COUNT;
00770 
00771     static float *dataArray[GENERAL_ITEMS_NUM];
00772     static float v1[GENERAL_ITEMS_NUM];
00773     static float v2[GENERAL_ITEMS_NUM];
00774     static float v3[GENERAL_ITEMS_NUM];
00775 #if(GAME_VERSION>=200)
00776     static float v4[GENERAL_ITEMS_NUM];
00777 #endif
00778 
00779     int i,j;
00780 
00781     for(i=0,j=S_PRESTIGE;i<GENERAL_ITEMS_NUM;i++,j++) {
00782         dataArray[i]=player_school.sub_score[j];
00783         v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
00784         v2[i]=player_school.sub_score_weight[j];
00785         v3[i]=player_school.sub_score_change[j];
00786 #if(GAME_VERSION>=200)
00787         float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
00788         // 1 year before
00789         float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
00790         float level = (v1[i] - player_school.sub_score_start[j]) / zn;
00791         v4[i] = trend;
00792         v3[i] = level;
00793 #endif
00794     }
00795 
00796     //## chea 201099 I have do this just after the prerun year
00797     if(info.game_date < 1721699)
00798         v3[0] = task_array.rand_init;
00799 
00800     vga.use_back();
00801     if( refreshFlag == INFO_REPAINT ) {
00802         if( general_report_init_flag )                // deinit it first if it has already been initialized
00803             deinit_general();
00804         general_report_init_flag = 1;
00805 
00806         for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
00807             general_graphicon[i].init(
00808                 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*40-10,
00809                 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*40+20,
00810                 1 ,&data_num ,dataArray[i], 1, 0, 3);
00811             general_graphicon[i].paint();
00812 
00813             if(user_interface.backgd_flag==1) {
00814                 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,"QUEST_UP");
00815                 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*40+16,"?");
00816             }
00817 #if(GAME_VERSION>=200)
00818             general_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*40,v1+i,4);
00819             general_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*40,v2+i,24);
00820             general_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*40, v4+i, 24);
00821             //## chea 110899
00822             general_text3[i].right_put(WINDOW_X1+tab4+95,WINDOW_Y1+vtab2+i*40,v3+i,24);
00823 #else
00824             general_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*40,v1+i,4);
00825             general_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*40,v2+i,24);
00826             //general_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*40,v3+i,4);
00827             //## chea 110899
00828             general_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*40,v3+i,24);
00829 #endif
00830         }
00831     }
00832 
00833     for(i=0;i<GENERAL_ITEMS_NUM;i++) {
00834 #if(GAME_VERSION>=200)
00835         font_chartsm.put_paragraph(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*40,
00836                                    WINDOW_X1+tab2-90,WINDOW_Y1+vtab2+i*40+40,
00837                                    general_help_title[i]);
00838 #else
00839         font_chartsm.put_paragraph(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*40,
00840                                    WINDOW_X1+tab2-10,WINDOW_Y1+vtab2+i*40+40,
00841                                    general_help_title[i]);
00842 #endif
00843         general_graphicon[i].refresh();
00844         general_text1[i].refresh();
00845         general_text2[i].refresh();
00846         general_text3[i].refresh();
00847     }
00848 
00849     vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
00850     vga.use_front();
00851 };
00852 
00853 static int detect_general() {
00854     const static tab1=30,vtab2=37;
00855 
00856     vga.use_back();
00857     for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
00858         if(help_button_array[i].detect()) {
00859             // ## begin chwg1022  create the global ResTxt help_resource later //
00860             String str;
00861             str  = DIR_RES;
00862             str += "SCORE";
00863 
00864             ResTxt rs;
00865             rs.init(str);
00866             // ## chwg1022 end ////////////////////////
00867 
00868             if(user_interface.backgd_flag==1) {
00869                 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,"QUEST_DN");
00870                 vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*40+16);
00871             }
00872             sys.back_view_mode=sys.view_mode;
00873             help_if.help_textlist.topic_id=rs.locate_topic(general_help_title[i]);
00874             if(help_if.help_textlist.topic_id>0) {
00875                 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
00876                 sys.set_view_mode(MODE_HELP_DESC);
00877                 sys.redraw_all_flag = 1;
00878                 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
00879             }
00880             return 1;
00881         }
00882     }
00883     return 0;
00884 };
00885 
00886 static void deinit_general() {
00887     if(general_report_init_flag==0)return;
00888 
00889     for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
00890         general_graphicon[i].deinit();
00891         general_text1[i].deinit();
00892         general_text2[i].deinit();
00893         general_text3[i].deinit();
00894         // ###### begin Gilbert 28/04/2001 ######//
00895         help_button_array[i].deinit();
00896         // ###### end Gilbert 28/04/2001 ######//
00897     }
00898 
00899     // ###### begin Gilbert 25/04/2001 ######//
00900     general_report_init_flag = 0;
00901     // ###### end Gilbert 25/04/2001 ######//
00902 };
00903 
00904 //-- screen 4 : attitudes ---/
00905 #define ATTITUDES_ITEMS_NUM 3
00906 static attitudes_report_init_flag=0;
00907 static char *attitudes_help_title[]= {
00908     "Faculty morale",
00909     "Student morale",
00910     "Staff morale",
00911 };
00912 static GraphPerformanceIndicatorMonth attitudes_graphicon[ATTITUDES_ITEMS_NUM];
00913 static Text attitudes_text1[ATTITUDES_ITEMS_NUM];
00914 static Text attitudes_text2[ATTITUDES_ITEMS_NUM];
00915 static Text attitudes_text3[ATTITUDES_ITEMS_NUM];
00916 #if(GAME_VERSION>=200)
00917 static Text attitudes_text4[ATTITUDES_ITEMS_NUM];
00918 #endif
00919 
00920 static void report_attitudes(int refreshFlag) {
00921     const static tab1=30,tab2=320,tab3=420,tab4=490;
00922     const static tab5=620,tab6=680,tab7=660,tab8=760;
00923     const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00924 
00925     static int data_num=HISTORY_MONTH_COUNT;
00926 
00927     static float *dataArray[ATTITUDES_ITEMS_NUM];
00928     static float v1[ATTITUDES_ITEMS_NUM];
00929     static float v2[ATTITUDES_ITEMS_NUM];
00930     static float v3[ATTITUDES_ITEMS_NUM];
00931 #if(GAME_VERSION>=200)
00932     static float v4[ATTITUDES_ITEMS_NUM];
00933 #endif
00934 
00935     int i,j;
00936     for(i=0,j=S_FACULTY_MORALE;i<ATTITUDES_ITEMS_NUM;i++,j++) {
00937         dataArray[i]=player_school.sub_score[j];
00938         v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
00939         v2[i]=player_school.sub_score_weight[j];
00940         v3[i]=player_school.sub_score_change[j];
00941 #if(GAME_VERSION>=200)
00942         float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
00943         // 1 year before
00944         float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
00945         float level = (v1[i] - player_school.sub_score_start[j]) / zn;
00946         v4[i] = trend;
00947         v3[i] = level;
00948 #endif
00949     }
00950 
00951     vga.use_back();
00952     if( refreshFlag == INFO_REPAINT ) {
00953         if( attitudes_report_init_flag )              // deinit it first if it has already been initialized
00954             deinit_attitudes();
00955         attitudes_report_init_flag = 1;
00956 
00957         for(int i=0;i<ATTITUDES_ITEMS_NUM;i++) {
00958             attitudes_graphicon[i].init(
00959                 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*32-10,
00960                 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*32+20,
00961                 1 ,&data_num ,dataArray[i], 1, 0, 3);
00962             attitudes_graphicon[i].paint();
00963 
00964 #if(GAME_VERSION>=200)
00965             attitudes_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00966             attitudes_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*32,v2+i,24);
00967             attitudes_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*32, v4+i, 24);
00968             //## chea 110899
00969             attitudes_text3[i].right_put(WINDOW_X1+tab4+95,WINDOW_Y1+vtab2+i*32,v3+i,24);
00970 #else
00971             attitudes_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00972             attitudes_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*32,v2+i,24);
00973             //attitudes_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*32,v3+i,4);
00974             //## chea 110899
00975             attitudes_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*32,v3+i,24);
00976 #endif
00977             if(user_interface.backgd_flag==1) {
00978                 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_UP");
00979                 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*32+16,"?");
00980             }
00981         }
00982     }
00983 
00984     for(i=0;i<ATTITUDES_ITEMS_NUM;i++) {
00985         font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*32,attitudes_help_title[i]);
00986         attitudes_graphicon[i].refresh();
00987         attitudes_text1[i].refresh();
00988         attitudes_text2[i].refresh();
00989         attitudes_text3[i].refresh();
00990     }
00991 
00992     vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
00993     vga.use_front();
00994 };
00995 
00996 static int detect_attitudes() {
00997     const static tab1=30,vtab2=37;
00998 
00999     vga.use_back();
01000     for(int i=0;i<ATTITUDES_ITEMS_NUM;i++) {
01001         if(help_button_array[i].detect()) {
01002             // ## begin chwg1022  create the global ResTxt help_resource later //
01003             String str;
01004             str  = DIR_RES;
01005             str += "SCORE";
01006 
01007             ResTxt rs;
01008             rs.init(str);
01009             // ## chwg1022 end ////////////////////////
01010 
01011             image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_DN");
01012             vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*32+16);
01013             sys.back_view_mode=sys.view_mode;
01014             help_if.help_textlist.topic_id=rs.locate_topic(attitudes_help_title[i]);
01015             if(help_if.help_textlist.topic_id>0) {
01016                 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
01017                 sys.set_view_mode(MODE_HELP_DESC);
01018                 sys.redraw_all_flag = 1;
01019                 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
01020             }
01021             return 1;
01022         }
01023     }
01024     return 0;
01025 };
01026 
01027 static void deinit_attitudes() {
01028     if(attitudes_report_init_flag==0)return;
01029 
01030     for(int i=0;i<ATTITUDES_ITEMS_NUM;i++) {
01031         attitudes_graphicon[i].deinit();
01032         attitudes_text1[i].deinit();
01033         attitudes_text2[i].deinit();
01034         attitudes_text3[i].deinit();
01035         // ##### begin Gilbert 28/04/2001 #####//
01036         help_button_array[i].deinit();
01037         // ##### end Gilbert 28/04/2001 #####//
01038     }
01039     // ##### begin Gilbert 25/04/2001 ######//
01040     attitudes_report_init_flag = 0;
01041     // ##### end Gilbert 25/04/2001 ######//
01042 };
01043 
01044 //-- screen 5 : management ---/
01045 #define MANAGEMENT_ITEMS_NUM 5
01046 static char *management_help_title[]= {
01047     "Average of class sizes as a percent normal class sizes",
01048     "Library volumes per FTE student",
01049     "Percent of TSUs using IT in course",
01050     "Administrative performance",
01051     "Percentage of alumni who have donated during the last five years",
01052 };
01053 static management_report_init_flag=0;
01054 static GraphPerformanceIndicatorMonth management_graphicon[MANAGEMENT_ITEMS_NUM];
01055 static Text management_text1[MANAGEMENT_ITEMS_NUM];
01056 static Text management_text2[MANAGEMENT_ITEMS_NUM];
01057 static Text management_text3[MANAGEMENT_ITEMS_NUM];
01058 #if(GAME_VERSION>=200)
01059 static Text management_text4[MANAGEMENT_ITEMS_NUM];
01060 #endif
01061 
01062 static void report_management(int refreshFlag) {
01063     const static tab1=30,tab2=320,tab3=420,tab4=490;
01064     const static tab5=620,tab6=680,tab7=660,tab8=760;
01065     const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=480;
01066 
01067     static int data_num=HISTORY_MONTH_COUNT;
01068 
01069     static float *dataArray[MANAGEMENT_ITEMS_NUM];
01070     static float v1[MANAGEMENT_ITEMS_NUM];
01071     static float v2[MANAGEMENT_ITEMS_NUM];
01072     static float v3[MANAGEMENT_ITEMS_NUM];
01073 
01074     int i,j;
01075     //#### fred 1007 for compilation ####//
01076     //for(i=0,j=S_AVERAGE_OF_CLASS_SIZES_PERCENT;i<MANAGEMENT_ITEMS_NUM;i++,j++)
01077     for(i=0,j=7;i<MANAGEMENT_ITEMS_NUM;i++,j++) {
01078         //#### fred 1007 ####//
01079         dataArray[i]=player_school.sub_score[j];
01080         v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
01081         v2[i]=player_school.sub_score_weight[j];
01082         v3[i]=player_school.sub_score_change[j];
01083     }
01084 
01085     vga.use_back();
01086     if( refreshFlag == INFO_REPAINT ) {
01087         if( management_report_init_flag )             // deinit it first if it has already been initialized
01088             deinit_management();
01089         management_report_init_flag = 1;
01090 
01091         for(int i=0;i<MANAGEMENT_ITEMS_NUM;i++) {
01092             management_graphicon[i].init(
01093                 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*48-10,
01094                 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*48+20,
01095                 1 ,&data_num ,dataArray[i], 1, 0, 3);
01096             management_graphicon[i].paint();
01097 
01098             management_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*48,v1+i,4);
01099             management_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*48,v2+i,24);
01100             //management_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*48,v3+i,4);
01101             //## chea 110899
01102             management_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*48,v3+i,24);
01103 
01104             if(user_interface.backgd_flag==1) {
01105                 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,"QUEST_UP");
01106                 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*48+16,"?");
01107             }
01108         }
01109     }
01110 
01111     for(i=0;i<MANAGEMENT_ITEMS_NUM;i++) {
01112         font_chartsm.put_paragraph( WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*48,
01113                                     WINDOW_X1+tab2,WINDOW_Y1+vtab2+(i+1)*48,
01114                                     management_help_title[i]);
01115         management_graphicon[i].refresh();
01116         management_text1[i].refresh();
01117         management_text2[i].refresh();
01118         management_text3[i].refresh();
01119     }
01120 
01121     vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
01122     vga.use_front();
01123 };
01124 
01125 static int detect_management() {
01126     const static tab1=30,vtab2=37;
01127 
01128     vga.use_back();
01129     for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
01130         if(help_button_array[i].detect()) {
01131             // ## begin chwg1022  create the global ResTxt help_resource later //
01132             String str;
01133             str  = DIR_RES;
01134             str += "SCORE";
01135 
01136             ResTxt rs;
01137             rs.init(str);
01138             // ## chwg1022 end ////////////////////////
01139 
01140             image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,"QUEST_DN");
01141             vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*48+16);
01142             sys.back_view_mode=sys.view_mode;
01143             help_if.help_textlist.topic_id=rs.locate_topic(management_help_title[i]);
01144             if(help_if.help_textlist.topic_id>0) {
01145                 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
01146                 sys.set_view_mode(MODE_HELP_DESC);
01147                 sys.redraw_all_flag = 1;
01148                 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
01149             }
01150             return 1;
01151         }
01152     }
01153     return 0;
01154 }
01155 
01156 static void deinit_management() {
01157     if(management_report_init_flag==0)return;
01158 
01159     for(int i=0;i<MANAGEMENT_ITEMS_NUM;i++) {
01160         management_graphicon[i].deinit();
01161         management_text1[i].deinit();
01162         management_text2[i].deinit();
01163         management_text3[i].deinit();
01164         // ###### begin Gilbert 25/04/2001 ######//
01165         help_button_array[i].deinit();
01166         // ###### end Gilbert 25/04/2001 ######//
01167     }
01168     // ###### begin Gilbert 25/04/2001 ######//
01169     management_report_init_flag = 0;
01170     // ###### end Gilbert 25/04/2001 ######//
01171 };
01172 
01173 //-- screen 6 : finance ---/
01174 #define FINANCE_ITEMS_NUM 4
01175 static finance_report_init_flag=0;
01176 static char *finance_help_title[FINANCE_ITEMS_NUM]= {
01177     "Current surplus (deficit) as a percentage of expenditure",
01178     "Smoothed surplus (deficit) as a percentage of expenditure",
01179     "Endowment payout rate relative to the equilibrium payout rate",
01180     "Deferred maintenance backlog",
01181 };
01182 static GraphPerformanceIndicatorMonth finance_graphicon[FINANCE_ITEMS_NUM];
01183 static Text finance_text1[FINANCE_ITEMS_NUM];
01184 static Text finance_text2[FINANCE_ITEMS_NUM];
01185 static Text finance_text3[FINANCE_ITEMS_NUM];
01186 #if(GAME_VERSION>=200)
01187 static Text finance_text4[FINANCE_ITEMS_NUM];
01188 #endif
01189 
01190 static void report_finance(int refreshFlag) {
01191     const static tab1=30,tab2=320,tab3=420,tab4=490;
01192     const static tab5=620,tab6=680,tab7=660,tab8=760;
01193     const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=480;
01194 
01195     static int data_num=HISTORY_MONTH_COUNT;
01196 
01197     static float *dataArray[FINANCE_ITEMS_NUM];
01198     static float v1[FINANCE_ITEMS_NUM];
01199     static float v2[FINANCE_ITEMS_NUM];
01200     static float v3[FINANCE_ITEMS_NUM];
01201 #if(GAME_VERSION>=200)
01202     static float v4[FINANCE_ITEMS_NUM];
01203 #endif
01204 
01205     int i,j;
01206     for(i=0,j=S_CURRENT_SURPLUS_DEFICIT_PERCENT;i<FINANCE_ITEMS_NUM;i++,j++) {
01207         dataArray[i]=player_school.sub_score[j];
01208         v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
01209         v2[i]=player_school.sub_score_weight[j];
01210         v3[i]=player_school.sub_score_change[j];
01211 #if(GAME_VERSION>=200)
01212         float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
01213         // 1 year before
01214         float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
01215         float level = (v1[i] - player_school.sub_score_start[j]) / zn;
01216         v4[i] = trend;
01217         v3[i] = level;
01218 #endif
01219     }
01220 
01221     vga.use_back();
01222     if(refreshFlag == INFO_REPAINT) {
01223         if(finance_report_init_flag)                  // deinit it first if it has already been initialized
01224             deinit_finance();
01225         finance_report_init_flag = 1;
01226 
01227         for(int i=0;i<FINANCE_ITEMS_NUM;i++) {
01228             finance_graphicon[i].init(
01229                 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*40-10,
01230                 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*40+20,
01231                 1 ,&data_num ,dataArray[i], 1, 0, 3);
01232             finance_graphicon[i].paint();
01233             if(user_interface.backgd_flag==1) {
01234                 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,"QUEST_UP");
01235                 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*40+16,"?");
01236             }
01237 #if(GAME_VERSION>=200)
01238             finance_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*40,v1+i,4);
01239             finance_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*40,v2+i,24);
01240             finance_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*40, v4+i, 24);
01241             //## chea 110899
01242             finance_text3[i].