#include #include #include #include #include #include "pagin.h" #include "permut.h" /* Localise une spécification qui correspond à une clé Retourne -1 si trouve pas ou le prochain numéro à passer à cette fonction pour la recherche suivante. */ PUBLIC int COM_INDEX::locate ( int pos, /* Position de depart de la recherche dans comi */ const char *ident, /* Type de spécification */ char *tbcle[], /* Liste de mot cle */ int nbcle, COM_SPC **ptspc) /* Contiendra la spécification trouvée */ { int ret = -1; int i; COM_SPC *spc = tbcom + pos; char *lastcle = tbcle[nbcle-1]; int subspec = 0; int reste = 0; if (strcmp(lastcle,"...")==0){ reste = 1; nbcle--; }else if (strcmp(lastcle,"*")==0){ subspec = 1; nbcle--; } for (i=pos; iident)==0){ /* #Spécification: nadoc / sélection des spécifications Normalement, seuls les commentaires qui correspondent exactement à la commande #spec: seront imprimés. Il y a deux exceptions. Si la dernière clé de la commande #spec: est un '*', alors tous les commentaires dont le début de la clé correspond seront affichés. Si la dernière clé de la commande est '...', Tous les commentaires dont le début correspond et qui n'ont pas été affichés le seront. */ int j; for (j=0; jtbcle[j])!=0){ break; } } if (j==nbcle){ /* Il y a un match partiel ou complet */ if (subspec || spc->nbcle == nbcle || (reste && spc->usage == 0)){ *ptspc = spc; ret = i+1; break; } } } } return ret; } /* Balaye une série de source et extrait les commentaires spécifications. */ PUBLIC int COM_INDEX::scanargv ( int argc, char *argv[], const char *path, int recur) // Descend dans les sous-répertoires { int i; int ret = 0; for (i=0; iusage == 0){ ret++; char filespec[MAXSIZ_PATH]; char buf[300]; nacom_format (spc,filespec,buf); if (pout != NULL){ pout->format_spec (filespec,buf); nacom_print (spc,pout,1); } if (pmat != NULL){ pmat->format_spec (filespec,buf); } } } return ret; } /* Affiche tous les commentaires spécifications qui n'ont pas été utilisés. Retourne le nombre de commentaires affichés. */ PUBLIC int COM_INDEX::chknotused (FILE *fout) { int ret; PAGIN pout; pout.openfile (fout,4,60,58); pout.set_format (0); ret = chknotusedp (NULL,&pout); pout.close (); return ret; }