1 /* sts.c -- Implementation File (module.c template V1.0)
2 Copyright (C) 1995 Free Software Foundation, Inc.
3 Contributed by James Craig Burley.
5 This file is part of GNU Fortran.
7 GNU Fortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU Fortran is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Fortran; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 None (despite the name, it doesn't really depend on ffest*)
26 Provides an arbitrary-length string facility for the limited needs of
27 GNU Fortran FORMAT statement generation.
39 /* Externals defined here. */
42 /* Simple definitions and enumerations. */
45 /* Internal typedefs. */
48 /* Private include files. */
51 /* Internal structure definitions. */
54 /* Static objects accessed by functions in this module. */
57 /* Static functions (internal). */
60 /* Internal macros. */
63 /* ffests_kill -- Kill a varying-length string
68 The storage associated with the string <s> is freed. */
71 ffests_kill (ffests s)
74 malloc_kill_ksr (s->pool_, s->text_, s->max_);
77 /* ffests_new -- Make a varying-length string
80 ffests_new(s,malloc_pool_image(),0);
82 The string is initialized to hold, in this case, 0 characters, and
83 current and future heap manipulations to hold the string will use
87 ffests_new (ffests s, mallocPool pool, ffestsLength size)
96 s->text_ = malloc_new_ksr (pool, "ffests", size);
99 /* ffests_printf -- printf ("...%ld...",(long)) to a string
102 ffests_printf (s,"...%ld...",1);
104 Like printf, but into a string. */
107 ffests_printf (ffests s, const char *ctl, ...)
113 if (vasprintf (&string, ctl, ap) == 0)
116 ffests_puts (s, string);
120 /* ffests_putc -- Put a single character into string
123 ffests_putc(s,'*'); */
126 ffests_putc (ffests s, char c)
128 ffests_puttext (s, &c, 1);
131 /* ffests_puts -- Put a zero-terminated (C-style) string into string
134 ffests_puts(s,"append me"); */
137 ffests_puts (ffests s, const char *string)
139 ffests_puttext (s, string, strlen (string));
142 /* ffests_puttext -- Put a number of characters into string
145 ffests_puttext(s,"hi there",8);
147 The string need not be 0-terminated, because the passed length is used,
151 ffests_puttext (ffests s, const char *text, ffestsLength length)
159 newlen = s->len_ + length;
160 if (newlen > s->max_)
162 if (s->text_ == NULL)
165 s->text_ = malloc_new_ksr (s->pool_, "ffests", s->max_);
169 newmax = s->max_ << 1;
170 while (newmax < newlen)
172 s->text_ = malloc_resize_ksr (s->pool_, s->text_, newmax, s->max_);
177 memcpy (s->text_ + s->len_, text, length);