static void	read_display(char *file, void (*f)(char))
{
	char	txt;
	char	*tmp;
	int		fd;
	int		i;

	fd = open(file, O_RDONLY);
	while (read(fd, &txt, 1))
	{
		display_add();
		f(txt);
		g_add++;
		if (g_total_size - g_add < 16 && g_add % 16 == 0)
			file_error();
	}
	g_end--;
	if (g_end == 0)
	{
		tmp = ft_convert_base(g_add, BASE, HEX);
		ft_putchar('\n');
		i = g_n - ft_strlen(tmp);
		while (i--)
			ft_putchar('0');
		ft_putstr(tmp);
		ft_putchar('\n');
	}
}
Ejemplo n.º 2
0
void
poly_draw_segment(struct container *co, struct segment *seg, int disp, unsigned char **p, int limit)
{
	struct poly_hdr poly_hdr;
	struct coord *coord;
	unsigned int j,k,o;
	struct point pnt;
	struct param_list param[100];
	int max=20000;
	struct point xpoints[max];

	seg->data[0]=*p;
	poly_get_hdr(p, &poly_hdr);
	if (poly_hdr.order < limit && is_visible(co->trans, poly_hdr.c)) {
		transform(co->trans,&poly_hdr.c[2],&pnt);
		for (k = 0 ; k < poly_hdr.polys ; k++) {
			assert(poly_hdr.count[k] < max);
			for (j = 0 ; j < poly_hdr.count[k] ; j++) {
				transform(co->trans, coord_get(p), &xpoints[j]);
			}
			if (poly_hdr.type < 0x80) {
				o=0;
				if (poly_hdr.type == 0x1e)
					o=1;
				else if (poly_hdr.type == 0x2d)
					o=2;
				else if (poly_hdr.type == 0x32)
					o=3;
				display_add(&co->disp[disp+o], 0, 0, poly_hdr.name, poly_hdr.count[k], xpoints, NULL, seg, sizeof(*seg));
				
			} else {
				display_add(&co->disp[disp], 1, 0, poly_hdr.name, poly_hdr.count[k], xpoints, NULL, seg, sizeof(*seg));
			}
			if (co->data_window[data_window_type_poly])
				data_window_add(co->data_window[data_window_type_poly], param, poly_get_param(seg, param, 100)); 
		}
	} else
		(*p)+=poly_hdr.count_sum*sizeof(*coord);
}
Ejemplo n.º 3
0
USER_OBJECT_
RS_GGOBI(createDisplay)(USER_OBJECT_ stype, USER_OBJECT_ svars, 
  USER_OBJECT_ datasetId, USER_OBJECT_ useWindow)
{
  GGobiData *d;
  ggobid *gg;
  displayd *display = NULL;
  GType type;
  GGobiExtendedDisplayClass *klass;
  gboolean use_window = asCLogical(useWindow);

  d = toData(datasetId);
  g_return_val_if_fail(GGOBI_IS_DATA(d), NULL_USER_OBJECT);
  gg = d->gg;

  type = g_type_from_name(asCString(stype));
  klass = GGOBI_EXTENDED_DISPLAY_CLASS(g_type_class_peek(type));

  if(!klass) {
     PROBLEM "Unrecognized display type"
     ERROR;
  }

  if(klass->createWithVars && GET_LENGTH(svars)) {
     gint nvars, *vars, i;
     nvars = GET_LENGTH(svars);
     vars = g_malloc(sizeof(gint)*nvars);
     for(i = 0; i < nvars; i++)
       vars[i] = INTEGER_DATA(svars)[i];
     display = klass->createWithVars(use_window, false, nvars, vars, d, gg);
  } else if(klass->create)
     display = klass->create(use_window, false, NULL, d, gg);

  if(!display) {
    PROBLEM "Couldn't create the display"
    ERROR;
  }

  display_add(display, gg);

  gdk_flush();
  
  return(RS_displayInstance(display));
}
Ejemplo n.º 4
0
static void
street_draw_segment(struct container *co, struct segment *seg, unsigned char **pos, unsigned char *end, struct coord *ref, int bytes, int include, int disp)
{
        int j,flags,limit;
	struct coord f;
	struct coord l[2];
	struct street_str *str=seg->data[0];
	char *label;
	struct street_name name;
	struct param_list param[100];
	struct route_path_segment *route;
	struct display_list **displ=co->disp;
	int max=10000;
	struct point xpoints[max];

        flags=0;
	j=0;
        while (! flags && *pos < end) {
                flags=street_get_coord(pos, bytes, ref, &f);
		if (! j) {
			l[0]=f;
			l[1]=f;
		} else {
			if (include || !flags) {
				if (f.x < l[0].x) l[0].x=f.x;
				if (f.x > l[1].x) l[1].x=f.x;
				if (f.y > l[0].y) l[0].y=f.y;
				if (f.y < l[1].y) l[1].y=f.y;
			}
		}
		transform(co->trans, &f, &xpoints[j]);
		if (! j)
			flags=0;
                j++;
		assert(j < max);
        }
        if (! include)
                j--;
	if (is_visible(co->trans, l) && str->type) {
		label=NULL;
		if (str->nameid) {
			street_name_get_by_id(&name, seg->blk_inf.mdata, str->nameid);
			if (name.name2[0]) 
				label=name.name2;
			else
				label=name.name1;
		}
#if 0
		if (str->nameid && name.townassoc < 0 ) {
			char buffer[128];
			sprintf(buffer,"-0x%x", -name.townassoc);
			label=g_strdup(buffer);
		}
#endif
		limit=0;
		if (str->limit == 0x30)
			limit=1;
		if (str->limit == 0x03)
			limit=-1;
		if (str->type & 0x40)
			limit=-limit;
		display_add(&displ[disp], 2, limit, label, j, xpoints, NULL, seg, sizeof(*seg));
		if (co->route && (route=route_path_get(co->route, str->segid))) {
			if (! route->offset)
				display_add(&displ[display_street_route], 2, 0, label, j, xpoints, NULL, NULL, 0);
			else if (route->offset > 0) 
				display_add(&displ[display_street_route], 2, 0, label, route->offset, xpoints, NULL, NULL, 0);
			else 
				display_add(&displ[display_street_route], 2, 0, label, j+route->offset, xpoints-route->offset, NULL, NULL, 0);
		}
		if (co->data_window[data_window_type_street]) 
			data_window_add(co->data_window[data_window_type_street], param, street_get_param(seg, param, 100, 0));
	}
        *pos-=2*bytes;
}