⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sts.c

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 C
字号:
/* sts.c -- Implementation File (module.c template V1.0)   Copyright (C) 1995 Free Software Foundation, Inc.   Contributed by James Craig Burley.This file is part of GNU Fortran.GNU Fortran is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU Fortran is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU Fortran; see the file COPYING.  If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.   Related Modules:      None (despite the name, it doesn't really depend on ffest*)   Description:      Provides an arbitrary-length string facility for the limited needs of      GNU Fortran FORMAT statement generation.   Modifications:*//* Include files. */#include "proj.h"#include "sts.h"#include "com.h"#include "malloc.h"/* Externals defined here. *//* Simple definitions and enumerations. *//* Internal typedefs. *//* Private include files. *//* Internal structure definitions. *//* Static objects accessed by functions in this module. *//* Static functions (internal). *//* Internal macros. *//* ffests_kill -- Kill a varying-length string   ffests s;   ffests_kill(s);   The storage associated with the string <s> is freed.	 */voidffests_kill (ffests s){  if (s->text_ != NULL)    malloc_kill_ksr (s->pool_, s->text_, s->max_);}/* ffests_new -- Make a varying-length string   ffests s;   ffests_new(s,malloc_pool_image(),0);   The string is initialized to hold, in this case, 0 characters, and   current and future heap manipulations to hold the string will use   the image pool.  */voidffests_new (ffests s, mallocPool pool, ffestsLength size){  s->pool_ = pool;  s->len_ = 0;  s->max_ = size;  if (size == 0)    s->text_ = NULL;  else    s->text_ = malloc_new_ksr (pool, "ffests", size);}/* ffests_printf_1D -- printf("...%ld...",(long)) to a string   ffests s;   ffests_printf_1D(s,"...%ld...",1);   Like printf, but into a string.  */voidffests_printf_1D (ffests s, const char *ctl, long arg1){  char quickbuf[40];  char *buff;  ffestsLength len;  if ((len = strlen (ctl) + 21) < ARRAY_SIZE (quickbuf))    /* No # bigger than 20 digits. */    {      sprintf (&quickbuf[0], ctl, arg1);      ffests_puttext (s, &quickbuf[0], strlen (quickbuf));    }  else    {      buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_1D", len);      sprintf (buff, ctl, arg1);      ffests_puttext (s, buff, strlen (buff));      malloc_kill_ks (malloc_pool_image (), buff, len);    }}/* ffests_printf_1U -- printf("...%lu...",(unsigned long)) to a string   ffests s;   ffests_printf_1U(s,"...%lu...",1);   Like printf, but into a string.  */voidffests_printf_1U (ffests s, const char *ctl, unsigned long arg1){  char quickbuf[40];  char *buff;  ffestsLength len;  if ((len = strlen (ctl) + 21) < ARRAY_SIZE (quickbuf))    /* No # bigger than 20 digits. */    {      sprintf (&quickbuf[0], ctl, arg1);      ffests_puttext (s, &quickbuf[0], strlen (quickbuf));    }  else    {      buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_1U", len);      sprintf (buff, ctl, arg1);      ffests_puttext (s, buff, strlen (buff));      malloc_kill_ks (malloc_pool_image (), buff, len);    }}/* ffests_printf_1s -- printf("...%s...",(char *)) to a string   ffests s;   ffests_printf_1s(s,"...%s...","hi there!");   Like printf, but into a string.  */voidffests_printf_1s (ffests s, const char *ctl, const char *arg1){  char quickbuf[40];  char *buff;  ffestsLength len;  if ((len = strlen (ctl) + strlen (arg1) - 1) < ARRAY_SIZE (quickbuf))    {      sprintf (&quickbuf[0], ctl, arg1);      ffests_puttext (s, &quickbuf[0], strlen (quickbuf));    }  else    {      buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_1s", len);      sprintf (buff, ctl, arg1);      ffests_puttext (s, buff, strlen (buff));      malloc_kill_ks (malloc_pool_image (), buff, len);    }}/* ffests_printf_2Us -- printf("...%lu...%s...",...) to a string   ffests s;   ffests_printf_2Us(s,"...%lu...%s...",1,"hi there!");   Like printf, but into a string.  */voidffests_printf_2Us (ffests s, const char *ctl, unsigned long arg1, const char *arg2){  char quickbuf[60];  char *buff;  ffestsLength len;  if ((len = strlen (ctl) + 21 + strlen (arg2) - 1) < ARRAY_SIZE (quickbuf))    /* No # bigger than 20 digits. */    {      sprintf (&quickbuf[0], ctl, arg1, arg2);      ffests_puttext (s, &quickbuf[0], strlen (quickbuf));    }  else    {      buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_2Us", len);      sprintf (buff, ctl, arg1, arg2);      ffests_puttext (s, buff, strlen (buff));      malloc_kill_ks (malloc_pool_image (), buff, len);    }}/* ffests_putc -- Put a single character into string   ffests s;   ffests_putc(s,'*');	*/voidffests_putc (ffests s, char c){  ffests_puttext (s, &c, 1);}/* ffests_puts -- Put a zero-terminated (C-style) string into string   ffests s;   ffests_puts(s,"append me");	*/voidffests_puts (ffests s, const char *string){  ffests_puttext (s, string, strlen (string));}/* ffests_puttext -- Put a number of characters into string   ffests s;   ffests_puttext(s,"hi there",8);   The string need not be 0-terminated, because the passed length is used,   and may be 0.  */voidffests_puttext (ffests s, const char *text, ffestsLength length){  ffestsLength newlen;  ffestsLength newmax;  if (length <= 0)    return;  newlen = s->len_ + length;  if (newlen > s->max_)    {      if (s->text_ == NULL)	{	  s->max_ = 40;	  s->text_ = malloc_new_ksr (s->pool_, "ffests", s->max_);	}      else	{	  newmax = s->max_ << 1;	  while (newmax < newlen)	    newmax <<= 1;	  s->text_ = malloc_resize_ksr (s->pool_, s->text_, newmax, s->max_);	  s->max_ = newmax;	}    }  memcpy (s->text_ + s->len_, text, length);  s->len_ = newlen;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -