10

Prototypage

Le programme utilitaire prototype est un script shell qui lit un fichier C et ajoute les signatures des fonctions publiques qu'il définit dans son fichier d'entête.

Le code de test signalé par un #if defined(STANDALONE) est ignoré. Vous pouvez facilement changer de balise dans le script.

prototype peut être utilisé en toute sécurité avec un fichier d'entête existant. La commande conserve les définitions déjà présentes dans le fichier. Elle ne change que les lignes entre #ifdef __STDC__ et #endif. NOTE : Le fichier d'entête doit déjà exister.

  1. PATH=/bin:/usr/bin
  2. TMP=/tmp/proto$$
  3. HDIR=
  4.  
  5. trap "rm -f $TMP" SIGINT SIGQUIT
  6.  
  7. proto ()
  8. {
  9.     for f in $*
  10.     do
  11.         echo "#ifdef __STDC__"
  12.         cat $f | sed -e '/^#if.*STANDALONE/,$d' | awk '/^[A-Za-z].*\(.*\) {.*$/ && !/static/ && !/typedef/ {\
  13.         printf( "extern %s;\n", $0 ); }' | sed -e 's/ {//'
  14.         echo "#else"
  15.         cat $f | sed -e '/^#if.*STANDALONE/,$d' | awk '/^[A-Za-z].*\(.*\) {.*$/ && !/static/ && !/typedef/ {\
  16.         printf( "extern %s;\n", $0 ); }' | sed -e 's/(.*$/();/'
  17.         echo "#endif"
  18.     done
  19. }
  1. for file_c in $*
  2. do
  3.     if [ ! -f $file_c ]; then echo "$file_c?"; exit 1; fi
  4.  
  5.     file_h=`basename $file_c .c`.h
  6.     if [ ! -f $file_h ]; then
  7.         if [ "$HDIR" != "" ]; then
  8.             if [ ! -f $HDIR/$file_h ];
  9.             then echo "$file_h?"; exit 1
  10.             else file_h=$HDIR/$file_h
  11.             fi
  12.         else echo "$file_h?"; exit 1
  13.         fi
  14.     fi
  15.  
  16.     proto $file_c >$TMP
  17.  
  18.     if [ `grep -c '__STDC__' $file_h` != 0 ]
  19.     then
  20.         >/dev/null ed $file_h <<-__A_MARK__
  21. /__STDC__/,/endif/d
  22. -1r $TMP
  23. w
  24. q
  25. __A_MARK__
  26.     else
  27.         >/dev/null ed $file_h <<-__A_MARK__
  28. $
  29. ?endif?-1r $TMP
  30. w
  31. q
  32. __A_MARK__
  33.     fi
  34. done

Termine en effaçant le fichier temporaire.

  1. rm -fr $TMP
  2. exit 0

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].