To precisando resolver um problema usando tecnicas POG (Programacao Orientada a Gambiarra), a impressora precisa ser setada com o envio do caracter 15 da tabela ASCII.

 

Como fazer isso em C ?

 

Exibições: 383

Respostas a este tópico

Bom, eu faria uma função que me retornasse este caractere, bastando enviá-lo para o pino desejado.

Mais ou menos assim:

char envioCaracter(){

 return 0xF;

}

Não tenho como testar aqui, mas acho que é por aí.

Imprimir o caracter nao eh problema... printf("%c", 15) ja resolve, nao to sabendo como direcionar isso pra impressora.

Sera salvar no arquivo LPT1 resolve ?

Qual SO vc está usando?

Como já foi dito:

printf("%c", 15);

e tb

putchar( 15 );

Ambas enviam o caracter 15 (^O) para a saída padrão, se bem me lembro esse é o código para início de condensado, 18 (^R) é o fim de condensado (pode ser trocado, mas você já sabe isso).

Você já deve ter criado o mecanismo de enviar dados a impressora, provavelmente envia para uma variavel antes, então tente:

/*buf é um apontador para char definido em algum lugar e com tamanho suficiente */

/* s é um apontador contendo o texto a ser "condesnsado"*/

 

/* os dois abaixo podem ser definidos em algum .h */

int inicond = 15,

    fimcond = 18;

sprintf(buf,  "%c%s%c", inicond, s, fimcond);

Então é só enviar "buf" para o arquivo (ou concatenar a alguma variável que já esteja sendo usada para montar a impressão), a forma de enviar tudo para a impressora dependerá do OS/plataforma utilizada.

Desculpe ter me alongado, sou muito saudosista :) .

 

 

 



Marcelo Delnero disse:
Trabalhei em uma empresa onde o pessoal precisava ficar carregando máscaras de impressão e comandos. Normalmente eles tinham um arquivo binário pronto com os códigos ASCII e simplesmente copiavam este arquivo para a LPT correspondente.

se não me engano o comando era print:
print /D:LPT1 c:\nomedoarquivo.txt

o comando copy também rola:
copy c:\nomedoarquivo.txt lpt1:


Infelizmente não tenho uma impressora aqui pra testar.
Só um detalhe, se usar copy passe o parâmetro /b (binary)
copy /b c:\nomedoarquivo.txt lpt1:


Marcelo Delnero disse:
Trabalhei em uma empresa onde o pessoal precisava ficar carregando máscaras de impressão e comandos. Normalmente eles tinham um arquivo binário pronto com os códigos ASCII e simplesmente copiavam este arquivo para a LPT correspondente.

se não me engano o comando era print:
print /D:LPT1 c:\nomedoarquivo.txt

o comando copy também rola:
copy c:\nomedoarquivo.txt lpt1:

Ai basta criar o arquivo com os bytes necessários (no seu caso o caracter 15) usando o programa em C e copiar para a porta.

Agora, se você precisar mandar o código diretamente do programa em C, dá para usar a funcão CreateFile utilizando "LPT1:" como nome do arquivo.

HANDLE hParallel = CreateFile("LPT1", 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

Dá uma olhada neste artigo:

http://www.codeguru.com/forum/showthread.php?t=231214

Abraços!


Infelizmente não tenho uma impressora aqui pra testar.

Uso Linux, mas o software vai ser executado em Windows, fiz da seguinte forma:

 

#include <stdio.h>

#define SETPRINT        15

int main()
{
        FILE *p;
        const char printoutput[] = "LPT1";

        p = fopen(printoutput, "w");
        fprintf(p, "%c", SETPRINT);
        fclose(p);

        return 0;
}

 

Obrigado pelas dicas.

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço