Comando EJECT está produzindo um Chr(13)

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando EJECT está produzindo um Chr(13)

Mensagem por asimoes »

Em alguns relatórios do meu sistema está acontecendo esse problema no final do relatório após um EJECT
logo após o EJECT vem um caracter chr(13) em seguinda. Resolvi por hora usando uma função:

Código: Selecionar todos

FUNCTION EJECT
   ? Chr(12)
RETURN Nil

Código: Selecionar todos

FUNCTION MAIN
   SET CONSOLE OFF
   SET DEVICE TO PRINT
   SET PRINTER TO "TESTE.TXT"
   SET PRINT ON
   SetPrc(0,0)
   @ Prow()+1,01 SAY ""
   @ Prow()+2,01 SAY "TESTE"
   @ Prow()+1,01 SAY "TESTE IMPRIME UM Chr(13) APOS O EJECT"
   EJECT //EJECT()
   SET PRINT OFF
   SET PRINTER TO
   SET DEVICE TO SCREEN
   SET CONSOLE ON
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Comando EJECT está produzindo um Chr(13)

Mensagem por lugab »

Comigo isso tb ocorre, Asimoes...

Até vou copiar sua idéia...
lugab
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Comando EJECT está produzindo um Chr(13)

Mensagem por alxsts »

Olá!

Seria o caso de postar no grupo de desenvolvimento do Harbour...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando EJECT está produzindo um Chr(13)

Mensagem por asimoes »

Pesquisando nas pastas do harbour encontrei a função responsável pelo comando eject.
O comando eject é definido no std.ch
#command EJECT => __Eject()
E a função fica no fonte console.c na pasta rtl do harbour.
Agora é entender o que está acontecendo nesta função que imprime o caracter ♪.

Código: Selecionar todos

HB_FUNC( __EJECT ) /* Ejects the current page from the printer */
{
   PHB_PRNPOS pPrnPos;
   HB_FHANDLE hFile;

   if( ( hFile = hb_setGetPrinterHandle( HB_SET_PRN_ANY ) ) != FS_ERROR )
   {
      static const char s_szEop[ 4 ] = { 0x0C, 0x0D, 0x00, 0x00 }; /* Buffer is 4 bytes to make CodeGuard happy */
      hb_fsWrite( hFile, s_szEop, 2 );
   }

   pPrnPos = hb_prnPos();
   pPrnPos->row = pPrnPos->col = 0;
}
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Comando EJECT está produzindo um Chr(13)

Mensagem por alxsts »

Olá!

O EJECT ou __Eject() nada mais é que: ?? Chr(12) na impressora (é este carácter que você postou).

Essa rotina em C deveria fazer isso mas parece que está com erro. Acho que o 0x0C representa o caracter Chr(12). O estranho é o 0x0D logo a seguir (que é o Chr(13) ou ENTER)...

Experimente mudar para

Código: Selecionar todos

static const char s_szEop[ 4 ] = { 0x0C, 0x0C, 0x00, 0x00 } ou static const char s_szEop[ 4 ] = { 0x0C, 0x00, 0x00, 0x00 }
e recompilar.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando EJECT está produzindo um Chr(13)

Mensagem por asimoes »

alxsts,

O ideal é informar a equipe de desenvolvimento do harbour o que está acontecendo, por hora vou resolvendo com a função que eu fiz.

Obrigado pela informação.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder