feat: ajout de fonctions dans la librairie string

This commit is contained in:
Nicolas Hordé 2018-08-17 22:32:09 +02:00
parent 49a4bd4640
commit 539eeb1d8f
3 changed files with 106 additions and 23 deletions

View File

@ -9,6 +9,12 @@ u8 *strcpy(const u8 *src, u8 *des);
void strtolower(u8 *src); void strtolower(u8 *src);
void strtoupper(u8 *src); void strtoupper(u8 *src);
void stronecase(u8 *src); void stronecase(u8 *src);
void strsetlen(u8 *src, u8 size); void strsetlen(u8 *src, u32 size);
void strinvert(u8 *src); void strinvert(u8 *src);
void strreplace(u8 *src, u8 search, u8 replaced); void strreplace(u8 *src, u8 search, u8 replaced);
u8 *strfill(u8 *dst, u8 pattern, u32 size);
void strright(u8 *src, u8 *dest, u32 size);
void strleft(u8 *src, u8 *dest, u32 size);
void strdelete(u8 *src, u32 index, u32 size);
void strcompressdelimiter(u8 *src, u8 delim);
void strinsert(u8 *src, u8 *dest, u32 index);

View File

@ -4,11 +4,11 @@
/* Compare 2 chaines de caractère et renvoie la premiere distance (diff) */ /* Compare 2 chaines de caractère et renvoie la premiere distance (diff) */
s8 strcmp(const u8 * src, const u8 * des) s8 strcmp(const u8 * src, const u8 * dest)
{ {
register s8 result; register s8 result;
do { do {
if ((result = *src - *des++) != 0) if ((result = *src - *dest++) != 0)
break; break;
} }
while (*src++ != 0); while (*src++ != 0);
@ -42,10 +42,10 @@ u32 strlen(const u8 * src)
/******************************************************************************/ /******************************************************************************/
/* copie une chaine dans une autre */ /* copie une chaine dans une autre */
u8 *strcpy(const u8 * src, u8 * des) u8 *strcpy(const u8 * src, u8 * dest)
{ {
u8 *temp = des; u8 *temp = dest;
while ((*des++ = *src++) != 0) ; while ((*dest++ = *src++) != 0) ;
return temp; return temp;
} }
@ -53,28 +53,28 @@ u8 *strcpy(const u8 * src, u8 * des)
/* copie une portion limité d'une chaine asciiZ*/ /* copie une portion limité d'une chaine asciiZ*/
u8 *strncpy(const u8 * src, u8 * des, u32 count) u8 *strncpy(const u8 * src, u8 * dest, u32 count)
{ {
u8 *temp = des; u8 *temp = dest;
while (count) { while (count) {
if ((*temp = *src) != 0) if ((*temp = *src) != 0)
src++; src++;
temp++; temp++;
count--; count--;
} }
return des; return dest;
} }
/******************************************************************************/ /******************************************************************************/
/* concatene 2 chaines de caractère */ /* concatene 2 chaines de caractère */
u8 *strcat(const u8 * src, u8 * des) u8 *strcat(const u8 * src, u8 * dest)
{ {
u8 *temp = des; u8 *temp = dest;
while (*des != 0) while (*dest != 0)
des++; dest++;
while ((*des++ = *src++) != 0) ; while ((*dest++ = *src++) != 0) ;
return temp; return temp;
} }
@ -138,7 +138,7 @@ void stronecase(u8 * src)
/* Fixe la taille de la chaine */ /* Fixe la taille de la chaine */
void strsetlen(u8 * src, u8 size) void strsetlen(u8 * src, u32 size)
{ {
*(src+size)='\000'; *(src+size)='\000';
} }
@ -174,4 +174,80 @@ void strreplace(u8 *src, u8 search, u8 replaced)
} }
} }
/******************************************************************************/
/* Rempli de caractère */
u8 *strfill(u8 *dst, u8 pattern, u32 size)
{
u32 i;
for (i=0; i <= size; i++)
*(dst+i)=pattern;
*(dst+i+1)='\000';
return dst;
}
/******************************************************************************/
/* Renvoie la partie gauche d'une chaine */
void strright(u8 *src, u8 *dest, u32 size) {
u32 i;
for (i = 0; (*(src + i) != 0) && (i<size); i++)
*dest++=*(src + i);
*dest++='\000';
}
/******************************************************************************/
/* Renvoie la partie droite d'une chaine */
void strleft(u8 *src, u8 *dest, u32 size) {
u32 i;
u32 begin=strlen(src)-size;
for (i = 0; (*(src + i + begin) != 0) && (i<size); i++)
*dest++=*(src + i + begin);
*dest++='\000';
}
/******************************************************************************/
/* Supprime une portion de chaine */
void strdelete(u8 *src, u32 index, u32 size) {
u32 i;
u32 realsize=strlen(src)-index-size;
for (i = 0; (*(src+index+size+i) != 0) && (i<realsize); i++)
*(src+index+i)=*(src+index+size+i);
*(src+index+i)='\000';
}
/******************************************************************************/
/* Insert une portion dans la chaine */
void strinsert(u8 *src, u8 *dest, u32 index) {
u32 i;
u32 realsize=strlen(src);
u32 copysize=strlen(dest)-index;
for (i = 0; i<=copysize; i++)
*(dest+index+realsize+copysize-i)=*(dest+index+copysize-i);
for (i = 0; (*(src+i) != 0) ; i++)
*(dest+index+i)=*(src+i);
}
/******************************************************************************/
/* Supprime les délimiteurs consécutifs */
void strcompressdelimiter(u8 *src, u8 delim) {
u8 *pos=strchr(src, delim);
while (pos!=0)
{
u8 i;
for (i = 0; (*(pos+i) != 0) && (*(pos+i) == delim); i++);
if (i>1)
strdelete(pos,1,i-1);
pos=strchr(pos+1, delim);
}
}

View File

@ -75,20 +75,21 @@ int main(void)
strcpy(&noproc, &cpu.detectedname); strcpy(&noproc, &cpu.detectedname);
getcpuinfos(&cpu); getcpuinfos(&cpu);
printf printf
(" -Detection du processeur\r\033[1m Revision \t:%d\r Modele \t:%d\r Famille \t:%d\r Nom cpuid\t:%s\rJeux d'instruction\t:%s\033[0m\000", (" -Detection du processeur\r\033[1m Revision \t:%d\r Modele \t:%d\r Famille \t:%d\r Nom cpuid\t:%s\rJeux d'instruction\t:%s\033[0m\000",
cpu.stepping, cpu.models, cpu.family, &cpu.detectedname, cpu.stepping, cpu.models, cpu.family, &cpu.detectedname,
&cpu.techs); &cpu.techs);
ok(); ok();
u8 test[]="ceCI est UN(une) tes1\000"; u8 dest[]="Ceci est un test pour voir si cela fonctionne correctement\000 ";
u8 test2[]="ceCI est UN(une) tes2!\000"; printf(&dest);
printf(&test); u8 src[]="POPPOPPOP\000";
strreplace(&test, 'e', 'q'); printf(&src);
strreplace(&test2, '(', '['); printf("\r\n");
printf(&test); strinsert(&src, &dest, 14);
printf(&test2); printf(&dest);
while (1) { while (1) {
key = waitascii(); key = waitascii();
putchar(key); putchar(key);