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, ®ion); if (region.length < 4) return (ISC_R_NOSPACE); memcpy(region.base, &addr, 4); isc_buffer_add(target, 4); return (ISC_R_SUCCESS); }
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; }
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, ®ion); if (region.length < 4) return (ISC_R_NOSPACE); memmove(region.base, &addr, 4); isc_buffer_add(target, 4); return (ISC_R_SUCCESS); }
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, ®ion); 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, ®ion); 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)); }
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); }