<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40763 >

> if the upkeep for all units is calculated each turn, this information can
> be used for the economic report
>
> depends on ticket 40619, 40759
>
> compile tested and also with a short game

update the clients to use the upkeep information saved in the unit struct. At 
the moment the gold upkeep is not displayed correct (only tested with 
gtk-2.0), but the overall value (the sum in the balance) is calculated 
correct. In the next days I will not have much time to look into this ...

diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/citydlg.c
--- freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/citydlg.c	2009-02-01 19:26:51.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/citydlg.c	2009-04-13 21:06:00.530500295 +0200
@@ -1644,14 +1644,8 @@
   struct unit_node_vector *nodes;
   int n, m, i;
   char buf[30];
-  int free_upkeep[O_COUNT];
   int free_unhappy = get_city_bonus(pdialog->pcity, EFT_MAKE_CONTENT_MIL);
 
-  output_type_iterate(o) {
-    free_upkeep[o] = get_city_output_bonus(pdialog->pcity, get_output_type(o),
-                                           EFT_UNIT_UPKEEP_FREE_PER_CITY);
-  } output_type_iterate_end;
-
   if (NULL != client.conn.playing
       && city_owner(pdialog->pcity) != client.conn.playing) {
     units = pdialog->pcity->info_units_supported;
@@ -1711,11 +1705,8 @@
   i = 0;
   unit_list_iterate(units, punit) {
     struct unit_node *pnode;
-    int upkeep_cost[O_COUNT];
     int happy_cost = city_unit_unhappiness(punit, &free_unhappy);
 
-    city_unit_upkeep(punit, upkeep_cost, free_upkeep);
-    
     pnode = unit_node_vector_get(nodes, i);
     if (pnode) {
       GtkWidget *cmd, *pix;
@@ -1725,7 +1716,8 @@
 
       gtk_pixcomm_freeze(GTK_PIXCOMM(pix));
       put_unit_gpixmap(punit, GTK_PIXCOMM(pix));
-      put_unit_gpixmap_city_overlays(punit, GTK_PIXCOMM(pix), upkeep_cost, happy_cost);
+      put_unit_gpixmap_city_overlays(punit, GTK_PIXCOMM(pix), punit->upkeep,
+                                     happy_cost);
       gtk_pixcomm_thaw(GTK_PIXCOMM(pix));
 
       g_signal_handlers_disconnect_matched(cmd,
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/repodlgs.c
--- freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/repodlgs.c	2009-01-23 18:28:25.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/repodlgs.c	2009-04-13 21:06:00.534498228 +0200
@@ -1202,7 +1202,7 @@
 {
   struct repoinfo {
     int active_count;
-    int upkeep[O_MAX];
+    int upkeep[O_LAST];
     int building_count;
   };
 
@@ -1222,23 +1222,14 @@
 
     memset(unitarray, '\0', sizeof(unitarray));
     city_list_iterate(client.conn.playing->cities, pcity) {
-      int free_upkeep[O_COUNT];
-
-      output_type_iterate(o) {
-        free_upkeep[o] = get_city_output_bonus(pcity, get_output_type(o),
-                                               EFT_UNIT_UPKEEP_FREE_PER_CITY);
-      } output_type_iterate_end;
-
       unit_list_iterate(pcity->units_supported, punit) {
-        int upkeep_cost[O_COUNT];
         Unit_type_id uti = utype_index(unit_type(punit));
 
-        city_unit_upkeep(punit, upkeep_cost, free_upkeep);
         (unitarray[uti].active_count)++;
         if (punit->homecity) {
-	  output_type_iterate(o) {
-	    unitarray[uti].upkeep[o] += upkeep_cost[o];
-	  } output_type_iterate_end;
+          output_type_iterate(o) {
+            unitarray[uti].upkeep[o] += punit->upkeep[o];
+          } output_type_iterate_end;
         }
       } unit_list_iterate_end;
     } city_list_iterate_end;
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-sdl/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-sdl/citydlg.c
--- freeciv-2.1.99svn15584.gold4/client/gui-sdl/citydlg.c	2009-01-10 20:17:48.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-sdl/citydlg.c	2009-04-13 21:06:00.538498675 +0200
@@ -616,9 +616,7 @@
   int i, step;
   SDL_Rect src_rect, dest;
   SDL_Surface *pSurf, *pZoomed;
-  
-  int upkeep_cost[O_COUNT];
-  int free_upkeep[O_COUNT];
+
   int free_unhappy;
   int happy_cost;
 
@@ -642,16 +640,9 @@
     
     free_unhappy = get_city_bonus(pCityDlg->pCity, EFT_MAKE_CONTENT_MIL);
     happy_cost = city_unit_unhappiness(pUnit, &free_unhappy);
-    
-    output_type_iterate(o) {
-      free_upkeep[o] = get_city_output_bonus(pCityDlg->pCity, get_output_type(o),
-                                             EFT_UNIT_UPKEEP_FREE_PER_CITY);
-    } output_type_iterate_end;
-    
-    city_unit_upkeep(pUnit, upkeep_cost, free_upkeep);
 
-    i = upkeep_cost[O_SHIELD] + upkeep_cost[O_FOOD] +
-	upkeep_cost[O_GOLD] + happy_cost;
+    i = pUnit->upkeep[O_SHIELD] + pUnit->upkeep[O_FOOD] +
+        pUnit->upkeep[O_GOLD] + happy_cost;
 
     if (i * pIcons->pFood->w > pSurf->w / 2) {
       step = (pSurf->w / 2 - pIcons->pFood->w) / (i - 1);
@@ -662,17 +653,17 @@
     dest.y = pSurf->h - pIcons->pFood->h - adj_size(2);
     dest.x = pSurf->w / 8;
 
-    for (i = 0; i < upkeep_cost[O_SHIELD]; i++) {
+    for (i = 0; i < pUnit->upkeep[O_SHIELD]; i++) {
       alphablit(pIcons->pShield, NULL, pSurf, &dest);
       dest.x += step;
     }
 
-    for (i = 0; i < upkeep_cost[O_FOOD]; i++) {
+    for (i = 0; i < pUnit->upkeep[O_FOOD]; i++) {
       alphablit(pIcons->pFood, NULL, pSurf, &dest);
       dest.x += step;
     }
 
-    for (i = 0; i < upkeep_cost[O_GOLD]; i++) {
+    for (i = 0; i < pUnit->upkeep[O_GOLD]; i++) {
       alphablit(pIcons->pCoin, NULL, pSurf, &dest);
       dest.x += step;
     }
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-sdl/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-sdl/repodlgs.c
--- freeciv-2.1.99svn15584.gold4/client/gui-sdl/repodlgs.c	2009-01-10 20:17:48.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-sdl/repodlgs.c	2009-04-13 21:06:00.542498283 +0200
@@ -58,50 +58,37 @@
 /* ===================================================================== */
 static struct ADVANCED_DLG *pUnitsDlg = NULL;
 static struct SMALL_DLG *pUnits_Upg_Dlg = NULL;
-    
+
 struct units_entry {
   int active_count;
-  int upkeep_shield;
-  int upkeep_food;
-  int upkeep_gold;
+  int upkeep[O_LAST];
   int building_count;
   int soonest_completions;
 };
 
 
 static void get_units_report_data(struct units_entry *entries, 
-  					struct units_entry *total)
+                                  struct units_entry *total)
 {
   int time_to_build;
-  int upkeep_cost[O_COUNT];
-  int free_upkeep[O_COUNT];
 
   memset(entries, '\0', U_LAST * sizeof(struct units_entry));
   memset(total, '\0', sizeof(struct units_entry));
   for(time_to_build = 0; time_to_build < U_LAST; time_to_build++) {
     entries[time_to_build].soonest_completions = FC_INFINITY;
   }
+
   unit_list_iterate(client.conn.playing->units, pUnit) {
     Unit_type_id uti = utype_index(unit_type(pUnit));
     (entries[uti].active_count)++;
     (total->active_count)++;
     if (pUnit->homecity) {
       output_type_iterate(o) {
-        free_upkeep[o] = get_city_output_bonus(game_find_city_by_number(pUnit->homecity),
-                           get_output_type(o), EFT_UNIT_UPKEEP_FREE_PER_CITY);
+        entries[uti].upkeep[o] += punit->upkeep[o];
       } output_type_iterate_end;
-
-      city_unit_upkeep(pUnit, upkeep_cost, free_upkeep);
-      
-      entries[uti].upkeep_shield += upkeep_cost[O_SHIELD];
-      total->upkeep_shield += upkeep_cost[O_SHIELD];
-      entries[uti].upkeep_food += upkeep_cost[O_FOOD];
-      total->upkeep_food += upkeep_cost[O_FOOD];
-      entries[uti].upkeep_gold += upkeep_cost[O_GOLD];
-      total->upkeep_gold += upkeep_cost[O_GOLD];
     }
   } unit_list_iterate_end;
-    
+
   city_list_iterate(client.conn.playing->cities, pCity) {
     if (VUT_UTYPE == pCity->production.kind) {
       struct unit_type *pUnitType = pCity->production.value.utype;
@@ -405,7 +392,7 @@
   pBuf->size.w = pText1->w + adj_size(6);
   add_to_gui_list(ID_LABEL, pBuf);
   /* ---------------------------------------------- */
-  my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep_shield);
+  my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep[O_SHIELD]);
 	
   pStr = create_str16_from_char(cBuf, adj_font(10));
   pStr->style |= (TTF_STYLE_BOLD|SF_CENTER);
@@ -415,7 +402,7 @@
   pBuf->size.w = pText1->w;
   add_to_gui_list(ID_LABEL, pBuf);
   /* ---------------------------------------------- */	
-  my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep_food);
+  my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep[O_FOOD]);
 	
   pStr = create_str16_from_char(cBuf, adj_font(10));
   pStr->style |= (TTF_STYLE_BOLD|SF_CENTER);
@@ -425,7 +412,7 @@
   pBuf->size.w = pText1->w;
   add_to_gui_list(ID_LABEL, pBuf);
   /* ---------------------------------------------- */	
-  my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep_gold);
+  my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep[O_GOLD]);
 	
   pStr = create_str16_from_char(cBuf, adj_font(10));
   pStr->style |= (TTF_STYLE_BOLD|SF_CENTER);
@@ -498,7 +485,7 @@
       add_to_gui_list(MAX_ID - utype_number(i), pBuf);
       
       /* shield upkeep */	
-      my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_shield);
+      my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_SHIELD]);
       pStr = create_str16_from_char(cBuf, adj_font(10));
       pStr->style |= SF_CENTER;
       pBuf = create_iconlabel(NULL, pWindow->dst, pStr,
@@ -511,7 +498,7 @@
       add_to_gui_list(MAX_ID - utype_number(i), pBuf);
 	
       /* food upkeep */
-      my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_food);
+      my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_FOOD]);
       pStr = create_str16_from_char(cBuf, adj_font(10));
       pStr->style |= SF_CENTER;
       pBuf = create_iconlabel(NULL, pWindow->dst, pStr,
@@ -525,7 +512,7 @@
       add_to_gui_list(MAX_ID - utype_number(i), pBuf);
 
       /* gold upkeep */
-      my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_gold);
+      my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_GOLD]);
       pStr = create_str16_from_char(cBuf, adj_font(10));
       pStr->style |= SF_CENTER;
       pBuf = create_iconlabel(NULL, pWindow->dst, pStr,
@@ -912,15 +899,15 @@
             copy_chars_to_string16(pBuf->string16, cBuf);
 
             pBuf = pBuf->prev; /* shield upkeep */
-            my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_shield);
+            my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_SHIELD]);
             copy_chars_to_string16(pBuf->string16, cBuf);
 
             pBuf = pBuf->prev; /* food upkeep */
