Beispiel #1
0
void tex::make_accent ()
	{
	fnt	f;
	qcell	i;
	ptr	p, q, r;
	scal	a, h, w, x;
	float	s, t;
	scal	delta;

	scan_char_num();
	f = cur_font;
	p = new_character(f, cur_val);
	if (p != null) {
		x = x_height(f);
		s = (float) slant(f) / 65536.0;
		a = char_width(f, char_info(f, character(p)));
		do_assignments();
		q = null;
		f = cur_font;
		if (cur_cmd == LETTER
		|| cur_cmd == OTHER_CHAR
		|| cur_cmd ==  CHAR_GIVEN) {
			q = new_character(f, cur_chr);
		} else if (cur_cmd ==  CHAR_NUM) {
			scan_char_num();
			q = new_character(f, cur_val);
		} else {
			back_input();
		}
		if (q != null) {
			t = (float) slant(f) / 65536.0;
			i = char_info(f, character(q));
			w = char_width(f, i); 
			h = char_height(f, height_depth(i));
			if (h != x) {
				p = hpack(p, 0, ADDITIONAL);
				shift_amount(p) = x - h;
			}
			delta = round((float) (w - a) / 2.0 + h * t - x * s);
			r = new_kern(delta);
			subtype(r) = ACC_KERN;
			link(tail) = r;
			link(r) = p;
			tail = new_kern(-a - delta);
			subtype(tail) = ACC_KERN;
			link(p) = tail;
			p = q;
		}
		tail_append(p);
		space_factor = 1000;
		}
	}
Beispiel #2
0
int main(void)
{
	/* Setup */
	struct _challenge j_chal[5];
	struct _challenge s_chal[5];
	FILE *fp;

	char *output_filename;

	int num_j_chal, num_s_chal=0, i, j, x, y;
	int ichal;

	j_chal[0].name = "J1";
	j_chal[0].num_tables = 2;
	j_chal[0].rounds_per_team = 2;
	j_chal[0].timeslot_length = 5;
	j_chal[0].teams_per_timeslot = 1;
	j_chal[0].num_minutes = num_minutes - 30;
	j_chal[0].lunch_length = 45;
	j_chal[0].start_minute = 10;

	j_chal[1].name = "J2";
	j_chal[1].num_tables = 2;
	j_chal[1].rounds_per_team = 2;
	j_chal[1].timeslot_length = 6;
	j_chal[1].teams_per_timeslot = 1;
	j_chal[1].num_minutes = num_minutes - 10;
	j_chal[1].lunch_length = 45;
	j_chal[1].start_minute = 0;

	j_chal[2].name = "J3-White";
	j_chal[2].num_tables = 3;
	j_chal[2].rounds_per_team = 3;
	j_chal[2].timeslot_length = 5;
	j_chal[2].teams_per_timeslot = 2;
	j_chal[2].num_minutes = num_minutes - 80;
	j_chal[2].lunch_length = 30;
	j_chal[2].start_minute = 0;

	j_chal[3].name = "J3-Black";
	j_chal[3].num_tables = 1;
	j_chal[3].rounds_per_team = 3;
	j_chal[3].timeslot_length = 5;
	j_chal[3].teams_per_timeslot = 2;
	j_chal[3].num_minutes = num_minutes - 85;
	j_chal[3].lunch_length = 30;
	j_chal[3].start_minute = 0;

	j_chal[4].name = "J4";
	j_chal[4].num_tables = 1;
	j_chal[4].rounds_per_team = 3;
	j_chal[4].timeslot_length = 4;
	j_chal[4].teams_per_timeslot = 1;
	j_chal[4].num_minutes = num_minutes - 30;
	j_chal[4].lunch_length = 30;
	j_chal[4].start_minute = 40;

	num_j_chal = 5;

	s_chal[0].name = "S1";
	s_chal[0].num_tables = 2;
	s_chal[0].rounds_per_team = 2;
	s_chal[0].timeslot_length = 7;
	s_chal[0].teams_per_timeslot = 1;
	s_chal[0].num_minutes = num_minutes- 10;
	s_chal[0].lunch_length = 30;
	s_chal[0].start_minute = 0;

	s_chal[1].name = "S2";
	s_chal[1].num_tables = 2;
	s_chal[1].rounds_per_team = 2;
	s_chal[1].timeslot_length = 8;
	s_chal[1].teams_per_timeslot = 1;
	s_chal[1].num_minutes = num_minutes -10;
	s_chal[1].lunch_length = 30;
	s_chal[1].start_minute = 0;

	s_chal[2].name = "S3";
	s_chal[2].num_tables = 2;
	s_chal[2].rounds_per_team = 3;
	s_chal[2].timeslot_length = 6;
	s_chal[2].teams_per_timeslot = 2;
	s_chal[2].num_minutes = num_minutes - 60;
	s_chal[2].lunch_length = 30;
	s_chal[2].start_minute = 0;

	s_chal[3].name = "S4";
	s_chal[3].num_tables = 1;
	s_chal[3].rounds_per_team = 3;
	s_chal[3].timeslot_length = 5;
	s_chal[3].teams_per_timeslot = 1;
	s_chal[3].num_minutes = num_minutes - 30;
	s_chal[3].lunch_length = 45;
	s_chal[3].start_minute = 40;

	s_chal[4].name = "S5";
	s_chal[4].num_tables = 1;
	s_chal[4].rounds_per_team = 3;
	s_chal[4].timeslot_length = 5;
	s_chal[4].teams_per_timeslot = 1;
	s_chal[4].num_minutes = num_minutes- 30;
	s_chal[4].lunch_length = 45;
	s_chal[4].start_minute = 40;

	num_s_chal = 5;

	/* Build timeslots */

	for(i=0;i<2;i++) {

		int h, m;

		if(i==0) {
			challenges = &j_chal[0];
			num_challenges = num_j_chal;
			output_filename = "j.csv";
			junior = 1;
		} else {
			challenges = &s_chal[0];
			num_challenges = num_s_chal;
			output_filename = "s.csv";
			junior = 0;
		}
		
		num_tables = 0;
		for(ichal=0;ichal<num_challenges; ichal++) {
			struct _challenge *c = &challenges[ichal];
			int len = num_minutes;
			int num_timeslots = len / c->timeslot_length;
			int offset = c->timeslot_length/2;

			printf("%s: %d tables, %dx each team, %d timeslots * %d minutes\n", 
					c->name, c->num_tables, c->rounds_per_team, num_timeslots, c->timeslot_length);

			c->tables = malloc(sizeof(struct _table) * c->num_tables);
			for(j=0;j<c->num_tables;j++) {
				struct _table *t = &c->tables[j];
				t->num_timeslots = num_timeslots;
				t->timeslots = malloc(sizeof(struct _timeslot) * num_timeslots);
				t->offset = j % 2 == 0 ? 0 : offset;
				t->x_index = num_tables;
				for(x=0;x<num_timeslots;x++) {
					struct _timeslot *ts = &t->timeslots[x];
					ts->start_time = c->start_time + t->offset + x * c->timeslot_length;
					ts->num_teams = c->teams_per_timeslot;
					ts->teams = malloc(ts->num_teams * sizeof(int));
				}
				num_tables += 1;
			}
		}

		schedule = (int **)malloc(sizeof(int *) * num_tables);
		partner_schedule = (int **)malloc(sizeof(int *) * num_tables);

		
		if(i==0) {
			load_teams("j.txt");
		} else {
			load_teams("s.txt");
		}
		

		team_schedule = (int **)malloc(sizeof(int *) * num_teams);

		/* Clean out the schedule */
		for(x=0;x<num_tables;x++) {
			schedule[x] = malloc(sizeof(int) * num_minutes);
			partner_schedule[x] = malloc(sizeof(int) * num_minutes);
			for(y=0;y<num_minutes;y++) {
				schedule[x][y] = -1;
				partner_schedule[x][y] = -1;
			}
		}
		/* Clean out the team schedule */
		for(x=0;x<num_teams;x++) {
			team_schedule[x] = malloc(sizeof(int) * num_minutes);
			for(y=0;y<num_minutes;y++) {
				team_schedule[x][y] = -1;
			}
		}

		/* Mark breaks and lunches */
		for(x=0;x<num_challenges; x++) {
			struct _challenge *c = &challenges[x];
			for(j=0;j<c->num_tables;j++) {
				mark_breaks(x, j);
			}
		}

		do_assignments();


		/* Print schedule and build a team schedule map */
		printf("Time    ");
		for(j=0;j<num_challenges;j++) {
			for(y=0;y<challenges[j].num_tables;y++) {
				printf("%8s-%d ", challenges[j].name, y);
			}
		}
		printf("\n");
		for(x=0;x<num_minutes;x++) {
			printf("%6d  ", x);
			for(j=0;j<num_challenges;j++) {
				for(y=0;y<challenges[j].num_tables;y++) {
					struct _table *t = &challenges[j].tables[y];
					int iteam = schedule[t->x_index][x];
					int ipartner_team = partner_schedule[t->x_index][x];
					if(ipartner_team >= 0) {
						printf("%3d,%3d    ", iteam, ipartner_team);
						team_schedule[iteam][x] = t->x_index;
						team_schedule[ipartner_team][x] = t->x_index;
					} else {
						printf("%6d     ", iteam);
						if(iteam >= 0) {
							team_schedule[iteam][x]= t->x_index;
						}
					}
				}
			}
			printf("\n");
		}

		/* Write .CSV files */

		fp = fopen(output_filename, "wt");
		fprintf(fp, "By Area:\nTime,");
		for(j=0;j<num_challenges;j++) {
			for(y=0;y<challenges[j].num_tables;y++) {
				if(challenges[j].teams_per_timeslot != 2) {
					fprintf(fp,"%s-%d,", challenges[j].name, y+1);
				} else  {
					fprintf(fp,"%s-%dL,", challenges[j].name, y+1);
					fprintf(fp,"%s-%dR,", challenges[j].name, y+1);
				}
			}
		}
		fprintf(fp, "\n");
		h=10;
		m=20;
		for(x=0;x<num_minutes;x++) {
			fprintf(fp, "%02d:%02d, ", h,m);
			for(j=0;j<num_challenges;j++) {
				for(y=0;y<challenges[j].num_tables;y++) {
					struct _table *t = &challenges[j].tables[y];
					if(schedule[t->x_index][x] == -3) {
						fprintf(fp, ", ");
					} else if(schedule[t->x_index][x] == -2) {
						fprintf(fp, "Lunch, ");
					} else if(schedule[t->x_index][x] == -1) {
						fprintf(fp, ", ");
					} else {
						fprintf(fp, "%6d, ", teams[schedule[t->x_index][x]].id);	
					}

					if(challenges[j].teams_per_timeslot != 2) {
						; /* DO ntohing */

					} else 	if(schedule[t->x_index][x] == -3) {
						fprintf(fp, ", ");
					} else if(schedule[t->x_index][x] == -2) {
						fprintf(fp, "Lunch, ");
					} else if(schedule[t->x_index][x] == -1) {
						fprintf(fp, ", ");
					} else {
						fprintf(fp, "%6d, ", teams[partner_schedule[t->x_index][x]].id);
					}
				}
			}
			fprintf(fp, "\n");
			m++;
			if(m==60) {
				m=0;
				h++;
			}
		}
		fprintf(fp, "By Team:\n");
		fprintf(fp, "Time, ");
		for(j=0;j<num_teams;j++) {
			fprintf(fp, "%d,", teams[j].id);
		}
		fprintf(fp, "\n");
		h=10;
		m=2;
		for(x=0;x<num_minutes;x++) {
			fprintf(fp, "%02d:%02d, ", h,m);
			for(j=0;j<num_teams;j++) {
				int x_index = team_schedule[j][x];
				int ichal, itable;

				if(x_index >= 0 ) {
					/* Find the chal/area for this x_index */
					get_challenge_and_table_for_index(x_index, &ichal, &itable);
					fprintf(fp, "%s-%d,", challenges[ichal].name, itable+1);
				} else {
					fprintf(fp, " ,");
				}
			}
			fprintf(fp, "\n");
			m++;
			if(m==60) {
				m=0;
				h++;
			}
		}
		fprintf(fp, "By Team:\n");
		fclose(fp);
		
	}

	/* Do initial assignments */

	printf("All done!\n");

	return 0;
}