summaryrefslogtreecommitdiffstats
path: root/clib/src/trace_indent.c
diff options
context:
space:
mode:
Diffstat (limited to 'clib/src/trace_indent.c')
-rw-r--r--clib/src/trace_indent.c185
1 files changed, 185 insertions, 0 deletions
diff --git a/clib/src/trace_indent.c b/clib/src/trace_indent.c
new file mode 100644
index 0000000..c1dd280
--- /dev/null
+++ b/clib/src/trace_indent.c
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) International Business Machines Corp., 2011
+ *
+ * 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.
+ *
+ * Author: B. Rafanello
+ *
+ * Module: trace_indent.c
+ *
+ * Implements indentation for the trace output from bb_trace
+ *
+ * Version 0.0.0.1
+ */
+
+#include "trace_indent.h"
+#include "stdio.h"
+
+/*--------------------------------------------------
+ * Private Constants
+ --------------------------------------------------*/
+
+#define DEFAULT_INDENT_SIZE 5
+#define MAX_INDENT_SIZE 129
+#define DEFAULT_INDENT " "
+
+/*--------------------------------------------------
+ * Global variables.
+ --------------------------------------------------*/
+
+/* The current trace level. */
+unsigned char BB_TRACE_LEVEL = 0;
+unsigned char BB_PREVIOUS_TRACE_LEVEL = 0;
+
+/*--------------------------------------------------
+ * Private global variables.
+ --------------------------------------------------*/
+
+static unsigned int Current_Indent_Level = 0;
+static unsigned int Current_Indent_Size = DEFAULT_INDENT_SIZE;
+static char Indent[MAX_INDENT_SIZE] = DEFAULT_INDENT;
+
+/*--------------------------------------------------
+ * Public Functions
+ --------------------------------------------------*/
+
+/*********************************************************************/
+/* */
+/* Function Name: Set_Indent_Size */
+/* */
+/* Descriptive Name: Sets the number of spaces to use per indent. */
+/* If the current indent level is 5 and this */
+/* function is called to set the indent size to */
+/* 10, then 50 spaces will be printed by the */
+/* trace macros before each line of trace */
+/* output at this indent level. */
+/* */
+/* Input: unsigned int Spaces_Per_Indent - A value less than 128. */
+/* */
+/* Output: If Success : The specified value will be used for the */
+/* size of an indent. */
+/* */
+/* If Failure : This should only happen if the value */
+/* specified is >= 128, in which case it is */
+/* ignored and the previous value is retained.*/
+/* */
+/* Error Handling: Bad values for Spaces_Per_Indent are ignored. */
+/* */
+/* Side Effects: The number of spaces per indent may be changed. */
+/* */
+/* Notes: */
+/* */
+/*********************************************************************/
+void Set_Indent_Size(unsigned int Spaces_Per_Indent)
+{
+ unsigned int i;
+
+ if (Spaces_Per_Indent <= MAX_INDENT_SIZE) {
+ Current_Indent_Size = Spaces_Per_Indent;
+ for (i = 0; i < Current_Indent_Size; i++) {
+ Indent[i] = ' ';
+ }
+ Indent[i] = 0x00;
+ }
+
+ return;
+}
+
+/*********************************************************************/
+/* */
+/* Function Name: Indent_Trace_Output */
+/* */
+/* Descriptive Name: This function increases the current indent */
+/* level by one. */
+/* */
+/* Input: None. */
+/* */
+/* Output: If Success : None */
+/* */
+/* If Failure : None */
+/* */
+/* Error Handling: None */
+/* */
+/* Side Effects: The current indent level for trace output will */
+/* be increased by 1. */
+/* */
+/* Notes: */
+/* */
+/*********************************************************************/
+void Indent_Trace_Output(void)
+{
+ Current_Indent_Level += 1;
+ return;
+}
+
+/*********************************************************************/
+/* */
+/* Function Name: Outdent_Trace_Output */
+/* */
+/* Descriptive Name: This function reduces the current indent */
+/* level if it is greater than 0. */
+/* */
+/* Input: None */
+/* */
+/* Output: If Success : None */
+/* */
+/* If Failure : None */
+/* */
+/* Error Handling: If the current indent level is zero, then this */
+/* function does nothing. */
+/* */
+/* Side Effects: The current indent level for trace output may be */
+/* decreased by 1. */
+/* */
+/* Notes: */
+/* */
+/*********************************************************************/
+void Outdent_Trace_Output(void)
+{
+ if (Current_Indent_Level > 0)
+ Current_Indent_Level -= 1;
+ return;
+}
+
+/*********************************************************************/
+/* */
+/* Function Name: Do_Indent */
+/* */
+/* Descriptive Name: This function prints to stderr the number of */
+/* spaces corresponding to the current indent */
+/* level. */
+/* */
+/* Input: None */
+/* */
+/* Output: If Success : None */
+/* */
+/* If Failure : None */
+/* */
+/* Error Handling: None */
+/* */
+/* Side Effects: Some number of space may be output to stderr. */
+/* */
+/* Notes: */
+/* */
+/*********************************************************************/
+void Do_Indent(void)
+{
+ unsigned int i;
+
+ for (i = 0; i < Current_Indent_Level; i++) {
+ fprintf(stderr, "%s", Indent);
+ }
+
+}
OpenPOWER on IntegriCloud