Update of /cvsroot/netrek/client/netrekxp/src
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv14506/src

Modified Files:
	data.c feature.c playerlist.c socket.c 
Log Message:
Add support for SP_LTD, still buggy.
Added include/ltd_stats.h to source.
Some minor formatting and fprintf fixes.
Change unknown ranks to blank.

Index: playerlist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/playerlist.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- playerlist.c	25 May 2009 14:43:53 -0000	1.19
+++ playerlist.c	3 Jun 2009 02:42:55 -0000	1.20
@@ -1127,11 +1127,11 @@
         case 'C':              /* Curt (short) Rank */
             if (paradise)
                 //format (buffPoint, (j->p_stats2.st_royal == 0 ? ranks2[j->p_stats2.st_rank].name : royal[j->p_stats2.st_royal].name), 10, 0);
-                format (buffPoint, "UNKN", 4, 0);
+                format (buffPoint, "", 4, 0);
             else
             {
                 if (j->p_stats.st_rank >= nranks)
-                    format (buffPoint, "UNKN", 4, 0);
+                    format (buffPoint, "", 4, 0);
                 else
                     format (buffPoint, ranks[j->p_stats.st_rank].cname, 4, 0);
             }
@@ -1144,7 +1144,7 @@
             else
             {
                 if (j->p_stats.st_rank >= nranks)
-                    format (buffPoint, "Unknown!  ", 10, 0);
+                    format (buffPoint, "", 10, 0);
                 else
                     format (buffPoint, ranks[j->p_stats.st_rank].name, 10, 0);
             }

Index: feature.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/feature.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- feature.c	26 May 2009 02:18:17 -0000	1.31
+++ feature.c	3 Jun 2009 02:42:55 -0000	1.32
@@ -104,7 +104,9 @@
     {"TERRAIN", &F_terrain, 'S', 1, 0, 0},
     /* armies in paradise ship_cap_spacket */
     {"ARMIES_IN_SHIPCAP", &F_armies_shipcap, 'S', 1, 0, 0},
+    {"AUTO_WEAPONS", &F_auto_weapons, 'S', 1, 0, 0},
     {"SP_RANK", &F_sp_rank, 'S', 1, 0, 0},
+    {"SP_LTD", &F_sp_ltd, 'S', 1, 0, 0},
     {0, 0, 0, 0, 0, 0}
 };
 

Index: socket.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/socket.c,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -d -r1.66 -r1.67
--- socket.c	30 May 2009 16:03:38 -0000	1.66
+++ socket.c	3 Jun 2009 02:42:55 -0000	1.67
@@ -198,6 +198,7 @@
     {sizeof (struct feature_cpacket), handleFeature},   /* CP_FEATURE; 60 */
 #endif
     {sizeof (struct rank_spacket), handleRank},      /* SP_RANK */
+    {sizeof (struct ltd_spacket), handleLtd},         /* SP_LTD */
 };
 
 int sizes[] = {
@@ -2838,6 +2839,113 @@
     ranks[i].offense = (float) (ntohl (packet->offense) / 100.0);
 }
 
+static void
+dump_prefix(const char *abbr, const char *name)
+{
+    LineToConsole("%-10s %-30s ", abbr, name);
+}
+
+#define dump_stat(STAT) { \
+    LineToConsole(" %8u\n", (unsigned int) ltd->STAT); \
+}
+
+#define dump_max(STAT) { \
+    LineToConsole(" %8u\n", (unsigned int) ltd->STAT); \
+}
+
+void
+handleLtd (struct ltd_spacket *packet)
+{
+    struct ltd_stats *ltd;
+    if (packet->version != LTD_VERSION) return;
+    if (packet->endian != 'l') return;
+
+    ltd = &packet->ltd;
+
+    LineToConsole("SP_LTD test output begins\n");
+    dump_prefix("kt", "kills total"); dump_stat(kills.total);
+    dump_prefix("kmax", "kills max"); dump_max(kills.max);
+    dump_prefix("k1", "kills first"); dump_stat(kills.first);
+    dump_prefix("k1p", "kills first potential"); dump_stat(kills.first_potential);
+    dump_prefix("k1c", "kills first converted"); dump_stat(kills.first_converted);
+    dump_prefix("k2", "kills second"); dump_stat(kills.second);
+    dump_prefix("k2p", "kills second potential"); dump_stat(kills.second_potential);
+    dump_prefix("k2c", "kills second converted"); dump_stat(kills.second_converted);
+    dump_prefix("kbp", "kills by phaser"); dump_stat(kills.phasered);
+    dump_prefix("kbt", "kills by torp"); dump_stat(kills.torped);
+    dump_prefix("kbs", "kills by smack"); dump_stat(kills.plasmaed);
+    dump_prefix("dt", "deaths total"); dump_stat(deaths.total);
+    dump_prefix("dpc", "deaths as potential carrier"); dump_stat(deaths.potential);
+    dump_prefix("dcc", "deaths as converted carrier"); dump_stat(deaths.converted);
+    dump_prefix("ddc", "deaths as dooshed carrier"); dump_stat(deaths.dooshed);
+    dump_prefix("dbp", "deaths by phaser"); dump_stat(deaths.phasered);
+    dump_prefix("dbt", "deaths by torp"); dump_stat(deaths.torped);
+    dump_prefix("dbs", "deaths by smack"); dump_stat(deaths.plasmaed);
+    dump_prefix("acc", "actual carriers created"); dump_stat(deaths.acc);
+    dump_prefix("ptt", "planets taken total"); dump_stat(planets.taken);
+    dump_prefix("pdt", "planets destroyed total"); dump_stat(planets.destroyed);
+    dump_prefix("bpt", "bombed planets total"); dump_stat(bomb.planets);
+    dump_prefix("bp8", "bombed planets <=8"); dump_stat(bomb.planets_8);
+    dump_prefix("bpc", "bombed planets core"); dump_stat(bomb.planets_core);
+    dump_prefix("bat", "bombed armies total"); dump_stat(bomb.armies);
+    dump_prefix("ba8", "bombed_armies <= 8"); dump_stat(bomb.armies_8);
+    dump_prefix("bac", "bombed armies core"); dump_stat(bomb.armies_core);
+    dump_prefix("oat", "ogged armies total"); dump_stat(ogged.armies);
+    dump_prefix("odc", "ogged dooshed carrier"); dump_stat(ogged.dooshed);
+    dump_prefix("occ", "ogged converted carrier"); dump_stat(ogged.converted);
+    dump_prefix("opc", "ogged potential carrier"); dump_stat(ogged.potential);
+    dump_prefix("o>c", "ogged bigger carrier"); dump_stat(ogged.bigger_ship);
+    dump_prefix("o=c", "ogged same carrier"); dump_stat(ogged.same_ship);
+    dump_prefix("o<c", "ogger smaller carrier"); dump_stat(ogged.smaller_ship);
+    dump_prefix("osba", "ogged sb armies"); dump_stat(ogged.sb_armies);
+    dump_prefix("ofc", "ogged friendly carrier"); dump_stat(ogged.friendly);
+    dump_prefix("ofa", "ogged friendly armies"); dump_stat(ogged.friendly_armies);
+    dump_prefix("at", "armies carried total"); dump_stat(armies.total);
+    dump_prefix("aa", "armies used to attack"); dump_stat(armies.attack);
+    dump_prefix("ar", "armies used to reinforce"); dump_stat(armies.reinforce);
+    dump_prefix("af", "armies ferried"); dump_stat(armies.ferries);
+    dump_prefix("ak", "armies killed"); dump_stat(armies.killed);
+    dump_prefix("ct", "carries total"); dump_stat(carries.total);
+    dump_prefix("cp", "carries partial"); dump_stat(carries.partial);
+    dump_prefix("cc", "carries completed"); dump_stat(carries.completed);
+    dump_prefix("ca", "carries to attack"); dump_stat(carries.attack);
+    dump_prefix("cr", "carries to reinforce"); dump_stat(carries.reinforce);
+    dump_prefix("cf", "carries to ferry"); dump_stat(carries.ferries);
+    dump_prefix("tt", "ticks total"); dump_stat(ticks.total);
+    dump_prefix("tyel", "ticks in yellow"); dump_stat(ticks.yellow);
+    dump_prefix("tred", "ticks in red"); dump_stat(ticks.red);
+    dump_prefix("tz0", "ticks in zone 0"); dump_stat(ticks.zone[0]);
+    dump_prefix("tz1", "ticks in zone 1"); dump_stat(ticks.zone[1]);
+    dump_prefix("tz2", "ticks in zone 2"); dump_stat(ticks.zone[2]);
+    dump_prefix("tz3", "ticks in zone 3"); dump_stat(ticks.zone[3]);
+    dump_prefix("tz4", "ticks in zone 4"); dump_stat(ticks.zone[4]);
+    dump_prefix("tz5", "ticks in zone 5"); dump_stat(ticks.zone[5]);
+    dump_prefix("tz6", "ticks in zone 6"); dump_stat(ticks.zone[6]);
+    dump_prefix("tz7", "ticks in zone 7"); dump_stat(ticks.zone[7]);
+    dump_prefix("tpc", "ticks as potential carrier"); dump_stat(ticks.potential);
+    dump_prefix("tcc", "ticks as carrier++"); dump_stat(ticks.carrier);
+    dump_prefix("tr", "ticks in repair"); dump_stat(ticks.repair);
+    dump_prefix("dr", "damage repaired"); dump_stat(damage_repaired);
+    dump_prefix("wpf", "weap phaser fired"); dump_stat(weapons.phaser.fired);
+    dump_prefix("wph", "weap phaser hit"); dump_stat(weapons.phaser.hit);
+    dump_prefix("wpdi", "weap phaser damage inflicted"); dump_stat(weapons.phaser.damage.inflicted);
+    dump_prefix("wpdt", "weap phaser damage taken"); dump_stat(weapons.phaser.damage.taken);
+    dump_prefix("wtf", "weap torp fired"); dump_stat(weapons.torps.fired);
+    dump_prefix("wth", "weap torp hit"); dump_stat(weapons.torps.hit);
+    dump_prefix("wtd", "weap torp detted"); dump_stat(weapons.torps.detted);
+    dump_prefix("wts", "weap torp self detted"); dump_stat(weapons.torps.selfdetted);
+    dump_prefix("wtw", "weap torp hit wall"); dump_stat(weapons.torps.wall);
+    dump_prefix("wtdi", "weap torp damage inflicted"); dump_stat(weapons.torps.damage.inflicted);
+    dump_prefix("wtdt", "weap torp damage taken"); dump_stat(weapons.torps.damage.taken);
+    dump_prefix("wsf", "weap smack fired"); dump_stat(weapons.plasma.fired);
+    dump_prefix("wsh", "weap smack hit"); dump_stat(weapons.plasma.hit);
+    dump_prefix("wsp", "weap smack phasered"); dump_stat(weapons.plasma.phasered);
+    dump_prefix("wsw", "weap smack hit wall"); dump_stat(weapons.plasma.wall);
+    dump_prefix("wsdi", "weap smack damage inflicted"); dump_stat(weapons.plasma.damage.inflicted);
+    dump_prefix("wsdt", "weap smack damage taken"); dump_stat(weapons.plasma.damage.taken);
+    LineToConsole("SP_LTD test output ends\n");
+}
+
 void
 initialize_players(void)
 {
@@ -4793,7 +4901,7 @@
    unsigned char *data;
    int kills, pnum, packet_planets;
    struct planet_s_spacket *plpacket;
-   if(log_packets == 0) return;
+   if (log_packets == 0) return;
    switch ( packet[0] )
      {
        case SP_MESSAGE:
@@ -4877,13 +4985,13 @@
 		   ntohl(((struct plasma_spacket *) packet)->y) );
 	 break;
        case SP_WARNING      :                  /* like SP_MESG */
-	 fprintf(stderr,"\nS->C SP_WARNING\t");
+	 LineToConsole("\nS->C SP_WARNING\t");
 	 if (log_packets > 1)
 	   LineToConsole("  mesg=\"%s\",",
 		   ((struct warning_spacket *) packet)->mesg);
 	 break;
        case SP_MOTD         :                  /* line from .motd screen */
-	 fprintf(stderr,"\nS->C SP_MOTD\t");
+	 LineToConsole("\nS->C SP_MOTD\t");
 	 if (log_packets > 1)
 	   LineToConsole("  line=\"%s\",",
 		   ((struct motd_spacket *) packet)->line);
@@ -5223,7 +5331,7 @@
 						* request */
 	 LineToConsole("\nS->C SP_S_REPLY\t");
 	 if (log_packets > 1)
-	   fprintf(stderr,"  repl=%d, windside=%u, gwidth=%ld,",
+	   LineToConsole("  repl=%d, windside=%u, gwidth=%ld,",
 		   ((struct shortreply_spacket *) packet)->repl,
 		   ntohs(((struct shortreply_spacket *) packet)->winside),
 		   ntohl(((struct shortreply_spacket *) packet)->gwidth) );
@@ -5318,6 +5426,33 @@
 		   ntohl(((struct rank_spacket *) packet)->offense),
 		   ((struct rank_spacket *) packet)->cname );
 	 break;
+       case SP_LTD :
+	 LineToConsole("\nS->C SP_LTD\t");
+	 if (log_packets > 1)
+	 {
+	   LineToConsole(" version='%c', endian='%c', pad='%c',\n",
+		   ((struct ltd_spacket *) packet)->version,
+		   ((struct ltd_spacket *) packet)->endian,
+		   ((struct ltd_spacket *) packet)->pad );
+	   switch (((struct ltd_spacket *) packet)->version)
+	   {
+		case LTD_VERSION:
+		{
+		    struct ltd_stats *ltd = &(((struct ltd_spacket *)packet)->ltd);
+		    unsigned char *ptr = (unsigned char *) ltd;
+		    int i;
+
+		    for (i = 0; i < sizeof(struct ltd_stats); i++)
+		    {
+			if (i%20 == 0)
+			    LineToConsole("\n");
+			LineToConsole(" %02x ", ptr[i]);
+		    }
+		}
+		LineToConsole("\n");
+	    }
+	 }
+	 break;
 #ifdef SHORT_PACKETS
        case SP_S_TORP       :                  /* variable length torp * *
 						* packet */
@@ -5351,7 +5486,6 @@
 		       plpacket->armies,
 		       ntohs(plpacket->flags) );
 	   }
