~ubuntu-branches/debian/sid/ncurses/sid-200908151543

« back to all changes in this revision

Viewing changes to ncurses/trace/lib_tracedmp.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2008-12-14 21:06:00 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20081214210600-2rdjwvpplgvh3zeb
Tags: 5.7+20081213-1
MergingĀ upstreamĀ versionĀ 5.7+20081213.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/****************************************************************************
2
 
 * Copyright (c) 1998-2002,2005 Free Software Foundation, Inc.              *
 
2
 * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc.              *
3
3
 *                                                                          *
4
4
 * Permission is hereby granted, free of charge, to any person obtaining a  *
5
5
 * copy of this software and associated documentation files (the            *
39
39
#include <curses.priv.h>
40
40
#include <ctype.h>
41
41
 
42
 
MODULE_ID("$Id: lib_tracedmp.c,v 1.26 2005/01/29 16:23:51 tom Exp $")
 
42
MODULE_ID("$Id: lib_tracedmp.c,v 1.31 2008/08/16 19:30:56 tom Exp $")
43
43
 
44
44
#ifdef TRACE
 
45
 
 
46
#define my_buffer _nc_globals.tracedmp_buf
 
47
#define my_length _nc_globals.tracedmp_used
 
48
 
45
49
NCURSES_EXPORT(void)
46
50
_tracedump(const char *name, WINDOW *win)
47
51
{
48
 
    static char *buf = 0;
49
 
    static size_t used = 0;
50
 
 
51
52
    int i, j, n, width;
52
53
 
53
54
    /* compute narrowest possible display width */
66
67
    }
67
68
    if (width < win->_maxx)
68
69
        ++width;
69
 
    if (++width + 1 > (int) used) {
70
 
        used = 2 * (width + 1);
71
 
        buf = typeRealloc(char, used, buf);
 
70
    if (++width + 1 > (int) my_length) {
 
71
        my_length = 2 * (width + 1);
 
72
        my_buffer = typeRealloc(char, my_length, my_buffer);
72
73
    }
73
74
 
74
75
    for (n = 0; n <= win->_maxy; ++n) {
75
 
        char *ep = buf;
 
76
        char *ep = my_buffer;
76
77
        bool haveattrs, havecolors;
77
78
 
78
79
        /*
82
83
         */
83
84
        for (j = 0; j < width; ++j) {
84
85
            chtype test = CharOf(win->_line[n].text[j]);
85
 
            ep[j] = (UChar(test) == test
 
86
            ep[j] = (char) ((UChar(test) == test
86
87
#if USE_WIDEC_SUPPORT
87
 
                     && (win->_line[n].text[j].chars[1] == 0)
 
88
                             && (win->_line[n].text[j].chars[1] == 0)
88
89
#endif
89
 
                )
90
 
                ? (iscntrl(UChar(test))
91
 
                   ? '.'
92
 
                   : UChar(test))
93
 
                : '?';
 
90
                            )
 
91
                            ? (iscntrl(UChar(test))
 
92
                               ? '.'
 
93
                               : UChar(test))
 
94
                            : '?');
94
95
        }
95
96
        ep[j] = '\0';
96
 
        _tracef("%s[%2d] %3d%3d ='%s'",
 
97
        _tracef("%s[%2d] %3ld%3ld ='%s'",
97
98
                name, n,
98
 
                win->_line[n].firstchar,
99
 
                win->_line[n].lastchar,
 
99
                (long) win->_line[n].firstchar,
 
100
                (long) win->_line[n].lastchar,
100
101
                ep);
101
102
 
 
103
        /* if there are multi-column characters on the line, print them now */
 
104
        if_WIDEC({
 
105
            bool multicolumn = FALSE;
 
106
            for (j = 0; j < width; ++j)
 
107
                if (WidecExt(win->_line[n].text[j]) != 0) {
 
108
                    multicolumn = TRUE;
 
109
                    break;
 
110
                }
 
111
            if (multicolumn) {
 
112
                ep = my_buffer;
 
113
                for (j = 0; j < width; ++j) {
 
114
                    int test = WidecExt(win->_line[n].text[j]);
 
115
                    if (test) {
 
116
                        ep[j] = (char) (test + '0');
 
117
                    } else {
 
118
                        ep[j] = ' ';
 
119
                    }
 
120
                }
 
121
                ep[j] = '\0';
 
122
                _tracef("%*s[%2d]%*s='%s'", (int) strlen(name),
 
123
                        "widec", n, 8, " ", my_buffer);
 
124
            }
 
125
        });
 
126
 
102
127
        /* dump A_COLOR part, will screw up if there are more than 96 */
103
128
        havecolors = FALSE;
104
129
        for (j = 0; j < width; ++j)
107
132
                break;
108
133
            }
109
134
        if (havecolors) {
110
 
            ep = buf;
 
135
            ep = my_buffer;
111
136
            for (j = 0; j < width; ++j) {
112
137
                int pair = GetPair(win->_line[n].text[j]);
113
138
                if (pair >= 52)
114
139
                    ep[j] = '?';
115
140
                else if (pair >= 36)
116
 
                    ep[j] = pair + 'A';
 
141
                    ep[j] = (char) (pair + 'A');
117
142
                else if (pair >= 10)
118
 
                    ep[j] = pair + 'a';
 
143
                    ep[j] = (char) (pair + 'a');
119
144
                else if (pair >= 1)
120
 
                    ep[j] = pair + '0';
 
145
                    ep[j] = (char) (pair + '0');
121
146
                else
122
147
                    ep[j] = ' ';
123
148
            }
124
149
            ep[j] = '\0';
125
150
            _tracef("%*s[%2d]%*s='%s'", (int) strlen(name),
126
 
                    "colors", n, 8, " ", buf);
 
151
                    "colors", n, 8, " ", my_buffer);
127
152
        }
128
153
 
129
154
        for (i = 0; i < 4; ++i) {
137
162
                    break;
138
163
                }
139
164
            if (haveattrs) {
140
 
                ep = buf;
 
165
                ep = my_buffer;
141
166
                for (j = 0; j < width; ++j)
142
167
                    ep[j] = hex[(AttrOf(win->_line[n].text[j]) & mask) >>
143
168
                                ((i + 4) * 4)];
144
169
                ep[j] = '\0';
145
170
                _tracef("%*s%d[%2d]%*s='%s'", (int) strlen(name) -
146
 
                        1, "attrs", i, n, 8, " ", buf);
 
171
                        1, "attrs", i, n, 8, " ", my_buffer);
147
172
            }
148
173
        }
149
174
    }
150
175
#if NO_LEAKS
151
 
    free(buf);
152
 
    buf = 0;
153
 
    used = 0;
 
176
    free(my_buffer);
 
177
    my_buffer = 0;
 
178
    my_length = 0;
154
179
#endif
155
180
}
156
181
 
157
182
#else
158
 
empty_module(_nc_lib_tracedmp)
 
183
EMPTY_MODULE(_nc_lib_tracedmp)
159
184
#endif /* TRACE */