void piece_select_more_check_edge(d3pnt *k_pt1,d3pnt *k_pt2) { int n,k,t,t2; d3pnt *pt1,*pt2; map_mesh_type *mesh; map_mesh_poly_type *poly; mesh=map.mesh.meshes; for (n=0;n!=map.mesh.nmesh;n++) { poly=mesh->polys; for (k=0;k!=mesh->npoly;k++) { for (t=0;t!=poly->ptsz;t++) { t2=t+1; if (t2==poly->ptsz) t2=0; pt1=&mesh->vertexes[poly->v[t]]; pt2=&mesh->vertexes[poly->v[t2]]; if (((pt1->x==k_pt1->x) && (pt1->y==k_pt1->y) && (pt1->z==k_pt1->z) && (pt2->x==k_pt2->x) && (pt2->y==k_pt2->y) && (pt2->z==k_pt2->z)) || ((pt1->x==k_pt2->x) && (pt1->y==k_pt2->y) && (pt1->z==k_pt2->z) && (pt2->x==k_pt1->x) && (pt2->y==k_pt1->y) && (pt2->z==k_pt1->z))) { select_add(item_map_mesh,n,k); break; } } poly++; } mesh++; } }
void select_match(const char *expr) { const char *ptr; union arg *args; int rc, operator; char buffer[128]; for(ptr = expr; *ptr && *ptr != '=' && *ptr != '~' && *ptr != '<' && *ptr != '>' && *ptr != '!'; ++ptr) ; if(!*ptr) fatal(0, "invalid match expression '%s'", expr); args = xmalloc(3 * sizeof *args); args[0].string = xstrndup(expr, ptr - expr); ptr = get_operator(ptr, &operator); if(!ptr) fatal(0, "%s: unrecognized match operator\n", expr); if(*ptr == ':') ++ptr; switch(operator) { case '~': rc = regcomp(&args[1].regex, ptr, REG_ICASE|REG_NOSUB); if(rc) { regerror(rc, &args[1].regex, buffer, sizeof buffer); fatal(0, "regexec: %s", buffer); } select_add(select_regex_match, args, 2); break; case IDENTICAL: args[1].string = xstrdup(ptr); select_add(select_string_match, args, 2); break; default: args[1].operator = operator; args[2].string = xstrdup(ptr); select_add(select_compare, args, 3); break; } }
void piece_mesh_select_all_poly(void) { int n,k,sel_count,type,mesh_idx,poly_idx; map_mesh_type *mesh; sel_count=select_count(); for (n=0;n!=sel_count;n++) { select_get(n,&type,&mesh_idx,&poly_idx); if (type!=item_map_mesh) continue; mesh=&map.mesh.meshes[mesh_idx]; for (k=0;k!=mesh->npoly;k++) { if (!select_check(item_map_mesh,mesh_idx,k)) select_add(item_map_mesh,mesh_idx,k); } } }
void dyad_update(void) { dyad_Stream *stream; struct timeval tv; destroyClosedStreams(); updateTickTimer(); updateStreamTimeouts(); /* Create fd sets for select() */ select_zero(&dyad_selectSet); stream = dyad_streams; while (stream) { switch (stream->state) { case DYAD_STATE_CONNECTED: select_add(&dyad_selectSet, SELECT_READ, stream->sockfd); if (!(stream->flags & DYAD_FLAG_READY) || stream->writeBuffer.length != 0 ) { select_add(&dyad_selectSet, SELECT_WRITE, stream->sockfd); } break; case DYAD_STATE_CLOSING: select_add(&dyad_selectSet, SELECT_WRITE, stream->sockfd); break; case DYAD_STATE_CONNECTING: select_add(&dyad_selectSet, SELECT_WRITE, stream->sockfd); select_add(&dyad_selectSet, SELECT_EXCEPT, stream->sockfd); break; case DYAD_STATE_LISTENING: select_add(&dyad_selectSet, SELECT_READ, stream->sockfd); break; } stream = stream->next; } /* Init timeout value and do select */ #ifdef _MSC_VER #pragma warning(push) /* Disable double to long implicit conversion warning, * because the type of timeval's fields don't agree across platforms */ #pragma warning(disable: 4244) #endif tv.tv_sec = dyad_updateTimeout; tv.tv_usec = (dyad_updateTimeout - tv.tv_sec) * 1e6; #ifdef _MSC_VER #pragma warning(pop) #endif select(dyad_selectSet.maxfd + 1, dyad_selectSet.fds[SELECT_READ], dyad_selectSet.fds[SELECT_WRITE], dyad_selectSet.fds[SELECT_EXCEPT], &tv); /* Handle streams */ stream = dyad_streams; while (stream) { switch (stream->state) { case DYAD_STATE_CONNECTED: if (select_has(&dyad_selectSet, SELECT_READ, stream->sockfd)) { stream_handleReceivedData(stream); if (stream->state == DYAD_STATE_CLOSED) { break; } } /* Fall through */ case DYAD_STATE_CLOSING: if (select_has(&dyad_selectSet, SELECT_WRITE, stream->sockfd)) { stream_flushWriteBuffer(stream); } break; case DYAD_STATE_CONNECTING: if (select_has(&dyad_selectSet, SELECT_WRITE, stream->sockfd)) { /* Check socket for error */ int optval = 0; socklen_t optlen = sizeof(optval); dyad_Event e; getsockopt(stream->sockfd, SOL_SOCKET, SO_ERROR, &optval, &optlen); if (optval != 0) goto connectFailed; /* Handle succeselful connection */ stream->state = DYAD_STATE_CONNECTED; stream->lastActivity = dyad_getTime(); stream_initAddress(stream); /* Emit connect event */ e = createEvent(DYAD_EVENT_CONNECT); e.msg = "connected to server"; stream_emitEvent(stream, &e); } else if ( select_has(&dyad_selectSet, SELECT_EXCEPT, stream->sockfd) ) { /* Handle failed connection */ connectFailed: stream_error(stream, "could not connect to server", 0); } break; case DYAD_STATE_LISTENING: if (select_has(&dyad_selectSet, SELECT_READ, stream->sockfd)) { stream_acceptPendingConnections(stream); } break; } /* If data was just now written to the stream we should immediately try to * send it */ if ( stream->flags & DYAD_FLAG_WRITTEN && stream->state != DYAD_STATE_CLOSED ) { stream_flushWriteBuffer(stream); } stream = stream->next; } }
void node_link_select(int node_idx) { select_clear(); select_add(item_map_node,node_idx,-1); }
void select_default(select_function *sfn, union arg *args, size_t nargs) { if(!nselectors) select_add(sfn, args, nargs); }