[GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par gilles »

oui pour la ligne de code en question ça ne peut pas marcher si xd est effectivement de type (char *) et je ne vois pas pourquoi une vieille version de gcc l'acceptait. Je ne sais pas trop à quoi peut servir ce code et il n'est à priori pas portable. sauf si xd est un typedef exotique qui provient d'une librairie qui a évolué mais là encore ce n'est peut être pas très clean.

bon j'ai trouvé le code :

Code : Tout sélectionner

int read_byte_from_file (char *xd)
{
    // This needs to be written to read each byte from specified file
    int c=0;
    unsigned long currentpos,endpos;

    currentpos = ftell(inputFile);
    fseek(inputFile, 0, SEEK_END);
    endpos = ftell(inputFile);
    fseek(inputFile, currentpos, SEEK_SET);
    *xd=fgetc(inputFile);

    switch (msbsetting) {
        case 0:
            // No change
            break;
        case 1:
            // MSB is set byte 7 to 0
            xd = (int) xd & 127;
            break;
        case 2:
            // MSB is set byte 7 to 1
            xd = (int) xd | 128;
            break;
    }
    return feof(inputFile)-1;
}
et... heu... le code de cette fonction est stupide mais il ne fait rien en fait... on peut virer tout le switch (il fallait agir sur *xd pour faire un truc...). C'est une erreur ultra classique de qq1 qui vient du pascal par exemple (ou d'autres langages qui ont un vrai passage de variables par référence).
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par __sam__ »

Arf arf arf.. ce code est risible!!

Outre la manip avec ftell() qui sert à rien sauf à ralentir le programme, je pense qu'il manque systématiquement l'étoile devant xd au niveau du switch. L'expression

Code : Tout sélectionner

*xd = 127 & (int)*xd;
aurait ainsi beaucoup plus de sens. Et pour finir le feof()-1, qui retourne 0 quand on est à feof()==true et -1 sinon qui ne marche que si true==1 et faux==0. En vrai bon C il aurait fallu utiliser l'opérateur ternaire:

Code : Tout sélectionner

feof() ? 0 : -1
et laisser le compilo C optimiser ca au mieux.

Ce code est cradingue à mort!
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par gilles »

