--- /dev/null
+#ifndef STRING_MANIPULATION_CLASS
+#define STRING_MANIPULATION_CLASS
+
+/*****************************************************************************\
+* *
+* Name : string_manipulation *
+* Author : Chris Koeritz *
+* *
+*******************************************************************************
+* Copyright (c) 2000-$now By Author. 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 is online at: *
+* http://www.fsf.org/copyleft/gpl.html *
+* Please send any updates to: fred@gruntose.com *
+\*****************************************************************************/
+
+#include <basis/astring.h>
+
+namespace textual {
+
+//! Provides various functions for massaging strings.
+
+class string_manipulation
+{
+public:
+
+//////////////
+
+ static basis::astring make_random_name(int min = 1, int max = 64);
+ //!< creates a random name, where the letters are between 'a' and 'z'.
+ /*!< the underscore will also be used occasionally. the size is random,
+ but the minimum size is "min" while the maximum is "max". */
+
+//////////////
+
+ static basis::astring long_line(char line_item = '/', int repeat = 76);
+ //!< produces a long line of "line_item" characters.
+ /*!< returns a string of text that is somewhat long compared to an 80 column
+ output window and which consists of a single character repeated. the
+ character used and the repeat count are both variable. */
+
+ static basis::astring indentation(int spaces);
+ //!< Returns a string made of white space that is "spaces" long.
+
+//////////////
+
+ static void carriage_returns_to_spaces(basis::astring &to_strip);
+ //!< converts carriage returns in "to_strip" into spaces.
+ /*!< processes the string "to_strip" by replacing all single carriage
+ returns with spaces and by turning two or more carriage returns into a
+ single CR plus spaces. */
+
+//////////////
+
+ static void split_lines(const basis::astring &input, basis::astring &output,
+ int min_column = 0, int max_column = 79);
+ //!< formats blocks of text for a maximum width.
+ /*!< processes the "input" text by splitting any lines that are longer
+ than the "max_column". the "min_column" is used to specify how much
+ indentation should be included. */
+
+//////////////
+
+ // numerical manipulation functions:
+
+ static basis::abyte char_to_hex(char to_convert);
+ //!< Converts a single character into the corresponding hex nibble.
+ /*!< If the character is not valid, an arbitrary value is returned. */
+ static char hex_to_char(basis::abyte to_convert);
+ //!< Converts a byte between 0 and 15 into a corresponding hexadecimal character.
+
+ static basis::byte_array string_to_hex(const basis::astring &character_form);
+ //!< Turns a string form of a set of hex numbers into an array of bytes.
+ /*!< This functions takes a string in "character_form" and returns an array
+ of bytes that is half as long and which contains the hexadecimal
+ interpretation of the string. This is currently geared to even length
+ strings... */
+ static basis::astring hex_to_string(const basis::byte_array &byte_form);
+ //!< The inverse of string_to_hex prints "byte_form" as text.
+ /*!< This function takes an array of bytes and converts them into their
+ equivalent hexadecimal character representation. */
+};
+
+} //namespace.
+
+#endif
+