コード例 #1
0
ファイル: dd.c プロジェクト: haxworx/misc
int Connect(char *hostname, int port)
{
        int sock;
        struct hostent *host;
        struct sockaddr_in host_addr;
        sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock < 0)
                Scream("socket %s\n", strerror(errno));

        host = gethostbyname(hostname);
        if (host == NULL)
                Scream("gethostbyname");

        host_addr.sin_family = AF_INET;
        host_addr.sin_port = htons(port);
        host_addr.sin_addr = *((struct in_addr *) host->h_addr);
        memset(&host_addr.sin_zero, 0, 8);

        int status = connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr));
        if (status == 0) {
                return sock;
        }

        return 0;
}
コード例 #2
0
ファイル: dd.c プロジェクト: haxworx/misc
char *FileFromURL(char *addr)
{
	char *str = NULL;
	
	char *p = addr;
	if (!p)
		Scream("broken file path");
	
	str = strstr(addr, "http://");
	if (str) {
		str += strlen("http://");
		char *p = strchr(str, '/');
		if (p) {
			return p;
		}
	}

	if (!p)
		Scream("FileFromURL");
	
	return p;
}
コード例 #3
0
ファイル: dd.c プロジェクト: haxworx/misc
char *HostFromURL(char *addr)
{
	char *str = strstr(addr, "http://");
	if (str) {
		addr += strlen("http://"); 
		char *end = strchr(addr, '/');
		*end = '\0';
		return addr;
	}

	Scream("Invalid URL");

	return NULL;
}
コード例 #4
0
ファイル: scientist.cpp プロジェクト: fmoraw/SpiritOfHalfLife
void CScientist :: RunTask( Task_t *pTask )
{
	switch ( pTask->iTask )
	{
	case TASK_RUN_PATH_SCARED:
		if ( MovementIsComplete() )
			TaskComplete();
		if ( RANDOM_LONG(0,31) < 8 )
			Scream();
		break;

	case TASK_MOVE_TO_TARGET_RANGE_SCARED:
		{
			if ( RANDOM_LONG(0,63)< 8 )
				Scream();

			if ( m_hEnemy == NULL )
			{
				TaskFail();
			}
			else
			{
				float distance;

				distance = ( m_vecMoveGoal - pev->origin ).Length2D();
				// Re-evaluate when you think your finished, or the target has moved too far
				if ( (distance < pTask->flData) || (m_vecMoveGoal - m_hTargetEnt->pev->origin).Length() > pTask->flData * 0.5 )
				{
					m_vecMoveGoal = m_hTargetEnt->pev->origin;
					distance = ( m_vecMoveGoal - pev->origin ).Length2D();
					FRefreshRoute();
				}

				// Set the appropriate activity based on an overlapping range
				// overlap the range to prevent oscillation
				if ( distance < pTask->flData )
				{
					TaskComplete();
					RouteClear();		// Stop moving
				}
				else if ( distance < 190 && m_movementActivity != ACT_WALK_SCARED )
					m_movementActivity = ACT_WALK_SCARED;
				else if ( distance >= 270 && m_movementActivity != ACT_RUN_SCARED )
					m_movementActivity = ACT_RUN_SCARED;
			}
		}
		break;

	case TASK_HEAL:
		if ( m_fSequenceFinished )
		{
			TaskComplete();
		}
		else
		{
			if ( TargetDistance() > 90 )
				TaskComplete();
			pev->ideal_yaw = UTIL_VecToYaw( m_hTargetEnt->pev->origin - pev->origin );
			ChangeYaw( pev->yaw_speed );
		}
		break;
	default:
		CTalkMonster::RunTask( pTask );
		break;
	}
}
コード例 #5
0
ファイル: scientist.cpp プロジェクト: fmoraw/SpiritOfHalfLife
void CScientist :: StartTask( Task_t *pTask )
{
	switch( pTask->iTask )
	{
	case TASK_SAY_HEAL:
//		if ( FOkToSpeak() )
		Talk( 2 );
		m_hTalkTarget = m_hTargetEnt;
		PlaySentence( "SC_HEAL", 2, VOL_NORM, ATTN_IDLE );

		TaskComplete();
		break;

	case TASK_SCREAM:
		Scream();
		TaskComplete();
		break;

	case TASK_RANDOM_SCREAM:
		if ( RANDOM_FLOAT( 0, 1 ) < pTask->flData )
			Scream();
		TaskComplete();
		break;

	case TASK_SAY_FEAR:
		if ( FOkToSpeak() )
		{
			Talk( 2 );
			m_hTalkTarget = m_hEnemy;
			if ( m_hEnemy->IsPlayer() )
				PlaySentence( "SC_PLFEAR", 5, VOL_NORM, ATTN_NORM );
			else
				PlaySentence( "SC_FEAR", 5, VOL_NORM, ATTN_NORM );
		}
		TaskComplete();
		break;

	case TASK_HEAL:
		m_IdealActivity = ACT_MELEE_ATTACK1;
		break;

	case TASK_RUN_PATH_SCARED:
		m_movementActivity = ACT_RUN_SCARED;
		break;

	case TASK_MOVE_TO_TARGET_RANGE_SCARED:
		{
			if ( (m_hTargetEnt->pev->origin - pev->origin).Length() < 1 )
				TaskComplete();
			else
			{
				m_vecMoveGoal = m_hTargetEnt->pev->origin;
				if ( !MoveToTarget( ACT_WALK_SCARED, 0.5 ) )
					TaskFail();
			}
		}
		break;

	default:
		CTalkMonster::StartTask( pTask );
		break;
	}
}
コード例 #6
0
ファイル: dd.c プロジェクト: haxworx/misc
int main(int argc, char **argv)
{
	int i;
	unsigned long bs = CHUNK;
	char *infile = argv[1];
	int get_from_web = 0;

	for (i = 0; i < argc; i++) {
		if (0 == strcmp(argv[i], "-bs")) {
			if (argv[i + 1] != NULL)
				bs = atoi(argv[i + 1]);
				i++;
		}
		if (0 == strcmp(argv[i], "-h") || ! strncmp(argv[i], "--h", 3)) 
			Usage();
	}

	if (argc < 3)
		Usage();

	if (!strncmp("http://", infile, 7)) 
		get_from_web = 1;

	int in_fd, out_fd, sock;
	int length = 0;
	
	if (get_from_web) {
		char *filename = strdup(FileFromURL(infile));
		char *address = strdup(HostFromURL(infile));
		if (filename && address) {
			sock = in_fd = Connect(address, 80);	
			length = GetHeaders(sock, address, filename);	
		} else
			Scream("MacBorken URL");
	} else {
		in_fd = open(argv[1], O_RDONLY, 0666);
		if (in_fd < 0)
			Scream(strerror(errno));
	}

	out_fd = open(argv[2], O_WRONLY | O_CREAT, 0666);
	if (out_fd < 0)
		Scream(strerror(errno));

	char buf[bs];

	memset(buf, 0, bs);
	
	ssize_t chunk = 0;
	ssize_t bytes = 0;

	struct stat fstats;
	stat(argv[1], &fstats);
	if (!length)
		length = fstats.st_size;
	int percent = length / 100;	

	int total = 0;
	read(in_fd, buf, 1); // hack

	do {
		bytes = read(in_fd, buf, bs);
		if (bytes <= 0)
			break;

		chunk = bytes;
		
		while (chunk) {
			ssize_t count = write(out_fd, buf, chunk);
			if (count <= 0)
				break;

			chunk -= count;
		}

		total += bytes;
		
		int current = total  / percent;
		if (current > 100) current = 100;
		printf("                                                    \r");
		printf("%d%% %d bytes of %d bytes", current, total, length);
		memset(buf, 0, bytes); // faster
	} while (length > total);

	printf("\r\ndone!\n");
	
	close(out_fd);
	close(in_fd);

	return EXIT_SUCCESS;
}