Exemple #1
0
static int parse_algorithms(const char *algos, struct list *list)
{
	static const char *delim = ",";
	size_t len;
	char *saveptr;
	char *local;
	char *a;
	int i = 0;

	/* make local copy of algos string */
	len = strlen(algos);
	local = alloca(len + 1);
	strcpy(local, algos);

	/* tokenize into list */
	a = strtok_r(local, delim, &saveptr);
	while (a) {
		list_add_back(list, strdup(a));
		a = strtok_r(NULL, delim, &saveptr);
		i++;
	}

	if (i == 0) {
		fprintf(stderr, "%s: no algorithms provided in run control\n",
			progname);
		return -1;
	}

	return 0;
}
Exemple #2
0
void tween_create(entity* ent,
		int dx, 
		int dy, 
		double dSX, 
		double dSY, 
		double dR,
		int time,
		int delay,
		double (*easing)(double),
		void (*onComplete)(entity*))
{
	tween* t = (tween*)malloc(sizeof(tween));	

	// figure out what object we are tweening
	
	t->sx = ent->x;
	t->sy = ent->y;
	t->dx = dx - t->sx;
	t->dy = dy - t->sy;
	
	if (ent->t == SPRITE)
	{
		sprite* s = (sprite*)(ent);
		t->sScaleX = s->scaleX;
		t->sScaleY = s->scaleY;
		t->sRotation = s->rotation;
	
		t->dScaleX = dSX - t->sScaleX;
		t->dScaleY = dSY - t->sScaleY;
		t->dRotation = dR - t->sRotation;
	}
	
	// magic 0.9 :)
	t->delay = delay / (1000 / 60) * 0.9;
	t->time = time / (1000 / 60) * 0.9;
	t->elapsed = 0;
	t->obj = ent;
	
	t->easing = NULL;
	t->easing = easing;	

	t->onComplete = onComplete;

	list_add_back(&tweens, (void*)t);
}
Exemple #3
0
static struct inode *parse_dir(struct id_entry *dir, void *disk)
{
    if (dir->type != ID_TYPE_DIR) {
        panic("Tried to parse %s as a dir, but it's a file.\n", (char*)id_get(dir, name, disk));
    }

    dbg_vprintf(DBG_FS, "creating dir %s\n", (char*)id_get(dir, name, disk));

    struct inode *ino = new_inode(dir, disk);
    ino->flags = FS_DIR;
    list_t *entries = list_create();
    ino->impl = (dword)entries;

    if (id_get(dir, count, disk) > 0) {
        struct id_entry *entry = id_get(dir, content, disk);

        while (entry) {
            struct inode *e = NULL;
            if (entry->type == ID_TYPE_FILE) {
                e = parse_file(entry, disk);
            }
            else if (entry->type == ID_TYPE_DIR) {
                e = parse_dir(entry, disk);
            }
            else {
                panic("Invalid type: %d\n", entry->type);
            }

            list_add_back(entries, e);

            entry = id_get(entry, next, disk);
        }
    }

    dbg_vprintf(DBG_FS, "dir done!\n");

