Enlightenment CVS committal Author : mej Project : eterm Module : libast
Dir : eterm/libast/src Modified Files: conf.c debug.c mem.c strings.c Log Message: Sun Feb 23 22:00:55 2003 Michael Jennings (mej) Still working on the documentation. If you run "doxygen" from the top-level directory, you can see what's there so far. At some point, I'll be needing a logo. So if you're artistically inclined, feel free to take a stab at one. :) =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/src/conf.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- conf.c 19 Feb 2003 21:10:32 -0000 1.7 +++ conf.c 24 Feb 2003 03:03:20 -0000 1.8 @@ -21,7 +21,17 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: conf.c,v 1.7 2003/02/19 21:10:32 mej Exp $"; +/** + * @file conf.c + * Config File Parser Source File + * + * This file contains the functions which comprise the config file + * parser. + * + * @author Michael Jennings <[EMAIL PROTECTED]> + */ + +static const char cvs_ident[] = "$Id: conf.c,v 1.8 2003/02/24 03:03:20 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -950,3 +960,20 @@ return (state); } } + +/** + * @defgroup DOXGRP_CONF Configuration File Parser + * + * This group of functions/defines/macros comprises the configuration + * file parsing engine. + * + * + * A small sample program demonstrating some of these routines can be + * found @link conf_example.c here @endlink. + */ + +/** + * @example conf_example.c + * Example code for using the string routines. + * + */ =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/src/debug.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- debug.c 19 Feb 2003 21:10:33 -0000 1.3 +++ debug.c 24 Feb 2003 03:03:20 -0000 1.4 @@ -21,7 +21,16 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: debug.c,v 1.3 2003/02/19 21:10:33 mej Exp $"; +/** + * @file debug.c + * Debugging Subsystem Source File + * + * This file contains all non-cpp-based debugging functionality. + * + * @author Michael Jennings <[EMAIL PROTECTED]> + */ + +static const char cvs_ident[] = "$Id: debug.c,v 1.4 2003/02/24 03:03:20 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -33,3 +42,114 @@ options parser can handle function pointers. */ unsigned int libast_debug_level = 0; unsigned long libast_debug_flags = 0; + +/** + * @defgroup DOXGRP_DEBUG Debugging Subsystem + * + * This group of functions/defines/macros implements the debugging + * subsystem within LibAST. + * + * LibAST provides a flexible level-based debugging mechanism to + * client programs, supporting both compile-time and run-time methods + * for including or suppressing debugging output by increasing or + * decreasing the "debug level," i.e. the verbosity, of the system. + * + * The current level of debugging output is controlled by the + * DEBUG_LEVEL variable; to alter it, simply assign a new integer + * value (from 0 to 9, inclusive) to this variable. + * + * LibAST provides debugging for several of its own subsystems and + * allows client applications to use the same debugging mechanisms by + * defining its own categories. To use the LibAST debugging system, + * you will need one #define and one macro for each subsystem or + * debugging category your program will have. + * + * For example, let's say your code contains some socket code. To + * create a debugging entity for that code, simply add a #define which + * sets the debug level for it, and a macro to map output messages to + * the DPRINTF*() macro for that debug level. If you wanted + * socket-related debugging information at debug level 2, you'd use + * something like these: + * + * @code + * #define DEBUG_SOCKETS 2 + * #define D_SOCKETS(x) DPRINTF2(x) + * @endcode + * + * That's all there is to it! Now, anywhere you want socket-related + * debugging output, just use the D_SOCKETS() macro like so: + * + * @code + * D_SOCKETS(("Connecting to %s...\n", hostname)); + * @endcode + * + * Be sure to use TWO sets of parentheses, not just one. Don't worry; + * you'll get used to it! :-) + * + * That's all there is to it! + * + * If you'd like to see a sample program which uses this system, click + * @link debug_example.c here @endlink. + */ +/** + * @example debug_example.c + * Example code for using the debugging subsystem. + * + * This is a trivial code example that uses LibAST-style debugging. + * The program takes a number, a symbol, and another number on the + * command line to perform simple arithmetic. Specify the -d option + * to enable the debugging output. + * + * With debugging output turned off (no -d option), you should see + * something like this: + * + * @code + * $ ./debug_example 4 + 4 + * 4 + 4 = 8 + * $ + * @endcode + * + * With debugging output turned on, you should see something like + * this: + * + * @code + * $ ./debug_example -d 10 - 14 + * [1045855757] debug_example.c | 35: main(): Debugging is now on. + * [1045855757] debug_example.c | 48: main(): Number 1 is 10 + * [1045855757] debug_example.c | 43: main(): Got operation '-'. + * [1045855757] debug_example.c | 51: main(): Number 2 is 14 + * 10 - 14 = -4 + * $ + * @endcode + * + * As you can see, the debugging output contains UNIX-style time_t + * timestamps, source file names, line numbers, and function names for + * each debugging statement. + * + * Here's the complete source code: + */ + +/* Documentation for the main Doxygen-generated page is here, for no + * other reason than this file lacks actual code. :-) + */ + +/** + * @mainpage LibAST Documentation + * + * This document describes the various features and capabilities + * offered by LibAST, the Library of Assorted Spiffy Things. As its + * name suggests, LibAST is a collection of various functions, macros, + * etc. which do all sorts of spiffy stuff. By reading through all + * the following pages of goop, hopefully you'll learn about the + * miscellaneous mounds of spiffitude which await you in LibAST! + * + * Use the document tree to your left, or the quick links above, to + * navigate. Or if you prefer, select from the list of topics below. + * + * @section topiclist Topic List + * + * -# @link DOXGRP_DEBUG Debugging Subsystem @endlink + * -# @link DOXGRP_MEM Memory Management Subsystem @endlink + * -# @link DOXGRP_STRINGS String Utility Routines @endlink + * + */ =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/src/mem.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- mem.c 19 Feb 2003 21:10:34 -0000 1.7 +++ mem.c 24 Feb 2003 03:03:20 -0000 1.8 @@ -22,7 +22,16 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: mem.c,v 1.7 2003/02/19 21:10:34 mej Exp $"; +/** + * @file mem.c + * Memory Management Subsystem Source File + * + * This file contains the memory management subsystem. + * + * @author Michael Jennings <[EMAIL PROTECTED]> + */ + +static const char cvs_ident[] = "$Id: mem.c,v 1.8 2003/02/24 03:03:20 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -473,3 +482,204 @@ } FREE(list); } + +/** + * @defgroup DOXGRP_MEM Memory Management Subsystem + * + * This group of functions/defines/macros implements the memory + * management subsystem within LibAST. + * + * LibAST provides a robust mechanism for tracking memory allocations + * and deallocations. This system employs macro-based wrappers + * around the standard libc malloc/realloc/calloc/free routines, other + * libc fare such as strdup(), Xlib GC and Pixmap create/free + * routines, and even Imlib2's own pixmap functions. + * + * To take advantage of this system, simply substitute the macro + * versions in place of the standard versions throughout your code + * (e.g., use MALLOC() instead of malloc(), X_FREE_GC() instead of + * XFreeGC(), etc.). If DEBUG is set to a value higher than + * DEBUG_MEM, the LibAST-custom versions of these functions will be + * used. Of course, if memory debugging has not been requested, the + * original libc/XLib/Imlib2 versions will be used instead, so that + * you only incur the debugging overhead when you want it. + * + * LibAST has also been designed to work effectively with Gray + * Watson's excellent malloc-debugging library, dmalloc + * (http://dmalloc.com/), either instead of or in addition to its own + * memory tracking routines. Unlike LibAST, dmalloc supplements + * memory allocation tracking with fence-post checking, freed pointer + * reuse detection, and other very handy features. + * + * A small sample program demonstrating use of LibAST's memory + * management system can be found + * @link mem_example.c here @endlink. + */ + +/** + * @example mem_example.c + * Example code for using the memory management subsystem. + * + * This small program demonstrates how to use LibAST's built-in memory + * management system as well as a few of the errors it can catch for + * you. + * + * The following shows output similar to what you can expect to + * receive if you build and run this program: + * + * @code + * $ ./mem_example + * [1045859036] mem.c | 246: libast_malloc(): 500 bytes requested at mem_example.c:27 + * [1045859036] mem.c | 74: memrec_add_var(): Adding variable (0x8049a20, 500 bytes) from mem_example.c:27. + * [1045859036] mem.c | 75: memrec_add_var(): Storing as pointer #1 at 0x8049c18 (from 0x8049c18). + * [1045859036] mem.c | 329: libast_strdup(): Variable pointer (0x8049a20) at mem_example.c:36 + * [1045859036] mem.c | 246: libast_malloc(): 16 bytes requested at mem_example.c:36 + * [1045859036] mem.c | 74: memrec_add_var(): Adding variable (0x8049c40, 16 bytes) from mem_example.c:36. + * [1045859036] mem.c | 75: memrec_add_var(): Storing as pointer #2 at 0x8049c7c (from 0x8049c58). + * [1045859036] mem.c | 312: libast_free(): Variable dup (0x8049c40) at mem_example.c:39 + * [1045859036] mem.c | 94: memrec_find_var(): Found pointer #2 stored at 0x8049c7c (from 0x8049c58) + * [1045859036] mem.c | 113: memrec_rem_var(): Removing variable dup (0x8049c40) of size 16 + * [1045859036] mem.c | 312: libast_free(): Variable dup ( (nil)) at mem_example.c:43 + * [1045859036] mem.c | 319: libast_free(): ERROR: Caught attempt to free NULL pointer + * [1045859036] mem.c | 268: libast_realloc(): Variable pointer (0x8049a20 -> 1000) at mem_example.c:46 + * [1045859036] mem.c | 94: memrec_find_var(): Found pointer #1 stored at 0x8049c58 (from 0x8049c58) + * [1045859036] mem.c | 132: memrec_chg_var(): Changing variable pointer (0x8049a20, 500 -> 0x8049c80, 1000) + * Dumping memory allocation table: + * PTR: 1 pointers stored. + * PTR: Pointer | Filename | Line | Address | Size | Offset | 00 01 02 03 04 05 06 07 | ASCII + * PTR: ---------+----------------------+--------+----------+--------+---------+-------------------------+--------- + * PTR: 0000000 | | 0 | 0x8049c58 | 000036 | 0000000 | 80 9c 04 08 e8 03 00 00 | €œ..è... + * PTR: 0000000 | | 0 | 0x8049c58 | 000036 | 0000008 | 6d 65 6d 5f 65 78 61 6d | mem_exam + * PTR: 0000000 | | 0 | 0x8049c58 | 000036 | 0000010 | 70 6c 65 2e 63 00 00 00 | ple.c... + * PTR: 0000000 | | 0 | 0x8049c58 | 000036 | 0000018 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000000 | | 0 | 0x8049c58 | 000036 | 0000020 | 2e 00 00 00 | .... + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000000 | 54 68 69 73 20 69 73 20 | This is + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000008 | 61 20 74 65 73 74 2e 00 | a test.. + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000010 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000018 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000020 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000028 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000030 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000038 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000040 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000048 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000050 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000058 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000060 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000068 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000070 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000078 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000080 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000088 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000090 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000098 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000a0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000a8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000b0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000b8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000c0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000c8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000d0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000d8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000e0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000e8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000f0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00000f8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000100 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000108 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000110 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000118 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000120 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000128 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000130 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000138 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000140 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000148 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000150 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000158 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000160 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000168 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000170 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000178 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000180 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000188 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000190 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000198 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001a0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001a8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001b0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001b8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001c0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001c8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001d0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001d8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001e0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001e8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001f0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00001f8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000200 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000208 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000210 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000218 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000220 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000228 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000230 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000238 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000240 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000248 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000250 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000258 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000260 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000268 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000270 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000278 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000280 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000288 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000290 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000298 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002a0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002a8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002b0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002b8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002c0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002c8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002d0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002d8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002e0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002e8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002f0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00002f8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000300 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000308 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000310 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000318 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000320 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000328 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000330 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000338 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000340 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000348 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000350 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000358 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000360 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000368 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000370 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000378 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000380 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000388 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000390 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 0000398 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003a0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003a8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003b0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003b8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003c0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003c8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003d0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003d8 | 00 00 00 00 00 00 00 00 | ........ + * PTR: 0000001 | mem_example.c | 46 | 0x8049c80 | 001000 | 00003e0 | 00 00 00 00 00 00 00 00 | ........ + * PTR: Total allocated memory: 1000 bytes + * @endcode + * + * Here is the source code: + */ =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/src/strings.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- strings.c 19 Feb 2003 21:10:37 -0000 1.8 +++ strings.c 24 Feb 2003 03:03:20 -0000 1.9 @@ -21,7 +21,16 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.8 2003/02/19 21:10:37 mej Exp $"; +/** + * @file strings.c + * String Utility Routine Source File + * + * This file contains string utility functions. + * + * @author Michael Jennings <[EMAIL PROTECTED]> + */ + +static const char cvs_ident[] = "$Id: strings.c,v 1.9 2003/02/24 03:03:20 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -855,3 +864,29 @@ } return SPIF_CMP_EQUAL; } + +/** + * @defgroup DOXGRP_STRINGS String Utility Routines + * + * This group of functions/defines/macros provides oft-needed string + * manipulation functionality which is not found (at least not + * portably) in libc. + * + * Over the past several years, I have had to implement some simple + * string routines which, for whatever reason, are not part of the + * Standard C Library. I have gathered these macros, functions, + * etc. into LibAST in the hopes that others might not have to + * reimplement them themselves. Unlike the memory/debugging/object + * stuff, there really isn't a well-defined architecture surrounding + * these. They're just utility functions and implementations for + * non-portable functionality. + * + * A small sample program demonstrating some of these routines can be + * found @link strings_example.c here @endlink. + */ + +/** + * @example strings_example.c + * Example code for using the string routines. + * + */ ------------------------------------------------------- This SF.net email is sponsored by: SlickEdit Inc. Develop an edge. The most comprehensive and flexible code editor you can use. Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial. www.slickedit.com/sourceforge _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs