コード例 #1
0
ファイル: meushell.c プロジェクト: rodbossini/SO_EP1
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;
}
コード例 #2
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;
}
コード例 #3
0
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;
}
コード例 #4
0
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");
}
コード例 #5
0
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;
}
コード例 #6
0
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();
        }
    }
}
コード例 #7
0
ファイル: meushell.c プロジェクト: rodbossini/SO_EP1
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;
}
コード例 #8
0
ファイル: ListaLigada.c プロジェクト: rodbossini/SO_EP1
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;
			}
		}
	}
}
コード例 #9
0
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;
}
コード例 #10
0
ファイル: meushell.c プロジェクト: rodbossini/SO_EP1
int isComandoProprio (char * comando){
	return (contem(comandosProprios,comando));
}