/* 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;
}