OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [services/] [curses/] [pdcurses/] [current/] [tests/] [newdemo.c] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
/*
2
 *  newdemo.c   -   A demo program using PDCurses. The program
3
 *          illustrates the use of colors for text output.
4
 *
5
 *  Hacks by jbuhler@cs.washington.edu on 12/29/96
6
 *
7
 *  $Id: newdemo.c,v 1.1 2009/05/10 08:29:53 jld Exp $
8
 */
9
 
10
#include <stdio.h>
11
#include <signal.h>
12
#include <string.h>
13
#include <curses.h>
14
#include <stdlib.h>
15
#include <time.h>
16
 
17
int WaitForUser(void);
18
int SubWinTest(WINDOW *);
19
int BouncingBalls(WINDOW *);
20
void trap(int);
21
 
22
/* An ASCII map of Australia */
23
 
24
char *AusMap[17] =
25
{
26
    "                       A ",
27
    "           AA         AA ",
28
    "    N.T. AAAAA       AAAA ",
29
    "     AAAAAAAAAAA  AAAAAAAA ",
30
    "   AAAAAAAAAAAAAAAAAAAAAAAAA Qld.",
31
    " AAAAAAAAAAAAAAAAAAAAAAAAAAAA ",
32
    " AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ",
33
    " AAAAAAAAAAAAAAAAAAAAAAAAAAAA ",
34
    "   AAAAAAAAAAAAAAAAAAAAAAAAA N.S.W.",
35
    "W.A. AAAAAAAAA      AAAAAA Vic.",
36
    "       AAA   S.A.     AA",
37
    "                       A  Tas.",
38
    ""
39
};
40
 
41
/* Funny messages for the scroller */
42
 
43
char *messages[] =
44
{
45
    "Hello from the Land Down Under",
46
    "The Land of crocs, and a big Red Rock",
47
    "Where the sunflower runs along the highways",
48
    "The dusty red roads lead one to loneliness",
49
    "Blue sky in the morning and",
50
    "Freezing nights and twinkling stars",
51
    NULL
52
};
53
 
54
int WaitForUser(void)
55
{
56
    chtype ch;
57
 
58
    nodelay(stdscr, TRUE);
59
    halfdelay(50);
60
 
61
    ch = getch();
62
 
63
    nodelay(stdscr, FALSE);
64
    nocbreak();     /* Reset the halfdelay() value */
65
    cbreak();
66
 
67
    return (ch == '\033') ? ch : 0;
68
}
69
 
70
int SubWinTest(WINDOW *win)
71
{
72
    WINDOW *swin1, *swin2, *swin3;
73
    int w, h, sw, sh, bx, by;
74
 
75
    wattrset(win, 0);
76
    getmaxyx(win, h, w);
77
    getbegyx(win, by, bx);
78
 
79
    sw = w / 3;
80
    sh = h / 3;
81
 
82
    if ((swin1 = derwin(win, sh, sw, 3, 5)) == NULL)
83
        return 1;
84
    if ((swin2 = subwin(win, sh, sw, by + 4, bx + 8)) == NULL)
85
        return 1;
86
    if ((swin3 = subwin(win, sh, sw, by + 5, bx + 11)) == NULL)
87
        return 1;
88
 
89
    init_pair(8, COLOR_RED, COLOR_BLUE);
90
    wbkgd(swin1, COLOR_PAIR(8));
91
    werase(swin1);
92
    mvwaddstr(swin1, 0, 3, "Sub-window 1");
93
    wrefresh(swin1);
94
 
95
    init_pair(9, COLOR_CYAN, COLOR_MAGENTA);
96
    wbkgd(swin2, COLOR_PAIR(9));
97
    werase(swin2);
98
    mvwaddstr(swin2, 0, 3, "Sub-window 2");
99
    wrefresh(swin2);
100
 
101
    init_pair(10, COLOR_YELLOW, COLOR_GREEN);
102
    wbkgd(swin3, COLOR_PAIR(10));
103
    werase(swin3);
104
    mvwaddstr(swin3, 0, 3, "Sub-window 3");
105
    wrefresh(swin3);
106
 
107
    delwin(swin1);
108
    delwin(swin2);
109
    delwin(swin3);
110
    WaitForUser();
111
 
112
    return 0;
113
}
114
 
