home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <ctype.h>
-
- char KosmoSoftID[] = "(@)# prnro.c 1.0 V14.04.88 (C) KosmoSoft";
-
- /*
- * prnro.c
- *
- * konverteer ANSI printerkodes naar epson-kode.
- * Alleen geschikt voor gebruik met NRO, omdat alleen
- * bold/italic/underline ondersteund worden.
- * Voor de aardigheid heb ik er ook nog NLQ aan/uit bij
- * gedaan.
- *
- * Werkt van stdin naar stdout.
- *
- * (C) Copyright KosmoSoft 1988
- *
- */
-
- void AnsiToEpson(), DoEscape(), DoCSI(), CollectCommand();
- void DoSGR(), DoDEN(), Initialize();
- int CollectParameter();
-
- FILE *in, *out;
-
- int Parameter[8];
- int NumPars;
- int Command;
-
- #define SGR 'm'
- #define DEN '"'
-
- #define NBSP 0xA0
- #define ESC 0x1B
- #define CSI 0x9B
- #define CSI2 '['
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- in = stdin;
- out = stdout;
- AnsiToEpson();
- }
-
- void AnsiToEpson()
- {
- int chr;
-
- Initialize(); /* Start in bekende toestand */
-
- while ((chr = getc(in)) != EOF) {
- switch (chr) {
- case NBSP:
- putc(' ', out);
- continue;
- case ESC:
- DoEscape();
- continue;
- case CSI:
- DoCSI();
- continue;
- default:
- putc(chr, out);
- }
- }
-
- Initialize(); /* en laat geen rommel achter */
- }
-
- void DoEscape()
- {
- int chr;
-
- if ((chr = getc(in)) == CSI2) {
- DoCSI();
- } else if (chr != EOF) {
- putc(chr, out);
- }
- }
-
- void DoCSI()
- {
- CollectCommand();
-
- switch (Command) {
- case SGR:
- DoSGR();
- break;
- case DEN:
- DoDEN();
- break;
- }
- }
-
- void CollectCommand()
- {
- register int chr;
-
- NumPars = 0;
-
- while ( (chr = CollectParameter()) == ';')
- ;
-
- Command = chr;
- }
-
- int CollectParameter()
- {
- register int chr;
- register int par;
-
- par = 0;
-
- while (isdigit(chr = getc(in))) {
- par *= 10;
- par += chr - '0';
- }
-
- Parameter[NumPars++] = par;
-
- return chr;
- }
-
- char SGR0[] = "\0335\033-0\033F", /* normal characters */
- SGR3[] = "\0334", /* italics on */
- SGR23[]= "\0335", /* off */
- SGR4[] = "\033-1", /* underline on */
- SGR24[]= "\033-0", /* off */
- SGR1[] = "\033E", /* boldface on */
- SGR22[]= "\033F"; /* off */
-
- void DoSGR()
- {
- register int i;
- register char *string = NULL;
-
- for (i = 0; i < NumPars; i++) {
- switch (Parameter[i]) {
- case 0:
- string = SGR0;
- break;
- case 3:
- string = SGR3;
- break;
- case 23:
- string = SGR23;
- break;
- case 4:
- string = SGR4;
- break;
- case 24:
- string = SGR24;
- break;
- case 1:
- string = SGR1;
- break;
- case 22:
- string = SGR22;
- break;
- }
- if (string)
- fputs(string, out);
- }
- }
-
- char DEN1[] = "\033x0", /* NLQ off */
- DEN2[] = "\033x1", /* on */
- DEN3[] = "\033H", /* double strike off */
- DEN4[] = "\033G"; /* on */
-
- char *DENs[] = {
- "", DEN1, DEN2, DEN3, DEN4
- };
-
- void DoDEN()
- {
- register int i;
- register int den;
-
- for (i = 0; i < NumPars; i++) {
- if ( (den = Parameter[i]) <= 4)
- fputs(DENs[den], out);
- }
- }
-
-
- char RIS[] = "\375\033@\375";
-
- void Initialize()
- {
- fputs(SGR0, out);
- }
-