Página 1 de 1

Comando EJECT está produzindo um Chr(13)

Enviado: 16 Out 2012 10:32
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

Comando EJECT está produzindo um Chr(13)

Enviado: 16 Out 2012 11:49
por lugab
Comigo isso tb ocorre, Asimoes...

Até vou copiar sua idéia...

Comando EJECT está produzindo um Chr(13)

Enviado: 16 Out 2012 15:06
por alxsts
Olá!

Seria o caso de postar no grupo de desenvolvimento do Harbour...

Comando EJECT está produzindo um Chr(13)

Enviado: 16 Out 2012 17:41
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;
}

Comando EJECT está produzindo um Chr(13)

Enviado: 16 Out 2012 18:11
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.

Comando EJECT está produzindo um Chr(13)

Enviado: 16 Out 2012 19:03
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.