115
int BouncingBalls(WINDOW *win)
116
{
117
    chtype c1, c2, c3, ball1, ball2, ball3;
118
    int w, h, x1, y1, xd1, yd1, x2, y2, xd2, yd2, x3, y3, xd3, yd3, c;
119
 
120
    curs_set(0);
121
 
122
    wbkgd(win, COLOR_PAIR(1));
123
    wrefresh(win);
124
    wattrset(win, 0);
125
 
126
    init_pair(11, COLOR_RED, COLOR_GREEN);
127
    init_pair(12, COLOR_BLUE, COLOR_RED);
128
    init_pair(13, COLOR_YELLOW, COLOR_WHITE);
129
 
130
    ball1 = 'O' | COLOR_PAIR(11);
131
    ball2 = '*' | COLOR_PAIR(12);
132
    ball3 = '@' | COLOR_PAIR(13);
133
 
134
    getmaxyx(win, h, w);
135
 
136
    x1 = 2 + rand() % (w - 4);
137
    y1 = 2 + rand() % (h - 4);
138
    x2 = 2 + rand() % (w - 4);
139
    y2 = 2 + rand() % (h - 4);
140
    x3 = 2 + rand() % (w - 4);
141
    y3 = 2 + rand() % (h - 4);
142
 
143
    xd1 = 1;
144
    yd1 = 1;
145
    xd2 = 1;
146
    yd2 = -1;
147
    xd3 = -1;
148
    yd3 = 1;
149
 
150
    nodelay(stdscr, TRUE);
151
 
152
    while ((c = getch()) == ERR)
153
    {
154
        x1 += xd1;
155
        if (x1 <= 1 || x1 >= w - 2)
156
            xd1 *= -1;
157
 
158
        y1 += yd1;
159
        if (y1 <= 1 || y1 >= h - 2)
160
            yd1 *= -1;
161
 
162
        x2 += xd2;
163
        if (x2 <= 1 || x2 >= w - 2)
164
            xd2 *= -1;
165
 
166
        y2 += yd2;
167
        if (y2 <= 1 || y2 >= h - 2)
168
            yd2 *= -1;
169
 
170
        x3 += xd3;
171
        if (x3 <= 1 || x3 >= w - 2)
172
            xd3 *= -1;
173
 
174
        y3 += yd3;
175
        if (y3 <= 1 || y3 >= h - 2)
176
            yd3 *= -1;
177
 
178
        c1 = mvwinch(win, y1, x1);
179
        c2 = mvwinch(win, y2, x2);
180
        c3 = mvwinch(win, y3, x3);
181
 
182
        mvwaddch(win, y1, x1, ball1);
183
        mvwaddch(win, y2, x2, ball2);
184
        mvwaddch(win, y3, x3, ball3);
185
 
186
        wmove(win, 0, 0);
187
        wrefresh(win);
188
 
189
        mvwaddch(win, y1, x1, c1);
190
        mvwaddch(win, y2, x2, c2);
191
        mvwaddch(win, y3, x3, c3);
192
 
193
        napms(150);
194
    }
195
 
196
    nodelay(stdscr, FALSE);
197
    ungetch(c);
198
    return 0;
199
}
200
 
201
/* Trap interrupt */
202
 
203
void trap(int sig)
204
{
205
    if (sig == SIGINT)
206
    {
207
        endwin();
208
 
209
        exit(0);
210
    }
211
}
212
 
