Ejemplo n.º 1
0
static int main_dumptry(int c, char **v)
{
	if (c != 2) {
		fprintf(stderr, "usage:\n\t%s in.bdf\n", *v);
		return 1;
	}
	struct bitmap_font f;
	font_fill_from_bdf(&f, v[1]);

	dump_font_as_parseable_c_struct_as_it_is("/tmp/fontout1.c", f, "nom");

	fprintf(stderr, "formatting to packed\n");
	f = reformat_font(f, PACKED);
	dump_font_as_parseable_c_struct_as_it_is("/tmp/fontout2.c", f, "nom");

	fprintf(stderr, "formatting to unpacked\n");
	f = reformat_font(f, UNPACKED);
	dump_font_as_parseable_c_struct_as_it_is("/tmp/fontout3.c", f, "nom");

	fprintf(stderr, "formatting to packed\n");
	f = reformat_font(f, PACKED);
	dump_font_as_parseable_c_struct_as_it_is("/tmp/fontout4.c", f, "nom");

	fprintf(stderr, "formatting to rle\n");
	f = reformat_font(f, RLE);
	dump_font_as_parseable_c_struct_as_it_is("/tmp/fontout5.c", f, "nom");

	fprintf(stderr, "formatting to packed\n");
	f = reformat_font(f, PACKED);
	dump_font_as_parseable_c_struct_as_it_is("/tmp/fontout6.c", f, "nom");

	return 0;
}
Ejemplo n.º 2
0
int main_srt()
{
	struct terminal t[1];
	t->w = 80;
	t->h = 25;
	t->kerning = 0;
	t->spacing = 0;
	t->font[0] = reformat_font(*xfont_10x20, UNPACKED);
	fprintf(stderr, "NUMBER_OF_GLYPHS = %d\n", t->font->number_of_glyphs);
	t->letters    = calloc(t->w * t->h, sizeof*t->letters);
	t->attributes = calloc(t->w * t->h, sizeof*t->attributes);
	t->cursorx = t->cursory = 0;
	int w = (t->w + t->kerning) * t->font->width;
	int h = (t->h + t->spacing) * t->font->height;

	term_puts(t, "abc");

	struct FTR f = ftr_new_window(w, h);
	f.userdata = t;
	f.changed = 1;

	ftr_set_handler(&f, "expose", term_exposer);
	ftr_set_handler(&f, "key", term_key_handler);
	return ftr_loop_run(&f);
}
Ejemplo n.º 3
0
int main_cpu(int c, char *v[])
{
	// extract named options
	char *window_title = pick_option(&c, &v, "t", "cpu");

	// process input arguments
	if (c != 2 && c != 1) {
		fprintf(stderr, "usage:\n\t%s [image]\n", *v);
		//                          0  1
		return 1;
	}
	char *filename_in = c > 1 ? v[1] : "-";

	// read image
	struct pan_state e[1];
	e->i = fancy_image_open(filename_in, "r");
	e->w = e->i->w;
	e->h = e->i->h;

	// setup fonts (TODO, integrate these calls into fontu's caching stuff)
	e->font[0] = reformat_font(*xfont_4x6, UNPACKED);
	e->font[1] = reformat_font(*xfont_6x12, UNPACKED);
	e->font[2] = reformat_font(*xfont_7x13, UNPACKED);
	e->font[3] = reformat_font(*xfont_9x15, UNPACKED);
	e->font[4] = reformat_font(*xfont_10x20, UNPACKED);
	//e->font[0] = reformat_font(*xfont_5x7, UNPACKED);

	// open window
	struct FTR f = ftr_new_window(BAD_MIN(e->w,1000), BAD_MIN(e->h,800));
	ftr_change_title(&f, window_title);
	f.userdata = e;
	action_reset_zoom_and_position(&f);
	ftr_set_handler(&f, "expose", pan_exposer);
	ftr_set_handler(&f, "motion", pan_motion_handler);
	ftr_set_handler(&f, "button", pan_button_handler);
	ftr_set_handler(&f, "key"   , pan_key_handler);
	int r = ftr_loop_run(&f);

	// cleanup and exit (optional)
	for (int i = 0; i < 5; i++) free(e->font[i].data);
	ftr_close(&f);
	fancy_image_close(e->i);
	return r - 1;
}
Ejemplo n.º 4
0
static int main_cdumpf(int c, char **v)
{
	if (c != 3 && c != 4 && c != 5) {
		fprintf(stderr, "usage:\n\t"
			"%s name {packing} [in.bdf [out.c]]\n", *v);
		//        0  1    2         3       4
		return 1;
	}
	char *name = v[1];
	enum font_data_format fmt = packing_unstring(v[2]);
	char *filename_in = c > 3 ? v[3] : "-";
	char *filename_out = c > 4 ? v[4] : "-";

	struct bitmap_font f;
	font_fill_from_bdf(&f, filename_in);
	f = reformat_font(f, fmt);
	dump_font_as_parseable_c_struct_as_it_is(filename_out, f, name);

	free(f.data);

	return 0;
}
Ejemplo n.º 5
0
int main()
{
	struct terminal t[1];
	t->w = 80;
	t->h = 25;
	t->kerning = 0;
	t->spacing = 0;
	t->font[0] = reformat_font(*xfont9x15, UNPACKED);
	t->letters = malloc(sizeof(int) * t->w * t->h);
	t->attributes = malloc(sizeof(int) * t->w * t->h);
	t->cursorx = t->cursory = 0;
	int w = (t->w + t->kerning) * t->font->width;
	int h = (t->h + t->spacing) * t->font->height;

	term_puts(t, "");

	struct FTR f = ftr_new_window(w, h);
	f.userdata = t;
	f.changed = 1;

	ftr_set_handler(&f, "expose", term_exposer);
	ftr_set_handler(&f, "key", term_key_handler);
	return ftr_loop_run(&f);
}
Ejemplo n.º 6
0
static void dump_font_as_parseable_c_struct(char *filename,
		struct bitmap_font font, char *name)
{
	struct bitmap_font cfont = reformat_font(font, PACKED);
	dump_font_as_parseable_c_struct_as_it_is(filename, cfont, name);
}
Ejemplo n.º 7
0
static struct bitmap_font reformat_font(struct bitmap_font f,
		enum font_data_format fmt)
{
	uint8_t *(*transform)(uint8_t *t, int, int*);

