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 53be332245SKarl Rupp int TV_add_row(const char *field_name, const char *type_name, const void *value) 54b55407b6SBarry Smith { 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 61*6c4ed002SBarry Smith if (strpbrk(field_name, "\n\t")) return EINVAL; 62b55407b6SBarry Smith 63*6c4ed002SBarry 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 } 87b55407b6SBarry Smith 88b55407b6SBarry Smith void TV_pre_display_callback(void) 89b55407b6SBarry Smith { 90b55407b6SBarry Smith TV_data_format_control = TV_FORMAT_FIRST_CALL; 91b55407b6SBarry Smith } 92b55407b6SBarry Smith 93b55407b6SBarry Smith void TV_post_display_callback(void) 94b55407b6SBarry Smith { 95b55407b6SBarry Smith TV_data_format_control = TV_FORMAT_INACTIVE; 96b55407b6SBarry Smith } 97fa91756fSBarry Smith 98