-            my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_food);
+            my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_FOOD]);
             copy_chars_to_string16(pBuf->string16, cBuf);
 
             pBuf = pBuf->prev; /* gold upkeep */
-            my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_gold);
+            my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_GOLD]);
             copy_chars_to_string16(pBuf->string16, cBuf);
 
             pBuf = pBuf->prev; /* building */
@@ -994,12 +981,12 @@
   
     /* total shields cost */
     pBuf = pBuf->prev;
-    my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep_shield);
+    my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep[O_SHIELD]);
     copy_chars_to_string16(pBuf->string16, cBuf);
   
     /* total food cost widget */
     pBuf = pBuf->prev;
-    my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep_food);
+    my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep[O_FOOD]);
     copy_chars_to_string16(pBuf->string16, cBuf);
   
     /* total building count */
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-win32/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-win32/citydlg.c
--- freeciv-2.1.99svn15584.gold4/client/gui-win32/citydlg.c	2009-01-10 20:17:43.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-win32/citydlg.c	2009-04-13 21:06:00.546497892 +0200
@@ -350,7 +350,6 @@
   int i;
   struct unit_list *plist;
   struct canvas store;
-  int free_upkeep[O_COUNT];
   int free_unhappy;
 
   store.type = CANVAS_DC;
@@ -361,49 +360,45 @@
 
   free_unhappy = get_city_bonus(pdialog->pcity, EFT_MAKE_CONTENT_MIL);
 
-  output_type_iterate(o) {
-    free_upkeep[o] = get_city_output_bonus(pdialog->pcity, get_output_type(o),
-                                           EFT_UNIT_UPKEEP_FREE_PER_CITY);
-  } output_type_iterate_end;
-
   if (city_owner(pdialog->pcity) != client.conn.playing) {
     plist = pdialog->pcity->info_units_supported;
   } else {
     plist = pdialog->pcity->units_supported;
-  }      
-     
-  for(i = 0; i < NUM_UNITS_SHOWN; i++) {   
+  }
+
+  for(i = 0; i < NUM_UNITS_SHOWN; i++) {
     RECT rc;
-    pdialog->support_unit_ids[i]=0;      
+    pdialog->support_unit_ids[i]=0;
     rc.top=pdialog->supported_y;
-    rc.left=pdialog->pop_x+i*(tileset_small_sprite_width(tileset)+tileset_tile_width(tileset));
+    rc.left=pdialog->pop_x+i*(tileset_small_sprite_width(tileset) +
+            tileset_tile_width(tileset));
     rc.right=rc.left+tileset_tile_width(tileset);
-    rc.bottom=rc.top+tileset_small_sprite_height(tileset)+tileset_tile_height(tileset);
-    FillRect(hdc, &rc, 
-	     (HBRUSH)GetClassLong(pdialog->mainwindow,GCL_HBRBACKGROUND));
+    rc.bottom=rc.top+tileset_small_sprite_height(tileset) +
+              tileset_tile_height(tileset);
+    FillRect(hdc, &rc,
+             (HBRUSH)GetClassLong(pdialog->mainwindow,GCL_HBRBACKGROUND));
   }
 
   i = 0;
-  
+
   unit_list_iterate(plist, punit) {
-    int upkeep_cost[O_COUNT];
     int happy_cost = city_unit_unhappiness(punit, &free_unhappy);
-        
-    city_unit_upkeep(punit, upkeep_cost, free_upkeep);
 
     put_unit(punit, &store,
-	     pdialog->pop_x + i * (tileset_small_sprite_width(tileset) + tileset_tile_width(tileset)),
+	     pdialog->pop_x + i * (tileset_small_sprite_width(tileset) +
+                      tileset_tile_width(tileset)),
 	     pdialog->supported_y);
     put_unit_city_overlays(punit, &store,
-             pdialog->pop_x + i * (tileset_small_sprite_width(tileset) + tileset_tile_width(tileset)),
-                           pdialog->supported_y, upkeep_cost, happy_cost);
+             pdialog->pop_x + i * (tileset_small_sprite_width(tileset) +
+                                   tileset_tile_width(tileset)),
+             pdialog->supported_y, punit->upkeep, happy_cost);
     pdialog->support_unit_ids[i] = punit->id;
     i++;
     if (i == NUM_UNITS_SHOWN) {
       break;
     }
   } unit_list_iterate_end;
-}   
+}
 
 /**************************************************************************
 ...
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-win32/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-win32/repodlgs.c
--- freeciv-2.1.99svn15584.gold4/client/gui-win32/repodlgs.c	2009-01-10 20:17:43.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-win32/repodlgs.c	2009-04-13 21:06:00.546497892 +0200
@@ -597,11 +597,10 @@
 {
   struct repoinfo {
     int active_count;
-    int upkeep_shield;
-    int upkeep_food;
-    /* int upkeep_gold;   FIXME: add gold when gold is implemented --jjm */
+    int upkeep[O_LAST];
     int building_count;
