Changeset f1b4e74 in mainline


Ignore:
Timestamp:
2006-06-02T17:45:07Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a9bd960c
Parents:
0c6984e
Message:

More porting, awaiting 2 functions of console.

Location:
tetris
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tetris/screen.c

    r0c6984e rf1b4e74  
    4747#include <io/stream.h>
    4848
     49
     50#include <async.h>
    4951#include "screen.h"
    5052#include "tetris.h"
     53#include "../console/console.h"
    5154
    5255static cell curscreen[B_SIZE];  /* 1 => standout (or otherwise marked) */
     
    5962static void     stopset(int);
    6063
    61 /*
    62  * Capabilities from TERMCAP.
    63  */
    64 char    PC, *BC, *UP;           /* tgoto requires globals: ugh! */
    65 
    6664static char
    67         *bcstr,                 /* backspace char */
    68         *CEstr,                 /* clear to end of line */
    69         *CLstr,                 /* clear screen */
    70         *CMstr,                 /* cursor motion string */
    71 #ifdef unneeded
    72         *CRstr,                 /* "\r" equivalent */
    73 #endif
    74         *HOstr,                 /* cursor home */
    75         *LLstr,                 /* last line, first column */
    76         *pcstr,                 /* pad character */
    77         *TEstr,                 /* end cursor motion mode */
    78         *TIstr;                 /* begin cursor motion mode */
    79 char
    80         *SEstr,                 /* end standout mode */
    81         *SOstr;                 /* begin standout mode */
    82 static int
    83         COnum,                  /* co# value */
    84         LInum,                  /* li# value */
    85         MSflag;                 /* can move in standout mode */
    86 
    87 
    88 struct tcsinfo {                /* termcap string info; some abbrevs above */
    89         char tcname[3];
    90         char **tcaddr;
    91 } tcstrings[] = {
    92         {"bc", &bcstr},
    93         {"ce", &CEstr},
    94         {"cl", &CLstr},
    95         {"cm", &CMstr},
    96 #ifdef unneeded
    97         {"cr", &CRstr},
    98 #endif
    99         {"le", &BC},            /* move cursor left one space */
    100         {"pc", &pcstr},
    101         {"se", &SEstr},
    102         {"so", &SOstr},
    103         {"te", &TEstr},
    104         {"ti", &TIstr},
    105         {"up", &UP},            /* cursor up */
    106         { {0}, NULL}
     65        *CEstr;                 /* clear to end of line */
     66
     67
     68/*
     69 * putstr() is for unpadded strings (either as in termcap(5) or
     70 * simply literal strings);
     71 */
     72#define putstr(s)       puts(s)
     73
     74static int con_phone;
     75
     76
     77
     78static void set_style(int fgcolor, int bgcolor)
     79{
     80        send_call_2(con_phone, CONSOLE_SET_STYLE, fgcolor, bgcolor);
     81}
     82
     83static void start_standout(void)
     84{
     85        set_style(0, 0xe0e0e0);
     86}
     87
     88static void resume_normal(void)
     89{
     90        set_style(0xe0e0e0, 0);
     91}
     92
     93/*
     94 * Clear the screen, forgetting the current contents in the process.
     95 */
     96void
     97scr_clear(void)
     98{
     99
     100        send_call(con_phone, CONSOLE_CLEAR, 0);
     101        curscore = -1;
     102        memset((char *)curscreen, 0, sizeof(curscreen));
     103}
     104
     105/*
     106 * Set up screen
     107 */
     108void
     109scr_init(void)
     110{
     111        con_phone = get_fd_phone(1);
     112        resume_normal();
     113        scr_clear();
     114}
     115
     116static void moveto(int r, int c)
     117{
     118        send_call_2(con_phone, CONSOLE_GOTO, r, c);
     119}
     120
     121static void fflush(void)
     122{
     123        send_call(con_phone, CONSOLE_FLUSH, 0);
     124}
     125
     126struct winsize {
     127        ipcarg_t ws_row;
     128        ipcarg_t ws_col;
    107129};
    108130
    109 /* This is where we will actually stuff the information */
    110 
    111 static char combuf[1024], tbuf[1024];
    112 
    113 
    114 /*
    115  * Routine used by tputs().
    116  */
    117 int
    118 put(int c)
    119 {
    120 
    121         return (putchar(c));
    122 }
    123 
    124 /*
    125  * putstr() is for unpadded strings (either as in termcap(5) or
    126  * simply literal strings); putpad() is for padded strings with
    127  * count=1.  (See screen.h for putpad().)
    128  */
    129 #define putstr(s)       (void)fputs(s, stdout)
    130 #define moveto(r, c)    putpad(tgoto(CMstr, c, r))
    131 
    132 static int con_phone;
    133 
    134 /*
    135  * Set up from termcap.
    136  */
    137 void
    138 scr_init(void)
    139 {
    140         con_phone = get_fd_phone(1);
    141 }
    142 
     131static int get_display_size(struct winsize *ws)
     132{
     133        return sync_send_2(con_phone, CONSOLE_GETSIZE, 0, 0, &ws->ws_row, &ws->ws_col);
     134}
    143135
    144136static void
     
    158150{
    159151        struct winsize ws;
    160         struct termios newtt;
    161         void (*ttou)(int);
    162152
    163153        Rows = 0, Cols = 0;
    164         if (ioctl(0, TIOCGWINSZ, &ws) == 0) {
     154        if (get_display_size(&ws) == 0) {
    165155                Rows = ws.ws_row;
    166156                Cols = ws.ws_col;
    167157        }
    168         if (Rows == 0)
    169                 Rows = LInum;
    170         if (Cols == 0)
    171         Cols = COnum;
    172158        if (Rows < MINROWS || Cols < MINCOLS) {
    173159                char smallscr[55];
     
    178164                stop(smallscr);
    179165        }
    180         if (tcgetattr(0, &oldtt) < 0)
    181                 stop("tcgetattr() fails");
    182         newtt = oldtt;
    183         newtt.c_lflag &= ~(ICANON|ECHO);
    184         newtt.c_oflag &= ~OXTABS;
    185         if (tcsetattr(0, TCSADRAIN, &newtt) < 0)
    186                 stop("tcsetattr() fails");
    187 
    188         /*
    189          * We made it.  We are now in screen mode, modulo TIstr
    190          * (which we will fix immediately).
    191          */
    192         if (TIstr)
    193                 putstr(TIstr);  /* termcap(5) says this is not padded */
    194 
    195166        isset = 1;
    196167
     
    215186}
    216187
    217 /*
    218  * Clear the screen, forgetting the current contents in the process.
    219  */
    220 void
    221 scr_clear(void)
    222 {
    223 
    224         putpad(CLstr);
    225         curscore = -1;
    226         memset((char *)curscreen, 0, sizeof(curscreen));
    227 }
    228188
    229189#if vax && !__GNUC__
     
    248208
    249209        if (score != curscore) {
    250                 if (HOstr)
    251                         putpad(HOstr);
    252                 else
    253                         moveto(0, 0);
     210                moveto(0, 0);
    254211                (void) printf("Score: %d", score);
    255212                curscore = score;
     
    265222
    266223                /* clean */
    267                 putpad(SEstr);
     224                resume_normal();
    268225                moveto(r-1, c-1); putstr("          ");
    269226                moveto(r,   c-1); putstr("          ");
     
    275232
    276233                /* draw */
    277                 if (SOstr)
    278                         putpad(SOstr);
     234                start_standout();
    279235                moveto(r, 2 * c);
    280                 putstr(SOstr ? "  " : "[]");
     236                putstr(");
    281237                for (i = 0; i < 3; i++) {
    282238                        t = c + r * B_COLS;
     
    287243
    288244                        moveto(tr, 2*tc);
    289                         putstr(SOstr ? "  " : "[]");
     245                        putstr(");
    290246                }
    291                 putpad(SEstr);
     247                resume_normal();
    292248        }
    293249
     
    301257                        *sp = so;
    302258                        if (i != ccol) {
    303                                 if (cur_so && MSflag) {
    304                                         putpad(SEstr);
    305                                         cur_so = 0;
    306                                 }
    307259                                moveto(RTOD(j), CTOD(i));
    308260                        }
    309                         if (SOstr) {
    310                                 if (so != cur_so) {
    311                                         putpad(so ? SOstr : SEstr);
    312                                         cur_so = so;
    313                                 }
    314                                 putstr("  ");
    315                         } else
    316                                 putstr(so ? "[]" : "  ");
     261                        if (so != cur_so) {
     262                                if (so)
     263                                        start_standout();
     264                                else
     265                                        resume_normal();
     266                                cur_so = so;
     267                        }
     268                        putstr("  ");
    317269                        ccol = i + 1;
    318270                        /*
     
    335287                }
    336288        }
    337         if (cur_so)
    338                 putpad(SEstr);
    339 /*      (void) fflush(stdout); */
    340 /*      (void) sigprocmask(SIG_SETMASK, &osigset, (sigset_t *)0); */
     289        resume_normal();
     290
     291        fflush();
    341292}
    342293
  • tetris/screen.h

    r0c6984e rf1b4e74  
    3737
    3838/*
    39  * Capabilities from TERMCAP (used in the score code).
    40  */
    41 extern char *SEstr;                     /* end standout mode */
    42 extern char *SOstr;                     /* begin standout mode */
    43 
    44 /*
    4539 * putpad() is for padded strings with count=1.
    4640 */
  • tetris/tetris.c

    r0c6984e rf1b4e74  
    236236                key_write[4], key_write[5]);
    237237
    238 //      (void)signal(SIGINT, onintr);
    239238        scr_init();
    240239        setup_board();
Note: See TracChangeset for help on using the changeset viewer.