Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtksh / ksh93 / src / lib / libast / obsolete / fgetline.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: fgetline.c /main/3 1995/11/01 18:09:14 rswiston $ */
24 /***************************************************************
25 *                                                              *
26 *                      AT&T - PROPRIETARY                      *
27 *                                                              *
28 *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF        *
29 *                    AT&T BELL LABORATORIES                    *
30 *         AND IS NOT TO BE DISCLOSED OR USED EXCEPT IN         *
31 *            ACCORDANCE WITH APPLICABLE AGREEMENTS             *
32 *                                                              *
33 *          Copyright (c) 1994 AT&T Bell Laboratories           *
34 *              Unpublished & Not for Publication               *
35 *                     All Rights Reserved                      *
36 *                                                              *
37 *       The copyright notice above does not evidence any       *
38 *      actual or intended publication of such source code      *
39 *                                                              *
40 *               This software was created by the               *
41 *           Software Engineering Research Department           *
42 *                    AT&T Bell Laboratories                    *
43 *                                                              *
44 *               For further information contact                *
45 *                   advsoft@research.att.com                   *
46 *                 Randy Hackbarth 908-582-5245                 *
47 *                  Dave Belanger 908-582-7427                  *
48 *                                                              *
49 ***************************************************************/
50
51 /* : : generated by proto : : */
52
53 #line 1
54
55 #if !defined(__PROTO__)
56 #if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
57 #if defined(__cplusplus)
58 #define __MANGLE__      "C"
59 #else
60 #define __MANGLE__
61 #endif
62 #define __STDARG__
63 #define __PROTO__(x)    x
64 #define __OTORP__(x)
65 #define __PARAM__(n,o)  n
66 #if !defined(__STDC__) && !defined(__cplusplus)
67 #if !defined(c_plusplus)
68 #define const
69 #endif
70 #define signed
71 #define void            int
72 #define volatile
73 #define __V_            char
74 #else
75 #define __V_            void
76 #endif
77 #else
78 #define __PROTO__(x)    ()
79 #define __OTORP__(x)    x
80 #define __PARAM__(n,o)  o
81 #define __MANGLE__
82 #define __V_            char
83 #define const
84 #define signed
85 #define void            int
86 #define volatile
87 #endif
88 #if defined(__cplusplus) || defined(c_plusplus)
89 #define __VARARG__      ...
90 #else
91 #define __VARARG__
92 #endif
93 #if defined(__STDARG__)
94 #define __VA_START__(p,a)       va_start(p,a)
95 #else
96 #define __VA_START__(p,a)       va_start(p)
97 #endif
98 #endif
99
100 #line 9
101 #include <ast.h>
102 #include <stdio.h>
103
104 #define LINECHUNK       256             /* line resize increment        */
105
106 /*
107  * return next line from fp
108  * if op<0 then no read takes place and internal buffer is freed
109  * if op>0 then the old buffer space is not reclaimed and
110  * the new buffer space is returned with size strlen(line)+op
111  * otherwise an internal buffer is used for each call
112  *
113  * newline is replaced by 0
114  *
115  * 0 returned if first char is EOF
116  * otherwise EOF is treated as a newline
117  */
118
119 char*
120 fgetline __PARAM__((register FILE* fp, int op), (fp, op)) __OTORP__(register FILE* fp; int op;)
121 #line 29
122 {
123         register int    c;
124         register char*  s;
125         register char*  end;
126
127         static char*    buf;
128         static int      siz;
129
130         if (op < 0)
131         {
132                 if (buf)
133                 {
134                         free(buf);
135                         buf = 0;
136                 }
137                 return(0);
138         }
139         if ((!buf || op) && !(buf = newof(0, char, siz = LINECHUNK, 0))) return(0);
140         s = buf;
141         end = s + siz;
142         for (;;)
143         {
144                 if (s >= end)
145                 {
146                         if (!(buf = newof(buf, char, siz += LINECHUNK, 0))) return(0);
147                         s = buf + siz - LINECHUNK;
148                         end = buf + siz;
149                 }
150                 switch (c = getc(fp))
151                 {
152                 case EOF:
153                         if (s == buf)
154                         {
155                                 if (op)
156                                 {
157                                         free(buf);
158                                         buf = 0;
159                                 }
160                                 return(0);
161                         }
162                         /*FALLTHROUGH*/
163                 case '\n':
164                         *s = 0;
165                         return(op ? newof(buf, char, siz = buf - s + op, 0) : buf);
166                 }
167                 *s++ = c;
168         }
169 }