/*~03/10/90 12.30.58! cplus_init N */ /* Initialise une structure CPLUS pour recevoir des prototypes */ void cplus_init( CPLUS *cp, int size) /*~03/10/90 12.30.58! cplus_end N */ /* Libere espace associ‚ … une liste de prototypes */ void cplus_end( CPLUS *cp) /*~03/10/90 12.30.58! cplus_makepp N */ /* Produit un fichier de d‚claration par classe */ void cplus_makepp( CPLUS *cp, const char *ext, int verbose) /*~03/10/90 12.30.58! cplus_merge N */ /* G‚nŠre les prototypes associ‚ … cette classe dans str Retourne -1 si erreur 0 si trouve pas de prototype pour nomcls 1 si ok */ int cplus_merge( CPLUS *cp, const char *nomcls, char *str) /*~03/10/90 12.30.58! cplus_setdefault N */ /* Enregistre la cat‚gorie … associer au fonctions membres qui n'en ont pas (private=0,protected=1,public=2) Initialement private. */ void cplus_setdefault( int def) /*~03/10/90 12.30.58! cplus_parse N */ /* D‚compose une fichier de prototype C++ en d‚claration par classe La structure est initialis‚ et rempli. */ void cplus_parse( CPLUS *cp, const char *path) /*~02/10/90 23.54.42! cplus_setalt N */ void cplus_setalt( const char *spec) /*~02/10/90 23.54.42! cplus_setname N */ /* Etablit le nom d'un header C++ … partir de la classe ou d'un nom choisit par l'usager */ void cplus_setname( CPLUS *cp, const char *nomcls, const char *ext, char *buf) /*~09/10/90 13.18.04! cproto_waitptv N */ /* ellimine tout jusqu'au point virgule */ void cproto_waitptv( TOKEN *token) /*~09/10/90 13.18.04! cproto_line N */ /* Analyse de plus haut niveau des ‚nonc‚s */ int cproto_line( void) /*~09/10/90 13.18.04! cproto_skippar N */ void cproto_skippar( void) /*~09/10/90 13.18.04! cproto_skipbrace N */ void cproto_skipbrace( void) /*~09/10/90 13.18.04! cproto_declare N */ /* essaie de reconnaitre une declaration a partir de regle bidon Si la sequence contient un = apres un TOK_ID, skip ; Si la sequence contient un ; erreur Si la sequence contient un { apres un TOK_ID, skip ; Si la sequence contient un ( apres ), skip ; On cherche la sequence TOK_ID OPNPAR */ void cproto_declare( TOKEN *tok) /*~09/10/90 13.18.04! cproto_main N */ void cproto_main( void) /*~09/04/90 23.52.08! cproto_enddecl N */ /* Lit une sequence jusqu'au point virgule en separant en sous-sequence a chaque virgule Chaque sous-sequence est enregistre dans une var[] sans son terminateur. Retourne le nombre de sous-sequence */ int cproto_enddecl( TOKEN_LIST var[], TOKEN *tok) /*~09/04/90 23.52.08! cproto_recdecl N */ /* Lit une ligne de declaration de parametre Retourne le nombre de variable declare dans cette ligne */ int cproto_recdecl( TOKEN_LIST typel[], TOKEN_LIST varl[], TOKEN *tok) /*~03/10/90 16.00.50! cproto_setcplusdef N */ /* Enregistre l'accŠs par d‚faut des fonctions membres C++ */ void cproto_setcplusdef( int def) /*~03/10/90 16.00.50! cproto_new N */ /* imprime un prototype nouveau modele */ void cproto_new( TOKEN_LIST *tokl, int cplus, int ret_fct) /*~03/10/90 16.00.50! cproto_old N */ /* interprete une declaration avec ancienne syntaxe et produit un prototype moderne Retourne -1 si erreur, 0 si ok */ int cproto_old( TOKEN_LIST *tokl, TOKEN *tok) /*~09/10/90 13.09.00! cproto_patch N */ /* Corrige certain detail dans un prototype moderne Si la fonction n'a pas de type, ajoute int Si un parametre n'a pas de type, ajoute int (seulement pour K&R) Si la fonction n'a pas de parametre, ajoute void Copie le commentaire du token next (OPN_BRACE) dans le dernier token du prototype */ void cproto_patch( TOKEN_LIST *tokl, TOKEN *next, /* Prochain token aprŠs la d‚claration */ /* Ce token contient peut-ˆtre un commentaire */ /* qu'il faudra */ /* associ‚ au denier token de la d‚claration */ int ret_fct, /* C'est un fonction qui retourne un pointeur */ /* de fonction */ int isold) /* D‚claration K&R */ /*~01/10/90 00.11.42! cproto_setformat N */ /* Set le format de sortie pour la generation des declaration 0 = declaration moderne ANSI 1 = declaration K&R */ void cproto_setformat( int mode) /*~01/10/90 00.11.42! cproto_format N */ /* tokl contient un prototype moderne La presentation de ce prototype doit etre reorganiser La routine reorganise completement la presentation */ void cproto_format( TOKEN_LIST *tokl, /* prototype a traiter */ int(*fctprt)(char *ctl, ...), /* fonction d'impression */ int ret_fct) /*~30/09/90 22.41.28! cproto_findpar N */ /* Avant dans un liste de token jusqu'a une ouverture parenthŠse Retourne -1 si erreur */ int cproto_findpar( TOKEN_LIST *tokl) /*~30/09/90 22.41.28! cproto_isold N */ /* Verifie si un debut de collecte est un declaration nouvelle ou ancienne Retourne 1 si ancien, 0 si nouveau (ansi) Retourne -1 si invalide tokl contient ... ( ... ) */ int cproto_isold( TOKEN_LIST *tokl) /*~07/04/90 16.33.28! erreur_setpre N */ /* set preambule a placer au debut de chaque message d'erreur */ void erreur_setpre( char *txt) /*~07/04/90 16.33.28! erreur N */ /* Affiche un erreur … l'‚cran */ void erreur( const char *ctlf, const char *ctla, ...) /*~07/04/90 16.33.28! erreur_signal N */ /* Affiche un avertissement … l'‚cran */ void erreur_signal( const char *ctlf, const char *ctla, ...) /*~07/04/90 16.33.28! erreur_assert N */ void erreur_assert( char *condit, char *file, int line) /*~30/10/90 08.28.14! filep_readp N */ /* lit en m‚moire un fichier de prototypes .p retourne le nombre de source contenu dans fpath si ok, -1 si erreur */ int filep_readp( TXTTB *txttb, const char *fpath) /*~30/10/90 08.28.14! filep_readnap N */ /* lit en m‚moire un fichier de prototypes .nap retourne le nombre de source contenu dans fpath si ok, -1 si erreur */ int filep_readnap( TXTTB *txttb, const char *fpath) /*~30/10/90 08.28.14! filep_readnar N */ /* lit en m‚moire un fichier de prototypes .nar retourne le nombre de source contenu dans fpath si ok, -1 si erreur */ int filep_readnar( TXTTB *txttb, const char *fpath) /*~30/10/90 08.28.14! filep_locate N */ /* Localise le nom d'un source dans un fichier *.p pr‚c‚demment lue Retourne -1 si trouve pas, indice d'accŠs sinon (>=0) */ int filep_locate( TXTTB *tb, const char *nomsrc, unsigned long *date) /* Contiendra la date du source lorsque le */ /* .p,.nap,etc... a ‚t‚ construit ou -1 */ /*~30/10/90 08.28.14! filep_write N */ /* R‚‚crit dans un fichier *.p le contenu pr‚c‚demmant lue pour un source Le source a ‚t‚ localis‚e avec filep_locate() */ void filep_write( FILE *fout, TXTTB *tb, int nosrc) /*~30/09/90 01.16.16! protof_init N */ /* Initialise le controleur de fichier r‚sultat */ void protof_init( void) /*~30/09/90 01.16.16! protof_open N */ /* Ouvre un fichier d'output selon le mode courant Retourne 0 si ok, -1 si erreur */ int protof_open( const char *nomf, const char *mode) /*~30/09/90 01.16.16! protof_close N */ /* Ferme tous les fichiers de r‚sultat */ void protof_close( void) /*~30/09/90 01.16.16! protof_closeone N */ /* Ferme un fichier de r‚sultat */ void protof_closeone( const char *fname) /*~30/09/90 01.16.16! protof_defmode N */ /* Enregistre la s‚lection de r‚sultat … utiliser pour le prochain fichier Si aucun fichier d'ouvert, cette s‚lection est appliqu‚e … stdout */ void protof_defmode( int mode) /*~30/09/90 01.16.16! protof_vprint N */ /* G‚nŠre une ligne dans tous les fichiers qui accepte 'mode' Si c'est la premiŠre ligne associ‚ … ce fichier, l'entete est g‚n‚r‚ */ int protof_vprint( int mode, char *ctl, va_list list) /*~30/09/90 01.16.16! protof N */ int protof( int mode, char *ctl, ...) /*~30/09/90 01.16.16! protof_condit N */ /* Cet output ne se fera que si au moins un appel a protof est faite avant que protof_endcondit ne soit fait */ int protof_condit( char *ctl, ...) /*~30/09/90 01.16.16! protof_nomfct N */ /* Genere le nom de la fonction entre commentaire Le nom sera precede du nom du fichier Le nom du fichier a ete obtenu par protof_condline */ void protof_nomfct( int mode, char *nom) /*~30/09/90 01.16.16! protof_entete N */ /* G‚nŠre l'entˆte pour un fichier source dans chacun des fichier output */ void protof_entete( const char *nomsrc, const char *datestr, const char *timestr) /*~30/09/90 01.16.16! protof_endcondit N */ /* Annule la ligne conditionnelle */ void protof_endcondit( void) /*~30/09/90 01.36.12! protof_setincrem N */ /* Enregistre demande de traitement incr‚mental */ void protof_setincrem( void) /*~30/09/90 01.36.12! protof_loadfile N */ /* Pr‚pare incrementation pour un fichier */ void protof_loadfile( PROTOF_INFO *inf, const char *nomf, int mode) /*~30/09/90 01.36.12! protof_doincrem N */ /* essai de faire le traitement incr‚mental d‚pendant de la date du fichier Retourne 0 si ok, -1 sinon */ int protof_doincrem( const char *nomf, unsigned long date) /*~30/09/90 01.36.12! protof_free N */ /* LibŠre espace associ‚ au m‚canisme incr‚mental */ void protof_free( PROTOF_INFO *inf) /*~01/10/90 10.38.02! splitcp_do N */ void splitcp_do( int verbose) /* 0,1,2 */ /*~01/10/90 10.38.02! splitcp_accumsplit N */ /* Accumule commande s‚paration en fichiers une s‚rie de prototype C++ Le traitement sera r‚alis‚ par splitcp_do */ void splitcp_accumsplit( const char *path, const char *ext) /*~01/10/90 10.38.02! splitcp_accummerge N */ /* Accumule commande fusion d'une s‚rie de prototype C++ dans un autre Le traitement sera r‚alis‚ par splitcp_do */ void splitcp_accummerge( const char *path) /*~30/09/90 23.52.04! tokrec_init N */ void tokrec_init( TOKEN_LIST *toklist) /*~30/09/90 23.52.04! tokrec_free N */ /* Libere la liste silencieusement */ void tokrec_free( TOKEN_LIST *toklist) /*~30/09/90 23.52.04! tokrec_freeprt N */ /* Libere la liste en imprimant */ void tokrec_freeprt( TOKEN_LIST *toklist) /*~30/09/90 23.52.04! tokrec_add N */ /* Ajoute un token a la suite courante */ void tokrec_add( TOKEN_LIST *toklist, TOKEN *tok) /*~30/09/90 23.52.04! tokrec_newsub N */ /* Demarre une liste subalterne au dernier token entre */ void tokrec_newsub( TOKEN_LIST *toklist) /*~30/09/90 23.52.04! tokrec_endsub N */ /* Termine une liste subalterne et monte continuer au niveau superieur */ void tokrec_endsub( TOKEN_LIST *toklist) /*~30/09/90 23.52.04! tokrec_printcur N */ /* imprime le contenu d'une liste de token */ void tokrec_printcur( TOKEN_ITEM *item) /*~30/09/90 23.52.04! tokrec_print N */ void tokrec_print( TOKEN_LIST *toklist) /*~30/09/90 23.52.04! tokrec_frmtxt N */ void tokrec_frmtxt( TOKEN_LIST *toklist, char *txt) /*~30/09/90 23.35.34! tokrec_recskipl N */ /* Lit des token jusqu'a rencontree un terminateur de 'tb'. Si un demarreur est rencontree, la routine est appele recursivement. Retourne le numero du terminateur (0,nbtok-1) ou -1 si fin de fichier last contient le terminateur non accumule dans toklist */ int tokrec_recskipl( TOKEN_LIST *toklist, TOK_TYPE tb[][2], int nbtok, TOKEN *last) /*~30/09/90 23.35.34! tokrec_recskip N */ int tokrec_recskip( TOKEN_LIST *toklist, TOK_TYPE tb[][2], int nbtok) /*~30/09/90 23.35.34! tokrec_copy N */ void tokrec_copy( TOKEN_LIST *new, TOKEN_LIST *old) /*~30/09/90 23.35.34! tokrec_addseq N */ /* Ajoute une sequence dans une sequence deja existante */ void tokrec_addseq( TOKEN_LIST *dest, TOKEN_LIST *seq) /*~30/09/90 23.35.34! tokrec_addend N */ /* Ajoute le reste d'une sequence dans une sequence deja existante */ void tokrec_addend( TOKEN_LIST *dest, TOKEN_LIST *seq) /*~30/07/90 21.49.56! tokrec_inilec N */ void tokrec_inilec( TOKEN_LIST *toklist) /*~30/07/90 21.49.56! tokrec_next N */ /* Avance de 1 dans une liste de token (mˆme niveau) Retourne -1 si pas de suivant */ int tokrec_next( TOKEN_LIST *toklist) /*~30/07/90 21.49.56! tokrec_recule N */ void tokrec_recule( TOKEN_LIST *toklist) /*~30/07/90 21.49.56! tokrec_descend N */ int tokrec_descend( TOKEN_LIST *toklist) /*~30/07/90 21.49.56! tokrec_monte N */ void tokrec_monte( TOKEN_LIST *toklist) /*~30/07/90 21.49.56! tokrec_insert N */ void tokrec_insert( TOKEN_LIST *toklist, TOKEN *token) /*~30/07/90 21.49.56! tokrec_get N */ /* retourne token ou NULL si fin de liste pour ce niveau */ TOKEN *tokrec_get( TOKEN_LIST *toklist) /*~11/07/91 23.58.08! cproto_new R */ /* G‚nŠre les prototypes avec et sans documentation. */ void cproto_new( TOKEN_LIST *tokl, int cplus, /* Fonction membre C++ */ int ret_fct) /* Fonction qui retourne un pointeur de fonction */ /*~11/07/91 22.26.44! cproto_format R */ /* G‚nŠre prototype avec documentation. tokl contient un prototype "moderne". La presentation de ce prototype doit etre reorganiser Met un paramŠtre par ligne suivit d'un commentaire si requis. */ void cproto_format( TOKEN_LIST *tokl, /* prototype a traiter */ int(*fctprt)(char *ctl, ...), /* fonction d'impression */ int ret_fct) /*~08/07/91 18.29.32! erreur_getnb N */ /* Retourne le nombre d'erreur durant la session d'ex‚cution */ int erreur_getnb( void) /*~11/07/91 23.53.24! tokrec_getlentxt N */ /* Calcul la longueur total de tous les tokens dans la liste. Calcul un espace entre chaque token. tokl pointera … la fin de la liste. */ int tokrec_getlentxt( TOKEN_LIST *toklist) /*~29/10/91 01.45.58! cproto_line R */ /* Analyse de plus haut niveau des ‚nonc‚s retourne -1 si fin de fichier, 0 si ok, 1 si } rencontr‚. */ int cproto_line( void) /*~29/10/91 01.45.58! cproto_declare R */ /* essaie de reconnaitre une declaration a partir de regle bidon Si la sequence contient un = apres un TOK_ID, skip ; Si la sequence contient un ; erreur Si la sequence contient un { apres un TOK_ID, skip ; Si la sequence contient un ( apres ), skip ; On cherche la sequence TOK_ID OPNPAR */ void cproto_declare( TOKEN *tok, int externC) /* La s‚quence extern "C" devra ˆtre plac‚ */ /* devant le prototype */ /*~29/10/91 01.52.34! cproto_new R */ /* G‚nŠre les prototypes avec et sans documentation. */ void cproto_new( TOKEN_LIST *tokl, int cplus, /* Fonction membre C++ */ int ret_fct, /* Fonction qui retourne un pointeur de fonction */ int externC) /* Precede prototype par extern "C" */ /*~29/10/91 01.51.44! cproto_format R */ /* G‚nŠre prototype avec documentation. tokl contient un prototype "moderne". La presentation de ce prototype doit etre reorganiser Met un paramŠtre par ligne suivit d'un commentaire si requis. */ void cproto_format( TOKEN_LIST *tokl, /* prototype a traiter */ int(*fctprt)(char *ctl, ...), /* fonction d'impression */ int ret_fct, int externC) /*~12/07/91 09.44.10! tokrec_getlentxt R */ /* Calcul la longueur total de tous les tokens dans la liste. Cette fonction est utilis‚ pour d‚terminer (rapidement) si on doit g‚n‚rer un prototype avec un argument par ligne ou tous les arguments sur la mˆme lignes. Calcul un espace entre chaque token. La longueur obtenu est donc plus grande que r‚elle. Il faudrait utilis‚e token_needsep() pour ˆtre exacte. Le r‚sultat est tout de mˆme plaisant mˆme si un peu arbitraire. tokl pointera … la fin de la liste. */ int tokrec_getlentxt( TOKEN_LIST *toklist) /*~30/11/91 23.21.32! tokrec_copy R */ void tokrec_copy( TOKEN_LIST *newl, TOKEN_LIST *old) /*~16/12/91 23.01.08! protof_nomfct R */ /* Genere le nom de la fonction entre commentaire Le nom sera precede du nom du fichier Le nom du fichier a ete obtenu par protof_condit */ void protof_nomfct( int mode, char *nom)