Liste de contrôle du fonctionnement du programme

  1. Le programme affiche-t-il des messages traduisibles à l'utilisateur, directement ou indirectement ? Un exemple de messages indirects est celui des messages stockés dans les bibliothèques.

    Si oui :

    • Ces messages sont-ils externalisés du programme au moyen des sous-routines de messagerie ?
    • Avez-vous fourni des fichiers source de messages pour tous ces messages ?
    • Quel est l'environnement local sous lequel le programme s'exécute ?
      • S'il s'exécute dans l'environnement local déterminé par les variables d'environnement local, avez-vous appelé la sous-routine setlocale de la manière suivante ?
        setlocale(LC_ALL, "")
        Remarque: Les catégories d'environnement local, dans leur ordre hiérarchique prédéfini, sont: LC_ALL, LC_COLLATE, TYPE_LOGIQUE, LC_MESSAGES, LC_MONÉTAIRE, LC_NUMÉRIQUEet LC_HEURE.
      • Si le programme s'exécute dans l'environnement local "C", à l'exception de l'affichage des messages dans l'environnement local spécifié par les variables d'environnement local, avez-vous appelé la sous-routine setlocale de la manière suivante ?
        setlocale(LC_MESSAGES, "")
      • Après avoir appelé la sous-routine setlocale, avez-vous appelé la sous-routine catopen de la manière suivante ?
        catopen(catalog_name, NL_CAT_LOCALE)
      • Avez-vous appelé la sous-routine catopen avec le nom de catalogue approprié ?
      • Pour plus d'informations sur les messages traduisibles, voir Fonction de message .
  2. Le programme compare-t-il les chaînes de texte ?

    Si oui :

    • Les chaînes sont-elles comparées uniquement pour vérifier l'égalité ?

      Si oui :

      • Utilisez la sous-routine strcmp ou strncmp.
      • N'utilisez pas la sous-routine strcoll ou strxfrm.
    • Les chaînes sont-elles comparées pour voir lesquelles sont triées avant les autres, comme défini dans l'environnement local actuel ?

      Si oui :

      • Appelez la sous-routine setlocale de la manière suivante :
        setlocale(LC_ALL, "")
      • Utilisez la sous-routine strcoll, strxfrm, wcscoll ou wcsxfrm.
      • N'utilisez pas la sous-routine strxfrm ou strncmp.
  3. Le programme fait-il une analyse syntaxique des noms de chemin des fichiers ?

    Si oui :

    • Si vous recherchez / (barre oblique), utilisez la sous-routine strchr.
    • Si vous recherchez des caractères, sachez que les noms de fichier peuvent inclure des caractères multi-octets. Dans ce cas, appelez la sous-routine setlocale de la manière suivante, puis utilisez les sous-routines de recherche appropriées :
      setlocale(LC_ALL, "")
  4. Le programme utilise-t-il des noms de système, tels que des noms de nœud, des noms d'utilisateur, des noms d'imprimante et des noms de file d'attente ?

    Si oui :

    • Les noms de système peuvent contenir des caractères multi-octets.
    • Pour identifier un caractère multi-octets, appelez d'abord la sous-routine setlocale de la manière suivante, puis utilisez les sous-routines appropriées dans la bibliothèque.
      setlocale(LC_ALL, "")
  5. Le programme utilise-t-il des propriétés de classe de caractères, telles que majuscule, minuscule et alphabétique ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Ne faites pas d'hypothèses sur les propriétés des caractères. Utilisez toujours des sous-routines système pour déterminer les propriétés des caractères.
    • Les caractères sont-ils limités aux jeux de codes à un octet ?

      Si oui :

      • Utilisez l'une des sous-routines ctype : isalnum, isalpha, iscntrl, isdigit, isgraph, isprint, isspace ou isxdigit.

        Sinon, les caractères peuvent être des caractères multi-octets :

      • Utilisez la sous-routine iswalnum, iswalpha, iswcntrl, iswdigit, iswgraph, iswlower, iswprint, iswpunct, iswspace, iswupper ou iswxdigit.
  6. Le programme convertit-il la casse (majuscule ou minuscule) des caractères ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Les caractères sont-ils limités aux jeux de codes à un octet ?

      Si oui :

      • Utilisez ces sous-routines conv : _tolower, _toupper, tolower ou toupper.
      Sinon, les caractères peuvent être des caractères multi-octets :
      • Utilisez la sous-routine towlower ou towupper.
  7. Le programme garde-t-il une trace du mouvement du curseur sur un terminal tty ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Vous devrez peut-être déterminer la largeur de colonne d'affichage des caractères. Utilisez la sous-routine wcwidth ou wcswidth.
  8. Le programme effectue-t-il des E-S de caractère ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Les caractères sont-ils limités aux jeux de codes à un octet ?

      Si oui :

      • Utiliser les familles de sous-routines suivantes :
        • fgetc, getc, getchar, getw
        • fgets, gets
        • fputc, putc, putchar, putw
        • printf, scanf
      Sinon :
      • Utiliser les familles de sous-routines suivantes :
        • fgetwc, getwc, getwchar
        • fgetws, getws
        • fputwc, putwc, putwchar
  9. Le programme parcourt-il un tableau de caractères ?

    Si oui :

    • Le tableau est-il limité aux caractères à un octet uniquement ?

      Si oui :

      • Ne nécessite pas setlocale(LC_ALL, "")
      • Si p est le pointeur vers ce tableau de caractères à un octet, parcourez ce tableau en utilisant p++.
    Sinon :
    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Utilisez la sous-routine mblen ou wcslen.
  10. Le programme a-t-il besoin de connaître le nombre maximal d'octets utilisés pour coder un caractère dans le jeu de codes ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Utilisez la macro MB_CUR_MAX.
  11. Le programme formate-t-il des quantités numériques de date ou d'heure ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Utilisez la sous-routine nl_langinfo ou localeconv pour obtenir les informations spécifiques à l'environnement local.
    • Utilisez la sous-routine strftime ou strptime.
  12. Le programme formate-t-il des quantités numériques ?

    Si oui :

    • Appelez la
      setlocale
      sous-routine de la manière suivante :
      setlocale(LC_ALL, "")
    • Utilisez la sous-routine nl_langinfo ou localeconv pour obtenir les informations spécifiques à l'environnement local.
    • Utilisez la paire de sous-routines suivante, le cas échéant : printf, scanf.
  13. Le programme formate-t-il des quantités monétaires ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Utilisez la sous-routine nl_langinfo ou localeconv pour obtenir les informations spécifiques à l'environnement local.
    • Utilisez la sous-routine strfmon pour formater des quantités monétaires.
  14. Le programme recherche-t-il des chaînes ou des caractères ?

    Si oui :

    • Recherchez-vous des caractères à un octet dans du texte à un octet ?
      • Ne nécessite pas setlocale(LC_ALL, "")
      • Utilisez des sous-routines de chaîne libc standard telles que la sous-routine strchr.
    • Recherchez-vous des caractères dans la plage 0x00-0x3F (la plage de points de code unique) ?
    • Ne nécessite pas setlocale(LC_ALL, "")
    • Utilisez des sous-routines de chaîne libc standard telles que les sous-routines strchr, strcspn, strpbrk, strrchr, strspn, strstr, strtok et memchr.
    • Recherchez-vous des caractères dans la plage 0x00-0xFF ?
    • Appelez la sous-routine setlocale de la manière suivante :
      setlocale(LC_ALL, "")
    • Deux méthodes sont disponibles :

      Utilisez la sous-routine mblen pour ignorer les caractères multi-octets. Ensuite, lorsque vous rencontrez des caractères à un octet, vérifiez l'égalité. Voir l'élément 2 de la liste de contrôle.

      OR

      Convertissez le caractère de recherche et la chaîne recherchée en caractères larges, puis utilisez des sous-routines de recherche de caractères larges.

  15. Le programme effectue-t-il une correspondance de modèle d'expression régulière ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
       setlocale(LC_ALL, "")
    • Utilisez la sous-routine regcomp, regexec ou regerror.
  16. Le programme demande-t-il à l'utilisateur des réponses affirmatives/négatives ?

    Si oui :

    • Appelez la sous-routine setlocale de la manière suivante :
       setlocale(LC_ALL, "")
    • Placez l'invite dans le catalogue de messages. Utilisez les sous-routines catopen et catgets pour extraire le catalogue et afficher l'invite.
    • Utilisez la sous-routine rpmatch pour correspondre à la réponse de l'utilisateur.
  17. Le programme utilise-t-il des caractères de dessin de boîtes spéciaux ?

    Si oui :

    • N'utilisez pas de caractères de dessin de boîtes spécifiques à un jeu de codes.
    • Utilisez plutôt les caractères de dessin de boîtes et les attributs spécifiés dans le fichier terminfo.
  18. Le programme effectue-t-il un traitement spécifique à la culture ou à l'environnement local qui n'est pas abordé ici ?

    Si oui :

    • Externalisez les modules spécifiques à la culture. Ne les incluez pas au programme exécutable.
    • Chargez les modules lors de l'exécution à l'aide des sous-routines fournies par le système, telles que la sous-routine load.
    • Si le système ne fournit pas de telles installations, reliez-les de manière statique mais fournissez-les de manière modulaire.