	if (fmt == f.packing) {
		return f;
	} else if (fmt == UNPACKED && f.packing == PACKED) {
		transform = alloc_and_transform_from_RAW_to_BIT;
	} else if (fmt == PACKED   && f.packing == UNPACKED) {
		transform = alloc_and_transform_from_BIT_to_RAW;
	} else if (fmt == RLE) {
		f = reformat_font(f, UNPACKED);
		transform = alloc_and_transform_from_BIT_to_RLE1;
	} else if (f.packing == RLE && fmt == UNPACKED) {
		transform = alloc_and_transform_from_RLE1_to_BIT;
	} else if (fmt == DIFF) {
		f = reformat_font(f, PACKED);
		transform = alloc_and_transform_diff;
	} else if (fmt == XOR) {
		f = reformat_font(f, PACKED);
		transform = alloc_and_transform_xor;
	} else if (fmt == RLEDIFF) {
		f = reformat_font(f, RLE);
		transform = alloc_and_transform_diff;
	} else if (fmt == RLEXOR) {
		f = reformat_font(f, RLE);
		transform = alloc_and_transform_xor;
	} else if (fmt == PCX) {
		f = reformat_font(f, PACKED);
		transform = alloc_and_transform_from_RAW_to_RLE8;
	} else if (fmt == RLEPCX) {
		f = reformat_font(f, RLE);
		transform = alloc_and_transform_from_RAW_to_RLE8;
	} else if (fmt == RLEXORPCX) {
		f = reformat_font(f, RLEXOR);
		transform = alloc_and_transform_from_RAW_to_RLE8;
	} else if (fmt == X85) {
		f = reformat_font(f, PACKED);
		transform = alloc_and_transform_from_RAW_to_X85;
	} else if (fmt == X85RLE) {
		f = reformat_font(f, RLE);
		transform = alloc_and_transform_from_RAW_to_X85;
	} else if (fmt == PCXX85) {
		f = reformat_font(f, PCX);
		transform = alloc_and_transform_from_RAW_to_X85;
	} else if (fmt == RLEPCXX85) {
		f = reformat_font(f, RLEPCX);
		transform = alloc_and_transform_from_RAW_to_X85;
	} else if (fmt == RLEXORPCXX85) {
		f = reformat_font(f, RLEXORPCX);
		transform = alloc_and_transform_from_RAW_to_X85;
	} else if (fmt == RLET) {
		f = reformat_font(f, UNPACKED);
		f.data = alloc_and_transpose_3d1(f.data, f.width, f.height,
				f.number_of_glyphs);
		transform = alloc_and_transform_from_BIT_to_RLE1;
	} else
		fail("unimplemented conversion \"%s\"\n", packing_string(fmt));

	f.data = transform(f.data, f.ndata, &f.ndata);
	f.packing = fmt;
	return f;

	////fprintf(stderr, "\treformatting call %s => %s\n", packing_string(f->packing), packing_string(fmt));
	//if (fmt == f->packing) return *f;
	//if (fmt == UNPACKED && f->packing == PACKED) return unpack_font(*f);
	//if (fmt == PACKED   && f->packing == UNPACKED) return pack_font(*f);
	//if (fmt == RLE) {
	//	struct bitmap_font fu = reformat_font(f, UNPACKED);
	//	struct bitmap_font fr = fu;
	//	fr.data = xmalloc(2+fu.ndata);
	//	fr.ndata = fax_run_length_encoding(fr.data, fu.data, fu.ndata);
	//	//fprintf(stderr, "rle %d => %d {%g} (%g)\n", fu.ndata, fr.ndata, fu.ndata*1.0/fr.ndata,fr.ndata*100.0/fu.ndata);
	//	fr.packing = RLE;
	//	return fr;
	//}
	//if (f->packing == RLE) {
	//	unsigned char *urle = xmalloc(129*f->ndata);
	//	int nurle = fax_run_length_decoding(urle, f->data, f->ndata);
	//	//fprintf(stderr, "urle %d => %d\n", f->ndata, nurle);
	//	struct bitmap_font ftmp = *f;
	//	ftmp.data = urle;
	//	ftmp.ndata = nurle;
	//	ftmp.packing = UNPACKED;
	//	return reformat_font(&ftmp, fmt);
	//}
	fail("unimplemented conversion \"%s\"\n", packing_string(fmt));
}