diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-gtk/cityrep.c freeciv/client/gui-gtk/cityrep.c --- FreecivCVS/client/gui-gtk/cityrep.c Sat Mar 11 08:42:51 2000 +++ freeciv/client/gui-gtk/cityrep.c Tue Mar 14 13:59:26 2000 @@ -430,7 +430,6 @@ report_title=get_report_title(_("City Advisor")); city_label = gtk_label_new(report_title); - free(report_title); gtk_box_pack_start( GTK_BOX( GTK_DIALOG(city_dialog_shell)->vbox ), city_label, FALSE, FALSE, 0 ); @@ -1135,7 +1134,6 @@ report_title=get_report_title(_("City Advisor")); gtk_set_label(city_label, report_title); - free(report_title); for (i=0, spec=city_report_specs;igovernment), get_nation_name_plural(game.player_ptr->nation), - get_ruler_title(game.player_ptr->government, game.player_ptr->is_male, game.player_ptr->nation), + get_ruler_title(game.player_ptr->government, + game.player_ptr->is_male, game.player_ptr->nation), game.player_ptr->name, textyear(game.year)); - return create_centered_string(buf); + return buf; } @@ -174,6 +175,7 @@ GtkWidget *frame, *hbox, *w; GtkAccelGroup *accel=gtk_accel_group_new(); int i; + char text[512], rate[128]; science_dialog_shell = gtk_dialog_new(); gtk_signal_connect( GTK_OBJECT(science_dialog_shell),"delete_event", @@ -183,9 +185,11 @@ gtk_window_set_title (GTK_WINDOW(science_dialog_shell), _("Science Report")); report_title=get_report_title(_("Science Advisor")); - - science_label = gtk_label_new(report_title); - free(report_title); + sz_strlcpy(text, report_title); + my_snprintf(rate, sizeof(rate), _("\n(%d turns/advance)"), + tech_turns_to_advance(game.player_ptr)); + sz_strlcat(text, rate); + science_label = gtk_label_new(text); gtk_box_pack_start( GTK_BOX( GTK_DIALOG(science_dialog_shell)->vbox ), science_label, FALSE, FALSE, 0 ); @@ -276,15 +280,15 @@ /* Following is to make the menu go back to the current research; * there may be a better way to do this? --dwp */ science_dialog_update(); - } - else { - my_snprintf(text, sizeof(text), "%d/%d", - game.player_ptr->research.researched, - research_time(game.player_ptr)); - gtk_set_label(science_current_label,text); - - packet.tech=to; - send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RESEARCH); + } else { + my_snprintf(text, sizeof(text), "%d/%d", + game.player_ptr->research.researched, + research_time(game.player_ptr)); + + gtk_set_label(science_current_label,text); + + packet.tech=to; + send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RESEARCH); } } @@ -353,7 +357,7 @@ void science_dialog_update(void) { if(science_dialog_shell) { - char text[512]; + char text[512], rate[128]; int i, j, hist; char *report_title; static char *row [1]; @@ -361,8 +365,11 @@ if(delay_report_update) return; report_title=get_report_title(_("Science Advisor")); - gtk_set_label(science_label, report_title); - free(report_title); + sz_strlcpy(text, report_title); + my_snprintf(rate, sizeof(rate), _("\n(%d turns/advance)"), + tech_turns_to_advance(game.player_ptr)); + sz_strlcat(text, rate); + gtk_set_label(science_label, text); for (i=0; i<4; i++) { gtk_clist_freeze(GTK_CLIST(science_list[i])); @@ -388,6 +395,7 @@ my_snprintf(text, sizeof(text), "%d/%d", game.player_ptr->research.researched, research_time(game.player_ptr)); + gtk_set_label(science_current_label,text); hist=0; @@ -673,7 +681,6 @@ report_title=get_report_title(_("Trade Advisor")); gtk_set_label(trade_label, report_title); - free(report_title); gtk_clist_freeze(GTK_CLIST(trade_list)); gtk_clist_clear(GTK_CLIST(trade_list)); @@ -778,7 +785,6 @@ activeunits_label = gtk_label_new(report_title); gtk_box_pack_start( GTK_BOX( GTK_DIALOG(activeunits_dialog_shell)->vbox ), activeunits_label, FALSE, FALSE, 0 ); - free(report_title); activeunits_list = gtk_clist_new_with_titles( AU_COL, titles ); gtk_clist_column_titles_passive(GTK_CLIST(activeunits_list)); @@ -947,7 +953,6 @@ report_title=get_report_title(_("Military Report")); gtk_set_label(activeunits_label, report_title); - free(report_title); gtk_clist_freeze(GTK_CLIST(activeunits_list)); gtk_clist_clear(GTK_CLIST(activeunits_list)); diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-xaw/repodlgs.c freeciv/client/gui-xaw/repodlgs.c --- FreecivCVS/client/gui-xaw/repodlgs.c Tue Feb 15 09:40:33 2000 +++ freeciv/client/gui-xaw/repodlgs.c Tue Mar 14 14:36:56 2000 @@ -206,6 +206,7 @@ int j, flag, num_list; size_t i; Dimension width; + char title_text[512], rate_text[128]; char current_text[512]; char goal_text[512]; char *report_title; @@ -251,6 +252,12 @@ NULL); report_title=get_report_title(_("Science Advisor")); + sz_strlcpy(title_text, report_title); + free(report_title); + my_snprintf(rate_text, sizeof(rate_text), _("\n(%d turns/advance)"), + tech_turns_to_advance(game.player_ptr)); + sz_strlcat(title_text, rate_text); + report_title=create_centered_string(title_text); science_label = XtVaCreateManagedWidget("sciencelabel", labelWidgetClass, science_form, @@ -482,9 +489,16 @@ static char tech_list_names[A_LAST+1][200]; int j, flag; size_t i; + char title_text[512], rate_text[128]; char *report_title; report_title=get_report_title(_("Science Advisor")); + sz_strlcpy(title_text, report_title); + free(report_title); + my_snprintf(rate_text, sizeof(rate_text), _("\n(%d turns/advance)"), + tech_turns_to_advance(game.player_ptr)); + sz_strlcat(title_text, rate_text); + report_title=create_centered_string(title_text); xaw_set_label(science_label, report_title); free(report_title); diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/common/tech.c freeciv/common/tech.c --- FreecivCVS/common/tech.c Thu Jan 6 21:12:29 2000 +++ freeciv/common/tech.c Tue Mar 14 12:38:38 2000 @@ -213,3 +213,20 @@ return A_LAST; } +/************************************************************************** + Returns number of turns to complete an advance + (assuming current state of civilization) +**************************************************************************/ +int tech_turns_to_advance(struct player *pplayer) +{ + double res = 0; + + city_list_iterate(pplayer->cities, pcity) + res += pcity->science_total; + city_list_iterate_end; + + if (res <= 0) + return 999; + + return ((research_time(pplayer) + res - 1) / res); +} diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/common/tech.h freeciv/common/tech.h --- FreecivCVS/common/tech.h Thu Jan 6 21:04:44 2000 +++ freeciv/common/tech.h Tue Mar 14 12:38:58 2000 @@ -79,7 +79,7 @@ int tech_flag(int tech, int flag); enum tech_flag_id tech_flag_from_str(char *s); int find_tech_by_flag( int index, int flag ); - +int tech_turns_to_advance(struct player *pplayer); extern struct advance advances[];