    return ino;
}
Exemple #4
0
static int scan_year(struct scan_state *ss)
{
	DIR *root;
	struct dirent ent;
	struct dirent *result;
	int scan_result;
	int num_weeks = 0;
	int i;

	assert(ss->begin_week != WEEK_ID_BEGIN);

	/* create path to year directory in db */
	snprintf(ss->pathbuf, DB_MAX_PATH, "%s/%s/%d",
		 ss->state->rc.data_dir, ss->state->rc.sport, ss->year);
	ss->pathbuf[DB_MAX_PATH-1] = '\0';

	/* open the year directory for reading */
	root = opendir(ss->pathbuf);
	if (!root) {
		fprintf(stderr, "%s: error reading dir '%s': %s\n",
			progname, ss->pathbuf, strerror(errno));
		return -1;
	}

	/* check each entry in the dir */
	while (readdir_r(root, &ent, &result) == 0) {
		if (!result)
			break;

		/* detect if valid week and add to filenames */
		scan_result = scan_week(ss, result->d_name);
		if (scan_result < 0) {
			closedir(root);
			return -2;
		} else if (scan_result == 0) {
			num_weeks++;
		}
	}

	closedir(root);

	/* update the end value since we didn't know it coming in */
	if (ss->end_week == WEEK_ID_END)
		ss->end_week = ss->last_week;

	/* make sure that there are no holes in the data */
	if (num_weeks != (ss->end_week - ss->begin_week + 1)) {
		fprintf(stderr, "%s: missing data in '%s/%s/%d'; expected %d weeks: %d-%d\n",
			progname,
			ss->state->rc.data_dir,
			ss->state->rc.sport,
			ss->year,
			ss->end_week - ss->begin_week + 1,
			ss->begin_week,
			ss->end_week);
		return -1;
	}

	/* finally, add the files to list */
	for (i = 0; i < num_weeks; i++)
		list_add_back(&ss->state->db->game_files, ss->filenames[i]);

	return 0;
}
Exemple #5
0
sce_buffer_ctxt_t *sce_create_ctxt_from_buffer(scetool::u8 *scebuffer)
{
	sce_buffer_ctxt_t *res;

	if((res = (sce_buffer_ctxt_t *)malloc(sizeof(sce_buffer_ctxt_t))) == NULL)
		return NULL;

	memset(res, 0, sizeof(sce_buffer_ctxt_t));

	res->scebuffer = scebuffer;
	res->mdec = FALSE;

	//Set pointer to SCE header.
	res->sceh = (sce_header_t *)scebuffer;
	_es_sce_header(res->sceh);

	//Set pointers to file type specific headers.
	switch(res->sceh->header_type)
	{
		case SCE_HEADER_TYPE_SELF:
		{
			//SELF header.
			res->self.selfh = (self_header_t *)(res->scebuffer + sizeof(sce_header_t));
			_es_self_header(res->self.selfh);

			//Application info.
			res->self.ai = (app_info_t *)(res->scebuffer + res->self.selfh->app_info_offset);
			_es_app_info(res->self.ai);

			//Section infos.
			res->self.si = (section_info_t *)(res->scebuffer + res->self.selfh->section_info_offset);

			//SCE version.
			if(res->self.selfh->sce_version_offset != NULL)
			{
				res->self.sv = (sce_version_t *)(res->scebuffer + res->self.selfh->sce_version_offset);
				_es_sce_version(res->self.sv);
			}
			else
				res->self.sv = 0;

			//Get pointers to all control infos.
			scetool::u32 len = (scetool::u32)res->self.selfh->control_info_size;
			if(len > 0)
			{
				scetool::u8 *ptr = res->scebuffer + res->self.selfh->control_info_offset;
				res->self.cis = list_create();

				while(len > 0)
				{
					control_info_t *tci = (control_info_t *)ptr;
					_es_control_info(tci);
					ptr += tci->size;
					len -= tci->size;
					list_add_back(res->self.cis, tci);
				}
			}
			else
				res->self.cis = NULL;
		}
		break;
	case SCE_HEADER_TYPE_RVK:
		//TODO
		break;
	case SCE_HEADER_TYPE_PKG:
		//TODO
		break;
	case SCE_HEADER_TYPE_SPP:
		//TODO
		break;
	default:
		free(res);
		return NULL;
		break;
	}

	//Set pointers to metadata headers.
	res->metai = (metadata_info_t *)(scebuffer + sizeof(sce_header_t) + res->sceh->metadata_offset);
	res->metah = (metadata_header_t *)((scetool::u8 *)res->metai + sizeof(metadata_info_t));
	res->metash = (metadata_section_header_t *)((scetool::u8 *)res->metah + sizeof(metadata_header_t));

	return res;
}
Exemple #6
0
void engine_addEntity(entity* data)
{
	list_add_back(&entities, (void*)data);
}