-  };                         
+  };
+
   if(activeunits_dlg) {
     HWND lv;
     int    i, k, can;
@@ -623,23 +622,14 @@
     memset(unitarray, '\0', sizeof(unitarray));
 
    city_list_iterate(client.conn.playing->cities, pcity) {
-      int free_upkeep[O_COUNT];
-
-      output_type_iterate(o) {
-        free_upkeep[o] = get_city_output_bonus(pcity, get_output_type(o),
-                                               EFT_UNIT_UPKEEP_FREE_PER_CITY);
-      } output_type_iterate_end;
-
       unit_list_iterate(client.conn.playing->units, punit) {
-        int upkeep_cost[O_COUNT];
         Unit_type_id uti = utype_index(unit_type(punit));
 
-        city_unit_upkeep(punit, upkeep_cost, free_upkeep);
         (unitarray[uti].active_count)++;
         if (punit->homecity) {
-          /* TODO: upkeep for generic output types. */
-          unitarray[uti].upkeep_shield += upkeep_cost[O_SHIELD];
-          unitarray[uti].upkeep_food += upkeep_cost[O_FOOD];
+          output_type_iterate(o) {
+            unitarray[uti].upkeep[o] += punit->upkeep[o];
+          } output_type_iterate_end;
         }
       } unit_list_iterate_end;
    } city_list_iterate_end;
@@ -667,15 +657,17 @@
         my_snprintf(buf[3], sizeof(buf[3]), "%3d",
                     unitarray[index].active_count);
         my_snprintf(buf[4], sizeof(buf[4]), "%3d",
-                    unitarray[index].upkeep_shield);
+                    unitarray[index].upkeep[O_SHIELD]);
         my_snprintf(buf[5], sizeof(buf[5]), "%3d",
-				   unitarray[index].upkeep_food);
-	fcwin_listview_add_row(lv,k,AU_COL,row);
+                    unitarray[index].upkeep[O_FOOD]);
+        /* TODO: add upkeep[O_GOLD] here */
+        fcwin_listview_add_row(lv,k,AU_COL,row);
         activeunits_type[k]=(unitarray[index].active_count > 0) ? putype : NULL;
         k++;
         unittotals.active_count += unitarray[index].active_count;
-        unittotals.upkeep_shield += unitarray[index].upkeep_shield;
-        unittotals.upkeep_food += unitarray[index].upkeep_food;
+        output_type_iterate(o) {
+          unittotals.upkeep[0] = unitarray[index].upkeep[o]
+        } output_type_iterate_end;
         unittotals.building_count += unitarray[index].building_count;
       }
     } unit_type_iterate_end;
@@ -684,8 +676,9 @@
     buf[1][0]='\0';
     my_snprintf(buf[2],sizeof(buf[2]),"%d",unittotals.building_count);
     my_snprintf(buf[3],sizeof(buf[3]),"%d",unittotals.active_count);
