v18i006: cproto - Generate C function prototypes from C source, Patch02
Chin Huang
cthuang at contact.UUCP
Wed Apr 10 13:48:40 AEST 1991
Submitted-by: Chin Huang <cthuang at contact.UUCP>
Posting-number: Volume 18, Issue 6
Archive-name: cproto/patch02
Patch-To: cproto: Volume 17, Issue 70-71
Here is patch 2 to cproto, a C function prototype generator.
This patch enables cproto to scan lex and yacc source files for
function definitions. It also fixes a problem that may cause
segmentation faults.
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: patch2
# Wrapped by ibmpc at laphroig.UUCP on Thu Apr 04 16:53:33 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f patch2 -a "${1}" != "-c" ; then
echo shar: Will not over-write existing file \"patch2\"
else
echo shar: Extracting \"patch2\" \(6854 characters\)
sed "s/^X//" >patch2 <<'END_OF_patch2'
Xdiff -c old/CHANGES ./CHANGES
X*** old/CHANGES Wed Apr 03 21:42:20 1991
X--- ./CHANGES Wed Apr 03 21:52:24 1991
X***************
X*** 1,5 ****
X--- 1,15 ----
X Version 2
X
X+ Patchlevel 2
X+
X+ - Cproto is now able to generate prototypes for functions defined in lex
X+ and yacc source files named on the command line. Lex and yacc source
X+ files are recognized by the .l or .y extension.
X+ - Fix: The memory allocated to the typedef symbol table was not being
X+ freed after scanning each source file.
X+ - Fix: Failing to reset a variable during error recovery caused
X+ segmentation faults.
X+
X Patchlevel 1
X
X - Fix: Cproto incorrectly generated the parameter "int ..." in
Xdiff -c old/grammar.y ./grammar.y
X*** old/grammar.y Wed Apr 03 21:42:26 1991
X--- ./grammar.y Wed Apr 03 21:52:28 1991
X***************
X*** 1,4 ****
X! /* $Id: grammar.y 2.2 91/03/30 13:19:00 cthuang Exp $
X *
X * yacc grammar for C prototype generator
X * This was derived from the grammar given in Appendix A of
X--- 1,4 ----
X! /* $Id: grammar.y 2.3 91/04/03 21:27:01 cthuang Exp $
X *
X * yacc grammar for C prototype generator
X * This was derived from the grammar given in Appendix A of
X***************
X*** 558,563 ****
X--- 558,564 ----
X yyerror (msg)
X char *msg;
X {
X+ func_params = FALSE;
X output_error();
X fprintf(stderr, "%s\n", msg);
X }
X***************
X*** 565,572 ****
X void
X parse_file ()
X {
X printf("/* %s */\n", cur_file);
X- line_num = 1;
X typedef_names = create_symbol_table();
X yyparse();
X }
X--- 566,583 ----
X void
X parse_file ()
X {
X+ char *s;
X+
X+ if (strlen(cur_file) > 2) {
X+ s = cur_file + strlen(cur_file) - 2;
X+ if (strcmp(s, ".l") == 0 || strcmp(s, ".y") == 0)
X+ BEGIN LEXYACC;
X+ }
X+
X printf("/* %s */\n", cur_file);
X typedef_names = create_symbol_table();
X+ line_num = 1;
X+ ly_count = 0;
X yyparse();
X+ destroy_symbol_table(typedef_names);
X }
Xdiff -c old/lex.l ./lex.l
X*** old/lex.l Thu Mar 28 15:41:56 1991
X--- ./lex.l Wed Apr 03 21:52:26 1991
X***************
X*** 1,5 ****
X %{
X! /* $Id: lex.l 2.1 91/03/25 11:40:27 cthuang Exp $
X *
X * C function prototype generator
X * Lexical analyzer specification
X--- 1,5 ----
X %{
X! /* $Id: lex.l 2.2 91/04/03 21:31:11 cthuang Exp $
X *
X * C function prototype generator
X * Lexical analyzer specification
X***************
X*** 17,22 ****
X--- 17,23 ----
X char cur_file[MAX_TEXT_LENGTH]; /* current file name */
X int line_num = 1; /* current line number in file */
X static int curly = 0; /* number of curly brace nesting levels */
X+ static int ly_count = 0; /* number of occurances of %% */
X
X typedef struct {
X FILE *fp;
X***************
X*** 29,38 ****
X static void do_include();
X %}
X
X! %s CPP1 CPP2 INIT1 INIT2 CURLY COMMENT
X %%
X
X \n ++line_num;
X
X <INITIAL>^#{WS}* BEGIN CPP1;
X <CPP1>define{WS}+{ID}.*\\$ {
X--- 30,47 ----
X static void do_include();
X %}
X
X! %s CPP1 CPP2 INIT1 INIT2 CURLY COMMENT LEXYACC
X %%
X
X \n ++line_num;
X+
X+ <LEXYACC>^"%%" {
X+ if (++ly_count >= 2)
X+ BEGIN INITIAL;
X+ }
X+ <LEXYACC>^"%{" BEGIN INITIAL;
X+ <LEXYACC>. ;
X+ <INITIAL>^"%}" BEGIN LEXYACC;
X
X <INITIAL>^#{WS}* BEGIN CPP1;
X <CPP1>define{WS}+{ID}.*\\$ {
Xdiff -c old/Makefile ./Makefile
X*** old/Makefile Wed Apr 03 21:42:28 1991
X--- ./Makefile Wed Apr 03 21:52:26 1991
X***************
X*** 1,4 ****
X! # $Id: Makefile 2.2 91/03/30 13:19:06 cthuang Exp $
X #
X # MSDOS makefile for C prototype generator
X
X--- 1,4 ----
X! # $Id: Makefile 2.3 91/04/03 21:26:50 cthuang Exp $
X #
X # MSDOS makefile for C prototype generator
X
X***************
X*** 34,40 ****
X $(LEX) lex.l
X
X cproto.man: cproto.1
X! cawf -man $*.1 >$@
X
X TAGS: $(SOURCES)
X etags -t $(SOURCES)
X--- 34,40 ----
X $(LEX) lex.l
X
X cproto.man: cproto.1
X! cawf -man $*.1 | bsfilt - >$@
X
X TAGS: $(SOURCES)
X etags -t $(SOURCES)
X***************
X*** 63,71 ****
X zip:
X pkzip -u cproto README CHANGES Makefile.* *.1 *.c *.h grammar.y lex.l
X
X! ci:
X ci -u2 $(DIST1) $(DIST3)
X ci -u2 $(DIST4)
X
X # DO NOT DELETE THIS LINE -- make depend depends on it.
X
X--- 63,75 ----
X zip:
X pkzip -u cproto README CHANGES Makefile.* *.1 *.c *.h grammar.y lex.l
X
X! ci: rmcr
X ci -u2 $(DIST1) $(DIST3)
X ci -u2 $(DIST4)
X+
X+ rmcr:
X+ rmcr $(DIST1) $(DIST3)
X+ rmcr $(DIST4)
X
X # DO NOT DELETE THIS LINE -- make depend depends on it.
X
Xdiff -c old/patchlev.h ./patchlev.h
X*** old/patchlev.h Wed Apr 03 21:42:30 1991
X--- ./patchlev.h Wed Apr 03 21:52:28 1991
X***************
X*** 1,1 ****
X! #define PATCHLEVEL 1
X--- 1,1 ----
X! #define PATCHLEVEL 2
Xdiff -c old/symbol.c ./symbol.c
X*** old/symbol.c Thu Mar 28 15:42:00 1991
X--- ./symbol.c Wed Apr 03 21:52:32 1991
X***************
X*** 1,4 ****
X! /* $Id: symbol.c 2.1 91/02/28 11:16:35 cthuang Exp $
X *
X * Symbol table maintenance. Implements an abstract data type called
X * the symbol table.
X--- 1,4 ----
X! /* $Id: symbol.c 2.2 91/04/03 21:30:54 cthuang Exp $
X *
X * Symbol table maintenance. Implements an abstract data type called
X * the symbol table.
X***************
X*** 7,12 ****
X--- 7,13 ----
X #include "config.h"
X #include "symbol.h"
X
X+
X /* Create a symbol table.
X * Return a pointer to the symbol table or NULL if an error occurs.
X */
X***************
X*** 24,36 ****
X }
X
X
X /* This is a simple hash function mapping a symbol name to a hash bucket. */
X
X! static int
X hash (name)
X char *name;
X {
X! return (name[0] + name[1] + strlen(name)) % SYM_MAX_HASH;
X }
X
X
X--- 25,65 ----
X }
X
X
X+ /* Free the memory allocated to the symbol table.
X+ */
X+ void
X+ destroy_symbol_table (symtab)
X+ SymbolTable *symtab;
X+ {
X+ int i;
X+ Symbol *sym, *next;
X+
X+ for (i = 0; i < SYM_MAX_HASH; ++i) {
X+ sym = symtab->bucket[i];
X+ while (sym != NULL) {
X+ next = sym->next;
X+ free(sym->name);
X+ free(sym);
X+ sym = next;
X+ }
X+ }
X+ }
X+
X+
X /* This is a simple hash function mapping a symbol name to a hash bucket. */
X
X! static unsigned int
X hash (name)
X char *name;
X {
X! char *s;
X! unsigned int h;
X!
X! h = 0;
X! s = name;
X! while (*s != '\0')
X! h += *s++;
X! return h % SYM_MAX_HASH;
X }
X
X
Xdiff -c old/symbol.h ./symbol.h
X*** old/symbol.h Thu Mar 28 15:41:58 1991
X--- ./symbol.h Wed Apr 03 21:52:30 1991
X***************
X*** 1,4 ****
X! /* $Id: symbol.h 2.1 91/02/28 11:16:22 cthuang Exp $
X *
X * Definitions for a symbol table
X */
X--- 1,4 ----
X! /* $Id: symbol.h 2.2 91/04/03 21:30:33 cthuang Exp $
X *
X * Definitions for a symbol table
X */
X***************
X*** 18,23 ****
X--- 18,24 ----
X } SymbolTable;
X
X extern SymbolTable *create_symbol_table(); /* Create symbol table */
X+ extern void destroy_symbol_table(); /* Create symbol table */
X extern Symbol *find_symbol(); /* Lookup symbol name */
X extern Symbol *new_symbol(); /* Define new symbol */
X
END_OF_patch2
if test 6854 -ne `wc -c <patch2`; then
echo shar: \"patch2\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0
--
Chin Huang cthuang at contact.uucp chin.huang%canrem at lsuc.on.ca
exit 0 # Just in case...
--
Kent Landfield INTERNET: kent at sparky.IMD.Sterling.COM
Sterling Software, IMD UUCP: uunet!sparky!kent
Phone: (402) 291-8300 FAX: (402) 291-4362
Please send comp.sources.misc-related mail to kent at uunet.uu.net.
More information about the Comp.sources.misc
mailing list