~ubuntu-branches/ubuntu/natty/ncurses/natty

« back to all changes in this revision

Viewing changes to test/echochar.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2007-05-17 09:00:42 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070517090042-86fgxrr6j5jzagot
Tags: 5.6-0ubuntu1
* New upstream version.
  - Remove patches applied upstream: ncurses.upstream, signed-chars.
  - Update patches: debian-backspace.
* Build-depend on g++-multilib instead of lib{32,64}c*-dev-*.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
 * Copyright (c) 2006 Free Software Foundation, Inc.                        *
 
3
 *                                                                          *
 
4
 * Permission is hereby granted, free of charge, to any person obtaining a  *
 
5
 * copy of this software and associated documentation files (the            *
 
6
 * "Software"), to deal in the Software without restriction, including      *
 
7
 * without limitation the rights to use, copy, modify, merge, publish,      *
 
8
 * distribute, distribute with modifications, sublicense, and/or sell       *
 
9
 * copies of the Software, and to permit persons to whom the Software is    *
 
10
 * furnished to do so, subject to the following conditions:                 *
 
11
 *                                                                          *
 
12
 * The above copyright notice and this permission notice shall be included  *
 
13
 * in all copies or substantial portions of the Software.                   *
 
14
 *                                                                          *
 
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
 
16
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
 
17
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
 
18
 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
 
19
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
 
20
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
 
21
 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
 
22
 *                                                                          *
 
23
 * Except as contained in this notice, the name(s) of the above copyright   *
 
24
 * holders shall not be used in advertising or otherwise to promote the     *
 
25
 * sale, use or other dealings in this Software without prior written       *
 
26
 * authorization.                                                           *
 
27
 ****************************************************************************/
 
28
/*
 
29
 * $Id: echochar.c,v 1.3 2006/12/03 00:14:29 tom Exp $
 
30
 *
 
31
 * Demonstrate the echochar function (compare to dots.c).
 
32
 * Thomas Dickey - 2006/11/4
 
33
 */
 
34
 
 
35
#include <test.priv.h>
 
36
 
 
37
#include <time.h>
 
38
 
 
39
#define valid(s) ((s != 0) && s != (char *)-1)
 
40
 
 
41
static bool interrupted = FALSE;
 
42
static long total_chars = 0;
 
43
static time_t started;
 
44
 
 
45
static void
 
46
cleanup(void)
 
47
{
 
48
    endwin();
 
49
 
 
50
    printf("\n\n%ld total chars, rate %.2f/sec\n",
 
51
           total_chars,
 
52
           ((double) (total_chars) / (time((time_t *) 0) - started)));
 
53
}
 
54
 
 
55
static void
 
56
onsig(int n GCC_UNUSED)
 
57
{
 
58
    interrupted = TRUE;
 
59
}
 
60
 
 
61
static float
 
62
ranf(void)
 
63
{
 
64
    long r = (rand() & 077777);
 
65
    return ((float) r / 32768.);
 
66
}
 
67
 
 
68
static void
 
69
set_color(char *my_pairs, int fg, int bg)
 
70
{
 
71
    int pair = (fg * COLORS) + bg;
 
72
    if (!my_pairs[pair]) {
 
73
        init_pair(pair, fg, bg);
 
74
    }
 
75
    attron(COLOR_PAIR(pair));
 
76
}
 
77
 
 
78
int
 
79
main(
 
80
        int argc GCC_UNUSED,
 
81
        char *argv[]GCC_UNUSED)
 
82
{
 
83
    int ch, x, y, z, p;
 
84
    float r;
 
85
    float c;
 
86
    bool use_colors;
 
87
    bool opt_r = FALSE;
 
88
    char *my_pairs = 0;
 
89
    int last_fg = 0;
 
90
    int last_bg = 0;
 
91
 
 
92
    while ((ch = getopt(argc, argv, "r")) != EOF) {
 
93
        switch (ch) {
 
94
        case 'r':
 
95
            opt_r = TRUE;
 
96
            break;
 
97
        default:
 
98
            fprintf(stderr, "usage: echochar [-r]\n");
 
99
            ExitProgram(EXIT_FAILURE);
 
100
        }
 
101
    }
 
102
 
 
103
    CATCHALL(onsig);
 
104
    initscr();
 
105
 
 
106
    use_colors = has_colors();
 
107
    if (use_colors) {
 
108
        start_color();
 
109
        if (COLOR_PAIRS > 0) {
 
110
            my_pairs = calloc(COLOR_PAIRS, sizeof(*my_pairs));
 
111
        }
 
112
        use_colors = (my_pairs != 0);
 
113
    }
 
114
 
 
115
    srand((unsigned) time(0));
 
116
 
 
117
    curs_set(0);
 
118
 
 
119
    r = (float) (LINES - 4);
 
120
    c = (float) (COLS - 4);
 
121
    started = time((time_t *) 0);
 
122
 
 
123
    while (!interrupted) {
 
124
        x = (int) (c * ranf()) + 2;
 
125
        y = (int) (r * ranf()) + 2;
 
126
        p = (ranf() > 0.9) ? '*' : ' ';
 
127
 
 
128
        move(y, x);
 
129
        if (use_colors > 0) {
 
130
            z = (int) (ranf() * COLORS);
 
131
            if (ranf() > 0.01) {
 
132
                set_color(my_pairs, z, last_bg);
 
133
                last_fg = z;
 
134
            } else {
 
135
                set_color(my_pairs, last_fg, z);
 
136
                last_bg = z;
 
137
                napms(1);
 
138
            }
 
139
        } else {
 
140
            if (ranf() <= 0.01) {
 
141
                if (ranf() > 0.6)
 
142
                    attron(A_REVERSE);
 
143
                else
 
144
                    attroff(A_REVERSE);
 
145
                napms(1);
 
146
            }
 
147
        }
 
148
        if (opt_r) {
 
149
            addch(p);
 
150
            refresh();
 
151
        } else {
 
152
            echochar(p);
 
153
        }
 
154
        ++total_chars;
 
155
    }
 
156
    cleanup();
 
157
    ExitProgram(EXIT_SUCCESS);
 
158
}