19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* ansi2knr.c */
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectWARRANTY.  No author or distributor accepts responsibility to anyone for the
79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectconsequences of using it or for whether it serves any particular purpose or
89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectworks at all, unless he says so in writing.  Refer to the GNU General Public
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectLicense (the "GPL") for full details.
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEveryone is granted permission to copy, modify and redistribute ansi2knr,
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectbut only under the conditions described in the GPL.  A copy of this license
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectis supposed to have been given to you along with ansi2knr so you can know
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectyour rights and responsibilities.  It should be in a file named COPYLEFT.
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project[In the IJG distribution, the GPL appears below, not in a separate file.]
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectAmong other things, the copyright notice and this notice must be preserved
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecton all copies.
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectWe explicitly state here what we believe is already implied by the GPL: if
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthe ansi2knr program is distributed as a separate set of sources and a
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectseparate executable file which are aggregated on a storage medium together
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwith another program, this in itself does not bring the other program under
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthe GPL, nor does the mere fact that such a program or the procedures for
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectconstructing it invoke the ansi2knr executable bring any other part of the
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectprogram under the GPL.
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project*/
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project---------- Here is the GNU GPL file COPYLEFT, referred to above ----------
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project----- These terms do NOT apply to the JPEG software itself; see README ------
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		    GHOSTSCRIPT GENERAL PUBLIC LICENSE
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		    (Clarified 11 Feb 1988)
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project Copyright (C) 1988 Richard M. Stallman
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project Everyone is permitted to copy and distribute verbatim copies of this
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project license, but changing it is not allowed.  You can also use this wording
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project to make the terms for other programs.
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  The license agreements of most software companies keep you at the
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectmercy of those companies.  By contrast, our general public license is
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectintended to give everyone the right to share Ghostscript.  To make sure
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthat you get the rights we want you to have, we need to make
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectrestrictions that forbid anyone to deny you these rights or to ask you
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectto surrender the rights.  Hence this license agreement.
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  Specifically, we want to make sure that you have the right to give
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectaway copies of Ghostscript, that you receive source code or else can get
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectit if you want it, that you can change Ghostscript or use pieces of it
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectin new free programs, and that you know you can do these things.
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  To make sure that everyone has such rights, we have to forbid you to
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectdeprive anyone else of these rights.  For example, if you distribute
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectcopies of Ghostscript, you must give the recipients all the rights that
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectyou have.  You must make sure that they, too, receive or can get the
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectsource code.  And you must tell them their rights.
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  Also, for our own protection, we must make certain that everyone finds
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectout that there is no warranty for Ghostscript.  If Ghostscript is
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectmodified by someone else and passed on, we want its recipients to know
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthat what they have is not what we distributed, so that any problems
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectintroduced by others will not reflect on our reputation.
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  Therefore we (Richard M. Stallman and the Free Software Foundation,
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectInc.) make the following terms which say what you must do to be allowed
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectto distribute or change Ghostscript.
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			COPYING POLICIES
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  1. You may copy and distribute verbatim copies of Ghostscript source
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectcode as you receive it, in any medium, provided that you conspicuously
739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectand appropriately publish on each copy a valid copyright and license
749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectnotice "Copyright (C) 1989 Aladdin Enterprises.  All rights reserved.
759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectDistributed by Free Software Foundation, Inc." (or with whatever year is
769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectappropriate); keep intact the notices on all files that refer to this
779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectLicense Agreement and to the absence of any warranty; and give any other
789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectrecipients of the Ghostscript program a copy of this License Agreement
799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectalong with the program.  You may charge a distribution fee for the
809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectphysical act of transferring a copy.
819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  2. You may modify your copy or copies of Ghostscript or any portion of
839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectit, and copy and distribute such modifications under the terms of
849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectParagraph 1 above, provided that you also do the following:
859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    a) cause the modified files to carry prominent notices stating
879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    that you changed the files and the date of any change; and
889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    b) cause the whole of any work that you distribute or publish,
909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    that in whole or in part contains or is a derivative of Ghostscript
919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    or any part thereof, to be licensed at no charge to all third
929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    parties on terms identical to those contained in this License
939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    Agreement (except that you may choose to grant more extensive
949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    warranty protection to some or all third parties, at your option).
959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    c) You may charge a distribution fee for the physical act of
979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    transferring a copy, and you may at your option offer warranty
989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    protection in exchange for a fee.
999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMere aggregation of another unrelated program with this program (or its
1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectderivative) on a volume of a storage or distribution medium does not bring
1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectthe other program under the scope of these terms.
1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  3. You may copy and distribute Ghostscript (or a portion or derivative
1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectof it, under Paragraph 2) in object code or executable form under the
1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectterms of Paragraphs 1 and 2 above provided that you also do one of the
1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectfollowing:
1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    a) accompany it with the complete corresponding machine-readable
1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    source code, which must be distributed under the terms of
1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    Paragraphs 1 and 2 above; or,
1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    b) accompany it with a written offer, valid for at least three
1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    years, to give any third party free (except for a nominal
1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    shipping charge) a complete machine-readable copy of the
1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    corresponding source code, to be distributed under the terms of
1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    Paragraphs 1 and 2 above; or,
1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    c) accompany it with the information you received as to where the
1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    corresponding source code may be obtained.  (This alternative is
1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    allowed only for noncommercial distribution and only if you
1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    received the program in object code or executable form alone.)
1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectFor an executable file, complete source code means all the source code for
1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectall modules it contains; but, as a special exception, it need not include
1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectsource code for modules which are standard libraries that accompany the
1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectoperating system on which the executable file runs.
1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  4. You may not copy, sublicense, distribute or transfer Ghostscript
1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectexcept as expressly provided under this License Agreement.  Any attempt
1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectotherwise to copy, sublicense, distribute or transfer Ghostscript is
1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectvoid and your rights to use the program under this License agreement
1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectshall be automatically terminated.  However, parties who have received
1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectcomputer software programs from you with this License Agreement will not
1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecthave their licenses terminated so long as such parties remain in full
1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectcompliance.
1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  5. If you wish to incorporate parts of Ghostscript into other free
1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectprograms whose distribution conditions are different, write to the Free
1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectSoftware Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not
1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectyet worked out a simple rule that can be stated here, but we will often
1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectpermit this.  We will be guided by the two goals of preserving the free
1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstatus of all derivatives of our free software and of promoting the
1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectsharing and reuse of software.
1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectYour comments and suggestions about our licensing policies and our
1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectsoftware are welcome!  Please contact the Free Software Foundation,
1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectInc., 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296.
1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		       NO WARRANTY
1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  BECAUSE GHOSTSCRIPT IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectNO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectWHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, RICHARD
1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectM. STALLMAN, ALADDIN ENTERPRISES, L. PETER DEUTSCH, AND/OR OTHER PARTIES
1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectPROVIDE GHOSTSCRIPT "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectEXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE
1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF GHOSTSCRIPT IS WITH
1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectYOU.  SHOULD GHOSTSCRIPT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectNECESSARY SERVICING, REPAIR OR CORRECTION.
1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectSTALLMAN, THE FREE SOFTWARE FOUNDATION, INC., L. PETER DEUTSCH, ALADDIN
1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectENTERPRISES, AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE
1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGHOSTSCRIPT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR
1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectINACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE
1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectPROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GHOSTSCRIPT, EVEN IF YOU
1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectHAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM
1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectBY ANY OTHER PARTY.
1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project-------------------- End of file COPYLEFT ------------------------------
1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project*/
1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Usage:
1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	ansi2knr input_file [output_file]
1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * If no output_file is supplied, output goes to stdout.
1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * There are no error messages.
1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * ansi2knr recognizes function definitions by seeing a non-keyword
1859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * identifier at the left margin, followed by a left parenthesis,
1869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * with a right parenthesis as the last character on the line,
1879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * and with a left brace as the first token on the following line
1889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * (ignoring possible intervening comments).
1899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * It will recognize a multi-line header provided that no intervening
1909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * line ends with a left or right brace or a semicolon.
1919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * These algorithms ignore whitespace and comments, except that
1929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * the function name must be the first thing on the line.
1939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The following constructs will confuse it:
1949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	- Any other construct that starts at the left margin and
1959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	    follows the above syntax (such as a macro or function call).
1969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	- Some macros that tinker with the syntax of the function header.
1979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
1989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
2009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The original and principal author of ansi2knr is L. Peter Deutsch
2019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * <ghost@aladdin.com>.  Other authors are noted in the change history
2029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * that follows (in reverse chronological order):
2039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with
2049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		compilers that don't understand void, as suggested by
2059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		Tom Lane
2069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 96-01-15 changed to require that the first non-comment token
2079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		on the line following a function header be a left brace,
2089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		to reduce sensitivity to macros, as suggested by Tom Lane
2099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		<tgl@sss.pgh.pa.us>
2109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 95-06-22 removed #ifndefs whose sole purpose was to define
2119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		undefined preprocessor symbols as 0; changed all #ifdefs
2129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		for configuration symbols to #ifs
2139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 95-04-05 changed copyright notice to make it clear that
2149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		including ansi2knr in a program does not bring the entire
2159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		program under the GPL
2169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 94-12-18 added conditionals for systems where ctype macros
2179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		don't handle 8-bit characters properly, suggested by
2189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		Francois Pinard <pinard@iro.umontreal.ca>;
2199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		removed --varargs switch (this is now the default)
2209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 94-10-10 removed CONFIG_BROKETS conditional
2219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 94-07-16 added some conditionals to help GNU `configure',
2229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		suggested by Francois Pinard <pinard@iro.umontreal.ca>;
2239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		properly erase prototype args in function parameters,
2249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		contributed by Jim Avera <jima@netcom.com>;
2259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		correct error in writeblanks (it shouldn't erase EOLs)
2269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	lpd 89-xx-xx original version
2279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
2289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Most of the conditionals here are to make ansi2knr work with */
2309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* or without the GNU configure machinery. */
2319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#if HAVE_CONFIG_H
2339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# include <config.h>
2349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
2359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <stdio.h>
2379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <ctype.h>
2389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#if HAVE_CONFIG_H
2409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
2429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
2439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   This will define HAVE_CONFIG_H and so, activate the following lines.
2449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
2459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# if STDC_HEADERS || HAVE_STRING_H
2479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  include <string.h>
2489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# else
2499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  include <strings.h>
2509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# endif
2519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else /* not HAVE_CONFIG_H */
2539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Otherwise do it the hard way */
2559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# ifdef BSD
2579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  include <strings.h>
2589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# else
2599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  ifdef VMS
2609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    extern int strlen(), strncmp();
2619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  else
2629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#   include <string.h>
2639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  endif
2649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# endif
2659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif /* not HAVE_CONFIG_H */
2679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#if STDC_HEADERS
2699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# include <stdlib.h>
2709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else
2719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
2729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   malloc and free should be declared in stdlib.h,
2739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   but if you've got a K&R compiler, they probably aren't.
2749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
2759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# ifdef MSDOS
2769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  include <malloc.h>
2779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# else
2789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  ifdef VMS
2799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     extern char *malloc();
2809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     extern void free();
2819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  else
2829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     extern char *malloc();
2839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     extern int free();
2849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  endif
2859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project# endif
2869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
2889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
2909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The ctype macros don't always handle 8-bit characters correctly.
2919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Compensate for this here.
2929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
2939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef isascii
2949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  undef HAVE_ISASCII		/* just in case */
2959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  define HAVE_ISASCII 1
2969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else
2979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
2989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#if STDC_HEADERS || !HAVE_ISASCII
2999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  define is_ascii(c) 1
3009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else
3019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#  define is_ascii(c) isascii(c)
3029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
3039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define is_space(c) (is_ascii(c) && isspace(c))
3059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define is_alpha(c) (is_ascii(c) && isalpha(c))
3069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define is_alnum(c) (is_ascii(c) && isalnum(c))
3079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Scanning macros */
3099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
3109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
3119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Forward references */
3139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchar *skipspace();
3149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint writeblanks();
3159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint test1();
3169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint convert1();
3179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* The main program */
3199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint
3209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectmain(argc, argv)
3219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    int argc;
3229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    char *argv[];
3239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{	FILE *in, *out;
3249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define bufsize 5000			/* arbitrary size */
3259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char *buf;
3269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char *line;
3279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char *more;
3289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/*
3299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 * In previous versions, ansi2knr recognized a --varargs switch.
3309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 * If this switch was supplied, ansi2knr would attempt to convert
3319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 * a ... argument to va_alist and va_dcl; if this switch was not
3329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 * supplied, ansi2knr would simply drop any such arguments.
3339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 * Now, ansi2knr always does this conversion, and we only
3349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 * check for this switch for backward compatibility.
3359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	 */
3369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	int convert_varargs = 1;
3379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( argc > 1 && argv[1][0] == '-' )
3399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  {	if ( !strcmp(argv[1], "--varargs") )
3409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  {	convert_varargs = 1;
3419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			argc--;
3429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			argv++;
3439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  }
3449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		else
3459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  {	fprintf(stderr, "Unrecognized switch: %s\n", argv[1]);
3469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			exit(1);
3479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  }
3489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  }
3499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	switch ( argc )
3509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {
3519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	default:
3529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		printf("Usage: ansi2knr input_file [output_file]\n");
3539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		exit(0);
3549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	case 2:
3559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		out = stdout;
3569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		break;
3579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	case 3:
3589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		out = fopen(argv[2], "w");
3599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		if ( out == NULL )
3609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	fprintf(stderr, "Cannot open output file %s\n", argv[2]);
3619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			exit(1);
3629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
3639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
3649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	in = fopen(argv[1], "r");
3659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( in == NULL )
3669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {	fprintf(stderr, "Cannot open input file %s\n", argv[1]);
3679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		exit(1);
3689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
3699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fprintf(out, "#line 1 \"%s\"\n", argv[1]);
3709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	buf = malloc(bufsize);
3719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	line = buf;
3729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
3739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {
3749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttest:		line += strlen(line);
3759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		switch ( test1(buf) )
3769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {
3779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		case 2:			/* a function header */
3789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			convert1(buf, out, 1, convert_varargs);
3799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			break;
3809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		case 1:			/* a function */
3819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			/* Check for a { at the start of the next line. */
3829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			more = ++line;
3839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectf:			if ( line >= buf + (bufsize - 1) ) /* overflow check */
3849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  goto wl;
3859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )
3869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  goto wl;
3879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			switch ( *skipspace(more, 1) )
3889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  {
3899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  case '{':
3909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    /* Definitely a function header. */
3919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    convert1(buf, out, 0, convert_varargs);
3929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    fputs(more, out);
3939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    break;
3949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  case 0:
3959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    /* The next line was blank or a comment: */
3969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    /* keep scanning for a non-comment. */
3979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    line += strlen(line);
3989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    goto f;
3999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  default:
4009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    /* buf isn't a function header, but */
4019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    /* more might be. */
4029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    fputs(buf, out);
4039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    strcpy(buf, more);
4049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    line = buf;
4059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			    goto test;
4069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  }
4079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			break;
4089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		case -1:		/* maybe the start of a function */
4099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			if ( line != buf + (bufsize - 1) ) /* overflow check */
4109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  continue;
4119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			/* falls through */
4129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		default:		/* not a function */
4139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwl:			fputs(buf, out);
4149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			break;
4159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
4169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		line = buf;
4179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
4189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( line != buf )
4199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  fputs(buf, out);
4209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	free(buf);
4219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fclose(out);
4229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	fclose(in);
4239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	return 0;
4249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
4259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
4269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Skip over space and comments, in either direction. */
4279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectchar *
4289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectskipspace(p, dir)
4299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    register char *p;
4309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    register int dir;			/* 1 for forward, -1 for backward */
4319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{	for ( ; ; )
4329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {	while ( is_space(*p) )
4339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  p += dir;
4349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		if ( !(*p == '/' && p[dir] == '*') )
4359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  break;
4369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		p += dir;  p += dir;
4379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		while ( !(*p == '*' && p[dir] == '/') )
4389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	if ( *p == 0 )
4399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  return p;	/* multi-line comment?? */
4409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			p += dir;
4419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
4429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		p += dir;  p += dir;
4439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
4449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	return p;
4459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
4469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
4479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
4489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Write blanks over part of a string.
4499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Don't overwrite end-of-line characters.
4509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
4519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint
4529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwriteblanks(start, end)
4539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    char *start;
4549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    char *end;
4559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{	char *p;
4569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	for ( p = start; p < end; p++ )
4579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  if ( *p != '\r' && *p != '\n' )
4589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    *p = ' ';
4599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	return 0;
4609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
4619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
4629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
4639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Test whether the string in buf is a function definition.
4649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The string may contain and/or end with a newline.
4659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Return as follows:
4669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	0 - definitely not a function definition;
4679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	1 - definitely a function definition;
4689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	2 - definitely a function prototype (NOT USED);
4699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	-1 - may be the beginning of a function definition,
4709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *		append another line and look again.
4719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The reason we don't attempt to convert function prototypes is that
4729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Ghostscript's declaration-generating macros look too much like
4739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * prototypes, and confuse the algorithms.
4749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
4759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint
4769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttest1(buf)
4779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    char *buf;
4789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{	register char *p = buf;
4799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char *bend;
4809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char *endfn;
4819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	int contin;
4829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
4839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( !isidfirstchar(*p) )
4849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  return 0;		/* no name at left margin */
4859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	bend = skipspace(buf + strlen(buf) - 1, -1);
4869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	switch ( *bend )
4879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {
4889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   case ';': contin = 0 /*2*/; break;
4899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   case ')': contin = 1; break;
4909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   case '{': return 0;		/* not a function */
4919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   case '}': return 0;		/* not a function */
4929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   default: contin = -1;
4939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
4949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	while ( isidchar(*p) )
4959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  p++;
4969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	endfn = p;
4979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	p = skipspace(p, 1);
4989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( *p++ != '(' )
4999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  return 0;		/* not a function */
5009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	p = skipspace(p, 1);
5019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( *p == ')' )
5029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  return 0;		/* no parameters */
5039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* Check that the apparent function name isn't a keyword. */
5049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* We only need to check for keywords that could be followed */
5059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* by a left parenthesis (which, unfortunately, is most of them). */
5069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {	static char *words[] =
5079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	"asm", "auto", "case", "char", "const", "double",
5089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			"extern", "float", "for", "if", "int", "long",
5099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			"register", "return", "short", "signed", "sizeof",
5109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			"static", "switch", "typedef", "unsigned",
5119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			"void", "volatile", "while", 0
5129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   };
5139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		char **key = words;
5149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		char *kp;
5159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int len = endfn - buf;
5169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
5179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		while ( (kp = *key) != 0 )
5189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	if ( strlen(kp) == len && !strncmp(kp, buf, len) )
5199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  return 0;	/* name is a keyword */
5209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			key++;
5219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
5229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
5239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	return contin;
5249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
5259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
5269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Convert a recognized function definition or header to K&R syntax. */
5279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectint
5289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectconvert1(buf, out, header, convert_varargs)
5299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    char *buf;
5309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    FILE *out;
5319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    int header;			/* Boolean */
5329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    int convert_varargs;	/* Boolean */
5339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{	char *endfn;
5349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	register char *p;
5359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char **breaks;
5369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	unsigned num_breaks = 2;	/* for testing */
5379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char **btop;
5389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char **bp;
5399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char **ap;
5409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	char *vararg = 0;
5419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
5429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* Pre-ANSI implementations don't agree on whether strchr */
5439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* is called strchr or index, so we open-code it here. */
5449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	for ( endfn = buf; *(endfn++) != '('; )
5459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  ;
5469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttop:	p = endfn;
5479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
5489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( breaks == 0 )
5499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {	/* Couldn't allocate break table, give up */
5509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		fprintf(stderr, "Unable to allocate break table!\n");
5519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		fputs(buf, out);
5529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		return -1;
5539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
5549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	btop = breaks + num_breaks * 2 - 2;
5559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	bp = breaks;
5569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* Parse the argument list */
5579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	do
5589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {	int level = 0;
5599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		char *lp = NULL;
5609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		char *rp;
5619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		char *end = NULL;
5629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
5639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		if ( bp >= btop )
5649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	/* Filled up break table. */
5659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			/* Allocate a bigger one and start over. */
5669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			free((char *)breaks);
5679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			num_breaks <<= 1;
5689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			goto top;
5699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
5709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		*bp++ = p;
5719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		/* Find the end of the argument */
5729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		for ( ; end == NULL; p++ )
5739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	switch(*p)
5749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   {
5759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   case ',':
5769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				if ( !level ) end = p;
5779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				break;
5789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   case '(':
5799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				if ( !level ) lp = p;
5809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				level++;
5819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				break;
5829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   case ')':
5839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				if ( --level < 0 ) end = p;
5849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				else rp = p;
5859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				break;
5869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   case '/':
5879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				p = skipspace(p, 1) - 1;
5889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				break;
5899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   default:
5909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				;
5919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   }
5929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
5939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		/* Erase any embedded prototype parameters. */
5949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		if ( lp )
5959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  writeblanks(lp + 1, rp);
5969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		p--;			/* back up over terminator */
5979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		/* Find the name being declared. */
5989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		/* This is complicated because of procedure and */
5999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		/* array modifiers. */
6009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		for ( ; ; )
6019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	p = skipspace(p - 1, -1);
6029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			switch ( *p )
6039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   {
6049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   case ']':	/* skip array dimension(s) */
6059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   case ')':	/* skip procedure args OR name */
6069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   {	int level = 1;
6079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				while ( level )
6089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				 switch ( *--p )
6099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   {
6109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   case ']': case ')': level++; break;
6119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   case '[': case '(': level--; break;
6129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   case '/': p = skipspace(p, -1) + 1; break;
6139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   default: ;
6149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   }
6159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   }
6169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				if ( *p == '(' && *skipspace(p + 1, 1) == '*' )
6179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   {	/* We found the name being declared */
6189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project					while ( !isidfirstchar(*p) )
6199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project					  p = skipspace(p, 1) + 1;
6209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project					goto found;
6219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				   }
6229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				break;
6239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   default:
6249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				goto found;
6259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   }
6269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
6279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectfound:		if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
6289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  {	if ( convert_varargs )
6299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  {	*bp++ = "va_alist";
6309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				vararg = p-2;
6319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  }
6329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			else
6339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  {	p++;
6349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				if ( bp == breaks + 1 )	/* sole argument */
6359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				  writeblanks(breaks[0], p);
6369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				else
6379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				  writeblanks(bp[-1] - 1, p);
6389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				bp--;
6399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  }
6409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
6419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		else
6429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	while ( isidchar(*p) ) p--;
6439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			*bp++ = p+1;
6449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
6459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		p = end;
6469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
6479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	while ( *p++ == ',' );
6489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	*bp = p;
6499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* Make a special check for 'void' arglist */
6509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( bp == breaks+2 )
6519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   {	p = skipspace(breaks[0], 1);
6529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		if ( !strncmp(p, "void", 4) )
6539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   {	p = skipspace(p+4, 1);
6549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			if ( p == breaks[2] - 1 )
6559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   {	bp = breaks;	/* yup, pretend arglist is empty */
6569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				writeblanks(breaks[0], p + 1);
6579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			   }
6589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		   }
6599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	   }
6609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* Put out the function name and left parenthesis. */
6619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	p = buf;
6629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	while ( p != endfn ) putc(*p, out), p++;
6639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	/* Put out the declaration. */
6649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	if ( header )
6659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  {	fputs(");", out);
6669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		for ( p = breaks[0]; *p; p++ )
6679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  if ( *p == '\r' || *p == '\n' )
6689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		    putc(*p, out);
6699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  }
6709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	else
6719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  {	for ( ap = breaks+1; ap < bp; ap += 2 )
6729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  {	p = *ap;
6739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			while ( isidchar(*p) )
6749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  putc(*p, out), p++;
6759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			if ( ap < bp - 1 )
6769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			  fputs(", ", out);
6779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  }
6789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		fputs(")  ", out);
6799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		/* Put out the argument declarations */
6809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		for ( ap = breaks+2; ap <= bp; ap += 2 )
6819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  (*ap)[-1] = ';';
6829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		if ( vararg != 0 )
6839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  {	*vararg = 0;
6849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			fputs(breaks[0], out);		/* any prior args */
6859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			fputs("va_dcl", out);		/* the final arg */
6869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project			fputs(bp[0], out);
6879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  }
6889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		else
6899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		  fputs(breaks[0], out);
6909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	  }
6919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	free((char *)breaks);
6929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	return 0;
6939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
694