Changeset 79ae36dd in mainline for uspace/app/tetris/screen.c
- Timestamp:
- 2011-06-08T19:01:55Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0eff68e
- Parents:
- 764d71e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tetris/screen.c
r764d71e r79ae36dd 1 /* $OpenBSD: screen.c,v 1.13 2006/04/20 03:25:36 ray Exp $ */ 2 /* $NetBSD: screen.c,v 1.4 1995/04/29 01:11:36 mycroft Exp $ */ 3 4 /*- 5 * Copyright (c) 1992, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * Chris Torek and Darren F. Provine. 1 /* 2 * Copyright (c) 2011 Martin Decky 3 * All rights reserved. 10 4 * 11 5 * Redistribution and use in source and binary forms, with or without 12 6 * modification, are permitted provided that the following conditions 13 7 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of the University nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)screen.c 8.1 (Berkeley) 5/31/93 8 * 9 * - Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * - The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** Attributations 30 * 31 * screen.c 8.1 (Berkeley) 5/31/93 32 * NetBSD: screen.c,v 1.4 1995/04/29 01:11:36 mycroft 33 * OpenBSD: screen.c,v 1.13 2006/04/20 03:25:36 ray 34 * 35 * Based upon BSD Tetris 36 * 37 * Copyright (c) 1992, 1993 38 * The Regents of the University of California. 39 * Distributed under BSD license. 40 * 41 * This code is derived from software contributed to Berkeley by 42 * Chris Torek and Darren F. Provine. 43 * 36 44 */ 37 45 … … 69 77 static const struct shape *lastshape; 70 78 79 static suseconds_t timeleft = 0; 80 81 console_ctrl_t *console; 82 71 83 72 84 /* … … 82 94 static void start_standout(uint32_t color) 83 95 { 84 fflush(stdout);85 console_set_rgb_color( fphone(stdout), 0xffffff,96 console_flush(console); 97 console_set_rgb_color(console, 0xffffff, 86 98 use_color ? color : 0x000000); 87 99 } … … 89 101 static void resume_normal(void) 90 102 { 91 fflush(stdout);92 console_set_style( fphone(stdout), STYLE_NORMAL);103 console_flush(console); 104 console_set_style(console, STYLE_NORMAL); 93 105 } 94 106 95 107 void clear_screen(void) 96 108 { 97 console_clear( fphone(stdout));109 console_clear(console); 98 110 moveto(0, 0); 99 111 } … … 105 117 { 106 118 resume_normal(); 107 console_clear( fphone(stdout));119 console_clear(console); 108 120 curscore = -1; 109 121 memset(curscreen, 0, sizeof(curscreen)); … … 115 127 void scr_init(void) 116 128 { 117 console_cursor_visibility( fphone(stdout), 0);129 console_cursor_visibility(console, 0); 118 130 resume_normal(); 119 131 scr_clear(); … … 122 134 void moveto(sysarg_t r, sysarg_t c) 123 135 { 124 fflush(stdout);125 console_set_pos( fphone(stdout), c, r);136 console_flush(console); 137 console_set_pos(console, c, r); 126 138 } 127 139 … … 130 142 static int get_display_size(winsize_t *ws) 131 143 { 132 return console_get_size( fphone(stdout), &ws->ws_col, &ws->ws_row);144 return console_get_size(console, &ws->ws_col, &ws->ws_row); 133 145 } 134 146 … … 136 148 { 137 149 sysarg_t ccap; 138 int rc = console_get_color_cap( fphone(stdout), &ccap);150 int rc = console_get_color_cap(console, &ccap); 139 151 140 152 if (rc != 0) … … 179 191 void scr_end(void) 180 192 { 181 console_cursor_visibility( fphone(stdout), 1);193 console_cursor_visibility(console, 1); 182 194 } 183 195 … … 302 314 resume_normal(); 303 315 304 fflush(stdout);316 console_flush(console); 305 317 } 306 318 … … 322 334 } 323 335 336 /** Sleep for the current turn time 337 * 338 * Eat any input that might be available. 339 * 340 */ 341 void tsleep(void) 342 { 343 suseconds_t timeout = fallrate; 344 345 while (timeout > 0) { 346 kbd_event_t event; 347 348 if (!console_get_kbd_event_timeout(console, &event, &timeout)) 349 break; 350 } 351 } 352 353 /** Get char with timeout 354 * 355 */ 356 int tgetchar(void) 357 { 358 /* 359 * Reset timeleft to fallrate whenever it is not positive 360 * and increase speed. 361 */ 362 363 if (timeleft <= 0) { 364 faster(); 365 timeleft = fallrate; 366 } 367 368 /* 369 * Wait to see if there is any input. If so, take it and 370 * update timeleft so that the next call to tgetchar() 371 * will not wait as long. If there is no input, 372 * make timeleft zero and return -1. 373 */ 374 375 wchar_t c = 0; 376 377 while (c == 0) { 378 kbd_event_t event; 379 380 if (!console_get_kbd_event_timeout(console, &event, &timeleft)) { 381 timeleft = 0; 382 return -1; 383 } 384 385 if (event.type == KEY_PRESS) 386 c = event.c; 387 } 388 389 return (int) c; 390 } 391 392 /** Get char without timeout 393 * 394 */ 395 int twait(void) 396 { 397 wchar_t c = 0; 398 399 while (c == 0) { 400 kbd_event_t event; 401 402 if (!console_get_kbd_event(console, &event)) 403 return -1; 404 405 if (event.type == KEY_PRESS) 406 c = event.c; 407 } 408 409 return (int) c; 410 } 411 324 412 /** @} 325 413 */
Note:
See TracChangeset
for help on using the changeset viewer.