void print_gen(struct pessoa*no, int geracao){//Aqui descobrimos as pessoas de uma geração específica if(no!=NULL || no->geracao <= geracao){ print_gen(no->esq, geracao); if(no->geracao==geracao){ printf("%s", no->nome); } print_gen(no->dir, geracao); } }
void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth) { print_gen("MAC error!"); }
static void SNTP_thread(void* pvp) { struct sntp_c params; const TickType_t xReceiveTimeOut = 500; uint32_t ntp_addr=0; struct sntp_msg sntpmsg,sntpresponse; uint16_t usBytes; uint32_t addr_len = sizeof(params.xClient); sys_time.timezone = 1; params.poll_interval = SNTP_POLL_INTERVAL; /* Attempt to open the socket. */ params.socket = FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_DGRAM, FREERTOS_IPPROTO_UDP ); /* Set a time out so connect() will try connect over and over */ FreeRTOS_setsockopt( params.socket, 0, FREERTOS_SO_RCVTIMEO, &xReceiveTimeOut, sizeof( xReceiveTimeOut ) ); params.xClient.sin_port = FreeRTOS_htons(SNTP_PORT_NR); memset(&sntpmsg,0,sizeof(sntpmsg)); sntpmsg.li_vn_mode = SNTP_LI_NO_WARNING | SNTP_VERSION | SNTP_MODE_CLIENT; for(;;) { while(ntp_addr==0) { ntp_addr=FreeRTOS_gethostbyname(SNTP_SERVER_ADDRESS_NAME); // try to connect 5 times after that returns 0 params.xClient.sin_addr = ntp_addr; } FreeRTOS_sendto(params.socket,&sntpmsg,sizeof(sntpmsg),0,¶ms.xClient,sizeof(params.xClient)); // send request usBytes=FreeRTOS_recvfrom(params.socket,&sntpresponse,sizeof(sntpresponse),0,¶ms.xClient,&addr_len); // wait for NTP's server response,blocking if(usBytes == SNTP_MSG_LEN) { /* Kiss-of-death packet. Use another server or increase SNTP_POLL_INTERVAL. */ if(sntpresponse.stratum == SNTP_STRATUM_KOD) { print_gen(s_KOD); params.poll_interval +=1000; } else if (((sntpresponse.li_vn_mode & SNTP_MODE_MASK) == SNTP_MODE_SERVER) || ((sntpresponse.li_vn_mode & SNTP_MODE_MASK) == SNTP_MODE_BROADCAST)) { getDate(FreeRTOS_ntohl(sntpresponse.receive_timestamp[0]),&sys_time); #if SNTP_PRINT_LOG PRINT_SYSTIME; #endif } } else //error { } vTaskDelay(params.poll_interval); } }
void main(){ char nome[10]; char nome1[10]; char nome2[10]; int d; char i,h; struct ponteiro p; struct ponteiro q; struct pessoa *raiz=(struct pessoa *)malloc(sizeof(struct pessoa));//Alocamos memoria para a raiz da arvore printf("Qual a primeira pessoa da arvore genealógica?\n"); gets(nome); raiz->nome=nome; raiz->geracao = 0; printf("%s\n", raiz->nome); insira(raiz);//Começamos a raiz propriamente aqui printf("Adicionar mais alguem? <S/N>"); scanf("%c", &h); if(h=='S' || h=='s'){ adiciona(raiz); } printf("Deseja fazer mais alguma coisa? \n1-)imprimir os membros por geracao \n2-)imprimir os antepassados de alguem \n "); printf("3-) imprimir labelled bracketing \n4-) calcular grau de parentesco \n5-) encerrar programa\n");//Aqui temos o menu scanf("%c",&i); if(i='1'){ printf("Qual geracao?"); scanf("%i", &d); print_gen(raiz,d); } else if(i='2'){ printf("De quem?"); gets(nome); emordem(raiz); } else if(i='3'){ imprimir_lb(raiz); } else if(i='4'){ printf("Pessoa 1:"); gets(nome1); printf("Pessoa 2"); gets(nome2); if(p.ponteiro->geracao > q.ponteiro->geracao){ grau(q.ponteiro, p.ponteiro, q.ponteiro->geracao); }else{ grau(p.ponteiro,q.ponteiro, p.ponteiro->geracao); } } else{ printf("Bye Bye"); } }