Evaluer le texte d'un fichier comme du code C.

Evaluer le texte d'un fichier comme du code C. - C - Programmation

Marsh Posté le 12-11-2004 à 21:43:10    

Je connais pas exactement le terme a employer pour ce genre de "lecture"
d'un fichier, mais en gros je voudrais "lire" le texte d'un fichier
comme du code c (sachant pertinament que ca doit etre du code c), ceci
pour eviter de "chercher" dans le texte.
 
J'ai le fichier test.txt, contenant la representation d'une image :
 
#define test_width 16
#define test_height 16
static unsigned char test_bits[] = {
   0x18, 0xc0, 0xc0, 0xe0, 0x30, 0x78, 0x00, 0x0c, 0x30, 0x3b, 0x30, 0x78,
   0x80, 0xc1, 0x36, 0x18, 0x0c, 0xf6, 0xbc, 0x61, 0x78, 0x60, 0x30, 0x18,
   0x30, 0xe0, 0x30, 0xc0, 0xe0, 0x01, 0x06, 0x00};
 
J'ai donc besoin de recuperer les dimensions (16 et 16) de cette image,  
mais aussi le tableau.
 
Plutot que d'extraire les chaines puis les convertir (enfin de ce prendre
la tête quoi) existe til un moyen plus intelligent, genre evaluer directement
les 3 lignes ?  :whistle:

Reply

Marsh Posté le 12-11-2004 à 21:43:10   

Reply

Marsh Posté le 12-11-2004 à 22:51:27    

le C ça s'évalue pas. fais le à la main ou avec un truc comme flex

Reply

Marsh Posté le 12-11-2004 à 23:00:21    

Chronoklazm a écrit :


#define test_width 16
#define test_height 16
static unsigned char test_bits[] = {
   0x18, 0xc0, 0xc0, 0xe0, 0x30, 0x78, 0x00, 0x0c, 0x30, 0x3b, 0x30, 0x78,
   0x80, 0xc1, 0x36, 0x18, 0x0c, 0xf6, 0xbc, 0x61, 0x78, 0x60, 0x30, 0x18,
   0x30, 0xe0, 0x30, 0xc0, 0xe0, 0x01, 0x06, 0x00};


 
Si ton fichier ne contient que ce texte la, un bete #include "test.txt" ne suffit pas ?

Reply

Marsh Posté le 12-11-2004 à 23:01:34    

Tu utilises une bibliothèque qui sait lire le format XBM :
http://www.dcs.ed.ac.uk/home/mxr/gfx/2d/XBM.txt


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-11-2004 à 23:01:37    

Taz a écrit :

le C ça s'évalue pas. fais le à la main ou avec un truc comme flex


Meuh si. Il y a Tcc ( http://fabrice.bellard.free.fr/tcc/ ) et smac, qui fait partie de xcoral.
 
Mais son format, ça ressemble furieusement à XPM (ou un truc dans le genre). Donc ça vaut le coup de regarder du coté des libs XPM...
 
edit: grillé par HelloWorld.


Message édité par Lam's le 12-11-2004 à 23:02:29
Reply

Marsh Posté le 12-11-2004 à 23:36:35    

C'est quoi l'arnaque avec Tcc? Il doit bien y avoir un inconvenient quelque part !

Reply

Marsh Posté le 12-11-2004 à 23:38:03    

Merci messieurs pour vos reponses :)
 
HelloWorld ===> J'ai pas le droit de faire ca :( C'est moi qui est censé le faire le bitmap, bmtoa et le atobm. (en gros ce qui lit et ecrit ce format)
 
Lam's ========> Pas de flex non plus.
 
Diody ========> Excellente idée ! Peut on faire un #include conditionnel dependant d'une variable ?  
 
Genre un truc comme  :
 

Code :
  1. /* Je recupere le nom de mon fichier depuis argv[1], donc le fichier se trouve dans le rep. courant ... */
  2. if(ok==true){
  3.    #include argv[1]
  4. else
  5.    printf("Error" );
  6. /* hhmmm et apres je l'ai dans le petch en fait, je ne peux
  7. pas recuperer les dimensions ... */


 
 
Bon va faloir faire tout à la main :(


Message édité par Chronoklazm le 12-11-2004 à 23:44:25
Reply

Marsh Posté le 12-11-2004 à 23:39:26    

Ace17 a écrit :

C'est quoi l'arnaque avec Tcc? Il doit bien y avoir un inconvenient quelque part !


 
Bah ça optimise pas, donc bye bye les perfs.  
 
Mais il y avait une version encore plus rikiki qui avait gagnée à l'ioccc (enfin, l'ioccc, c'est comme l'école des fans: tout le monde gagne).


Message édité par Lam's le 12-11-2004 à 23:40:19
Reply

Marsh Posté le 12-11-2004 à 23:45:01    

#include est une instruction du préprocesseur. C'est évalué à la compilation, pas à l'exécution. Donc non, on ne peut pas faire de #include conditionnel dépendant d'une variable. Ca n'a pas de sens.

Reply

Marsh Posté le 12-11-2004 à 23:47:20    

Chronoklazm a écrit :


Bon va faloir faire tout à la main :(


 
Oui. Donc lire les deux premières lignes, allouer de la mémoire, puis te taper les valeurs une par une (avec une mini-machine à état par exemple).  
 
Ca doit être le but de l'exercice...

Reply

Marsh Posté le 12-11-2004 à 23:47:20   

Reply

Marsh Posté le 12-11-2004 à 23:48:35    

... de se faire chier :)

Reply

Marsh Posté le 13-11-2004 à 00:01:05    

Mais le fait que les fichier xbm sont du code c et pas juste une suite de symboles (ou de carac. hexadecimaux comme les vrai fichier bitmap, jpeg ...) ca a une raison non ? Et cette raison ne peut (logiquement) etre autre chose que la maniere d'en faciliter la lecture ...
Enfin jveu dire pourquoi du code c ? C'est ptet pas pour rien.

Reply

Marsh Posté le 13-11-2004 à 00:04:08    

Oui, à la base, c'est fait pour que tu puisses inclure tes images à la compilation (typiquement: inclure les icones pour XWindows, tout comme les applications Windows incluent les .ico au format  BMP) pour que l'image soit à l'intérieur du fichier exécutable.
 
Mais dans ton cas, il faut que tu puisses charger n'importe quel type d'image, il faut donc réécrire un parser XBM.

Reply

Marsh Posté le 13-11-2004 à 10:30:28    

Ace17 a écrit :

C'est quoi l'arnaque avec Tcc? Il doit bien y avoir un inconvenient quelque part !


 
C'est limité à Linux/ELF/x86 :(
 
EDIT: en fait, non (je me basais sur une vieille version). Je viens de vérifier, il y a des ports Windows, FreeBSD :love: et il peut sortir de l'ARM et du TMS, on va bientôt pouvoir faire de l'embarqué avec :bounce:
 
EDIT2: wc -l tcc.c --> 10481 :D


Message édité par printf le 13-11-2004 à 10:41:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed