[comp.lang.c] Getting prototypes from an old-style C program

cabo@tub.UUCP (Carsten Bormann) (02/29/88)

Since we needed this for getting C++ include files out of a C program,
I have hacked up a small program to extract ANSI C prototypes from old
style function body definitions.

If you don't need this right now, hit 'n' now.

The catch: I have given myself exactly eight hours to hack this up, so it
is a bletcherous hack, and has a number of limitations (outlined below).
It is also slow.  But if anyone really needs this now (before a real
solution is posted), I'm willing to 
1) send a SINGLE copy to someone in the Americas who then will post a
   message that he/she handles redistribution
2) post it (given sufficient demand); its source code is 16258 bytes.

I will only read messages that DO NOT come in over uunet/unido, as
messages over uunet cost too much real money for me.  So don't use
Reply hastily, use BITNET or the path in the .signature.

The limitations:

1) The program is one big memory leak.  It won't work on a large program
   if you have a small box.  It won't work on a 16-bit box at all.
2) It is full of pointer/integer problems.  You have to fix it.
3) It does not handle array parameters with specified sizes (so, e.g.
   in /usr/lib/lint/llib-lc, it does not handle pipe() correctly).
4) Since it uses cpp output, it turns FILE into struct _iobuf and
   other silly things, so you will have to edit the output by hand.
5) It loses the difference between extern and static functions.
6) You need a working yacc/lex combination (the code is based on the
   C grammar that was posted many moons ago).  You probably need UNIX.
7) Since it is such a bletcherous hack, you are not supposed to
   attribute my name to this code, and won't be able to sue me if
   it fails (which it will).
-- 
Carsten Bormann, <cabo@tub.UUCP> <cabo@db0tui6.BITNET> <cabo@tub.BITNET>
Communications and Operating Systems Research Group
Technical University of Berlin (West, of course...)
Path: ...!pyramid!tub!cabo from the world, ...!unido!tub!cabo from Europe only.