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