-    my_snprintf(buf[4],sizeof(buf[4]),"%d",unittotals.upkeep_shield);
-    my_snprintf(buf[5],sizeof(buf[5]),"%d",unittotals.upkeep_food);  
+    my_snprintf(buf[4],sizeof(buf[4]),"%d",unittotals.upkeep[O_SHIELD]);
+    my_snprintf(buf[5],sizeof(buf[5]),"%d",unittotals.upkeep[O_FOOD]);
+    /* TODO: add upkeep[O_GOLD] here */
     fcwin_listview_add_row(lv,k,AU_COL,row);
     EnableWindow(GetDlgItem(activeunits_dlg,ID_MILITARY_UPGRADE),FALSE);
     ListView_SetColumnWidth(lv,0,LVSCW_AUTOSIZE);
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-xaw/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-xaw/citydlg.c
--- freeciv-2.1.99svn15584.gold4/client/gui-xaw/citydlg.c	2009-03-21 12:19:16.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-xaw/citydlg.c	2009-04-13 21:06:00.550498060 +0200
@@ -1688,14 +1688,8 @@
   struct unit_list *plist;
   int i, j, adj_base;
   Widget pixcomm;
-  int free_upkeep[O_COUNT];
   int free_unhappy = get_city_bonus(pdialog->pcity, EFT_MAKE_CONTENT_MIL);
 
-  output_type_iterate(o) {
-    free_upkeep[o] = get_city_output_bonus(pdialog->pcity, get_output_type(o),
-                                           EFT_UNIT_UPKEEP_FREE_PER_CITY);
-  } output_type_iterate_end;
-
   if (NULL != client.conn.playing
       && city_owner(pdialog->pcity) != client.conn.playing) {
     plist = pdialog->pcity->info_units_supported;
@@ -1713,10 +1707,7 @@
   j = 0; /* index into list */
   unit_list_iterate(plist, punit) {
     struct canvas store;
-    int upkeep_cost[O_COUNT];
     int happy_cost = city_unit_unhappiness(punit, &free_unhappy);
-  	 
-    city_unit_upkeep(punit, upkeep_cost, free_upkeep);
 
     if (j++ < pdialog->support_unit_base) {
       continue;
@@ -1734,8 +1725,8 @@
     XawPixcommClear(pixcomm); /* STG */
     put_unit(punit, &store, 0, 0);
     put_unit_pixmap_city_overlays(punit,
-				  XawPixcommPixmap(pixcomm),
-                                  upkeep_cost, happy_cost);
+                                  XawPixcommPixmap(pixcomm),
+                                  punit->upkeep, happy_cost);
 
     xaw_expose_now(pixcomm);
 
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-xaw/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-xaw/repodlgs.c
--- freeciv-2.1.99svn15584.gold4/client/gui-xaw/repodlgs.c	2009-01-10 20:17:40.000000000 +0100
+++ freeciv-2.1.99svn15584.gold5//client/gui-xaw/repodlgs.c	2009-04-13 21:06:00.550498060 +0200
@@ -1073,9 +1073,7 @@
 {
   struct repoinfo {
     int active_count;
-    int upkeep_shield;
-    int upkeep_food;
-    /* int upkeep_gold;   FIXME: add gold when gold is implemented --jjm */
+    int upkeep[O_LAST];
     int building_count;
   };
 
@@ -1105,23 +1103,14 @@
     memset(unitarray, '\0', sizeof(unitarray));
 
     city_list_iterate(client.conn.playing->cities, pcity) {
-      int free_upkeep[O_COUNT];
-
-      output_type_iterate(o) {
-        free_upkeep[o] = get_city_output_bonus(pcity, get_output_type(o),
-                                               EFT_UNIT_UPKEEP_FREE_PER_CITY);
-      } output_type_iterate_end;
-
       unit_list_iterate(client.conn.playing->units, punit) {
-        int upkeep_cost[O_COUNT];
         Unit_type_id uti = utype_index(unit_type(punit));
 
-        city_unit_upkeep(punit, upkeep_cost, free_upkeep);
         (unitarray[uti].active_count)++;
         if (punit->homecity) {
-          /* TODO: upkeep for generic output types. */
-          unitarray[uti].upkeep_shield += upkeep_cost[O_SHIELD];
-          unitarray[uti].upkeep_food += upkeep_cost[O_FOOD];
+          output_type_iterate(o) {
+            unitarray[uti].upkeep[o] += punit->upkeep[o];
+          } output_type_iterate_end;
         }
       } unit_list_iterate_end;
     } city_list_iterate_end;
@@ -1148,15 +1137,17 @@
 	   can_upgrade_unittype(client.conn.playing, punittype) != NULL ? '*': '-',
 	   unitarray[i].building_count,
 	   unitarray[i].active_count,
-	   unitarray[i].upkeep_shield,
-	   unitarray[i].upkeep_food
+	   unitarray[i].upkeep[O_SHIELD],
+	   unitarray[i].upkeep[O_FOOD]
+           /* TODO: add upkeep[O_GOLD] here */
 	  );
 	activeunits_list_names_ptrs[k]=activeunits_list_names[k];
 	activeunits_type[k]=(unitarray[i].active_count > 0) ? i : U_LAST;
 	k++;
 	unittotals.active_count += unitarray[i].active_count;
-	unittotals.upkeep_shield += unitarray[i].upkeep_shield;
-	unittotals.upkeep_food += unitarray[i].upkeep_food;
+        output_type_iterate(o) {
+          unittotals.upkeep[o] = unitarray[uti].upkeep[o];
+        } output_type_iterate_end;
 	unittotals.building_count += unitarray[i].building_count;
       }
     } unit_type_iterate_end;