on lit un caractère donc char * a du sens (c'est la variable de retour, la fonction elle même retourne feof()) mais ce n'est pas un code très joli en général, si le code présente de l’intérêt quand même il mérite une petite mise aux normes.
Avatar de l’utilisateur
hlide
Messages : 3470
Inscription : 29 nov. 2017 10:23

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par hlide »

Ce code a l'air de n'avoir jamais été testé avec un `msbsetting` autre que 0. Ça laisse rêveur sur la qualité du code.

Et finalement l'erreur est avérée... indirectement par un cast sans fondement que le codeur n'a pas pu voir faute d'avoir ce type d'erreur en son temps.
Xavier_AL

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par Xavier_AL »

Le code est toujours mis à jour…

ce code vous semble-t-il corrompu , car le switch initialise une centaine de fois la variable "step" !:

Code : Tout sélectionner

                switch ( *xd ) {
                case '@':    // ESC @ Initialize

Code : Tout sélectionner

                switch ( (int) *xd ) {
                case '@':    // ESC @ Initialize
Ne règle pas le problème…
Bon, j'en suis à 156 erreurs.
Dernière modification par Xavier_AL le 17 sept. 2019 21:42, modifié 1 fois.
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par __sam__ »

En fait le codeur, même (surtout?) s'il fait du C++ ne sait pas ce qu'il fait. J'en veut pour preuve ce commentaire:

Code : Tout sélectionner

// MSB is set byte 7 to 0
dans lequel il mélange byte et bit. Il doit sans doute maîtriser un max les templates, la lib STL ,les itérateurs, le concept des visiteurs et de l'héritage (enfin j'espère, sinon ca sert à rien de faire du ++), mais ca n'en fait pas pour autant un bon codeur qui comprends ce qu'il fait et pourquoi ca marche (ou pas) ni pourquoi ca rame (preuve en est le ftell() super coûteux qui est appelé à chaque lecture d'octet, encore un qui croit que les appels systèmes se font à la même vitesse que les appels de fonctions dans l'espace utilisateur).
Dernière modification par __sam__ le 17 sept. 2019 22:00, modifié 1 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par gilles »

justement corriger les erreurs de compilation juste pour faire passer la compilation n'est pas la bonne approche car c'est souvent comme ca qu'on perd l'idée fonctionnelle de départ. Et puis si un bout de code ne faisait rien... le remplacer par un code qui fait quelquechose est risqué car il ne faut pas oublier que le code a été débuggé au moins partiellement (donc il ne faut pas qu'il fasse plus).

=> il faut corriger en rentrant dans le fonctionnel sans tout casser. C'est 1/2 journée de boulot maxi. sinon tout casser et tout refaire en s'en inspirant c'est plutôt quelques jours de taf.
Xavier_AL

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par Xavier_AL »

Soit, se code est donc un héritage délabré.
Et c'est le problème de ces sources créées à l'origine sur Amigas, Ataris… Xt…
Repris et adaptés pour le moderniser, il y aura toujours des artéfacts de codes incohérents.
Je ne vois pas la qualité, mais le potentiel de cette routine, qui apporte un émulation réelle de ces imprimantes, quand d'autre se limites à utiliser des TTF pour émuler l'imprimante.
:lol:

Non, je déconne…
RWAP
Messages : 2
Inscription : 31 mai 2020 21:09

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par RWAP »

I came across this thread about my code PrinterToPDF.

I apologise if you are struggling to understand the code - it compiles fine under Unix and has now been used on a couple of projects other than my own. We have not tried to compile it under Windows and not under C++, but we are open to suggestions on how to improve the code, make it more understandable and correct any actual errors.

Some of the typos in the comments are because the code was originally started by a German guy that I work with.

My own background is programming in a wide variety of languages - but I have not written too much in C (in fact my first C project was in 1990 when I wrote an ESC/P2 output printer driver for a Sinclair QL). PrinterToPDF is probably my second only C project!

I am surprised that no-one has reached out to me.
RWAP
Messages : 2
Inscription : 31 mai 2020 21:09

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par RWAP »

__sam__ a écrit : 17 sept. 2019 21:41 En fait le codeur, même (surtout?) s'il fait du C++ ne sait pas ce qu'il fait. J'en veut pour preuve ce commentaire:

Code : Tout sélectionner

// MSB is set byte 7 to 0
dans lequel il mélange byte et bit. Il doit sans doute maîtriser un max les templates, la lib STL ,les itérateurs, le concept des visiteurs et de l'héritage (enfin j'espère, sinon ca sert à rien de faire du ++), mais ca n'en fait pas pour autant un bon codeur qui comprends ce qu'il fait et pourquoi ca marche (ou pas) ni pourquoi ca rame (preuve en est le ftell() super coûteux qui est appelé à chaque lecture d'octet, encore un qui croit que les appels systèmes se font à la même vitesse que les appels de fonctions dans l'espace utilisateur).
The use of "set byte 7 to 0" etc is from the original German coder - I know it is "clear bit 7" in English and will correct this minor comment.

However, the use of ftell etc in the routine read_byte_from_file (char *xd) was just a very quick and dirty method of reading in the data from a file.

The original PrinterToPDF did not show how we read the data (as this project came from our own Retro-Printer module - www.retroprinter.com which reads data from GPIO pins, not from a file); but then people asked for an example of how they were supposed to read the data!

Yes, ideally, the file would be opened once and the file pointer would then update automatically, but the problem whenever you put some code like this in the wild is that people do not want to contribute - they expect the original author to do everything (and alas I do not have the time to do so).

Please feel free to contribute suggested improvements to the project if you want to see it used more widely.
Xavier_

Re: [GCC-DEVC++] Compilation de 'PrinterToPDF' en W32.

Message par Xavier_ »

HI Rich,

Welcome on this forum.
I tried to compile the code on the Gnu GCC, but the buffer (throw alloc command ) seem to the hang the windows the memory allocation pages.
Répondre