static char *formatDosToAmiga_ShouldReturnFalseIfBatterNeedingOverflowHasPitchingStats_GivenAPlayersFile()
{
     fileplayer_s *players_file = buildFilePlayers();

     swapBatterStats( players_file );

     for ( int i = 0; i < TOTAL_PLAYERS; ++i )
     {
          int pos = nibble( players_file[i].position[0], n_High );

          if ( pos != fpos_Pitcher )
          {
               acc_bat_stats_s *batting = &(players_file[i].acc_stats.action.batting);

               int2byte( batting->acc_rbi, STAT_CAP_AMOUNT + 1 );
               int2byte( batting->acc_so,  STAT_CAP_AMOUNT + 1 );

               acc_pch_stats_s *pitching = &(players_file[i].acc_stats.simulated.pitching);

               int2word( pitching->acc_innings, 1 );
               int2word( pitching->acc_hits,    1 );

               break;
          }
     }

     assertEquals( bl_False, formatDosToAmiga( players_file ) );

     return NULL;
}
static char *formatDosToAmiga_ShouldMovePitcherActionGamesToSimulatedStarts_GivenAPlayersFile()
{
     fileplayer_s *players_file    = buildFilePlayers();
     int           expected_starts = 0;
     int           player_idx      = 0;

     swapBatterStats( players_file );

     for ( int i = 0; i < TOTAL_PLAYERS; ++i )
     {
          int pos = nibble( players_file[i].position[0], n_High );

          if ( pos == fpos_Pitcher )
          {
               acc_pch_stats_s *sim = &(players_file[i].acc_stats.simulated.pitching);
               acc_bat_stats_s *act = &(players_file[i].acc_stats.action.batting);

               expected_starts = byte2int( sim->acc_starts );
               player_idx      = i;

               int2byte( sim->acc_starts, byte2int( act->acc_games ) );
               int2byte( act->acc_games,  expected_starts            );

               break;
          }
     }

     assertEquals( bl_True, formatDosToAmiga( players_file ) );

     acc_pch_stats_s *sim = &(players_file[player_idx].acc_stats.simulated.pitching);

     assertEquals( expected_starts, byte2int( sim->acc_starts ) );

     return NULL;
}
static char *formatDosToAmiga_ShouldCapStrikeOutsAndMoveExcessFromActionToSimulated_GivenAPlayersFile()
{
     fileplayer_s *players_file = buildFilePlayers();
     int           player_idx   = 0;

     swapBatterStats( players_file );

     for ( int i = 0; i < TOTAL_PLAYERS; ++i )
     {
          int pos = nibble( players_file[i].position[0], n_High );

          if ( pos != fpos_Pitcher )
          {
               int2byte( players_file[i].acc_stats.action.batting.acc_so,    229 );
               int2byte( players_file[i].acc_stats.simulated.batting.acc_so,   0 );

               player_idx = i;

               break;
          }
     }

     formatDosToAmiga( players_file );

     assertEquals( 225, byte2int( players_file[player_idx].acc_stats.simulated.batting.acc_so ) );
     assertEquals(   4, byte2int( players_file[player_idx].acc_stats.action.batting.acc_so    ) );

     return NULL;
}
Exemple #4
0
boolean_e genPlayerIds( fileplayer_s *players_file )
{
     clearErrorMessage();

     for ( int player_id = 1, idx = 0; idx < TOTAL_PLAYERS; ++idx )
     {
          if ( EMPTY( players_file[idx].last_name ) ) continue;

          acc_player_id_s *id_info = &(players_file[idx].acc_stats.action.id_info);

          if ( word2int( id_info->player_id ) != 0 )
          {
               sprintf( error_message, "Player ID field already contains a number!" );

               return bl_False;
          }

          if ( byte2int( id_info->checksum ) != 0 )
          {
               sprintf( error_message, "Checksum field already contains a number!" );

               return bl_False;
          }

          int2word( id_info->player_id,               player_id   );
          int2byte( id_info->checksum,  calcChecksum( player_id ) );

          player_id++;
     }

     return bl_True;
}
size_t sn_cliet_ip_address(const char *ipaddress, SNAttribute *output) {
    in_addr_t ipaddr;
    u_char ip_bytes[4];
    
    ipaddr = ntohl(inet_addr(ipaddress));
    if (ipaddr == INADDR_NONE) {
        perror("ERROR:");
        return -1;
    }
    int2byte(ipaddr, ip_bytes);
    
    return generate_attribute(CLIENT_IPADDRESS_ID, ip_bytes, 4, output);
}
static boolean_e generateFilePlayer( const player_s *player, const int season, const int player_idx, fileplayer_s *players_file )
{
     int2word( players_file[player_idx].acc_stats.action.id_info.player_id,               player->player_id   );
     int2byte( players_file[player_idx].acc_stats.action.id_info.checksum,  calcChecksum( player->player_id ) );

     memcpy( players_file[player_idx].first_name,  player->first_name,      sizeof(players_file[player_idx].first_name)  );
     memcpy( players_file[player_idx].last_name,   player->last_name,       sizeof(players_file[player_idx].last_name)   );
     memcpy( players_file[player_idx].first_phoen, player->first_phoenetic, sizeof(players_file[player_idx].first_phoen) );
     memcpy( players_file[player_idx].last_phoen,  player->last_phoenetic,  sizeof(players_file[player_idx].last_phoen)  );

     termName( players_file[player_idx].first_name,  sizeof(players_file[player_idx].first_name)  );
     termName( players_file[player_idx].last_name,   sizeof(players_file[player_idx].last_name)   );
     termName( players_file[player_idx].first_phoen, sizeof(players_file[player_idx].first_phoen) );
     termName( players_file[player_idx].last_phoen,  sizeof(players_file[player_idx].last_phoen)  );

     int2byte( players_file[player_idx].year, player->rookie_season + YEAR_SEASON_OFFSET );

     if   ( player->player_type == pt_Pitcher ) { generatePitcher( player, season, &(players_file[player_idx]) ); }
     else                                       { generateBatter(  player, season, &(players_file[player_idx]) ); }

     return bl_True;
}
Exemple #7
0
boolean_e copyPlayerIds( fileplayer_s *players_file1, fileplayer_s *players_file2 )
{
     fileplayer_s   *matchingPlayer;


     clearErrorMessage();

     for ( int i = 0; i < TOTAL_PLAYERS; ++i )
     {
          if ( EMPTY( players_file1[i].last_name ) ) continue;

          if ( (matchingPlayer = findMatchingPlayer( &players_file1[i], players_file2 )) == NULL )
          {
               sprintf( error_message, "Player <%.*s, %.*s> not found!",
                       sizeof(players_file1[i].last_name),  players_file1[i].last_name,
                       sizeof(players_file1[i].first_name), players_file1[i].first_name );

               return bl_False;
          }

          acc_player_id_s *id_info1 = &(players_file1[i].acc_stats.action.id_info);
          acc_player_id_s *id_info2 = &(matchingPlayer->acc_stats.action.id_info);

          if ( word2int( id_info1->player_id ) != 0 )
          {
               sprintf( error_message, "Player ID field for <%.*s, %.*s> already contains a number!",
                       sizeof(players_file1[i].last_name),  players_file1[i].last_name,
                       sizeof(players_file1[i].first_name), players_file1[i].first_name );

               return bl_False;
          }

          if ( byte2int( id_info1->checksum ) != 0 )
          {
               sprintf( error_message, "Checksum field for <%.*s, %.*s> already contains a number!",
                       sizeof(players_file1[i].last_name),  players_file1[i].last_name,
                       sizeof(players_file1[i].first_name), players_file1[i].first_name );

               return bl_False;
          }

          int2word( id_info1->player_id, word2int( id_info2->player_id ) );
          int2byte( id_info1->checksum,  byte2int( id_info2->checksum  ) );
     }

     return bl_True;
}
char *calc_keepalive_data(time_t timestamp) {
    static char keepalive_data[64];
    u_char timebytes[4];
    u_char md5_result[16];
    mbedtls_md5_context md5;
    
    if (strlen(keepalive_data) == 0) {
        strcpy(keepalive_data, DEFAULT_KEEPALIVE_DATA);
    }
    
    int2byte((int)timestamp, timebytes);
    
    mbedtls_md5_init(&md5);
    mbedtls_md5_starts(&md5);
    mbedtls_md5_update(&md5, timebytes, 4);
    mbedtls_md5_update(&md5, (const u_char *)keepalive_data, strlen(keepalive_data));
    mbedtls_md5_finish(&md5, md5_result);
    
    byte2str(md5_result, 16, keepalive_data);
    return keepalive_data;
}
void Transfer::setBHAckUniqueID 	(int ackUniqueID 	) {
    m_bh_ackUniqueID 	= int2byte(ackUniqueID 	,8);
}
void Transfer::setBHAckIdentifier	(int ackIdentifier	) {
    m_bh_ackIdentifier	= int2byte(ackIdentifier,8);
}
void Transfer::setBHFlag 		(int flag 		) {
    m_bh_flag 	 	= int2byte(flag 	,8);
}
static void generateClosingPitcher( const player_s *player, const int season, fileplayer_s *players_file )
{
     pitcher_s      *pitcher  = player->details.pitching;
     filepitching_s *pitching = &(players_file->filestats.filepitching);

     filehand_e hand = mapHandedness( player->handedness );

     int speed   = adjustRating(  pitcher->speed,   season, player );
     int control = adjustRating(  pitcher->control, season, player );
     int fatigue =                pitcher->fatigue;

     players_file->position[0] = (fpos_Pitcher << 4) + hand;

     pitching->ratings[0] = (speed   << 4) +         control;
     pitching->ratings[1] = (fatigue << 4) + player->longevity;

     if   ( player->skin_tone == st_Dark ) int2byte( pitching->color, fc_Dark  );
     else                                  int2byte( pitching->color, fc_Light );

     int games = (rand() % 20) + 60;
     int era   = getValueForTwo( closer_earned_run_avg,   speed, control );
     int vsba  = getValueForTwo( closer_vs_batting_avg,   speed, control );
     int svpct = getValueForTwo( save_pct, speed, control );
     int innpg = (rand() % 30) + 100;
     int abpi  = getValueForTwo( at_bats_per_inn, speed, control );
     int sop9  = getValueForOne( so_per_9, speed );
     int bbp9  = getValueForOne( walks_per_9, control );
     int hrp9  = getValueForOne( hr_per_9, speed );

     int2word( players_file->real_avg, era );

     double dinn = (double)games * (double)innpg / 100.0;
     int    inn  = (int)floor( dinn ) * 10 + (rand() % 3);

     dinn  = (double)inn / 10.0;
     dinn += (((double)inn / 10.0) - dinn) / 3.0;

     int2byte( pitching->real_wins,   (rand() % 10) );
     int2byte( pitching->real_losses, (rand() % 10) );
     int2byte( pitching->real_games,  games         );
     int2byte( pitching->real_starts, 0             );
     int2byte( pitching->real_cg,     0             );
     int2byte( pitching->real_saves,  (int)round( (double)games * (double)svpct / 1000.0 ) );
     int2byte( pitching->real_fa,     1 );
     int2byte( pitching->real_er,     (int)round( dinn * (double)era / 900.0 ) ); // era is ERA * 100
     int2byte( pitching->vl_hr,       (int)round( dinn * (double)hrp9 / 900.0 ) ); // hrp9 is HR/9 * 100
     int2byte( pitching->vl_bb,       (int)round( dinn * (double)bbp9 / 90.0 ) ); // bbp9 is BB/9 * 10

     double dvsba = (double)vsba / 1000.0;
     int    ab    = (int)round( dinn * ((float)abpi / 100.0) );
     int    hits  = (int)round( dvsba * (float)ab );
     int    so    = (int)round( dinn * (double)sop9 / 90.0 ); // sop9 is SO/9 * 10

     int2word( pitching->real_inn,  inn  );
     int2word( pitching->vl_ab,     ab   );
     int2word( pitching->vl_hits,   hits );
     int2word( pitching->vl_so,     so   );
}
void Transfer::setBHSessionID 	 	(int sessionID 		) {
    m_bh_sessionID	= int2byte(sessionID	,8);
}
static void generateStartingPitcher( const player_s *player, const int season, fileplayer_s *players_file )
{
     pitcher_s      *pitcher  = player->details.pitching;
     filepitching_s *pitching = &(players_file->filestats.filepitching);

     filehand_e hand = mapHandedness( player->handedness );

     int speed   = adjustRating(  pitcher->speed,   season, player );
     int control = adjustRating(  pitcher->control, season, player );
     int fatigue = adjustFatigue( pitcher->fatigue, season, player );

     players_file->position[0] = (fpos_Pitcher << 4) + hand;

     pitching->ratings[0] = (speed   << 4) +         control;
     pitching->ratings[1] = (fatigue << 4) + player->longevity;

     if   ( player->skin_tone == st_Dark ) int2byte( pitching->color, fc_Dark  );
     else                                  int2byte( pitching->color, fc_Light );

     int games = (rand() % 15) + 30;
     int era   = getValueForTwo( earned_run_avg,   speed, control );
     int vsba  = getValueForTwo( vs_batting_avg,   speed, control );
     int innpg = getValueForTwo( innings_per_game, speed, control );
     int wpct  = getValueForTwo( win_pct,          speed, control );
     int abpi  = getValueForTwo( at_bats_per_inn,  speed, control );
     int dpct  = innpg + 200;
     int maxcg = (int)round( (double)((games * innpg) - (games * (innpg - 200))) / (double)(1100 - innpg) );
     int cpct  = getValueForOne( cg_pct, fatigue );
     int sop9  = getValueForOne( so_per_9, speed );
     int bbp9  = getValueForOne( walks_per_9, control );
     int hrp9  = getValueForOne( hr_per_9, speed );
     int decisions = (int)round((float)games * ((float)dpct / 1000.0) );
     int fat_fact = getFatigueFactor( fatigue );

     if ( fat_fact < innpg ) innpg = fat_fact;

     int2word( players_file->real_avg, era );

     double dinn = (double)games * (double)innpg / 100.0;
     int    inn  = (int)floor( dinn ) * 10 + (rand() % 3);

     dinn  = (double)inn / 10.0;
     dinn += (((double)inn / 10.0) - dinn) / 3.0;

     int2byte( pitching->real_wins,   (int)ceil( (double)decisions * (double)wpct / 1000.0 ) );
     int2byte( pitching->real_losses, (int)ceil( (double)decisions * (1.0 - (double)wpct / 1000.0) ) );
     int2byte( pitching->real_games,  games );
     int2byte( pitching->real_starts, games );
     int2byte( pitching->real_cg,     (int)round( (double)maxcg * (double)cpct / 100.0 ) );

     int2byte( pitching->real_fa, 1 );
     int2byte( pitching->real_er, (int)round( dinn * (double)era / 900.0 ) ); // era is ERA * 100
     int2byte( pitching->vl_hr,   (int)round( dinn * (double)hrp9 / 900.0 ) ); // hrp9 is HR/9 * 100
     int2byte( pitching->vl_bb,   (int)round( dinn * (double)bbp9 / 90.0 ) ); // bbp9 is BB/9 * 10

     double dvsba = (double)vsba / 1000.0;
     int    ab    = (int)round( dinn * ((float)abpi / 100.0) );
     int    hits  = (int)round( dvsba * (float)ab );
     int    so    = (int)round( dinn * (double)sop9 / 90.0 ); // sop9 is SO/9 * 10

     int2word( pitching->real_inn,  inn  );
     int2word( pitching->vl_ab,     ab   );
     int2word( pitching->vl_hits,   hits );
     int2word( pitching->vl_so,     so   );
}
void Transfer::setBHAckDataSize 	(int ackDataSize 	) {
    m_bh_ackDataSize 	= int2byte(ackDataSize 	,16);
}
QByteArray Transfer::incAckIdentifier(int inc) {
    m_myAckIdentifier += inc;
    return int2byte(m_myAckIdentifier, 8);
}
void Transfer::setBHIdentifier 	 	(int identifier 	) {
    m_bh_identifier 	= int2byte(identifier 	,8);
}
void Transfer::setBHDataOffset 	 	(int dataOffset 	) {
    m_bh_dataOffset 	= int2byte(dataOffset 	,16);
}
void Transfer::setBHTotalDataSize	(int totalDataSize 	) {
    m_bh_totalDataSize 	= int2byte(totalDataSize,16);
}
size_t sn_keepalive_time(time_t timestamp, SNAttribute *output) {
    u_char timebytes[4];
    int2byte((int)timestamp, timebytes);
    
    return generate_attribute(KEEPALIVE_TIME_ID, timebytes, 4, output);
}
void Transfer::setBHMessageLength	(int messageLength 	) {
    m_bh_messageLength	= int2byte(messageLength,8);
}
Exemple #22
0
//
//string Sdr::loadCdx() {
//	string cpath = this->cdxpath();
//	if (!fexist(cpath.c_str())) {
//		return "cdx file not exist";
//	}
//	fstream cfs(cpath.c_str(), ios::in);
//	if (!cfs.is_open()) {
//		cfs.close();
//		return "open cdx file error:" + cpath;
//	}
//	char cbuf[100];
//	cfs.read(cbuf, CDX_HSIZE);
//	int ccount = byte2int(cbuf);
//	int offs_len = byte2int(cbuf + 4);
//	int csize = byte2int(cbuf + 8);
//	while (!cfs.eof()) {
//		cfs.read(cbuf, ccount + 4);
//		int esize = byte2int(cbuf + ccount);
//		cout << cbuf << "," << esize << endl;
//		char ibuf[offs_len];
//		for (int i = 0; i < esize; i++) {
//			cfs.read(ibuf, offs_len);
//		}
//	}
//	cout << csize << endl;
//	return "";
//}
//
string Sdr::createEdx(int ecount, bool oft64) {
    this->loadDictInfo();
	string epath = this->edxpath();
	string ipath = this->idxpath();
	if (fexist(epath.c_str())) {
		return "edx file already exist";
	}
	fstream ifs(ipath.c_str(), ios::in);
	if (!ifs.is_open()) {
		ifs.close();
		return "open .idx file error:" + ipath;
	}
	fstream efs(epath.c_str(), ios::out);
	if (!efs.is_open()) {
		efs.close();
		return "open edx file error:" + epath;
	}
	string sbuf;
	int offs_len = oft64 ? 8 : 4;
	int cbuf_len = ecount + offs_len;
	int rofts = this->lessVersion("3.0.0") ? 4 : 8;
	char cbuf[cbuf_len];
	memset(cbuf, 0, cbuf_len);
	char tbuf[16];
	long offset = 0;
	int esize = 0;
	int ssize = 0;
	long loft = 0;
	//
	efs.seekp(12);
	//read the first line.
	getline(ifs, sbuf, '\0');
	memset(cbuf, 0, cbuf_len);
	ssize = sbuf.length();
	memcpy(cbuf, sbuf.c_str(), ssize < ecount ? ssize : ecount);
	ifs.read(tbuf, rofts + 4);
	while (1) {
		loft = ifs.tellg();
		sbuf.clear();
		getline(ifs, sbuf, '\0');
		ifs.read(tbuf, rofts + 4);
		if (ccmp_c(cbuf, sbuf.c_str(), ecount) == 0 && !ifs.eof()) {
			continue;
		}
		if (oft64) {
			long2byte(offset, cbuf + ecount);
		} else {
			int2byte(offset, cbuf + ecount);
		}
		efs.write(cbuf, cbuf_len);
//		cout << cbuf << endl;
		//
		memset(cbuf, 0, cbuf_len);
		ssize = sbuf.length();
		memcpy(cbuf, sbuf.c_str(), ssize < ecount ? ssize : ecount);
		offset = loft;
		esize++;
		if (ifs.eof()) {
			break;
		}
	}
	int2byte(ecount, tbuf);
	int2byte(offs_len, tbuf + 4);
	int2byte(esize, tbuf + 8);
	efs.seekp(0);
	efs.write(tbuf, 12);
	efs.close();
	ifs.close();
	return "";
}
static void generateBatter( const player_s *player, const int season, fileplayer_s *players_file )
{
     batter_s      *batter  = player->details.batting;
     filebatting_s *batting = &(players_file->filestats.filebatting);

     filehand_e     hand      = mapHandedness( player->handedness );
     fileposition_e primary   = mapPosition( batter->primary_position   );
     fileposition_e secondary = mapPosition( batter->secondary_position );

     int arm       = adjustRating( batter->arm,       season, player );
     int running   = adjustRating( batter->running,   season, player );
     int range     = adjustRating( batter->range,     season, player );
     int power     = adjustRating( batter->power,     season, player );
     int bunt      = adjustRating( batter->bunt,      season, player );
     int hit_n_run = adjustRating( batter->hit_n_run, season, player );

     players_file->position[0] = (primary << 4) + secondary;

     batting->ratings[0] = (hand    << 4) +         arm;
     batting->ratings[1] = (running << 4) +         range;
     batting->ratings[2] = (power   << 4) + player->longevity;
     batting->ratings[3] = (bunt    << 4) +         hit_n_run;

     if   ( player->skin_tone == st_Dark ) int2byte( batting->color, fc_Dark  );
     else                                  int2byte( batting->color, fc_Light );

     int games = (rand() % 25) + 120;
     int ab    = (int)round( (double)games * ab_per_game );
     int po    = (int)round( (double)games * ((double)getValueForTwo( put_outs, primary, range ) / 100.0) );
     int as    = (int)round( (double)games * ((double)getValueForTwo( assists, primary, arm ) / 100.0) );
     int ba    = getValueForTwo( batting_avg, power, hit_n_run );
     int soa   = getValueForOne( strikeout_avg, hit_n_run );
     int fa    = getValueForTwo( fielding_avg, range, arm ) + 9000;
     int fa2   = roll( 9500, fa - 9500 );
     int hits  = (int)round( (double)ab * (double)ba  / 1000.0 );
     int so    = (int)round( (double)ab * (double)soa / 1000.0 );
     int err   = (int)round( (double)(po + as) / (double)fa * 10000.0 ) - (po + as);

     if ( err < 0 ) err = 0;

     hits += getValueForOne( extra_hits, running );

     int2word( players_file->real_avg, ba );

     int2byte( batting->real_games, games );
     int2byte( batting->real_sb,    getValueForOne( steals, running ) );
     int2word( batting->vl_ab,      ab   );
     int2word( batting->vl_hits,    hits );
     int2byte( batting->vl_2b,      getValueForOne( doubles, power ) );
     int2byte( batting->vl_3b,      getValueForTwo( triples, power, running ) );
     int2byte( batting->vl_hr,      getValueForOne( home_runs, power ) );
     int2byte( batting->vl_bb,      getValueForOne( walks, hit_n_run ) );
     int2byte( batting->vl_so,      so );
     int2byte( batting->real_runs,  batting->vl_hr[0] + getValueForOne( runs, running ) );
     int2byte( batting->real_rbi,   batting->vl_hr[0] + getValueForOne( rbi, power ) );
     int2word( batting->real_po,    po   );
     int2word( batting->real_as,    as   );
     int2byte( batting->real_err,   err );
     int2byte( batting->real_fa2,   (int)round( (10000.0 - (double)fa2) / 10.0 ) );
}