/* Programme pour tester les routines de recherche dans un tampon des Listings 14-1 & 14-3. (doit être modifié en tant que sentinelle du tampon recherché pour pouvoir être utilisé dans le Listing 14-4.) */ #include #include #include #define DISPLAY_LENGTH 40 #define BUFFER_SIZE 0x8000 extern unsigned char * FindString(unsigned char *, unsigned int, unsigned char *, unsigned int); void main(void); void main() { unsigned char TempBuffer[DISPLAY_LENGTH+1]; unsigned char Filename[150], Pattern[150], *MatchPtr, *TestBuffer; int Handle; unsigned int WorkingLength; printf("Fichier à rechercher:"); gets(Filename); printf("motif à rechercher:"); gets(Pattern); if ( (Handle = open(Filename, O_RDONLY | O_BINARY)) == -1 ) { printf("ne peut pas ouvrir le fichier: %s\n", Filename); exit(1); } /* récupère la mémoire contenant les données du tampon */ if ( (TestBuffer=(unsigned char *)malloc(BUFFER_SIZE+1)) == NULL) { printf("ne peut pas récupérer suffisamment de mémoire \n"); exit(1); } if ( (int)(WorkingLength = read(Handle, TestBuffer, BUFFER_SIZE)) == -1 ) { printf("Erreur de lecture du fichier %s\n", Filename); exit(1); } TestBuffer[WorkingLength] = 0; /* terminal 0 du tampon pour printf */ /* recherche le motif et reporte les résultats */ if ((MatchPtr = FindString(TestBuffer, WorkingLength, Pattern, (unsigned int) strlen(Pattern))) == NULL) { /* le motif n'est pas trouvé */ printf("\"%s\" not found\n", Pattern); } else { /* le motif est trouvé. zero terminale de TempBuffer; strncpy ne fonctionnera pas si DISPLAY_LENGTH caractères sont copiés */ TempBuffer[DISPLAY_LENGTH] = 0; printf("\"%s\" trouvé. % du nombre de caractères qui correspondent:\n\"%s\"\n", Pattern, DISPLAY_LENGTH, strncpy(TempBuffer, MatchPtr, DISPLAY_LENGTH)); } exit(0); }