213
int main(int argc, char **argv)
214
{
215
    WINDOW *win;
216
    chtype save[80], ch;
217
    int width, height, w, x, y, i, j, seed;
218
 
219
#ifdef XCURSES
220
    Xinitscr(argc, argv);
221
#else
222
    initscr();
223
#endif
224
    seed = time((time_t *)0);
225
        srand(seed);
226
 
227
    start_color();
228
# if defined(NCURSES_VERSION) || (defined(PDC_BUILD) && PDC_BUILD > 3000)
229
    use_default_colors();
230
# endif
231
    cbreak();
232
    noecho();
233
 
234
    curs_set(0);
235
 
236
#if !defined(__TURBOC__) && !defined(OS2)
237
    signal(SIGINT, trap);
238
#endif
239
    noecho();
240
 
241
    /* refresh stdscr so that reading from it will not cause it to
242
       overwrite the other windows that are being created */
243
 
244
    refresh();
245
 
246
    /* Create a drawing window */
247
 
248
    width  = 48+7; // eCos
249
    height = 15;
250
 
251
    win = newwin(height, width, (LINES - height) / 2, (COLS - width) / 2);
252
 
253
    if (win == NULL)
254
    {
255
        endwin();
256
 
257
        return 1;
258
    }
259
 
260
    for (;;)
261
    {
262
        init_pair(1, COLOR_WHITE, COLOR_BLUE);
263
        wbkgd(win, COLOR_PAIR(1));
264
        werase(win);
265
 
266
        init_pair(2, COLOR_RED, COLOR_RED);
267
        wattrset(win, COLOR_PAIR(2));
268
        box(win, ' ', ' ');
269
        wrefresh(win);
270
 
271
        wattrset(win, 0);
272
 
273
        /* Do random output of a character */
274
 
275
        ch = 'a';
276
 
277
        nodelay(stdscr, TRUE);
278
 
279
        for (i = 0; i < 5000; ++i)
280
        {
281
            x = rand() % (width - 2) + 1;
282
            y = rand() % (height - 2) + 1;
283
 
284
            mvwaddch(win, y, x, ch);
285
            wrefresh(win);
286
 
287
            if (getch() != ERR)
288
                break;
289
 
290
            if (i == 2000)
291
            {
292
                ch = 'b';
293
                init_pair(3, COLOR_CYAN, COLOR_YELLOW);
294
                wattrset(win, COLOR_PAIR(3));
295
            }
296
        }
297
 
298
        nodelay(stdscr, FALSE);
299
 
300
        SubWinTest(win);
301
 
302
        /* Erase and draw green window */
303
 
304
        init_pair(4, COLOR_YELLOW, COLOR_GREEN);
305
        wbkgd(win, COLOR_PAIR(4));
306
        wattrset(win, A_BOLD);
307
        werase(win);
308
        wrefresh(win);
309
 
310
        /* Draw RED bounding box */
311
 
312
        wattrset(win, COLOR_PAIR(2));
313
        box(win, ' ', ' ');
314
        wrefresh(win);
315
 
316
        /* Display Australia map */
317
 
318
        wattrset(win, A_BOLD);
319
        i = 0;
320
 
321
        while (*AusMap[i])
322
        {
323
            mvwaddstr(win, i + 1, 8, AusMap[i]);
324
            wrefresh(win);
325
            napms(100);
326
            ++i;
327
        }
328
 
329
        init_pair(5, COLOR_BLUE, COLOR_WHITE);
330
        wattrset(win, COLOR_PAIR(5) | A_BLINK);
331
        mvwaddstr(win, height - 2, 3,
332
            " PDCurses 3.4 - DOS, OS/2, Win32, X11, SDL, eCos ");
333
        wrefresh(win);
334
 
335
        /* Draw running messages */
336
 
337
        init_pair(6, COLOR_BLACK, COLOR_WHITE);
338
        wattrset(win, COLOR_PAIR(6));
339
        w = width - 2;
340
        nodelay(win, TRUE);
341
 
342
        /* jbuhler's re-hacked scrolling messages */
343
 
344
        for (j = 0; messages[j] != NULL; j++)
345
        {
346
            char *message = messages[j];
347
            int msg_len = strlen(message);
348
            int scroll_len = w + 2 * msg_len;
349
            char *scrollbuf = malloc(scroll_len);
350
            char *visbuf = scrollbuf + msg_len;
351
            int stop = 0;
352
            int i;
353
 
354
            for (i = w + msg_len; i > 0; i--)
355
            {
356
                memset(visbuf, ' ', w);
357
                strncpy(scrollbuf + i, message, msg_len);
358
                mvwaddnstr(win, height / 2, 1, visbuf, w);
359
                wrefresh(win);
360
 
361
                if (wgetch(win) != ERR)
362
                {
363
                    flushinp();
364
                    stop = 1;
365
                    break;
366
                }
367
 
368
                napms(100);
369
            }
370
 
371
            free(scrollbuf);
372
 
373
            if (stop)
374
                break;
375
        }
376
 
377
        j = 0;
378
 
379
        /*  Draw running 'A's across in RED */
380
 
381
        init_pair(7, COLOR_RED, COLOR_GREEN);
382
        wattron(win, COLOR_PAIR(7));
383
 
384
        for (i = 2; i < width - 4; ++i)
385
        {
386
            ch = mvwinch(win, 5, i);
387
            save[j++] = ch;
388
            ch = ch & 0x7f;
389
            mvwaddch(win, 5, i, ch);
390
        }
391
 
392
        wrefresh(win);
393
 
394
        /* Put a message up; wait for a key */
395
 
396
        i = height - 2;
397
        wattrset(win, COLOR_PAIR(5));
398
        mvwaddstr(win, i, 3,
399
            "   Type a key to continue or ESC to quit  ");
400
        wrefresh(win);
401
 
402
        if (WaitForUser() == '\033')
403
            break;
404
 
405
        /* Restore the old line */
406
 
407
        wattrset(win, 0);
408
 
409
        for (i = 2, j = 0; i < width - 4; ++i)
410
            mvwaddch(win, 5, i, save[j++]);
411
 
412
        wrefresh(win);
413
 
414
        BouncingBalls(win);
415
 
416
        /* BouncingBalls() leaves a keystroke in the queue */
417
 
418
        if (WaitForUser() == '\033')
419
            break;
420
    }
421
 
422
    endwin();
423
 
424
    return 0;
425
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.