/* Auteur: Lsinc-Jedai */ /* Plateforme: Win32 */ /* Compilateur/version: gcc/? */ /* Amélioration de Lsinclar-2 par Jedai */ /* Dernière modif: 07/08/2006, 23h42 */ /* Remplit buffer avec fread() puis parcourt buffer caractère par caractère: si c'est un '<' => tag=1 si c'est un '>' => tag=0 si c'est un '"' => si on est dans un tag si flag : puts(URL) + reset variables sinon si flag et (précédents == '=FERH A') : flag=1 sinon si flag et (précédents == '=ferh a') : flag=1 sinon si flag et (précédents == '=CRS GMI'): img=1 sinon si flag et (précédents == '=crs gmi'): img=1 sinon si flag ou img : ajoute lettre à URL. Reconnait ça et rien d' autre: <A HREF="url"> <a href="url"> <A HREF='url'> <a href='url'> <IMG SRC="url"> <IMG SRC='url'> <img src="url"> <img src='url'> */ #include <stdio.h> #include <string.h> #include <fcntl.h> int main() { char buf[8192]; /* lu sur stdin */ int i=1, n=0; /* i caractères lus, n pour boucler dessus */ uint32_t test1 = 0; uint32_t test2 = 0; char URL[1024]; /* url */ unsigned short b=0; /* sa longueur en octets */ unsigned char tag=0, flag=0, img=0; /* les flags */ memset(URL, 0, 1024); /* initialise tableau de char */ while (i) { i = fread(buf, 1, 8192, stdin); for (n=0; n<i; n++) { if (buf[n]==0X3C) tag=1; else if (buf[n]==0X3E) tag=0; else if (buf[n]==0X22 || buf[n]==0X27) { if (tag) { if (flag || img) { puts(URL); flag = img = b = 0; memset(URL,0, 1024); } else if ( (test1 & 0x00FFFFFF) == 0x00612068 && test2 == 0x7265663D ) flag=1; else if ( (test1 & 0x00FFFFFF) == 0x00412048 && test2 == 0x5245463D ) flag=1; else if ( test1 == 0x494D4720 && test2 == 0x5352433D ) img=1; else if ( test1 == 0x696D6720 && test2 == 0x7372633D ) img=1; } } else if (flag || img) URL[b++] = buf[n]; test1 = (test1 << 8) + (test2 >> 24); test2 = (test2 << 8) + buf[n]; } //for } // while fread() return 0; }