Beispiel #1
0
static inline isc_result_t
fromtext_hs_a(ARGS_FROMTEXT) {
	isc_token_t token;
	struct in_addr addr;
	isc_region_t region;

	REQUIRE(type == 1);
	REQUIRE(rdclass == 4);

	UNUSED(type);
	UNUSED(origin);
	UNUSED(options);
	UNUSED(rdclass);

	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
				      ISC_FALSE));

	if (getquad(DNS_AS_STR(token), &addr, lexer, callbacks) != 1)
		RETTOK(DNS_R_BADDOTTEDQUAD);
	isc_buffer_availableregion(target, &region);
	if (region.length < 4)
		return (ISC_R_NOSPACE);
	memcpy(region.base, &addr, 4);
	isc_buffer_add(target, 4);
	return (ISC_R_SUCCESS);
}
Beispiel #2
0
static void preset_fontmetrics(fd_entry * fd, internalfontnumber f)
{
    int i;
    fd->font_dim[ITALIC_ANGLE_CODE].val =
        dividescaled(-atan(getslant(f) / 65536.0) * (180 / M_PI),
                     pdffontsize[f], 3);
    fd->font_dim[ASCENT_CODE].val =
        dividescaled(getcharheight(f, 'h'), pdffontsize[f], 3);
    fd->font_dim[CAPHEIGHT_CODE].val =
        dividescaled(getcharheight(f, 'H'), pdffontsize[f], 3);
    i = -dividescaled(getchardepth(f, 'y'), pdffontsize[f], 3);
    fd->font_dim[DESCENT_CODE].val = i < 0 ? i : 0;
    fd->font_dim[STEMV_CODE].val =
        dividescaled(getcharwidth(f, '.') / 3, pdffontsize[f], 3);
    fd->font_dim[XHEIGHT_CODE].val =
        dividescaled(getxheight(f), pdffontsize[f], 3);
    fd->font_dim[FONTBBOX1_CODE].val = 0;
    fd->font_dim[FONTBBOX2_CODE].val = fd->font_dim[DESCENT_CODE].val;
    fd->font_dim[FONTBBOX3_CODE].val =
        dividescaled(getquad(f), pdffontsize[f], 3);
    fd->font_dim[FONTBBOX4_CODE].val =
        fd->font_dim[CAPHEIGHT_CODE].val > fd->font_dim[ASCENT_CODE].val ?
        fd->font_dim[CAPHEIGHT_CODE].val : fd->font_dim[ASCENT_CODE].val;
    for (i = 0; i < INT_KEYS_NUM; i++)
        fd->font_dim[i].set = true;
}
Beispiel #3
0
List<QuadsLine2d> *getquad(List<QuadsLine2d> *l,List<QuadsLine2d> *sf,float cd) {
  // printf("%i %i\n",l->len,sf->len);
  if (sf->len==4)
    if (V2d::dist(sf->num(1).a,sf->num(sf->len).b)<cd)
    return sf;
  else
  return NULL;
  QuadsLine2d last=sf->num(sf->len);
  for (int i=1;i<=l->len;i++) {
    QuadsLine2d c=l->num(i);
    if (V2d::dist(last.b,c.b)<cd)
      c.swapends();
    if (V2d::dist(last.b,c.a)<cd) {
      sf->add(c);
      l->removenum(i);
      List<QuadsLine2d> *q=getquad(l,sf,cd);
      // if (q.len==4)
      if (q!=NULL)
        return q;
      l->add(c);
      l->swapelements(i,l->len);
      sf->removenum(sf->len);
    }
  }
  return NULL;
}      
static inline isc_result_t
fromtext_l32(ARGS_FROMTEXT) {
	isc_token_t token;
	struct in_addr addr;
	isc_region_t region;

	REQUIRE(type == 105);

	UNUSED(type);
	UNUSED(rdclass);
	UNUSED(origin);
	UNUSED(options);
	UNUSED(callbacks);

	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
				      ISC_FALSE));
	if (token.value.as_ulong > 0xffffU)
		RETTOK(ISC_R_RANGE);
	RETERR(uint16_tobuffer(token.value.as_ulong, target));

	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
				      ISC_FALSE));

	if (getquad(DNS_AS_STR(token), &addr, lexer, callbacks) != 1)
		RETTOK(DNS_R_BADDOTTEDQUAD);
	isc_buffer_availableregion(target, &region);
	if (region.length < 4)
		return (ISC_R_NOSPACE);
	memmove(region.base, &addr, 4);
	isc_buffer_add(target, 4);
	return (ISC_R_SUCCESS);
}
Beispiel #5
0
static inline isc_result_t
fromtext_ipseckey(ARGS_FROMTEXT) {
	isc_token_t token;
	dns_name_t name;
	isc_buffer_t buffer;
	unsigned int gateway;
	struct in_addr addr;
	unsigned char addr6[16];
	isc_region_t region;

	REQUIRE(type == 45);

	UNUSED(type);
	UNUSED(rdclass);
	UNUSED(callbacks);

	/*
	 * Precedence.
	 */
	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
				      ISC_FALSE));
	if (token.value.as_ulong > 0xffU)
		RETTOK(ISC_R_RANGE);
	RETERR(uint8_tobuffer(token.value.as_ulong, target));

	/*
	 * Gateway type.
	 */
	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
				      ISC_FALSE));
	if (token.value.as_ulong > 0x3U)
		RETTOK(ISC_R_RANGE);
	RETERR(uint8_tobuffer(token.value.as_ulong, target));
	gateway = token.value.as_ulong;

	/*
	 * Algorithm.
	 */
	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
				      ISC_FALSE));
	if (token.value.as_ulong > 0xffU)
		RETTOK(ISC_R_RANGE);
	RETERR(uint8_tobuffer(token.value.as_ulong, target));

	/*
	 * Gateway.
	 */
	RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
				      ISC_FALSE));

	switch (gateway) {
	case 0:
		if (strcmp(DNS_AS_STR(token), ".") != 0)
			RETTOK(DNS_R_SYNTAX);
		break;

	case 1:
		if (getquad(DNS_AS_STR(token), &addr, lexer, callbacks) != 1)
			RETTOK(DNS_R_BADDOTTEDQUAD);
		isc_buffer_availableregion(target, &region);
		if (region.length < 4)
			return (ISC_R_NOSPACE);
		memmove(region.base, &addr, 4);
		isc_buffer_add(target, 4);
		break;

	case 2:
		if (inet_pton(AF_INET6, DNS_AS_STR(token), addr6) != 1)
			RETTOK(DNS_R_BADAAAA);
		isc_buffer_availableregion(target, &region);
		if (region.length < 16)
			return (ISC_R_NOSPACE);
		memmove(region.base, addr6, 16);
		isc_buffer_add(target, 16);
		break;

	case 3:
		dns_name_init(&name, NULL);
		buffer_fromregion(&buffer, &token.value.as_region);
		origin = (origin != NULL) ? origin : dns_rootname;
		RETTOK(dns_name_fromtext(&name, &buffer, origin,
					 options, target));
		break;
	}

	/*
	 * Public key.
	 */
	return (isc_base64_tobuffer(lexer, target, -1));
}
Beispiel #6
0
void main() {

  float minlen=10.0;
  float cornerdist=2.0;

  // Generate random list
  List<QuadsLine2d> l=List<QuadsLine2d>();
  for (int i=1;i<=1000;i++) {
    V2d a=V2d(myrnd()*100,myrnd()*100);
    V2d b=V2d(myrnd()*100,myrnd()*100);
    l.add(QuadsLine2d(a,b));
  }

  printf("%i lines\n",l.len);

  // Strip out small lines
  for (int i=1;i<=l.len;i++) {
    if (l.num(i).length<minlen) {
      l.removenum(i);
      i--;
    }
  }

  printf("Stripped small lines, now %i\n",l.len);

//  display(&l);

  // Find quadrilaterals
  List<List<QuadsLine2d>> qs=List<List<QuadsLine2d>>();
  while (l.len>0) {
    List<QuadsLine2d> *q=new List<QuadsLine2d>();
    q->add(l.num(1));
    l.removenum(1);
    q=getquad(&l,q,cornerdist);
    if (q!=NULL) {
/*      // Join corners
      for (int i=1;i<=q->len;i++) {
        int j=1+(i%q->len);
        q->num(i).b.print();
        printf(",");
        q->num(j).a.print();
        printf(" = ");
        q->p2num(i)->b=(q->num(i).b+q->num(j).a)/2.0;
        q->num(i).b.print();
//        printf(" && ");
        q->p2num(j)->a=q->p2num(i)->b;
//        q->num(j).a.print();
        printf("\n");
      }*/
      qs.add(*q);
      printf("Quad found!\n");
    }
  }

  for (int i=1;i<=qs.len;i++) {
    List<QuadsLine2d> *q=qs.p2num(i);
      for (int j=1;j<=q->len;j++) {
        q->num(j).a.print();
        printf(" - ");
        q->num(j).b.print();
        printf("\n");
      }
  }

  for (int i=1;i<=qs.len;i++) {
    display(qs.p2num(i));
    do { } while (!key[KEY_ESC]);
  }

  printf("%i quadrilaterals found\n",qs.len);

}