int executaComandoPath (struct Tokens * tokens){ //se tiver mais que dois elementos, quer dizer que é para adicionar ou remover variáveis do path if (tokens->tokens->total > 2){ //verifica se existem operadores após o comando próprio, se sim, nada é executado if (contem (tokens->tokens,"|") || contem (tokens->tokens,">") || contem (tokens->tokens,"<") || contem (tokens->tokens,"2>")) return 0; //se o proximo token for + adiciona tenta adicionar cada argumento ao ambiente if (strcmp(recupera (tokens->tokens,1),"+") == 0){ int i = 2; while (i < tokens->tokens->total){ //checa se o diretório existe antes de adicioná-lo... char * dir = recupera (tokens->tokens,i); DIR * op = opendir(dir); if (op == NULL){ printf ("Não foi possível adicionar diretório %s ao path: %s\n",dir,strerror(errno)); closedir(op); } else{ closedir(op); adiciona(ambiente,dir); } i++; } return 1; } //se o comando for do tipo path - ... tenta remover os elementos ... do ambiente else if (strcmp(recupera (tokens->tokens,1),"-") == 0){ int i = 2; while (i < tokens->tokens->total && ambiente->total >= 1){ removeValores(ambiente,recupera(tokens->tokens,i)); i++; } return 1; } } //se tiver somente um argumento, quer dizer que é pra imprimir as variáveis em path else if (tokens->tokens->total == 1){ int i = 0; while (i < ambiente->total - 1){ printf ("%s:",recupera(ambiente,i++)); } if (ambiente->total >= 1) printf ("%s\n",recupera (ambiente,i)); return 1; } return 0; }
bool VisualizadorPropriedades::alteracaoVariavelAmbiente(QTreeWidgetItem *itemAlterado, int coluna) { if(contem(itemAlterado, "Variavel de Ambiemte")) { if(contem(itemAlterado, "Nome")) { // DArco *arco = (DArco*) desenhoVisualizado; // arco->setCusto(itemAlterado->text(1).toInt()); // arco->atualizaVizualizacao(); cout << "Alteracao de custo do arco" << endl; } return true; } return false; }
bool VisualizadorPropriedades::alteracaoArco(QTreeWidgetItem *itemAlterado, int coluna) { if(contem(itemAlterado, "Arco")) { if(contem(itemAlterado, "Custo")) { DArco *arco = (DArco*) desenhoVisualizado; arco->setPeso(itemAlterado->text(1).toInt()); arco->atualizaVizualizacao(); cout << "Alteracao de custo do arco" << endl; } return true; } return false; }
void DisplayFile::addObj(Object* obj){ if(obj->getName() == "") throw MyException("Adicione um nome para este objeto.\n"); if(!contem(obj)){ adiciona(obj); }else throw MyException("Ja existe um objeto com o nome '"+ obj->getName() +"'.\n"); }
bool VisualizadorPropriedades::alteracaoLugar(QTreeWidgetItem *itemAlterado, int coluna) { if(contem(itemAlterado, "Lugar")) { // Conversao de tipo garantida se contem lugar DLugar *lugar = (DLugar*) desenhoVisualizado; return true; } return false; }
void VisualizadorPropriedades::duploClique(QTreeWidgetItem *itemClicado, int coluna) { cout << "Duplo clique em " << itemClicado->text(coluna).toLocal8Bit().constData() << endl; if(contem(itemClicado, "Lugar")) { DLugar *lugar = (DLugar*) desenhoVisualizado; if(itemClicado->columnCount() == 3) { WidgetProgramacao *wp = new WidgetProgramacao(parentWidget()); wp->editaInfoFicha(lugar, itemClicado->text(2).toInt()); wp->show(); } } }
int trataComandosEmGeral(struct Tokens * tokens){ if (contem(tokens->tokens,"path") || contem(tokens->tokens,"cd") || contem(tokens->tokens,"cd")){ printf ("Não se pode utilizar comandos próprios do shell dessa forma...\n"); return 0; } if (concatenaDiretoriosAosComandos(tokens)){ //se o comando não contém nenhum operador, chama a função abaixo if (!contem(tokens->tokens,"|") && !contem(tokens->tokens,">") && !contem(tokens->tokens,"<") && !contem(tokens->tokens,"2>")){ return trataComandoGeralSemOperadores(tokens); } //trata redirecionamento sem pipe else if (!contem(tokens->tokens,"|") && (contem(tokens->tokens,">") || contem(tokens->tokens,"<") || contem(tokens->tokens,"2>"))){ return trataComandoGeralSemPipe(tokens); } //trata pipe sem redirecionamento else{ return trataComandoGeralRedirEPipe(tokens); } } return 0; }
void removeValores (struct ListaLigada * listaLigada,char * valor){ if (listaLigada!= NULL){ struct Celula * atual = listaLigada->primeira; while (contem(listaLigada,valor) && atual != NULL){ if (strcmp(atual->dado,valor) == 0){ if (listaLigada->total== 1){ free (listaLigada->primeira); listaLigada->primeira = NULL; listaLigada->ultima = NULL; listaLigada->total--; } else if (atual == listaLigada->primeira){ listaLigada->primeira = atual->proxima; listaLigada->primeira->anterior = NULL; struct Celula * apagar = atual; atual = atual->proxima; free (apagar); listaLigada->total--; } else if( atual == listaLigada->ultima){ listaLigada->ultima = listaLigada->ultima->anterior; listaLigada->ultima->proxima = NULL; struct Celula * apagar = atual; atual = atual->proxima; free(apagar); listaLigada->total--; } else{ struct Celula * anterior = atual->anterior; struct Celula * proxima = atual->proxima; if (proxima != NULL) proxima->anterior = anterior; if (anterior != NULL) anterior->proxima = proxima; struct Celula * apagar = atual; atual = atual->proxima; free (apagar); listaLigada->total--; } } else{ atual = atual->proxima; } } } }
bool VisualizadorPropriedades::alteracaoDesenho(QTreeWidgetItem *itemAlterado, int coluna) { if(contem(itemAlterado, "Geometrico")) { if(contem(itemAlterado, "X")) { cout << "Alteracao posicao X" << endl; desenhoVisualizado->setX(itemAlterado->text(1).toFloat()); desenhoVisualizado->atualizaVizualizacao(); return true; }else if(contem(itemAlterado, "Y")) { cout << "Alteracao posicao Y" << endl; desenhoVisualizado->setY(itemAlterado->text(1).toFloat()); desenhoVisualizado->atualizaVizualizacao(); return true; }else if(contem(itemAlterado, "Largura")) { cout << "Alteracao posicao Largura" << endl; desenhoVisualizado->setLargura(itemAlterado->text(1).toInt()); desenhoVisualizado->atualizaVizualizacao(); return true; }else if(contem(itemAlterado, "Altura")) { cout << "Alteracao posicao Altura" << endl; desenhoVisualizado->setAltura(itemAlterado->text(1).toInt()); desenhoVisualizado->atualizaVizualizacao(); return true; } }else if( contem(itemAlterado, "Nome")) { desenhoVisualizado->setNome(itemAlterado->text(coluna)); desenhoVisualizado->atualizaVizualizacao(); cout << "Alteracao Nome" << endl; return true; } return false; }
int isComandoProprio (char * comando){ return (contem(comandosProprios,comando)); }