Category : Files from Magazines
Archive   : CUJ9301.ZIP
Filename : 1101075B

 
Output of file : 1101075B contained in archive : CUJ9301.ZIP
/*****************************************************
File Name: STR_EDIT.C
Description: Library of functions for editing
strings
Global Function List: str_center
str_delete
str_insert
str_ljust
str_ltrim
str_mrplc
str_ocat
str_repeat
str_rjust
str_rplc
str_rtrim
str_trim
str_vcat
Portability: Standard C
******************************************************/

/* Standard C */
#include
#include
#include

/* Own */
#include

/*****************************************************
Name: str_center
Parameters: Str - string to center
Len - num of chars of centered string
Return: Str
Description: Centers a string in a desired length
by removing tabs and adding spaces
to both sides of string.
*****************************************************/
char *str_center( char *Str, size_t Len )
{

size_t LenOrg;

/* Trim spaces and tabs off the string */
str_trim( Str, " \t" );

LenOrg = strlen( Str );
if ( Len <= LenOrg )
{
/* The desired string length is shorter than
** the original so return */
return ( Str );
}

/* Add the spaces to each side */
str_rjust( Str, ( LenOrg + Len ) / 2 );
str_ljust( Str, Len );

return ( Str );

} /* function str_center */


/*****************************************************
Name: str_delete
Parameters: Str - string to edit
Pos - index to start deleting chars at
Num - number of charcters to delete
Return: Str
Description: Modifies Str, by deleting Num chars
beginning at Pos.
*****************************************************/
char *str_delete( char *Str, char *Pos, size_t Num )
{

size_t Len = strlen( Str );

if ( ( Pos >= &Str[Len] ) || ( Num == 0 ) )
{
/* Outside string or no chars to delete */
return ( Str );
}

Num = min( Num, strlen( Pos ) );
if ( Num )
{
/* Delete characters by contactenating */
memmove( Pos, &Pos[Num],
strlen( &Pos[Num] ) + 1 );
}

return ( Str );

} /* function str_delete */


/*****************************************************
Name: str_insert
Parameters: Str - string to edit
Pos - pointer to location withing Str
Insrt - string to insert into Str
Return: Str
Description: Inserts a string Insrt into Str at Pos
*****************************************************/
char *str_insert( char *Str, char *Pos, char *Insrt )
{

size_t Len = strlen( Insrt );
char *Tmp = &Pos[Len];

memmove( Tmp, Pos, strlen( Pos ) + 1 );
memmove( Pos, Insrt, Len );

return ( Str );

} /* function str_insert */


/*****************************************************
Name: str_ljust
Parameters: Str - string to left justify
Len - length of string
Return: Str
Description: Pads right end of Str with spaces to
left justify Str to a new length Len.
*****************************************************/
char *str_ljust( char *Str, size_t Len )
{

size_t LenOrg = strlen( Str );
char *StrEnd = &Str[LenOrg];

Len = max( Len, LenOrg ) - LenOrg;
StrEnd[Len] = '\0';

while ( Len )
{
Len--;
StrEnd[Len] = ' ';
}

return ( Str );

} /* function str_ljust */


/*****************************************************
Name: str_ltrim
Parameters: Str - string to trim
Trim - string containing chars to trim
Return: Str
Description: Delete characters from the left end of
Str that are contained in Trim
*****************************************************/
char *str_ltrim( char *Str, char *Trim )
{

size_t Num = strspn( Str, Trim );

str_delete( Str, Str, Num );

return ( Str );

} /* function str_ltrim */


/*****************************************************
Name: str_mrplc
Expanded Name: String Multiple Search and Replace
Parameters: Str - string to edit
Find - search string
Rplc - replacement string
Return: Str
Description: Multiple search and replace. All
occurrences of Find within Str are
replaced with Rplc.
*****************************************************/
char *str_mrplc( char *Str, char *Find, char *Rplc )
{

char *StrWork = Str;
size_t LenRplc = strlen( Rplc );

while ( ( StrWork =
strstr( StrWork, Find ) ) != NULL )
{
str_delete( Str, StrWork, strlen( Find ) );
str_insert( Str, StrWork, Rplc );
StrWork += LenRplc;
}

return ( Str );

} /* function str_mrplc */


/*****************************************************
Name: str_ocat
Expanded Name: Concatenate overlapped strings
Parameters: Dest - destination string
Str - string to concat
Return: Dest
Description: Behaves the same as strcat in string.h.
This version will work for strings that
overlap in memory.
*****************************************************/
char *str_ocat( char *Dest, char *Str )
{

return ( (char *)memmove(
(void *)&Dest[strlen( Dest )],
(void *)Str, strlen( Str ) + 1 ) );

} /* function str_ocat */


/*****************************************************
Name: str_repeat
Parameters: Str - string buffer to load
Rpt - repition string
Num - number of repitions
Return: Str
Description: Builds a string of length Num, by
repeating a substring Rpt.
*****************************************************/
char *str_repeat( char *Str, char *Rpt, size_t Num )
{

size_t Len = strlen( Rpt );

if ( Len == 1 )
{
/* The string is only one character */
memset( Str, *Rpt, Num );
}
else
{

size_t i, j;

/* Build Str with repitions of Rpt */
for ( i = 0, j = 0; i < Num; i++ )
{
Str[i] = Rpt[j++];
j %= Len;
} /* for i */

} /* else */

Str[Num] = '\0';

return ( Str );

} /* function str_repeat */


/*****************************************************
Name: str_rplc
Expanded Name: String Search and Replace
Parameters: Str - string to edit
Find - search string
Rplc - replacement string
Return: Str
Description: Search and replace. First
occurrences of Find within Str is
replaced with Rplc.
*****************************************************/
char *str_rplc( char *Str, char *Find, char *Rplc )
{

char *StrWork = strstr( Str, Find );

if ( StrWork )
{
str_delete( Str, StrWork, strlen( Find ) );
str_insert( Str, StrWork, Rplc );
}

return ( Str );

} /* function str_rplc */


/*****************************************************
Name: str_rjust
Expanded Name: String Right Justify
Parameters: Str - string to edit
Len - new length of string
Return: Str
Description: Pads the left end of string so that it
is right justified to a total length of
Len.
*****************************************************/
char *str_rjust( char *Str, size_t Len )
{

size_t LenOrg = strlen( Str );

Len = max( LenOrg, Len ) - LenOrg;

if ( Len )
{
memmove( &Str[Len], Str, LenOrg + 1 );
while ( Len )
{
Len--;
Str[Len] = ' ';
}
}

return ( Str );

} /* function str_rjust */


/*****************************************************
Name: str_rtrim
Parameters: Str - string to trim
Trim - string of characters to trim
Return: Str
Description: Delete characters from the right end
of Str that are contained in Trim
*****************************************************/
char *str_rtrim( char *Str, char *Trim )
{

char *StrWork = &Str[strlen( Str ) - 1];

/* Look for last character in string not being
** in trim string */
while ( ( Str != StrWork ) &&
( strspn( StrWork, Trim ) != 0 ) )
{
*StrWork-- = '\0';
}

return ( Str );

} /* function str_rtrim */


/*****************************************************
Name: str_trim
Parameters: Str - string to trim
Trim - string of characters to trim
Return: Str
Description: Delete characters from both ends of Str
*****************************************************/
char *str_trim( char *Str, char *Trim )
{

str_ltrim( Str, Trim );
str_rtrim( Str, Trim );

return ( Str );

} /* function str_trim */

/*****************************************************
Name: str_vcat
Parameters: Dest - destination string
Str1 - required first string
Return: Dest
Description: Variable argument version of strcat.
Concatenates a list of strings into
a destination string. The last
argument must be a NULL pointer.
*****************************************************/
char *str_vcat( char *Dest, char *Str1, ... )
{

va_list VarArgList;
char *Str;

/* Initialize variable arguments */
va_start( VarArgList, Dest );

/* Get first var arg string */
Str = va_arg( VarArgList, char * );

strcat( Dest, Str1 );
while ( Str != NULL )
{

/* Loop though all the arguments */
strcat( Dest, Str );

/* Get the next string */
Str = va_arg( VarArgList, char * );

}

/* Clean up */
va_end( VarArgList );

return ( Dest );

} /* function str_vcat */

/* End of File */



  3 Responses to “Category : Files from Magazines
Archive   : CUJ9301.ZIP
Filename : 1101075B

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/