Esempio n. 1
0
void ext2_disk_read_block(uint32_t block_no, uint8_t *buf) {
	if (!block_no) return;
	spin_lock(&lock);
	int oldest = -1;
	uint32_t oldest_age = UINT32_MAX;
	for (uint32_t i = 0; i < CACHEENTRIES; ++i) {
		if (DC[i].block_no == block_no) {
			DC[i].last_use = ext2_time();
			memcpy(buf, &DC[i].block, BLOCKSIZE);
			spin_unlock(&lock);
			return;
		}
		if (DC[i].last_use < oldest_age) {
			oldest = i;
			oldest_age = DC[i].last_use;
		}
	}

	for (uint32_t i = 0; i < BLOCKSIZE / SECTORSIZE; ++i) {
		ide_read_sector(DISK_PORT, 0, btos(block_no) + i, (uint8_t *)((uint32_t)&(DC[oldest].block) + SECTORSIZE * i));
	}

	if (DC[oldest].dirty) {
		ext2_flush_dirty(oldest);
	}
	memcpy(buf, &DC[oldest].block, BLOCKSIZE);
	DC[oldest].block_no = block_no;
	DC[oldest].last_use = ext2_time();
	DC[oldest].dirty = 0;
	spin_unlock(&lock);
}
Esempio n. 2
0
void ext2_flush_dirty(uint32_t ent_no) {
	// write out to the disk
	for (uint32_t i = 0; i < BLOCKSIZE / SECTORSIZE; ++i) {
		ide_write_sector_retry(DISK_PORT, 0, btos(DC[ent_no].block_no) + i, (uint8_t *)((uint32_t)DC[ent_no].block + SECTORSIZE * i));
	}
	DC[ent_no].dirty = 0;
}
Esempio n. 3
0
void Conf_SaveConfig()
{
	configfile = fopen("config.txt", "w");

	fprintf(configfile,"useTraceFunc :: %s\r\n", btos(useTraceFunc));
	fprintf(configfile,"useBrushFunc :: %s\r\n", btos(useBrushFunc));
	fprintf(configfile,"tickRate :: %d\r\n", tickRate);
	fprintf(configfile,"quakeDir :: %s\r\n", quakeDir);
	fprintf(configfile,"ttAverageFreq :: %d\r\n", ttAverageFreq);
	fprintf(configfile,"ttFileName :: %s\r\n", ttFileName);

	fclose(configfile);

	// clamp values here.
	clampint(&tickRate, MIN_TICKRATE, MAX_TICKRATE);
}
Esempio n. 4
0
void ext2_flush_dirty(uint32_t ent_no) {
	// write out to the disk
	for (uint32_t i = 0; i < BLOCKSIZE / SECTORSIZE; ++i) {
		ide_write_sector(DISK_PORT, 0, btos(DC[ent_no].block_no) + i, (uint8_t *)((uint32_t)&DC[ent_no].block + SECTORSIZE * i));
		//XXX: a hack? how about making ide_write_sector() blocking?
		//  XXX: ^ ide_write_sector() IS blocking, we don't get notified properly of finishes to write calls
		timer_wait(10);
	}
	DC[ent_no].dirty = 0;
}
	void Entity::save(ofstream & myFile)
	{
		if (parent)
		{
			myFile << "Entity.addParent(" << getGUID() << " , " << parent->getGUID() << ") \n";
		}

		myFile << "Entity.setActive(" << getGUID() << " , " << btos(active) << ") \n";

		for (auto&x : tags)
		{
			myFile << "Entity.setTag(" << getGUID() << " , '" << x << "') \n";
		}


		for (auto &x : containerC)
		{
			x->save(myFile, guid);
		}
	}
Esempio n. 6
0
int main(void)
{
	const int iter = get_iter(0, 1);
	const bool oth_first = CHECK_FLAG(iter, 1);
	diag("oth_first=%s", btos(oth_first));

	plan_tests(1);

	sem_t *sems[] = { &goahead_sem, &done_sem };
	for(int i=0; i < NUM_ELEMENTS(sems); i++) {
		int n = sem_init(sems[i], 0, 0);
		if(n != 0) {
			perror("sem_init");
			abort();
		}
	}

	int *data = malloc(sizeof(*data) * 2);
	data[0] = 100;
	data[1] = 100;

	pthread_t other;
	int n = pthread_create(&other, NULL, &other_fn, data);
	if(n != 0) {
		perror("pthread_create");
		abort();
	}

	int status;
	bool posted = false;
	do {
		status = xn_begin();
		diag("main txn started");
		int v0 = xn_read_int(&data[0]), v1 = xn_read_int(&data[1]);
		if(oth_first && !posted) {
			sem_post(&goahead_sem);
			sem_wait(&done_sem);
			posted = true;
		}
		v1 -= 200;
		if(v0 + v1 < 0) {
			diag("invariant broken in main");
			break;
		}
		xn_put(&data[1], v1);
	} while(status = xn_commit(), XN_RESTART(status));
	xn_abort(status);
	diag("main txn done");
	if(!posted) {
		assert(!oth_first);
		sem_post(&goahead_sem);
		sem_wait(&done_sem);
	}

	void *retval = NULL;
	n = pthread_join(other, &retval);
	if(n != 0) {
		perror("pthread_join");
		abort();
	}

	if(!ok1(data[0] + data[1] >= 0)) {
		diag("data[0]=%d, data[1]=%d", data[0], data[1]);
	}

	free(data);
	for(int i=0; i < NUM_ELEMENTS(sems); i++) sem_destroy(sems[i]);
	return exit_status();
}
Esempio n. 7
0
void MainWindow::on_actionSave_triggered()
{
    QFile file(QFileDialog::getSaveFileName(this, tr("Save File"), "prop", tr("Prop File (*.fbxgui)")));
    file.open(QIODevice::WriteOnly);
    QTextStream out(&file);
        out<<ui->input_folder->text()+"\n";
        out<<ui->output_folder->text()+"\n";
        out<<btos(ui->flipV->isChecked())+"\n";
        out<<btos(ui->packC->isChecked())+"\n";
        out<<btos(ui->showLog->isChecked())+"\n";
        out<<QString::number(ui->maxM->value())+"\n";
        out<<QString::number(ui->maxB->value())+"\n";
        out<<QString::number(ui->maxW->value())+"\n";
        out<<btos(ui->fbx->isChecked())+"\n";
        out<<btos(ui->g3db->isChecked())+"\n";
        out<<btos(ui->g3dj->isChecked())+"\n";
        out<<ui->sinput_folder->text()+"\n";
        out<<ui->soutput_folder->text()+"\n";
        out<<btos(ui->sflipV->isChecked())+"\n";
        out<<btos(ui->spackC->isChecked())+"\n";
        out<<btos(ui->sshowLog->isChecked())+"\n";
        out<<QString::number(ui->smaxM->value())+"\n";
        out<<QString::number(ui->smaxB->value())+"\n";
        out<<QString::number(ui->smaxW->value())+"\n";
        out<<btos(ui->sfbx->isChecked())+"\n";
        out<<btos(ui->sg3db->isChecked())+"\n";
        out<<btos(ui->sg3dj->isChecked());
        file.close();
}