-	 fprintf(stderr,"\n");
 	 break;
        case SP_GPARAM       :
 	 LineToConsole("\nS->C SP_GPARAM\t");
@@ -5391,7 +5525,6 @@
                  LineToConsole("pnum = %d, kills = %d ",pnum, kills);
 	       }
 	   }
-	 fprintf(stderr,"\n");
 	 break;
        case SP_S_STATS      :                  /* see SP_STATS */
 	 LineToConsole("\nS->C SP_S_STATS\t");
@@ -5415,7 +5548,7 @@
 #endif
      default: 
        LineToConsole("\nS->C UNKNOWN\t");
-       if(log_packets > 1)
+       if (log_packets > 1)
 	 LineToConsole("  type=%d,",packet[0]);
      }
 #ifdef nodef /* #ifdef SHORT_PACKETS */

Index: data.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/data.c,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -d -r1.124 -r1.125
--- data.c	26 May 2009 02:18:17 -0000	1.124
+++ data.c	3 Jun 2009 02:42:55 -0000	1.125
@@ -761,6 +761,7 @@
 int F_why_dead_2 = 0;
 int F_auto_weapons = 0;
 int F_sp_rank = 0;
+int F_sp_ltd = 0;
 int F_terrain = 0;		/* paradise */
 int F_armies_shipcap = 0;	/* paradise */