/*********************************************************************** * * $FC Função: MEN GetMenuNome * ***********************************************************************/ MEN_tpCondRet MEN_GetMenuNome(MEN_tppMenus m, int id, char** nome){ MEN_tppMenu menu; GRA_ObterValor(m->grafo,id,(void**)&menu); *nome = menu->nome; return MEN_CondRetOK; }
GRA_tpCondRet GRA_ObterValorCorrente( GRA_tppGrafo pGrafo, void** pDado ) { /* Verifica se vertice pertence ao grafo; */ if (pGrafo->corrente == -1) { return GRA_CondRetGrafoVazio; } return GRA_ObterValor(pGrafo, pGrafo->corrente, pDado); }
/*********************************************************************** * * $FC Função: MEN DestruirOpcao * ***********************************************************************/ MEN_tpCondRet MEN_DestruirOpcao(MEN_tppMenus m, int idMenu, char cmd){ MEN_tppMenu menu; GRA_ObterValor(m->grafo,idMenu,(void**)&menu); do{ if(((MEN_tppOpcao)LIS_ObterValor(menu->opcoes))->cmd == cmd){ LIS_ExcluirElemento(menu->opcoes); return MEN_CondRetOK; } } while(LIS_AvancarElementoCorrente(menu->opcoes,1)==LIS_CondRetOK); return MEN_CondRetComandoInvalido; }
/*********************************************************************** * * $FC Função: MEN getbycmd * * $ED Descrição da Função * Obtem ponteiro pra Opcao a partir do seu caracter de comando. * ***********************************************************************/ static MEN_tppOpcao getbycmd(MEN_tppMenus m, int id, char cmd) { MEN_tppMenu menu; GRA_ObterValor(m->grafo,id,(void**)&menu); LIS_IrInicioLista(menu->opcoes); do{ MEN_tppOpcao o = (MEN_tppOpcao)LIS_ObterValor(menu->opcoes); if(o->cmd == cmd){ return o; } } while(LIS_AvancarElementoCorrente(menu->opcoes,1)==LIS_CondRetOK); }
/*********************************************************************** * * $FC Função: MEN CriarOpcao * ***********************************************************************/ MEN_tpCondRet MEN_CriarOpcao(MEN_tppMenus menus, int idMenu,char cmd, char* nome,MEN_tpCondRet (*callback)(EST_tppEstado e)){ MEN_tppMenu m; MEN_tppOpcao o = (MEN_tppOpcao)malloc(sizeof(Opcao)); if(o==NULL) return MEN_CondRetFaltouMemoria; o->nome = nome; o->cmd = cmd; o->callback = callback; GRA_ObterValor(menus->grafo,idMenu,(void**)&m); LIS_InserirElementoApos(m->opcoes,o); return MEN_CondRetOK; }
/*********************************************************************** * * $FC Função: MEN GetMenuOpcoes * ***********************************************************************/ MEN_tpCondRet MEN_GetMenuOpcoes(MEN_tppMenus m,int id,char** l, int* tam){ int n,x; MEN_tppMenu menu; char* l1; n = 0; GRA_ObterValor(m->grafo,id,(void**)&menu); x = LIS_NumeroDeElementos(menu->opcoes); *l = (char*)malloc(x); l1 = (char*)malloc(x); LIS_IrInicioLista(menu->opcoes); do{ MEN_tppOpcao o = (MEN_tppOpcao)LIS_ObterValor(menu->opcoes); l1[n] = o->cmd; n++; } while(LIS_AvancarElementoCorrente(menu->opcoes,1)==LIS_CondRetOK); *tam = n; strcpy(*l,l1); return MEN_CondRetOK; }
TST_tpCondRet TST_EfetuarComando( char * ComandoTeste ) { GRA_tppGrafo epGrafo=NULL; int inxGrafo = -1 , numLidos = -1 , CondRetEsp = -1 ; TST_tpCondRet CondRet ; char StringDado[ DIM_VALOR ] ; char * pDado ; int ValEsp = -1 ; int i ; int j; int numElem = -1 ; StringDado[ 0 ] = 0 ; /* Efetuar reset de teste de grafo */ if ( strcmp( ComandoTeste , RESET_GRAFO_CMD ) == 0 ) { for( i = 0 ; i < DIM_VT_GRAFO ; i++ ) { VTGRAFO[ i ] = NULL ; } /* for */ return TST_CondRetOK ; } /* fim ativa: Efetuar reset de teste de grafo */ /* Testar CriarGrafo */ else if ( strcmp( ComandoTeste , CRIAR_GRAFO_CMD ) == 0 ) { numLidos = LER_LerParametros( "i" , &inxGrafo ) ; if ( ( numLidos != 1 ) || ( ! ValidarInxGrafo( inxGrafo , VAZIO ))) { return TST_CondRetParm ; } /* if */ GRA_CriarGrafo(&VTGRAFO[ inxGrafo ]) ; //epgrafo retornado por ref return TST_CompararPonteiroNulo( 1 , VTGRAFO[ inxGrafo ] , "Erro em ponteiro de nova grafo." ) ; } /* fim ativa: Testar CriarGrafo */ /* Testar Esvaziar grafo grafo */ else if ( strcmp( ComandoTeste , ESVAZIAR_GRAFO_CMD ) == 0 ) { numLidos = LER_LerParametros( "i" , &inxGrafo ) ; if ( ( numLidos != 1 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO ))) { return TST_CondRetParm ; } /* if */ GRA_EsvaziarGrafo( &VTGRAFO[ inxGrafo ] ) ; return TST_CondRetOK ; } /* fim ativa: Testar Esvaziar grafo grafo */ /* Testar Destruir grafo */ else if ( strcmp( ComandoTeste , DESTRUIR_GRAFO_CMD ) == 0 ) { numLidos = LER_LerParametros( "i" , &inxGrafo ) ; if ( ( numLidos != 1 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO ))) { return TST_CondRetParm ; } /* if */ GRA_DestruirGrafo( &VTGRAFO[ inxGrafo ] ) ; VTGRAFO[ inxGrafo ] = NULL ; return TST_CondRetOK ; } /* fim ativa: Testar Destruir grafo */ /* Testar inserir elemento antes */ else if ( strcmp( ComandoTeste , INSERIR_NO_CMD ) == 0 ) { numLidos = LER_LerParametros( "iiii" , &inxGrafo , &i,&j , &CondRetEsp ) ; if ( ( numLidos != 4 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ if ( pDado == NULL ) { return TST_CondRetMemoria ; } /* if */ strcpy( pDado , StringDado ) ; CondRet =(TST_tpCondRet) GRA_InserirAresta( &VTGRAFO[ inxGrafo ] , i,j,0,0 ) ; if ( CondRet != GRA_CondRetOK ) { free( pDado ) ; } /* if */ return TST_CompararInt( CondRetEsp , CondRet , "Condicao de retorno errada ao inserir antes." ) ; } /* fim ativa: Testar inserir elemento antes */ /* Testar inserir elemento apos */ else if ( strcmp( ComandoTeste , INS_ELEM_APOS_CMD ) == 0 ) { numLidos = LER_LerParametros( "isi" , &inxGrafo , StringDado , &CondRetEsp ) ; if ( ( numLidos != 3 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ pDado = ( char * ) malloc( strlen( StringDado ) + 1 ) ; if ( pDado == NULL ) { return TST_CondRetMemoria ; } /* if */ strcpy( pDado , StringDado ) ; CondRet = GRA_InserirElementoApos( VTGRAFO[ inxGrafo ] , pDado ) ; if ( CondRet != GRA_CondRetOK ) { free( pDado ) ; } /* if */ return TST_CompararInt( CondRetEsp , CondRet , "Condicao de retorno errada ao inserir apos." ) ; } /* fim ativa: Testar inserir elemento apos */ /* Testar excluir simbolo */ else if ( strcmp( ComandoTeste , EXC_ELEM_CMD ) == 0 ) { numLidos = LER_LerParametros( "ii" , &inxGrafo , &CondRetEsp ) ; if ( ( numLidos != 2 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ return TST_CompararInt( CondRetEsp , GRA_ExcluirElemento( VTGRAFO[ inxGrafo ] ) , "Condi��o de retorno errada ao excluir." ) ; } /* fim ativa: Testar excluir simbolo */ /* Testar obter valor do elemento corrente */ else if ( strcmp( ComandoTeste , OBTER_VALOR_CMD ) == 0 ) { numLidos = LER_LerParametros( "isi" , &inxGrafo , StringDado , &ValEsp ) ; if ( ( numLidos != 3 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ pDado = ( char * ) GRA_ObterValor( VTGRAFO[ inxGrafo ] ) ; if ( ValEsp == 0 ) { return TST_CompararPonteiroNulo( 0 , pDado , "Valor n�o deveria existir." ) ; } /* if */ if ( pDado == NULL ) { return TST_CompararPonteiroNulo( 1 , pDado , "Dado tipo um deveria existir." ) ; } /* if */ return TST_CompararString( StringDado , pDado , "Valor do elemento errado." ) ; } /* fim ativa: Testar obter valor do elemento corrente */ /* Testar ir para o elemento inicial */ else if ( strcmp( ComandoTeste , IR_INICIO_CMD ) == 0 ) { numLidos = LER_LerParametros( "i" , &inxGrafo ) ; if ( ( numLidos != 1 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ GRA_IrInicioGrafo( VTGRAFO[ inxGrafo ] ) ; return TST_CondRetOK ; } /* fim ativa: Testar ir para o elemento inicial */ /* GRA &Ir para o elemento final */ else if ( strcmp( ComandoTeste , IR_FIM_CMD ) == 0 ) { numLidos = LER_LerParametros( "i" , &inxGrafo ) ; if ( ( numLidos != 1 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ GRA_IrFinalGrafo( VTGRAFO[ inxGrafo ] ) ; return TST_CondRetOK ; } /* fim ativa: GRA &Ir para o elemento final */ /* GRA &Avan�ar elemento */ else if ( strcmp( ComandoTeste , AVANCAR_ELEM_CMD ) == 0 ) { numLidos = LER_LerParametros( "iii" , &inxGrafo , &numElem , &CondRetEsp ) ; if ( ( numLidos != 3 ) || ( ! ValidarInxGrafo( inxGrafo , NAO_VAZIO )) ) { return TST_CondRetParm ; } /* if */ return TST_CompararInt( CondRetEsp , GRA_AvancarElementoCorrente( VTGRAFO[ inxGrafo ] , numElem ) , "Condicao de retorno errada ao avancar" ) ; } /* fim ativa: GRA &Avan�ar elemento */ return TST_CondRetNaoConhec ; } /* Fim fun��o: TGRA &Testar grafo */