Como criar minha própria função printf?

1. Como criar minha própria função printf?

Nelson Cole
nelsoncole72@

(usa Ubuntu)

Enviado em 12/12/2015 - 10:46h

Olá ! pessoal do Viva o Linux, desde já agradeço.

A dias que estou tentado desenvolver minha própria função printf em linguagem C eu gostaria que ela imprimisse na tela um int quando a opssão for %d e um caracter quando for %c.

Fiz até ai









void cout(char*mensagem, ...){

unsigned char*video=(unsigned char*)0x0B000;

while(*messagem!=0){
*video=*mensagem;
video++;
mensagem++;
*video=0x0F; /* cor do = fundo preto texto branco */
video++;
}
}


Alguém pode ajudar?


  


2. Re: Como criar minha própria função printf?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/12/2015 - 10:51h

Amigo, para você ter uma função "printf própria", você pode fazer algo desse estilo:



#include <stdarg.h>

[...]

void printfManeiro (char *format, ...)
{
char msg[1024] = { 0 };
register unsigned int i;
va_list ap;

va_start (ap,format);
vsprintf (msg, format, ap);
va_end (ap);

for (i = 0; i < strlen(msg); i++) {
if (msg[i] == '\\' && msg[i+1] == 'n') { // new line
putc (10, stdout); // new line
i++;
}
else if (msg[i] == '\\' && msg[i+1] == 't') { // tab
putc ('\t', stdout); // tab
i++;
} else {
putc (msg[i], stdout);
}
}
}


Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)



3. Re: Como criar minha própria função printf?

Nelson Cole
nelsoncole72@

(usa Ubuntu)

Enviado em 12/12/2015 - 11:52h

Thihup você incluio a biblioteca <stdarg.h>

o código é cláro o meu problema é que pretendo rodar o texto fora do sistema operativo, usando biblioteca padrão do sistema não irá funcionar, tem que ser eu mesmo a incluir a biblioteca.


4. Re: Como criar minha própria função printf?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/12/2015 - 14:46h

Mas amigo, imagino que a maioria dos compiladores já possuem essa biblioteca.

Ela é tão padrão como o <stdio.h> ou o <stdlib.h> [por isso o 'std' no começo]

Eu creio que você utiliza o <stdio.h>, então se utiliza ela, pode muito bem usar a <stdarg.h>

Mas deixe-me tentar entender: você quer re-escrever uma biblioteca tipo o stdio.h e fazer ser igual em todos os computadores? Explique-me melhor a situação.

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)



5. Re: Como criar minha própria função printf?

Gabriel Oliveira da Silva
Gabrielz

(usa Arch Linux)

Enviado em 12/12/2015 - 15:30h

Thihup escreveu:

Mas amigo, imagino que a maioria dos compiladores já possuem essa biblioteca.

Ela é tão padrão como o <stdio.h> ou o <stdlib.h> [por isso o 'std' no começo]

Eu creio que você utiliza o <stdio.h>, então se utiliza ela, pode muito bem usar a <stdarg.h>

Mas deixe-me tentar entender: você quer re-escrever uma biblioteca tipo o stdio.h e fazer ser igual em todos os computadores? Explique-me melhor a situação.

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)


Que parâmetro "..." é esse na função?
Migo, tem como entrar no Skype?


6. Re: Como criar minha própria função printf?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/12/2015 - 15:44h

Significa que pode ter mais de 1 parâmetro. Tipo, no printf tradicional podemos ter nenhum parâmetro, como podemos ter 10 parâmetros [ou mais].

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)



7. Re: Como criar minha própria função printf?

Gabriel Oliveira da Silva
Gabrielz

(usa Arch Linux)

Enviado em 12/12/2015 - 16:05h

Thihup escreveu:

Significa que pode ter mais de 1 parâmetro. Tipo, no printf tradicional podemos ter nenhum parâmetro, como podemos ter 10 parâmetros [ou mais].

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)


Hummm... entendi 25%, rs. Poderia dar um exemplo prático? (e cê nem entrou ainda no Skype :@)



8. Re: Como criar minha própria função printf?

Nelson Cole
nelsoncole72@

(usa Ubuntu)

Enviado em 12/12/2015 - 18:08h

Belz o seu código funcionou perfeito.


O printf que estou a escrever é parte de um Sistema Operacinal que está sendo desenvolvido em Assembly e C. Como é um projecto de estudo então devo reescrever a função printif sem incluir nenhuma bibilioteca que não seja feita por mim.


Quando escrevemos um caracter no endereço de memória 0x0B8000 o computador imprimi este caracter na tela como exemplo.


char *mem=((char*)0x0B000)'A'


9. Re: Como criar minha própria função printf?

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/12/2015 - 18:12h

Gabrielz escreveu:

Thihup escreveu:

Significa que pode ter mais de 1 parâmetro. Tipo, no printf tradicional podemos ter nenhum parâmetro, como podemos ter 10 parâmetros [ou mais].

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)


Hummm... entendi 25%, rs. Poderia dar um exemplo prático? (e cê nem entrou ainda no Skype :@)


Há funções do C que possuem os três pontinhos na sintaxe.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd

http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



10. Re: Como criar minha própria função printf?

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/12/2015 - 18:13h

nelsoncole72@ escreveu:

Olá ! pessoal do Viva Linux, desde já agrafeço.

A dias que estou tentado desenvolver minha própria função printf em linguagem C eu gostaria que ela imprimisse na tela um int quando a opssão for %d e um caracter quando for %c.

Fiz até ai


void cout(char*mensagem, ...){

unsigned char*video=(unsigned char*)0x0B000;

while(*messagem!=0){
*video=*mensagem;
video++;
mensagem++;
*video=0x0F; /* cor do = fundo preto texto branco */
video++;
}
}


Alguém pode ajudar?


Você não quer nada em Assembly, não é?

----------------------------------------------------------------------------------------------------------------
# apt-get purge ubuntu

http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



11. Re: Como criar minha própria função printf?

Nelson Cole
nelsoncole72@

(usa Ubuntu)

Enviado em 12/12/2015 - 18:35h

listeiro_037 desculpa pelo barbarismo (desde já agrafeço -> agradeço) vou editar o testo se ainda der.

Tem que ser em C em ASM já está a funcionar perfeito.


12. Re: Como criar minha própria função printf?

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/12/2015 - 18:43h

Assembly é muito difícil. A menos que você costure testes de if() com chamadas de interrupção para imprimir caracteres.

Eu imagino que um dos possíveis caminhos seria baixar o código-fonte do GCC e estudar como se faz a implementação do printf().

----------------------------------------------------------------------------------------------------------------
# apt-get purge ubuntu

http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts