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

📄 text.c

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 C
字号:
/******************************************************************
 * SEAL 2.0                                                       *
 * Copyright (c) 1999-2002 SEAL Developers. All Rights Reserved.  *
 *                                                                *
 * Web site: http://sealsystem.sourceforge.net/                   *
 * E-mail (current maintainer): orudge@users.sourceforge.net      *
 ******************************************************************/

/*
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <seal.h>

#ifndef BUFFER_FORMAT_TEXT
#define BUFFER_FORMAT_TEXT   1024
#endif

l_text  set_format_text ( l_text *dest, l_text format, ... )
{
  va_list arg;
  static  l_char buffer[BUFFER_FORMAT_TEXT];
  l_text         dst = NULL;
  va_start(arg, format);
  vsprintf(buffer, format, arg);
  dst = _strdup(buffer);
  va_end(arg);

  if(strlen(buffer)>BUFFER_FORMAT_TEXT){
    DEBUG_printf("Over buffer !\nShut Down\n");
    exit(1);
  }
  if ( dest ) if ( *dest ) free(*dest);
  if ( dest ) *dest = dst;

  return dst;
};

l_text  set_format_text_nice ( l_text *dest, l_int size, l_text format, ... )
{
  va_list arg;
  static  l_char buffer[BUFFER_FORMAT_TEXT];
  l_text         dst = NULL;
  l_int          strsz;
  if ( !format ) return NULL;
  va_start(arg, format);
  strsz = vsprintf(buffer, format, arg);
  va_end(arg);

  if(strlen(buffer)>(BUFFER_FORMAT_TEXT-4)){
    DEBUG_printf("Over buffer !\nShut Down\n");
    exit(1);
  }

  if ( (strsz > abs(size)) && (size > 0) ) {
      buffer[0] = '\0';
      if ( size < 0 ) { /* before text */
         strcat(buffer, "...");
         buffer[abs(size)+3] = '\0';
      } else { /* after text */
         strcat(buffer, (&buffer)[(strsz-abs(size))-4]);
         strcat(buffer, "...");
      };
  };
  dst = _strdup(buffer);
  if ( dest ) *dest = dst;
  return dst;
}

l_text  insstr ( l_text dest, l_text str, l_long pos, l_long size )
{
  l_text n = NULL;
  l_long ttsize = 0;
  l_long sz = 0;
  if ( !str || pos < 0 || size <= 0 ) return dest;
  sz = strlen(str);
  if ( sz < 0 ) return dest;
  if ( !dest ) {
    n = (l_text)_malloc(lmin(sz, size)+1);
    n[0] = '\0';
    strcat(n, str);
    return n;
  } else {
    l_text p;
    l_text n;
    ttsize = strlen(dest)+1;
    size = lmax(0, lmin(sz, size));
    pos  = lmax(0, lmin(ttsize-1, pos));
    p = _strdup(&dest[pos]);

    n = (l_text)_realloc(dest, ttsize+size);

    if ( n && p ) {
         strcpy(&n[pos], str);
         strcpy(&n[pos+size], p);
    };
    _free(p);
    return n;
  };
};

l_text  delstr ( l_text dest, l_long pos, l_long size )
{
  if ( dest && size > 0 ) {

    l_long ttsize = strlen(dest);

    if ( pos >= ttsize ) return dest;

    size = lmax(0, lmin((ttsize-pos), size));
    pos  = lmax(0, lmin(ttsize, pos));

    if ( size > 0 ) {

      l_text p = _strdup(&dest[pos+size]);
      l_text n = (l_text)_realloc(dest, (ttsize-size)+1);

      if ( n && p ) {

        strcpy(&n[pos], p);

      };

      _free(p);

      return n;
    };

  };

  return dest;
};


l_text  stridup ( l_text str, l_long num )
{
  if ( str && num > 0 ) {

    l_text b = (l_text )_malloc(num+1);

    if ( b ) {

      strncpy(b, str, num);
      b[num] = '\0';

    };

    return b;

  };

  return NULL;
};


l_text stristr ( l_text s, l_text d )
{
  if ( s && d && *d ) {

    while ( *s ) {
      l_text olds = s;
      l_text oldd = d;
      while ( *s && *d && tolower(*s) == tolower(*d) ) {
        s++;
        d++;
      };
      if ( !(*d) ) return olds;
      if ( olds == s ) s++;
      d = oldd;
      s++;
    };

  };

  return NULL;
};

l_text str_replace ( l_text what, l_text bywhat, l_text txt, l_bool freetxt ) {
  if ( what && txt ) {
    l_text t = freetxt ? txt : _strdup(txt);
    l_uint a = 0;
    l_uint len1 = strlen(what);
    l_uint len2 = bywhat?strlen(bywhat):0;
    while ( t[a] ) {
	  if ( !strncmp( t+a, what, len1 ) ) {
	    t = delstr(t,a,len1);
	    if ( len2 ) t = insstr(t,bywhat,a,len2);
	    a+=len1-1;
      };
	  a++;
    };
	return t;
  };
};

⌨️ 快捷键说明

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