/** * A função executa_comando é uma das funções mais importantes pois é ela que vai reagir aos comandos dados pelo utilizador. * A função irá receber a linha de comando separa la em dois, no comando e nos argumentos do comando, e passa los para as funções associadas aos comandos. * @param Tab Tabuleiro do jogo * @param DIM dimensão do tabuleiro * @param linha Recebe uma string que corresponde á linha lida da shell. * @returns torna um inteiro que verifica se foi ou não bem sucedida a função. */ int executa_comando(char *linha,int *DIM,Elem **Tab) { char cmd[1025]; char args[1025]; int nargs=sscanf(linha, "%s %[^\n]", cmd, args); if((strcmp(cmd, "b") == 0 || strcmp(cmd, "p") == 0 || strcmp(cmd, "i") == 0)) return executaJogada(args,cmd,DIM,Tab); if(strcmp(cmd, "cr") == 0 ) return executaCriaJogo(args,DIM,Tab); if(strcmp(cmd,"gr")==0 ) return executaGravaJogo(args,DIM,Tab); if(strcmp(cmd,"?")==0 && nargs==1) return ajuda(); if(strcmp(cmd,"trp")==0 && nargs==1) return trp(Tab,DIM); if(strcmp(cmd,"snd")==0 && nargs==1) return snd(Tab,DIM); if(strcmp(cmd,"pis")==0 && nargs==1) return pis(Tab,DIM); if(strcmp(cmd,"pds")==0 && nargs==1) return pds(Tab,DIM); if(strcmp(cmd,"vb")==0 && nargs==1) return vb(Tab,DIM); if(strcmp(cmd,"vp")==0 && nargs==1) return vp(Tab,DIM); if(strcmp(cmd,"vl")==0 && nargs==1) return vl(Tab,DIM); if(strcmp(cmd,"q")==0) exit(0); return mensagem_de_erro(E_COMMAND); }
int main(int argc, char *argv[]) { key_t key; int msgqueue_id; struct minhastruct msgponteiro; if(argc ==1) { ajuda(); } key = ftok(".", 'm'); if((msgqueue_id = msgget(key, IPC_CREAT|0660)) == -1) { perror("msgget"); exit(1); } switch(tolower(argv[1][0])) { case 'e': enviar_mensagem(msgqueue_id, (struct minhastruct*)&msgponteiro, atol(argv[2]), argv[3]); break;; case 'r': ler_mensagem(msgqueue_id, &msgponteiro, atol(argv[2])); break; case 'a': remove_queue(msgqueue_id); break; case 'm': mudar_permissoes(msgqueue_id, argv[2]); break; default: ajuda(); } return(0); }
/** * @fn void main(void) * @brief Funcao principal do programa * * Aqui esta contido a FSM que foi especificada para o * trabalho, ela possui dois estados, PARADO e MEDINDO. * Estas ficam em um laco infinito esperando que o usuario * envie mensagens que ativem as demais funcoes descritas * nessa documentacao. **/ void main(void) { PE_low_level_init(); //Configura a memoria EEPROM configuraMem(); //Configura amostragem configuraAmostragem(); //Configura botao IRQ configuraIRQ(); //Configura tensao baixa configuraLVD(); //Estado inicial depende se a memoria esta ou nao cheia if (memCheia == TRUE) { estado = ePARADO; } else { estado = eMEDINDO; } escreveSerial("\n**********************************************"); escreveSerial("\n DATALOGGER DE TEMPERATURA "); escreveSerial("\n**********************************************"); escreveSerial("\n Lucas Cielo, Iury Cleveston, Miguel Pfitcher "); escreveSerial("\n**********************************************"); for (;;) { //Alimenta o DOG WDog_Clear(); //Verifica se chegou algum caracter na serial verificaSerial(); switch (estado) { case eMEDINDO: //Verifica se a memoria esta cheia if (memCheia == TRUE) { HEADER cabecalho; //Para amostragem paraAmostragem(); //Obtem data/hora e salva na struct (void) relogio_GetTime(&(cabecalho.time)); (void) relogio_GetDate(&(cabecalho.date)); //Popula struct que sera salva na memoria cabecalho.tipo = (bool) EVENTO; cabecalho.dado = (int16_t) MEMORIA_CHEIA; //Salva header na memoria salvaHeader(&cabecalho); estado = ePARADO; } else if (botaoApertado == 1 && segundos >= 1 && apertado == FALSE) { //Se o botao foi clicado uma vez //Reset IRQ para novo clique resetIRQ(); estado = ePARADO; } else if (botaoApertado == 2) { //Se o botao foi clicado duas vezes em menos de 1s //Reset IRQ para novo clique resetIRQ(); //Faz upload dos dados mostrar(); } else if (botaoApertado == 1 && segundos >= 3) { //Se o botao foi clicado e mantido pressionado por 3s //Reset IRQ para novo clique resetIRQ(); //Para a amostragem paraAmostragem(); escreveSerial("\nApagando Memoria..."); //Limpa memoria limparMem(FALSE); escreveSerial("\nMemoria Apagada!"); } else if (autenticado == TRUE && (strcmp(buffer, "status") == 0)) { //Mostra status do sistema status(); } else if (autenticado == TRUE && (strcmp(buffer, "ajuda") == 0)) { //Mostra ajuda do sistema ajuda(); } else if (autenticado == TRUE && (strcmp(buffer, "senha") == 0)) { //Altera senha de configuracao setSenha(); } else if (autenticado == TRUE && (strcmp(buffer, "amostragem") == 0)) { //Para amostragem paraAmostragem(); //Altera taxa de amostragem setAmostragem(); } else if (autenticado == TRUE && (strcmp(buffer, "parar") == 0)) { estado = ePARADO; } else if (autenticado == TRUE && (strcmp(buffer, "mostrar") == 0)) { //Mostra dados na tela mostrar(); } else if (autenticado == TRUE && (strcmp(buffer, "apagar") == 0)) { //Para amostragem paraAmostragem(); escreveSerial("\nApagando Memoria..."); //Limpa dados da memoria limparMem(FALSE); escreveSerial("\nMemoria Apagada!"); } else if (autenticado == TRUE && (strcmp(buffer, "data") == 0)) { //Para amostragem paraAmostragem(); //Configura nova data setDate(); } else if (autenticado == TRUE && (strcmp(buffer, "hora") == 0)) { //Para amostragem paraAmostragem(); //Configura novo horario setTime(); } else if (autenticado == TRUE && (strcmp(buffer, "calibrar") == 0)) { //Para amostragem paraAmostragem(); //Funcao que calibra o sensor calibrar(); } else if (autenticado == TRUE && (strcmp(buffer, "sair") == 0)) { //Funcao que desloga o usuario sair(); } else if (amostrando == FALSE) { //Inicia amostragem iniciaAmostragem(); } break; case ePARADO: if (botaoApertado == 1 && segundos >= 1 && apertado == FALSE) { //Reset IRQ para novo clique resetIRQ(); //Verifica se a memoria esta cheia if (memCheia == FALSE) { estado = eMEDINDO; } } else if (botaoApertado == 2) { //Reset IRQ para novo clique resetIRQ(); mostrar(); } else if (botaoApertado == 1 && segundos >= 3) { escreveSerial("\nApagando Memoria..."); //Limpa memoria limparMem(FALSE); escreveSerial("\nMemoria Apagada!"); //Reset IRQ para novo clique resetIRQ(); estado = eMEDINDO; } else if (autenticado == TRUE && (strcmp(buffer, "ajuda") == 0)) { //Mostra ajuda do sistema ajuda(); } else if (autenticado == TRUE && (strcmp(buffer, "status") == 0)) { //Mostra status do sistema status(); } else if (autenticado == TRUE && (strcmp(buffer, "senha") == 0)) { //Altera senha de configuracao setSenha(); } else if (autenticado == TRUE && (strcmp(buffer, "amostragem") == 0)) { //Altera taxa de amostragem setAmostragem(); } else if (autenticado == TRUE && (strcmp(buffer, "ir") == 0)) { //Verifica se a memoria esta cheia if (memCheia == FALSE) { estado = eMEDINDO; } else { escreveSerial("\nMemoria Cheia!"); } } else if (autenticado == TRUE && (strcmp(buffer, "mostrar") == 0)) { //Mostrar dados na tela mostrar(); } else if (autenticado == TRUE && (strcmp(buffer, "apagar") == 0)) { escreveSerial("\nApagando Memoria..."); //Limpa memoria limparMem(FALSE); escreveSerial("\nMemoria Apagada!"); estado = eMEDINDO; } else if (autenticado == TRUE && (strcmp(buffer, "data") == 0)) { //Configura nova data setDate(); } else if (autenticado == TRUE && (strcmp(buffer, "hora") == 0)) { //Configura novo horario setTime(); } else if (autenticado == TRUE && (strcmp(buffer, "calibrar") == 0)) { //Funcao que calibra o sensor calibrar(); } else if (autenticado == TRUE && (strcmp(buffer, "sair") == 0)) { //Funcao que desloga o usuario sair(); } else if (amostrando == TRUE) { //Para amostragem paraAmostragem(); } break; default: estado = eMEDINDO; break; } } /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/ for (;;) { } /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/ } /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
int main(int argc, char *argv[]){ char nome_arquivo[60]; int opcao; if(argc == 1){ printf("É necessário indicar ao menos o nome do arquivo de entrada!\n\n"); printf("Para mais detalhe, indique a diretiva -h para acessar a Seção Ajuda\n\n"); return 0; } while((opcao = getopt(argc,argv,"ha:b:c:f:i:r:t:")) != -1){ switch (opcao) { case 'h': { ajuda(); return 0; } case 'i': { strcpy(nome_arquivo, optarg); break; } case 'a': { alpha = atof(optarg); break; } case 'b': { beta = atof(optarg); break; } case 'c': { ciclos = atoi(optarg); break; } case 'f': { NumeroFormigas = atoi(optarg); break; } case 'r': { rho = atof(optarg); break; } case 't': { num_threads = atoi(optarg); break; } } } FILE* fp; if((fp = fopen(nome_arquivo, "r")) == NULL){ printf("Arquivo inexistente\n"); return 0; } readgraph(fp); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &wrank); MPI_Comm_size(MPI_COMM_WORLD, &wsize); inicializarVertices(); melhor_geral.qtdVertice = 0; melhor_colonia = (Formiga *) calloc (ciclos, sizeof (Formiga)); AntSystemColony(); //barreira //MPI_Send(&BUFFER, NUM_ELEMENTOS, MPI_INT, DESTINO, TAG, COMUNICADOR); //if(wrank == 0){} //MPI_Send(&wrank, 1, MPI_INT, destino, 0, MPI_COMM_WORLD); //MPI_Recv(&BUFFER, NUM_ELEMENTOS, MPI_INT, FONTE, TAG, COMUNICADOR, STATUS, ERROR); //MPI_Recv(&mensagem, 1, MPI_INT, origem, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /*if(dele x recebeu){ escolhe } send*/ //comparar os resultados (dele x recebido) //printf("O Processo: %d recebeu de %d, o seu wrank: %d\n\n", wrank, origem, mensagem); if(wrank == 0){ mostraRespostaColonia(&melhor_geral); } MPI_Finalize(); //================== //pthread_mutex_init(&lock, NULL); //pthread_barrier_init(&barreira, NULL, num_threads); //pthread_t threads[num_threads]; //================== //inicializarVertices(); //melhor_geral.qtdVertice = 0; //melhor_colonia = (Formiga *) calloc (ciclos, sizeof (Formiga)); //int i; //for(i = 0; i < num_threads; i++){ // pthread_create(&threads[i], NULL, AntSystemColony, (void *) &i); //} //for(i = 0; i < num_threads; i++){ // pthread_join(threads[i], NULL); //} //mostraRespostaColonia(&melhor_geral); //AntSystemColony(); return 0; }