1b55407b6SBarry Smith /*
2b55407b6SBarry Smith * $Header: /home/tv/src/debugger/src/datadisp/tv_data_display.c,v 1.4 2010-04-21 15:32:50 tringali Exp $
3b55407b6SBarry Smith * $Locker: $
4b55407b6SBarry Smith
5b55407b6SBarry Smith Copyright (c) 2010, Rogue Wave Software, Inc.
6b55407b6SBarry Smith
7b55407b6SBarry Smith Permission is hereby granted, free of charge, to any person obtaining a copy
8b55407b6SBarry Smith of this software and associated documentation files (the "Software"), to deal
9b55407b6SBarry Smith in the Software without restriction, including without limitation the rights
10b55407b6SBarry Smith to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11b55407b6SBarry Smith copies of the Software, and to permit persons to whom the Software is
12b55407b6SBarry Smith furnished to do so, subject to the following conditions:
13b55407b6SBarry Smith
14b55407b6SBarry Smith The above copyright notice and this permission notice shall be included in
15b55407b6SBarry Smith all copies or substantial portions of the Software.
16b55407b6SBarry Smith
17b55407b6SBarry Smith THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18b55407b6SBarry Smith IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19b55407b6SBarry Smith FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20b55407b6SBarry Smith AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21b55407b6SBarry Smith LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22b55407b6SBarry Smith OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23b55407b6SBarry Smith THE SOFTWARE.
24b55407b6SBarry Smith
25b55407b6SBarry Smith * Update log
26b55407b6SBarry Smith *
27b55407b6SBarry Smith * Jan 28 2010 SJT: Bug 12100, bump base size to 16K and recognize if it is
28b55407b6SBarry Smith * resized further.
29b55407b6SBarry Smith * Sep 24 2009 SJT: Remove pre/post callback to reduce function call overhead.
30b55407b6SBarry Smith * Jul 1 2009 SJT: Created.
31b55407b6SBarry Smith *
32b55407b6SBarry Smith */
33b55407b6SBarry Smith
34c6db04a5SJed Brown #include <../src/sys/totalview/tv_data_display.h>
35c6db04a5SJed Brown #include <petscconf.h>
36b55407b6SBarry Smith
37b55407b6SBarry Smith #include <errno.h>
38b55407b6SBarry Smith #include <stdlib.h>
39b55407b6SBarry Smith #include <string.h>
40b55407b6SBarry Smith #include <stdio.h>
41b55407b6SBarry Smith
42b55407b6SBarry Smith #define DATA_FORMAT_BUFFER_SIZE 1048576
43b55407b6SBarry Smith #define TV_FORMAT_INACTIVE 0
44b55407b6SBarry Smith #define TV_FORMAT_FIRST_CALL 1
45b55407b6SBarry Smith #define TV_FORMAT_APPEND_CALL 2
46b55407b6SBarry Smith
47b55407b6SBarry Smith volatile int TV_data_format_control = TV_FORMAT_INACTIVE;
48b55407b6SBarry Smith
49b55407b6SBarry Smith /* TV_data_format_buffer should not be static for icc 11, and others */
50b55407b6SBarry Smith char TV_data_format_buffer[DATA_FORMAT_BUFFER_SIZE];
51b55407b6SBarry Smith static char *TV_data_buffer_ptr = TV_data_format_buffer;
52b55407b6SBarry Smith
TV_add_row(const char * field_name,const char * type_name,const void * value)53*d71ae5a4SJacob Faibussowitsch int TV_add_row(const char *field_name, const char *type_name, const void *value)
54*d71ae5a4SJacob Faibussowitsch {
55b55407b6SBarry Smith size_t remaining;
56b55407b6SBarry Smith int out;
57b55407b6SBarry Smith
58b55407b6SBarry Smith /* Called at the wrong time */
59a297a907SKarl Rupp if (TV_data_format_control == TV_FORMAT_INACTIVE) return EPERM;
60b55407b6SBarry Smith
616c4ed002SBarry Smith if (strpbrk(field_name, "\n\t")) return EINVAL;
62b55407b6SBarry Smith
636c4ed002SBarry Smith if (strpbrk(type_name, "\n\t")) return EINVAL;
64b55407b6SBarry Smith
65a297a907SKarl Rupp if (TV_data_format_control == TV_FORMAT_FIRST_CALL) {
66b55407b6SBarry Smith /* Zero out the buffer to avoid confusion, and set the write point
67b55407b6SBarry Smith to the top of the buffer. */
68b55407b6SBarry Smith
69b55407b6SBarry Smith memset(TV_data_format_buffer, 0, DATA_FORMAT_BUFFER_SIZE);
70b55407b6SBarry Smith TV_data_buffer_ptr = TV_data_format_buffer;
71b55407b6SBarry Smith TV_data_format_control = TV_FORMAT_APPEND_CALL;
72b55407b6SBarry Smith }
73b55407b6SBarry Smith
74b55407b6SBarry Smith remaining = TV_data_buffer_ptr + DATA_FORMAT_BUFFER_SIZE - TV_data_format_buffer;
75b55407b6SBarry Smith
7601bebe75SBarry Smith #if defined(PETSC_HAVE__SNPRINTF) && !defined(PETSC_HAVE_SNPRINTF)
77b7a10c16SSatish Balay #define snprintf _snprintf
78b7a10c16SSatish Balay #endif
79f3e3d7dfSBarry Smith out = snprintf(TV_data_buffer_ptr, remaining, "%s\t%s\t%p\n", field_name, type_name, value);
80b55407b6SBarry Smith
81a297a907SKarl Rupp if (out < 1) return ENOMEM;
82b55407b6SBarry Smith
83b55407b6SBarry Smith TV_data_buffer_ptr += out;
84b55407b6SBarry Smith
85b55407b6SBarry Smith return 0;
86c750f55cSSatish Balay }
87