@@ -1170,7 +1161,8 @@
     my_snprintf(activeunits_total, sizeof(activeunits_total),
 	    _("Totals:                     %9d%9d%9d%9d"),
 	    unittotals.building_count, unittotals.active_count,
-	    unittotals.upkeep_shield, unittotals.upkeep_food);
+	    unittotals.upkeep[O_SHIELD], unittotals.upkeep[O_FOOD]);
+            /* TODO: add upkeep[O_GOLD] here */
     xaw_set_label(activeunits_label2, activeunits_total); 
 
     activeunits_list_names_ptrs[k]=0;
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/repodlgs_common.c freeciv-2.1.99svn15584.gold5//client/repodlgs_common.c
--- freeciv-2.1.99svn15584.gold4/client/repodlgs_common.c	2009-04-11 20:18:01.000000000 +0200
+++ freeciv-2.1.99svn15584.gold5//client/repodlgs_common.c	2009-04-11 20:20:16.000000000 +0200
@@ -113,7 +113,6 @@
 				   int *num_entries_used, int *total_cost)
 {
   int count, cost, partial_cost;
-  int free_upkeep[O_COUNT];
 
   *num_entries_used = 0;
   *total_cost = 0;
@@ -121,7 +120,6 @@
   if (NULL == client.conn.playing) {
     return;
   }
-  memset(free_upkeep, 0, O_COUNT * sizeof(*free_upkeep));
 
   unit_type_iterate(unittype) {
     cost = utype_upkeep_cost(unittype, client.conn.playing, O_GOLD);
@@ -135,17 +133,10 @@
     partial_cost = 0;
 
     city_list_iterate(client.conn.playing->cities, pcity) {
-      free_upkeep[O_GOLD] = get_city_output_bonus(pcity, get_output_type(O_GOLD),
-                                                  EFT_UNIT_UPKEEP_FREE_PER_CITY);
-
       unit_list_iterate(pcity->units_supported, punit) {
-        int upkeep_cost[O_COUNT];
-
-        city_unit_upkeep(punit, upkeep_cost, free_upkeep);
-
 	if (unit_type(punit) == unittype) {
 	  count++;
-	  partial_cost += upkeep_cost[O_GOLD];
+	  partial_cost += punit->upkeep[O_GOLD];
 	}
 
       } unit_list_iterate_end;
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to