This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-mbse/lib/strutil.c

418 lines
7.2 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************************
*
* $Id: strutil.c,v 1.16 2007/08/22 21:09:24 mbse Exp $
* Purpose ...............: Common string functions
*
*****************************************************************************
* Copyright (C) 1997-2007
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
* 1971 BV IJmuiden
* the Netherlands
*
* This file is part of MBSE BBS.
*
* This BBS 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, or (at your option) any
* later version.
*
* MB BBS 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 MB BBS; see the file COPYING. If not, write to the Free
* Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*****************************************************************************/
#include "../config.h"
#include "mbselib.h"
char *padleft(char *str, int size, char pad)
{
static char stri[256];
static char temp[256];
strcpy(stri, str);
memset(temp, pad, (size_t)size);
temp[size] = '\0';
if (strlen(stri) <= size)
memmove(temp, stri, (size_t)strlen(stri));
else
memmove(temp, stri, (size_t)size);
return temp;
}
/*
* Small function to convert String to LowerCase
*/
char *tl(char *str)
{
char *p = str;
while (*p != '\0') {
*p = (char)tolower(*p);
p++;
}
return str;
}
void Striplf(char *String)
{
int i;
for(i = 0; i < strlen(String); i++) {
if(*(String + i) == '\0')
break;
if(*(String + i) == '\n')
*(String + i) = '\0';
}
}
void mbse_CleanSubject(char *String)
{
int i, fixed = FALSE;
i = strlen(String) -1;
while ((isspace(String[i])) && i) {
String[i] = '\0';
i--;
fixed = TRUE;
}
if ((strncasecmp(String, "Re: ", 4) == 0) && (strncmp(String, "Re: ", 4))) {
/*
* Fix Re:
*/
String[0] = 'R';
String[1] = 'e';
String[2] = ':';
String[3] = ' ';
fixed = TRUE;
}
if (fixed)
Syslog('m', "Fixed subj: \"%s\"", printable(String, 0));
}
/*
* Converts first letter to UpperCase
*/
void tlf(char *str)
{
*(str) = toupper(*(str));
}
/*
* Small function to convert String to UpperCase
*/
char *tu(char *str)
{
char *p = str;
while (*p != '\0') {
*p = (char)toupper(*p);
p++;
}
return str;
}
/*
* Converts the first letter in every word in a string to uppercase,
* all other character will be lowercase. Will handle the notation
* Bob Ten.Dolle as well
*/
char *tlcap(char *String)
{
static char stri[256];
int Loop, Strlen;
strcpy(stri, String);
Strlen = strlen(stri);
/*
* Automatic do the first character
*/
stri[0] = toupper(stri[0]);
for(Loop = 1; Loop < Strlen; Loop++) {
stri[Loop] = tolower(stri[Loop]);
if (( stri[Loop] == ' ') || (stri[Loop] == '.')) {
/*
* This is a space charracter, increase the counter
* and convert the next character to uppercase.
*/
Loop++;
stri[Loop] = toupper(stri[Loop]);
}
}
return stri;
}
/*
* Hilite "Word" in string, this is done by inserting ANSI
* Hilite characters in the string.
*/
char *Hilite(char *str, char *Word)
{
char *pos;
char *new;
char *old;
int t;
new = strdup(str);
old = strdup(str);
tl(new);
if ((pos = strstr(new,Word)) == NULL)
return(str);
str = realloc(str,strlen(new)+200);
strcpy(str,"\0");
while (( pos = strstr(new,Word)) != NULL) {
*pos = '\0';
t = strlen(new);
strncat(str,old,t);
strcat(str,"");
old+=t;
strncat(str,old,strlen(Word));
strcat(str,"");
old+=strlen(Word);
new = new+t+strlen(Word);
}
strcat(str,old);
return(str);
}
/*
* Replace spaces is a string with underscore characters.
*/
void Addunderscore(char *temp)
{
int i;
for(i = 0; i < strlen(temp); i++) {
if (*(temp + i) == '\0')
break;
if (*(temp + i) == ' ')
*(temp + i) = '_';
}
}
/*
* Find & Replace string in a string
*/
void strreplace(char *sStr, char *sFind, char *sReplace)
{
char sNewstr[81]="";
char *posStr, *posFind;
int iPos, iLen, iCounter;
posStr=sStr;
if(( posFind = strstr(sStr, sFind)) != NULL) {
iPos = (int)(posFind - posStr);
strncpy(sNewstr, sStr, iPos);
strcat(sNewstr, sReplace);
iPos+= strlen(sFind);
iLen = strlen(sNewstr);
for (iCounter=0; iCounter < (strlen(sStr) - iPos); iCounter++)
sNewstr[iCounter + iLen] = sStr[iCounter + iPos];
sNewstr[iCounter+1+iLen] = '\0';
strcpy(sStr, sNewstr);
}
}
/*
* Converts to HH:MM
*/
char *StrTimeHM(time_t date)
{
static char ttime[6];
struct tm *l_d;
l_d = localtime(&date);
snprintf(ttime, 6, "%02d:%02d", l_d->tm_hour, l_d->tm_min);
return ttime;
}
/*
* Returns HH:MM:SS
*/
char *StrTimeHMS(time_t date)
{
static char ttime[9];
struct tm *l_d;
l_d = localtime(&date);
snprintf(ttime, 9, "%02d:%02d:%02d", l_d->tm_hour, l_d->tm_min, l_d->tm_sec);
return ttime;
}
/*
* Get the current local time, returns HH:MM
*/
char *GetLocalHM()
{
static char gettime[15];
time_t T_Now;
T_Now = time(NULL);
snprintf(gettime, 15, "%s", StrTimeHM(T_Now));
return(gettime);
}
/*
* Get the current local time, returns HH:MM:SS
*/
char *GetLocalHMS()
{
static char gettime[15];
time_t T_Now;
T_Now = time(NULL);
snprintf(gettime, 15, "%s", StrTimeHMS(T_Now));
return(gettime);
}
/*
* Returns date as MM-DD-YYYY
*/
char *StrDateMDY(time_t *Clock)
{
struct tm *tm;
static char cdate[12];
tm = localtime(Clock);
snprintf(cdate, 12, "%02d-%02d-%04d", tm->tm_mon+1, tm->tm_mday, tm->tm_year+1900);
return(cdate);
}
/*
* Returns DD-MM-YYYY
*/
char *StrDateDMY(time_t date)
{
static char tdate[15];
struct tm *l_d;
l_d = localtime(&date);
snprintf(tdate, 15, "%02d-%02d-%04d", l_d->tm_mday, l_d->tm_mon+1, l_d->tm_year+1900);
return tdate;
}
/*
* This function returns the date for today, to test against other functions
* DD-MM-YYYY (DAY-MONTH-YEAR)
*/
char *GetDateDMY()
{
static char tdate[15];
struct tm *l_d;
time_t T_Now;
T_Now = time(NULL);
l_d = localtime(&T_Now);
snprintf(tdate, 15, "%02d-%02d-%04d", l_d->tm_mday,l_d->tm_mon+1,l_d->tm_year+1900);
return(tdate);
}
char *OsName()
{
#ifdef __linux__
return (char *)"GNU/Linux";
#elif __FreeBSD__
return (char *)"FreeBSD";
#elif __NetBSD__
return (char *)"NetBSD";
#elif __OpenBSD__
return (char *)"OpenBSD";
#else
#error "Unknown target OS"
#endif
}
char *OsCPU()
{
#ifdef __i386__
return (char *)"i386";
#elif __x86_64__
return (char *)"x86_64";
#elif __PPC__
return (char *)"PPC";
#elif __sparc__
return (char *)"Sparc";
#elif __alpha__
return (char *)"Alpha";
#elif __hppa__
return (char *)"HPPA";
#elif __arm__
return (char *)"ARM";
#else
#error "Unknown CPU"
#endif
}
/*
* Return universal tearline, note if OS and CPU are
* unknown, the tearline is already 39 characters.
*/
char *TearLine()
{
static char tearline[45];
snprintf(tearline, 45, "--- MBSE BBS v%s (%s-%s)", VERSION, OsName(), OsCPU());
return tearline;
}