Retornando sequencia de escape [RESOLVIDO]

1. Retornando sequencia de escape [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 28/05/2014 - 12:25h

Pessoal , quero pedir ajuda de vocês pq esse problema está meio cascudo, estou implementando uma biblioteca estilo ncurses minha, agora eu estou na parte que seria das funções getx gety e getxy, que são funções que pegam a posição do cursor.

eu já tenho uma idéia de como fazer isso, utilizando o printf assim:

printf("\ 033[6n");

ele printa na tela as posições do cursor neste modelo : ^[[1;3R

onde o primeiro número é o o x e o segundo o y, o fato é o seguinte, eu tento buscar isso no stdout retirando os caracteres que não me interessam e deixando só os números em um array para depois converter par int com atoi;

o fato é que ao ler de stdout ele simplesmente não retorna mais.
eu já tentei fazer o mesmo usando fprintf para o stdin para depois poder ler e não deu, e também já tentei com um arquivo externo.
A pergunta é, como resgatar esses dados stdout, ou caso conheçam, existe alguma função que faça isso? ou mesmo existe alguma outra função que manipula diretamente sequências de escape?

segue o código atual:


#include <stdio.h>
#include <stdlib.h>

void main()
{
int x,y,ch;
char str1[5],str2[5],*p = str1;
printf("\ 033[6n\n\r");
while(ch != '\n')
{
scanf("%d",&x);
ch = fgetc(stdout);
if(ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9')
{
*p = ch;
p++;
}
if(ch == ';')
p = str2;
}
x = atoi(str1);
y = atoi(str2);
printf("\n x = %s, y = %s ",str1,str2);
}



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/05/2014 - 20:50h

Já tentou ler do lugar óbvio, ou seja, a stream de leitura, que é stdin?

Aliás, melhor ainda é usar read() em cima do file descriptor 0.

3. Re: Retornando sequencia de escape [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 28/05/2014 - 22:21h

sim,e não tem nada, então ele abre para escrita, o que faz sentido, pq ele retorna essa sequência para o stdout ou stderr, só não o fiz com read, vou ver aqui com read;


4. Re: Retornando sequencia de escape [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 28/05/2014 - 23:09h

sim, realmente ele estava na stdin, mas já aproveitando o embalo, vc sabe alguma função c que leia strings sem exigir \n ?


5. Re: Retornando sequencia de escape [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 30/05/2014 - 04:57h

read(), como eu disse. Mas possivelmente você terá de tirar o terminal do modo canônico. Veja a documentação de “termios”.


6. Re: Retornando sequencia de escape [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 30/05/2014 - 23:53h

vc teria um exemplo de como tirar esse terminal do modo canônico?
pq eu já li um bucado de documentações aqui e eles só citam como setar o modo canonico que é o ICANON, e assim mesmo os exemplos, foram poucos, e eu preciso muito dessa biblioteca pronta logo, daí como vc já sabe o jeito de fazer se puder me citar um exemplo vai ser de grande ajuda mesmo( nem precisa ser no contexto do meu código eu só preciso ver como se faz), aí eu me viro e já marco como resolvido e melhor resposta.


7. Re: Retornando sequencia de escape [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 31/05/2014 - 00:52h

após muita procura consegui achar um exemplo sobre o bendito termios e como desativar o modo canônico, fiz os testes, porém conclui que irei precisar de uma outra modalidade de função pq o modo canônico dispensa o buffer e é justamente ele que guardaria a informação do printf, o que eu preciso mesmo é de algo que suje o buffer de e apenas ignore o bendito \n, mas em fim vou ver isso depois.

obrigado pela ajuda e vou marcar como resolvido.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts