User Tools

Site Tools


outil_d_analyse_des_fichiers_printer.sys

Outil d'analyse du fichier PRINTER.SYS

Cet outil décode les fichiers de configuration des imprimantes PRINTER.SYS.

Exemple d'utilisation :

$ nrprinter PRINTER.SYS

nrprinter, version 1.0

Printer 0:
  Type: parallel
  Port: LPT1:
  Name: " TALLY MT80 PC "

  Translation table: no translation table defined.

Printer 1:
  Type: parallel
  Port: LPT2:
  Name: " MICROLINE 84 "

  Translation table:
    7F -> 20
    80 -> 20
    81 -> AD
    82 -> A5
    83 -> A1
    84 -> 20
    85 -> A0
    87 -> AF
    88 -> A4
    89 -> A6
    8A -> A3
    8B -> A8
    8C -> A7
    93 -> A9
    94 -> 20
    96 -> AC
    97 -> AB

Printer 2:
  Type: serial
  Port: COM1:
  Name: " FACIT 4565 "

  Translation table:
    40 -> 20
    5C -> 20
    7B -> 20
    7C -> 20
    7D -> 20
    7E -> 20
    7F -> 20
    80 -> 20
    81 -> 7E 08 75
    82 -> 7B
    83 -> 5E 08 61
    84 -> 7E 08 61
    85 -> 40
    86 -> 20
    87 -> 5C
    88 -> 5E 08 65
    89 -> 7E 08 65
    8A -> 7D
    8B -> 7E 08 69
    8C -> 5E 08 69
    93 -> 5E 08 6F
    94 -> 7E 08 6F
    96 -> 5E 08 75
    97 -> 7C

Printer 3:
  Type: parallel
  Port: LPT3:
  Name: " EPSON FX 100 "

  Translation table:
    81 -> 1B 52 02 7D 1B 52 00
    82 -> 1B 52 01 7B 1B 52 00
    83 -> 5E 08 61
    85 -> 1B 52 01 40 1B 52 00
    87 -> 1B 52 01 5C 1B 52 00
    88 -> 5E 08 65
    89 -> 1B 52 01 7E 08 65 1B 52 00
    8A -> 1B 52 01 7D 1B 52 00
    8B -> 1B 52 01 7E 08 69 1B 52 00
    8C -> 5E 08 69
    93 -> 5E 08 6F
    94 -> 1B 52 02 7C 1B 52 00
    96 -> 5E 08 75
    97 -> 1B 52 01 7C 1B 52 00
    7F -> 20
    80 -> 20
    84 -> 20
    86 -> 20

Code source :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *gSource = 0;
unsigned char *gBuffer = 0;
unsigned int gFileSize = 0;


void usage()
{
    printf("Usage: nrprinter filename\n");
}

int main(int argc, char *argv[])
{
    unsigned int i, j, k, lTmpInt;
    char lTmpChar;

    printf("nrprinter, version 1.0\n");
    if ((argc!=2))
    {
        usage();
        return -1;
    }

    gSource = fopen(argv[1],"rb");
    if (gSource == NULL)
    {
        printf("Error: cannot open file.\n");
        return -2;
    }

    fseek(gSource,0,SEEK_END);
    gFileSize = ftell(gSource);
    fseek(gSource,0,SEEK_SET);

    gBuffer = malloc(gFileSize);
    if (gBuffer == NULL)
    {
        printf("Error: cannot allocate memory.\n");
        fclose(gSource);
        return -3;
    }

    fread(gBuffer,1,gFileSize,gSource);
    fclose(gSource);

    for (i=0;i<4;i++) 
    {
        printf("\nPrinter %u:\n  Type: ",i);
        switch (gBuffer[i*22+2])
        {
            case 'P': 
                printf("parallel\n  Port: LPT%u:\n",gBuffer[i*22+3]+1); 
                break;
                     
            case 'S': 
                printf("serial\n  Port: COM%u:\n",gBuffer[i*22+3]+1); 
                break;

            default : printf("Unknown");
        }
        printf("  Name: \"");
        for(j=0;((lTmpChar=gBuffer[i*22+4+j])!=0)&&(j<18);j++) 
        {
            printf("%c",lTmpChar);
        }
        printf("\"\n\n");

        lTmpInt = gBuffer[i*22]+(gBuffer[i*22+1]<<8);
        j=0;
        printf("  Translation table: ");
        while (gBuffer[lTmpInt+j] != 0xff)
        { 
            printf("\n    %02X -> ",gBuffer[lTmpInt+j++]&0xff);
            for (k=0;k<gBuffer[lTmpInt+j];k++) 
            {
                printf("%02X ", gBuffer[lTmpInt+k+j+1]&0xff);
            }
            j += k+1;
        }
        if (j==0) 
        {
            printf("no translation table defined.");
        }
        printf("\n");
    }
 
    free(gBuffer);
    return 0;
}
outil_d_analyse_des_fichiers_printer.sys.txt · Last modified: 2025/03/17 22:46 by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki