Changeset 918 for libcaca


Ignore:
Timestamp:
Apr 26, 2006, 8:59:20 PM (15 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • coding style fixes again
Location:
libcaca/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_gl.c

    r912 r918  
    164164
    165165    for(i = 32; i < 128; i++)
    166     {
    167         glGenTextures(1, (GLuint*)&dp->drv.p->id[i - 32]);
    168         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
    169         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    170         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    171         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
    172                      16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
    173     }
     166        {
     167            glGenTextures(1, (GLuint*)&dp->drv.p->id[i - 32]);
     168            glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
     169            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     170            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     171            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
     172                         16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
     173        }
    174174
    175175    for(i = 0; i < 8; i++)
    176     {
    177         glGenTextures(1, (GLuint*)&dp->drv.p->id_uni[i]);
    178         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
    179         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    180         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    181         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
    182                      16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
    183     }
     176        {
     177            glGenTextures(1, (GLuint*)&dp->drv.p->id_uni[i]);
     178            glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
     179            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     180            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     181            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
     182                         16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
     183        }
    184184
    185185    for(i = 32; i < 128; i++)
    186     {
    187         glDisable(GL_TEXTURE_2D);
    188         glClear(GL_COLOR_BUFFER_BIT);
    189 
    190         glColor3f(1, 1, 1);
    191         glRasterPos2f(0, 15);
    192         glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i);
    193 
    194         glEnable(GL_TEXTURE_2D);
    195         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
    196         glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
    197                          0, dp->drv.p->height - 16, 16, 16, 0);
     186        {
     187            glDisable(GL_TEXTURE_2D);
     188            glClear(GL_COLOR_BUFFER_BIT);
     189
     190            glColor3f(1, 1, 1);
     191            glRasterPos2f(0, 15);
     192            glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i);
     193
     194            glEnable(GL_TEXTURE_2D);
     195            glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
     196            glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
     197                             0, dp->drv.p->height - 16, 16, 16, 0);
    198198
    199199#ifdef HAVE_GLUTCHECKLOOP
    200         glutCheckLoop();
     200            glutCheckLoop();
    201201#else
    202         glutMainLoopEvent();
    203 #endif
    204         glutSwapBuffers();
    205 
    206     }
     202            glutMainLoopEvent();
     203#endif
     204            glutSwapBuffers();
     205
     206        }
    207207    /* CP437 hack */
    208208    for(i = 0; i < 8; i++)
    209     {
    210         glDisable(GL_TEXTURE_2D);
    211         glClear(GL_COLOR_BUFFER_BIT);
    212         glColor3f(1, 1, 1);
    213         glTranslatef(0.5,0.5,0);
    214 
    215         if(i==0)                  /* 0x00002580*/
    216         {
    217             glBegin(GL_QUADS);
    218             glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7);
    219             glEnd();
    220         }
    221         else if(i==1)             /* 0x00002584*/
    222         {
    223             glBegin(GL_QUADS);
    224             glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15);
    225             glEnd();
    226         }
    227         else if(i==2)             /* 0x00002588*/
    228         {
    229             glBegin(GL_QUADS);
    230             glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15);
    231             glEnd();
    232         }
    233         else if(i==3)             /* 0x0000258c*/
    234         {
    235             glBegin(GL_QUADS);
    236             glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15);
    237             glEnd();
    238         }
    239         else if(i==4)             /* 0x00002590*/
    240         {
    241             glBegin(GL_QUADS);
    242             glVertex2f(4,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(4,15);
    243             glEnd();
    244         }
    245         else if(i>=5)             /* 0x00002591*/
    246         {
    247             int a, j, k = i-5;
    248             for(j = dp->drv.p->font_height; j--; )
    249                 for(a = dp->drv.p->font_width; a--; )
    250                 {
    251                     if(((a + 2 * (j & 1)) & 3) > k)
    252                         continue;
    253 
    254                     glBegin(GL_POINTS);
    255                     glVertex2f(a, j);
    256                     glEnd();
    257                 }
    258         }
    259 
    260 
    261 
    262         glEnable(GL_TEXTURE_2D);
    263         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
    264         glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
    265                         0, dp->drv.p->height - 16, 16, 16, 0);
     209        {
     210            glDisable(GL_TEXTURE_2D);
     211            glClear(GL_COLOR_BUFFER_BIT);
     212            glColor3f(1, 1, 1);
     213            glTranslatef(0.5,0.5,0);
     214
     215            if(i==0)                  /* 0x00002580*/
     216                {
     217                    glBegin(GL_QUADS);
     218                    glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7);
     219                    glEnd();
     220                }
     221            else if(i==1)             /* 0x00002584*/
     222                {
     223                    glBegin(GL_QUADS);
     224                    glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15);
     225                    glEnd();
     226                }
     227            else if(i==2)             /* 0x00002588*/
     228                {
     229                    glBegin(GL_QUADS);
     230                    glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15);
     231                    glEnd();
     232                }
     233            else if(i==3)             /* 0x0000258c*/
     234                {
     235                    glBegin(GL_QUADS);
     236                    glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15);
     237                    glEnd();
     238                }
     239            else if(i==4)             /* 0x00002590*/
     240                {
     241                    glBegin(GL_QUADS);
     242                    glVertex2f(4,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(4,15);
     243                    glEnd();
     244                }
     245            else if(i>=5)             /* 0x00002591*/
     246                {
     247                    int a, j, k = i-5;
     248                    for(j = dp->drv.p->font_height; j--; )
     249                        for(a = dp->drv.p->font_width; a--; )
     250                            {
     251                                if(((a + 2 * (j & 1)) & 3) > k)
     252                                    continue;
     253
     254                                glBegin(GL_POINTS);
     255                                glVertex2f(a, j);
     256                                glEnd();
     257                            }
     258                }
     259
     260
     261
     262            glEnable(GL_TEXTURE_2D);
     263            glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
     264            glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
     265                            0, dp->drv.p->height - 16, 16, 16, 0);
    266266#ifdef HAVE_GLUTCHECKLOOP
    267         glutCheckLoop();
     267            glutCheckLoop();
    268268#else
    269         glutMainLoopEvent();
    270 #endif
    271         glutSwapBuffers();
    272         glutPostRedisplay();
    273 
    274 
    275     }
     269            glutMainLoopEvent();
     270#endif
     271            glutSwapBuffers();
     272            glutPostRedisplay();
     273
     274
     275        }
    276276
    277277
     
    311311    line = 0;
    312312    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
    313     {
    314         uint32_t *attr = dp->cv->attr + line * dp->cv->width;
    315 
    316         for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
    317         {
    318             uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++);
    319             glDisable(GL_TEXTURE_2D);
    320             glColor3b(((bg & 0xf00) >> 8) * 8,
    321                       ((bg & 0x0f0) >> 4) * 8,
    322                       (bg & 0x00f) * 8);
    323             glBegin(GL_QUADS);
    324                 glVertex2f(x, y);
    325                 glVertex2f(x + dp->drv.p->font_width, y);
    326                 glVertex2f(x + dp->drv.p->font_width,
    327                            y + dp->drv.p->font_height);
    328                 glVertex2f(x, y + dp->drv.p->font_height);
    329             glEnd();
    330         }
    331 
    332         line++;
    333     }
     313        {
     314            uint32_t *attr = dp->cv->attr + line * dp->cv->width;
     315
     316            for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
     317                {
     318                    uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++);
     319                    glDisable(GL_TEXTURE_2D);
     320                    glColor3b(((bg & 0xf00) >> 8) * 8,
     321                              ((bg & 0x0f0) >> 4) * 8,
     322                              (bg & 0x00f) * 8);
     323                    glBegin(GL_QUADS);
     324                    glVertex2f(x, y);
     325                    glVertex2f(x + dp->drv.p->font_width, y);
     326                    glVertex2f(x + dp->drv.p->font_width,
     327                               y + dp->drv.p->font_height);
     328                    glVertex2f(x, y + dp->drv.p->font_height);
     329                    glEnd();
     330                }
     331
     332            line++;
     333        }
    334334
    335335    /* 2nd pass, avoids changing render state too much */
     
    340340    line = 0;
    341341    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
    342     {
    343         uint32_t *attr = dp->cv->attr + line * dp->cv->width;
    344         uint32_t *chars = dp->cv->chars + line * dp->cv->width;
    345 
    346         for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
    347         {
    348             uint32_t cv = *chars++;
    349 
    350             if(cv > 0x00000020 && cv < 0x00000080)
    351             {
    352                 uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    353                 glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
    354                 glColor3b(((fg & 0xf00) >> 8) * 8,
    355                           ((fg & 0x0f0) >> 4) * 8,
    356                           (fg & 0x00f) * 8);
    357                 glBegin(GL_QUADS);
    358                     glTexCoord2f(0, dp->drv.p->sh);
    359                     glVertex2f(x, y);
    360                     glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
    361                     glVertex2f(x + dp->drv.p->font_width, y);
    362                     glTexCoord2f(dp->drv.p->sw, 0);
    363                     glVertex2f(x + dp->drv.p->font_width,
    364                                y + dp->drv.p->font_height);
    365                     glTexCoord2f(0, 0);
    366                     glVertex2f(x, y + dp->drv.p->font_height);
    367                 glEnd();
    368             }
    369             else if(cv!=' ')
    370             {
    371                 switch(cv)
    372                 {
    373                     case 0x00002580: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[0]); break;
    374                     case 0x00002584: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[1]); break;
    375                     case 0x00002588: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[2]); break;
    376                     case 0x0000258c: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[3]); break;
    377                     case 0x00002590: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[4]); break;
    378                     case 0x00002591: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[5]); break;
    379                     case 0x00002592: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[6]); break;
    380                     case 0x00002593: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[7]); break;
    381                     default:         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id['?' - 32]); break;
    382                 }
    383 
    384                 uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    385                 glColor3b(((fg & 0xf00) >> 8) * 8,
    386                           ((fg & 0x0f0) >> 4) * 8,
    387                           (fg & 0x00f) * 8);
    388                 glBegin(GL_QUADS);
    389                     glTexCoord2f(0, dp->drv.p->sh);
    390                     glVertex2f(x, y);
    391                     glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
    392                     glVertex2f(x + dp->drv.p->font_width, y);
    393                     glTexCoord2f(dp->drv.p->sw, 0);
    394                     glVertex2f(x + dp->drv.p->font_width,
    395                                y + dp->drv.p->font_height);
    396                     glTexCoord2f(0, 0);
    397                     glVertex2f(x, y + dp->drv.p->font_height);
    398                 glEnd();
    399 
    400             }
    401 
    402             attr++;
    403         }
    404         line++;
    405     }
     342        {
     343            uint32_t *attr = dp->cv->attr + line * dp->cv->width;
     344            uint32_t *chars = dp->cv->chars + line * dp->cv->width;
     345
     346            for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
     347                {
     348                    uint32_t cv = *chars++;
     349
     350                    if(cv > 0x00000020 && cv < 0x00000080)
     351                        {
     352                            uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
     353                            glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
     354                            glColor3b(((fg & 0xf00) >> 8) * 8,
     355                                      ((fg & 0x0f0) >> 4) * 8,
     356                                      (fg & 0x00f) * 8);
     357                            glBegin(GL_QUADS);
     358                            glTexCoord2f(0, dp->drv.p->sh);
     359                            glVertex2f(x, y);
     360                            glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
     361                            glVertex2f(x + dp->drv.p->font_width, y);
     362                            glTexCoord2f(dp->drv.p->sw, 0);
     363                            glVertex2f(x + dp->drv.p->font_width,
     364                                       y + dp->drv.p->font_height);
     365                            glTexCoord2f(0, 0);
     366                            glVertex2f(x, y + dp->drv.p->font_height);
     367                            glEnd();
     368                        }
     369                    else if(cv!=' ')
     370                        {
     371                            switch(cv)
     372                                {
     373                                case 0x00002580: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[0]); break;
     374                                case 0x00002584: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[1]); break;
     375                                case 0x00002588: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[2]); break;
     376                                case 0x0000258c: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[3]); break;
     377                                case 0x00002590: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[4]); break;
     378                                case 0x00002591: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[5]); break;
     379                                case 0x00002592: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[6]); break;
     380                                case 0x00002593: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[7]); break;
     381                                default:         glBindTexture(GL_TEXTURE_2D, dp->drv.p->id['?' - 32]); break;
     382                                }
     383
     384                            uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
     385                            glColor3b(((fg & 0xf00) >> 8) * 8,
     386                                      ((fg & 0x0f0) >> 4) * 8,
     387                                      (fg & 0x00f) * 8);
     388                            glBegin(GL_QUADS);
     389                            glTexCoord2f(0, dp->drv.p->sh);
     390                            glVertex2f(x, y);
     391                            glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
     392                            glVertex2f(x + dp->drv.p->font_width, y);
     393                            glTexCoord2f(dp->drv.p->sw, 0);
     394                            glVertex2f(x + dp->drv.p->font_width,
     395                                       y + dp->drv.p->font_height);
     396                            glTexCoord2f(0, 0);
     397                            glVertex2f(x, y + dp->drv.p->font_height);
     398                            glEnd();
     399
     400                        }
     401
     402                    attr++;
     403                }
     404            line++;
     405        }
    406406    glDisable(GL_BLEND);
    407407    glDisable(GL_TEXTURE_2D);
     
    440440#ifdef HAVE_GLUTCLOSEFUNC
    441441    if(dp->drv.p->close)
    442     {
    443         dp->drv.p->close = 0;
    444         ev->type = CACA_EVENT_QUIT;
    445         return 1;
    446     }
     442        {
     443            dp->drv.p->close = 0;
     444            ev->type = CACA_EVENT_QUIT;
     445            return 1;
     446        }
    447447#endif
    448448
    449449    if(dp->resize.resized)
    450     {
    451         ev->type = CACA_EVENT_RESIZE;
    452         ev->data.resize.w = dp->cv->width;
    453         ev->data.resize.h = dp->cv->height;
    454         return 1;
    455     }
     450        {
     451            ev->type = CACA_EVENT_RESIZE;
     452            ev->data.resize.w = dp->cv->width;
     453            ev->data.resize.h = dp->cv->height;
     454            return 1;
     455        }
    456456
    457457    if(dp->drv.p->mouse_changed)
    458     {
    459         ev->type = CACA_EVENT_MOUSE_MOTION;
    460         ev->data.mouse.x = dp->mouse.x;
    461         ev->data.mouse.y = dp->mouse.y;
    462         dp->drv.p->mouse_changed = 0;
    463 
    464         if(dp->drv.p->mouse_clicked)
    465         {
    466             _push_event(dp, ev);
    467             ev->type = CACA_EVENT_MOUSE_PRESS;
    468             ev->data.mouse.button = dp->drv.p->mouse_button;
    469             dp->drv.p->mouse_clicked = 0;
    470         }
    471 
    472         return 1;
    473     }
     458        {
     459            ev->type = CACA_EVENT_MOUSE_MOTION;
     460            ev->data.mouse.x = dp->mouse.x;
     461            ev->data.mouse.y = dp->mouse.y;
     462            dp->drv.p->mouse_changed = 0;
     463
     464            if(dp->drv.p->mouse_clicked)
     465                {
     466                    _push_event(dp, ev);
     467                    ev->type = CACA_EVENT_MOUSE_PRESS;
     468                    ev->data.mouse.button = dp->drv.p->mouse_button;
     469                    dp->drv.p->mouse_clicked = 0;
     470                }
     471
     472            return 1;
     473        }
    474474
    475475    if(dp->drv.p->key != 0)
    476     {
    477         ev->type = CACA_EVENT_KEY_PRESS;
    478         ev->data.key.ch = dp->drv.p->key;
    479         ev->data.key.ucs4 = (uint32_t)dp->drv.p->key;
    480         ev->data.key.utf8[0] = dp->drv.p->key;
    481         ev->data.key.utf8[1] = '\0';
    482         dp->drv.p->key = 0;
    483         return 1;
    484     }
     476        {
     477            ev->type = CACA_EVENT_KEY_PRESS;
     478            ev->data.key.ch = dp->drv.p->key;
     479            ev->data.key.ucs4 = (uint32_t)dp->drv.p->key;
     480            ev->data.key.utf8[0] = dp->drv.p->key;
     481            ev->data.key.utf8[1] = '\0';
     482            dp->drv.p->key = 0;
     483            return 1;
     484        }
    485485
    486486    if(dp->drv.p->special_key != 0)
    487     {
    488         switch(dp->drv.p->special_key)
    489         {
    490             case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break;
    491             case GLUT_KEY_F2 : ev->data.key.ch = CACA_KEY_F2; break;
    492             case GLUT_KEY_F3 : ev->data.key.ch = CACA_KEY_F3; break;
    493             case GLUT_KEY_F4 : ev->data.key.ch = CACA_KEY_F4; break;
    494             case GLUT_KEY_F5 : ev->data.key.ch = CACA_KEY_F5; break;
    495             case GLUT_KEY_F6 : ev->data.key.ch = CACA_KEY_F6; break;
    496             case GLUT_KEY_F7 : ev->data.key.ch = CACA_KEY_F7; break;
    497             case GLUT_KEY_F8 : ev->data.key.ch = CACA_KEY_F8; break;
    498             case GLUT_KEY_F9 : ev->data.key.ch = CACA_KEY_F9; break;
    499             case GLUT_KEY_F10: ev->data.key.ch = CACA_KEY_F10; break;
    500             case GLUT_KEY_F11: ev->data.key.ch = CACA_KEY_F11; break;
    501             case GLUT_KEY_F12: ev->data.key.ch = CACA_KEY_F12; break;
    502             case GLUT_KEY_LEFT : ev->data.key.ch = CACA_KEY_LEFT; break;
    503             case GLUT_KEY_RIGHT: ev->data.key.ch = CACA_KEY_RIGHT; break;
    504             case GLUT_KEY_UP   : ev->data.key.ch = CACA_KEY_UP; break;
    505             case GLUT_KEY_DOWN : ev->data.key.ch = CACA_KEY_DOWN; break;
    506             case GLUT_KEY_PAGE_UP : ev->data.key.ch = CACA_KEY_PAGEUP; break;
    507             case GLUT_KEY_PAGE_DOWN  : ev->data.key.ch = CACA_KEY_PAGEDOWN;
    508                                                                        break;
    509             case GLUT_KEY_HOME : ev->data.key.ch = CACA_KEY_HOME; break;
    510             case GLUT_KEY_END : ev->data.key.ch = CACA_KEY_END; break;
    511             case GLUT_KEY_INSERT : ev->data.key.ch = CACA_KEY_INSERT; break;
    512 
    513             default: ev->type = CACA_EVENT_NONE; return 0;
    514         }
    515 
    516         ev->type = CACA_EVENT_KEY_PRESS;
    517         ev->data.key.ucs4 = 0;
    518         ev->data.key.utf8[0] = '\0';
    519 
    520         dp->drv.p->special_key = 0;
    521         return 1;
    522     }
     487        {
     488            switch(dp->drv.p->special_key)
     489                {
     490                case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break;
     491                case GLUT_KEY_F2 : ev->data.key.ch = CACA_KEY_F2; break;
     492                case GLUT_KEY_F3 : ev->data.key.ch = CACA_KEY_F3; break;
     493                case GLUT_KEY_F4 : ev->data.key.ch = CACA_KEY_F4; break;
     494                case GLUT_KEY_F5 : ev->data.key.ch = CACA_KEY_F5; break;
     495                case GLUT_KEY_F6 : ev->data.key.ch = CACA_KEY_F6; break;
     496                case GLUT_KEY_F7 : ev->data.key.ch = CACA_KEY_F7; break;
     497                case GLUT_KEY_F8 : ev->data.key.ch = CACA_KEY_F8; break;
     498                case GLUT_KEY_F9 : ev->data.key.ch = CACA_KEY_F9; break;
     499                case GLUT_KEY_F10: ev->data.key.ch = CACA_KEY_F10; break;
     500                case GLUT_KEY_F11: ev->data.key.ch = CACA_KEY_F11; break;
     501                case GLUT_KEY_F12: ev->data.key.ch = CACA_KEY_F12; break;
     502                case GLUT_KEY_LEFT : ev->data.key.ch = CACA_KEY_LEFT; break;
     503                case GLUT_KEY_RIGHT: ev->data.key.ch = CACA_KEY_RIGHT; break;
     504                case GLUT_KEY_UP   : ev->data.key.ch = CACA_KEY_UP; break;
     505                case GLUT_KEY_DOWN : ev->data.key.ch = CACA_KEY_DOWN; break;
     506                case GLUT_KEY_PAGE_UP : ev->data.key.ch = CACA_KEY_PAGEUP; break;
     507                case GLUT_KEY_PAGE_DOWN  : ev->data.key.ch = CACA_KEY_PAGEDOWN;
     508                    break;
     509                case GLUT_KEY_HOME : ev->data.key.ch = CACA_KEY_HOME; break;
     510                case GLUT_KEY_END : ev->data.key.ch = CACA_KEY_END; break;
     511                case GLUT_KEY_INSERT : ev->data.key.ch = CACA_KEY_INSERT; break;
     512
     513                default: ev->type = CACA_EVENT_NONE; return 0;
     514                }
     515
     516            ev->type = CACA_EVENT_KEY_PRESS;
     517            ev->data.key.ucs4 = 0;
     518            ev->data.key.utf8[0] = '\0';
     519
     520            dp->drv.p->special_key = 0;
     521            return 1;
     522        }
    523523
    524524    ev->type = CACA_EVENT_NONE;
     
    558558
    559559    if(dp->drv.p->bit) /* Do not handle reshaping at the first time */
    560     {
    561         dp->drv.p->new_width = w;
    562         dp->drv.p->new_height = h;
    563 
    564         dp->resize.w = w / dp->drv.p->font_width;
    565         dp->resize.h = (h / dp->drv.p->font_height) + 1;
    566 
    567         dp->resize.resized = 1;
    568     }
     560        {
     561            dp->drv.p->new_width = w;
     562            dp->drv.p->new_height = h;
     563
     564            dp->resize.w = w / dp->drv.p->font_width;
     565            dp->resize.h = (h / dp->drv.p->font_height) + 1;
     566
     567            dp->resize.resized = 1;
     568        }
    569569    else
    570570        dp->drv.p->bit = 1;
  • libcaca/trunk/cucul/import.c

    r916 r918  
    7676    /* Autodetection */
    7777    if(!strcasecmp("", format))
    78     {
    79         unsigned int i=0;
    80         /* if 4 first letters are CACA */
    81         if(buffer->size >= 4 &&
    82             buf[0] == 'C' && buf[1] == 'A' && buf[2] == 'C' && buf[3] != 'A')
    83             return import_caca(buffer->data, buffer->size);
    84 
    85         /* If we find ESC[ argv, we guess it's an ANSI file */
    86         while(i < buffer->size - 1)
    87         {
    88             if((buf[i] == 0x1b) && (buf[i+1] == '['))
    89                 return import_ansi(buffer->data, buffer->size);
    90             i++;
    91         }
    92 
    93         /* Otherwise, import it as text */
    94         return import_text(buffer->data, buffer->size);
    95     }
     78        {
     79            unsigned int i=0;
     80            /* if 4 first letters are CACA */
     81            if(buffer->size >= 4 &&
     82               buf[0] == 'C' && buf[1] == 'A' && buf[2] == 'C' && buf[3] != 'A')
     83                return import_caca(buffer->data, buffer->size);
     84
     85            /* If we find ESC[ argv, we guess it's an ANSI file */
     86            while(i < buffer->size - 1)
     87                {
     88                    if((buf[i] == 0x1b) && (buf[i+1] == '['))
     89                        return import_ansi(buffer->data, buffer->size);
     90                    i++;
     91                }
     92
     93            /* Otherwise, import it as text */
     94            return import_text(buffer->data, buffer->size);
     95        }
    9696    return NULL;
    9797}
     
    109109{
    110110    static char const * const list[] =
    111     {
    112         "", "autodetect",
    113         "text", "plain text",
    114         "caca", "native libcaca format",
    115         "ansi", "ANSI coloured text",
    116         NULL, NULL
    117     };
     111        {
     112            "", "autodetect",
     113            "text", "plain text",
     114            "caca", "native libcaca format",
     115            "ansi", "ANSI coloured text",
     116            NULL, NULL
     117        };
    118118
    119119    return list;
     
    140140
    141141    width = ((uint32_t)buf[8] << 24) | ((uint32_t)buf[9] << 16)
    142            | ((uint32_t)buf[10] << 8) | (uint32_t)buf[11];
     142        | ((uint32_t)buf[10] << 8) | (uint32_t)buf[11];
    143143    height = ((uint32_t)buf[12] << 24) | ((uint32_t)buf[13] << 16)
    144             | ((uint32_t)buf[14] << 8) | (uint32_t)buf[15];
     144        | ((uint32_t)buf[14] << 8) | (uint32_t)buf[15];
    145145
    146146    if(!width || !height)
     
    156156
    157157    for(n = height * width; n--; )
    158     {
    159         cv->chars[n] = ((uint32_t)buf[16 + 0 + 8 * n] << 24)
    160                      | ((uint32_t)buf[16 + 1 + 8 * n] << 16)
    161                      | ((uint32_t)buf[16 + 2 + 8 * n] << 8)
    162                      | (uint32_t)buf[16 + 3 + 8 * n];
    163         cv->attr[n] = ((uint32_t)buf[16 + 4 + 8 * n] << 24)
    164                     | ((uint32_t)buf[16 + 5 + 8 * n] << 16)
    165                     | ((uint32_t)buf[16 + 6 + 8 * n] << 8)
    166                     | (uint32_t)buf[16 + 7 + 8 * n];
    167     }
     158        {
     159            cv->chars[n] = ((uint32_t)buf[16 + 0 + 8 * n] << 24)
     160                | ((uint32_t)buf[16 + 1 + 8 * n] << 16)
     161                | ((uint32_t)buf[16 + 2 + 8 * n] << 8)
     162                | (uint32_t)buf[16 + 3 + 8 * n];
     163            cv->attr[n] = ((uint32_t)buf[16 + 4 + 8 * n] << 24)
     164                | ((uint32_t)buf[16 + 5 + 8 * n] << 16)
     165                | ((uint32_t)buf[16 + 6 + 8 * n] << 8)
     166                | (uint32_t)buf[16 + 7 + 8 * n];
     167        }
    168168
    169169    return cv;
     
    180180
    181181    for(i = 0; i < size; i++)
    182     {
    183         unsigned char ch = *text++;
    184 
    185         if(ch == '\r')
    186             continue;
    187 
    188         if(ch == '\n')
    189         {
    190             x = 0;
    191             y++;
    192             continue;
    193         }
    194 
    195         if(x >= width || y >= height)
    196         {
    197             if(x >= width)
    198                 width = x + 1;
    199 
    200             if(y >= height)
    201                 height = y + 1;
    202 
    203             cucul_set_canvas_size(cv, width, height);
    204         }
    205 
    206         cucul_putchar(cv, x, y, ch);
    207         x++;
    208     }
     182        {
     183            unsigned char ch = *text++;
     184
     185            if(ch == '\r')
     186                continue;
     187
     188            if(ch == '\n')
     189                {
     190                    x = 0;
     191                    y++;
     192                    continue;
     193                }
     194
     195            if(x >= width || y >= height)
     196                {
     197                    if(x >= width)
     198                        width = x + 1;
     199
     200                    if(y >= height)
     201                        height = y + 1;
     202
     203                    cucul_set_canvas_size(cv, width, height);
     204                }
     205
     206            cucul_putchar(cv, x, y, ch);
     207            x++;
     208        }
    209209
    210210    return cv;
     
    224224
    225225    for(i = 0; i < size; i += skip)
    226     {
    227         skip = 1;
    228 
    229         /* Wrap long lines */
    230         if((unsigned int)x >= width)
    231         {
    232             x = 0;
    233             y++;
    234         }
    235 
    236         if(buffer[i] == '\x1a' && size - i >= 8
    237            && !memcmp(buffer + i + 1, "SAUCE00", 7))
    238             break; /* End before SAUCE data */
    239 
    240         if(buffer[i] == '\r')
    241             continue; /* DOS sucks */
    242 
    243         if(buffer[i] == '\n')
    244         {
    245             x = 0;
    246             y++;
    247             continue;
    248         }
    249 
    250         /* Interpret escape commands, as per Standard ECMA-48 "Control
    251          * Functions for Coded Character Sets", 5.4. Control sequences. */
    252         if(buffer[i] == '\x1b' && buffer[i + 1] == '[')
    253         {
    254             unsigned int argc = 0, argv[101];
    255             unsigned int param, inter, final;
    256 
    257         /* Compute offsets to parameter bytes, intermediate bytes and
    258          * to the final byte. Only the final byte is mandatory, there
    259          * can be zero of the others.
    260          * 0  param=2             inter                 final           final+1
    261          * +-----+------------------+---------------------+-----------------+
    262          * | CSI | parameter bytes  | intermediate bytes  |   final byte    |
    263          * |     |   0x30 - 0x3f    |    0x20 - 0x2f      |   0x40 - 0x7e   |
    264          * | ^[[ | 0123456789:;<=>? | SPC !"#$%&'()*+,-./ | azAZ@[\]^_`{|}~ |
    265          * +-----+------------------+---------------------+-----------------+
    266          */
    267             param = 2;
    268 
    269             for(inter = param; i + inter < size; inter++)
    270                 if(buffer[i + inter] < 0x30 || buffer[i + inter] > 0x3f)
    271                     break;
    272 
    273             for(final = inter; i + final < size; final++)
    274                 if(buffer[i + final] < 0x20 || buffer[i + final] > 0x2f)
    275                     break;
    276 
    277             if(buffer[i + final] < 0x40 || buffer[i + final] > 0x7e)
    278                 break; /* Invalid Final Byte */
    279 
    280             skip += final;
    281 
    282             /* Sanity checks */
    283             if(param < inter && buffer[i + param] >= 0x3c)
    284             {
    285                 fprintf(stderr, "private sequence \"^[[%.*s\"\n",
    286                                 final - param + 1, buffer + i + param);
    287                 continue; /* Private sequence, skip it entirely */
    288             }
    289 
    290             if(final - param > 100)
    291                 continue; /* Suspiciously long sequence, skip it */
    292 
    293             /* Parse parameter bytes as per ECMA-48 5.4.2: Parameter string
    294              * format */
    295             if(param < inter)
    296             {
    297                 argv[0] = 0;
    298                 for(j = param; j < inter; j++)
    299                 {
    300                     if(buffer[i + j] == ';')
    301                         argv[++argc] = 0;
    302                     else if(buffer[i + j] >= '0' && buffer[i + j] <= '9')
    303                         argv[argc] = 10 * argv[argc] + (buffer[i + j] - '0');
    304                 }
    305                 argc++;
    306             }
    307 
    308             /* Interpret final byte. The code representations are given in
    309              * ECMA-48 5.4: Control sequences, and the code definitions are
    310              * given in ECMA-48 8.3: Definition of control functions. */
    311             switch(buffer[i + final])
    312             {
    313             case 'f': /* CUP - Cursor Position */
    314             case 'H': /* HVP - Character And Line Position */
    315                 x = (argc > 1) ? argv[1] - 1 : 0;
    316                 y = (argc > 0) ? argv[0] - 1 : 0;
    317                 break;
    318             case 'A': /* CUU - Cursor Up */
    319                 y -= argc ? argv[0] : 1;
    320                 if(y < 0)
    321                     y = 0;
    322                 break;
    323             case 'B': /* CUD - Cursor Down */
    324                 y += argc ? argv[0] : 1;
    325                 break;
    326             case 'C': /* CUF - Cursor Right */
    327                 x += argc ? argv[0] : 1;
    328                 break;
    329             case 'D': /* CUB - Cursor Left */
    330                 x -= argc ? argv[0] : 1;
    331                 if(x < 0)
     226        {
     227            skip = 1;
     228
     229            /* Wrap long lines */
     230            if((unsigned int)x >= width)
     231                {
    332232                    x = 0;
    333                 break;
    334             case 's': /* Private (save cursor position) */
    335                 save_x = x;
    336                 save_y = y;
    337                 break;
    338             case 'u': /* Private (reload cursor positin) */
    339                 x = save_x;
    340                 y = save_y;
    341                 break;
    342             case 'J': /* ED - Erase In Page */
    343                 if(argv[0] == 2)
    344                     x = y = 0;
    345                 break;
    346             case 'K': /* EL - Erase In Line */
    347                 for(j = x; j < width; j++)
    348                     _cucul_putchar32(cv, j, y, (uint32_t)' ');
    349                 x = width;
    350                 break;
    351             case 'm': /* SGR - Select Graphic Rendition */
    352                 ansi_parse_grcm(cv, &grcm, argc, argv);
    353                 break;
    354             default:
    355                 fprintf(stderr, "unknown command %c\n", buffer[i + final]);
    356                 break;
    357             }
    358 
    359             continue;
    360         }
    361 
    362         /* We're going to paste a character. First make sure the canvas
    363          * is big enough. */
    364         if((unsigned int)y >= height)
    365         {
    366             height = y + 1;
    367             cucul_set_canvas_size(cv, width, height);
    368         }
    369 
    370         /* Now paste our character */
    371         _cucul_putchar32(cv, x, y, _cucul_cp437_to_utf32(buffer[i]));
    372         x++;
    373     }
     233                    y++;
     234                }
     235
     236            if(buffer[i] == '\x1a' && size - i >= 8
     237               && !memcmp(buffer + i + 1, "SAUCE00", 7))
     238                break; /* End before SAUCE data */
     239
     240            if(buffer[i] == '\r')
     241                continue; /* DOS sucks */
     242
     243            if(buffer[i] == '\n')
     244                {
     245                    x = 0;
     246                    y++;
     247                    continue;
     248                }
     249
     250            /* Interpret escape commands, as per Standard ECMA-48 "Control
     251             * Functions for Coded Character Sets", 5.4. Control sequences. */
     252            if(buffer[i] == '\x1b' && buffer[i + 1] == '[')
     253                {
     254                    unsigned int argc = 0, argv[101];
     255                    unsigned int param, inter, final;
     256
     257                    /* Compute offsets to parameter bytes, intermediate bytes and
     258                     * to the final byte. Only the final byte is mandatory, there
     259                     * can be zero of the others.
     260                     * 0  param=2             inter                 final           final+1
     261                     * +-----+------------------+---------------------+-----------------+
     262                     * | CSI | parameter bytes  | intermediate bytes  |   final byte    |
     263                     * |     |   0x30 - 0x3f    |    0x20 - 0x2f      |   0x40 - 0x7e   |
     264                     * | ^[[ | 0123456789:;<=>? | SPC !"#$%&'()*+,-./ | azAZ@[\]^_`{|}~ |
     265                     * +-----+------------------+---------------------+-----------------+
     266                     */
     267                    param = 2;
     268
     269                    for(inter = param; i + inter < size; inter++)
     270                        if(buffer[i + inter] < 0x30 || buffer[i + inter] > 0x3f)
     271                            break;
     272
     273                    for(final = inter; i + final < size; final++)
     274                        if(buffer[i + final] < 0x20 || buffer[i + final] > 0x2f)
     275                            break;
     276
     277                    if(buffer[i + final] < 0x40 || buffer[i + final] > 0x7e)
     278                        break; /* Invalid Final Byte */
     279
     280                    skip += final;
     281
     282                    /* Sanity checks */
     283                    if(param < inter && buffer[i + param] >= 0x3c)
     284                        {
     285                            fprintf(stderr, "private sequence \"^[[%.*s\"\n",
     286                                    final - param + 1, buffer + i + param);
     287                            continue; /* Private sequence, skip it entirely */
     288                        }
     289
     290                    if(final - param > 100)
     291                        continue; /* Suspiciously long sequence, skip it */
     292
     293                    /* Parse parameter bytes as per ECMA-48 5.4.2: Parameter string
     294                     * format */
     295                    if(param < inter)
     296                        {
     297                            argv[0] = 0;
     298                            for(j = param; j < inter; j++)
     299                                {
     300                                    if(buffer[i + j] == ';')
     301                                        argv[++argc] = 0;
     302                                    else if(buffer[i + j] >= '0' && buffer[i + j] <= '9')
     303                                        argv[argc] = 10 * argv[argc] + (buffer[i + j] - '0');
     304                                }
     305                            argc++;
     306                        }
     307
     308                    /* Interpret final byte. The code representations are given in
     309                     * ECMA-48 5.4: Control sequences, and the code definitions are
     310                     * given in ECMA-48 8.3: Definition of control functions. */
     311                    switch(buffer[i + final])
     312                        {
     313                        case 'f': /* CUP - Cursor Position */
     314                        case 'H': /* HVP - Character And Line Position */
     315                            x = (argc > 1) ? argv[1] - 1 : 0;
     316                            y = (argc > 0) ? argv[0] - 1 : 0;
     317                            break;
     318                        case 'A': /* CUU - Cursor Up */
     319                            y -= argc ? argv[0] : 1;
     320                            if(y < 0)
     321                                y = 0;
     322                            break;
     323                        case 'B': /* CUD - Cursor Down */
     324                            y += argc ? argv[0] : 1;
     325                            break;
     326                        case 'C': /* CUF - Cursor Right */
     327                            x += argc ? argv[0] : 1;
     328                            break;
     329                        case 'D': /* CUB - Cursor Left */
     330                            x -= argc ? argv[0] : 1;
     331                            if(x < 0)
     332                                x = 0;
     333                            break;
     334                        case 's': /* Private (save cursor position) */
     335                            save_x = x;
     336                            save_y = y;
     337                            break;
     338                        case 'u': /* Private (reload cursor positin) */
     339                            x = save_x;
     340                            y = save_y;
     341                            break;
     342                        case 'J': /* ED - Erase In Page */
     343                            if(argv[0] == 2)
     344                                x = y = 0;
     345                            break;
     346                        case 'K': /* EL - Erase In Line */
     347                            for(j = x; j < width; j++)
     348                                _cucul_putchar32(cv, j, y, (uint32_t)' ');
     349                            x = width;
     350                            break;
     351                        case 'm': /* SGR - Select Graphic Rendition */
     352                            ansi_parse_grcm(cv, &grcm, argc, argv);
     353                            break;
     354                        default:
     355                            fprintf(stderr, "unknown command %c\n", buffer[i + final]);
     356                            break;
     357                        }
     358
     359                    continue;
     360                }
     361
     362            /* We're going to paste a character. First make sure the canvas
     363             * is big enough. */
     364            if((unsigned int)y >= height)
     365                {
     366                    height = y + 1;
     367                    cucul_set_canvas_size(cv, width, height);
     368                }
     369
     370            /* Now paste our character */
     371            _cucul_putchar32(cv, x, y, _cucul_cp437_to_utf32(buffer[i]));
     372            x++;
     373        }
    374374
    375375    return cv;
     
    382382{
    383383    static uint8_t const ansi2cucul[] =
    384     {
    385         CUCUL_COLOR_BLACK, CUCUL_COLOR_RED,
    386         CUCUL_COLOR_GREEN, CUCUL_COLOR_BROWN,
    387         CUCUL_COLOR_BLUE, CUCUL_COLOR_MAGENTA,
    388         CUCUL_COLOR_CYAN, CUCUL_COLOR_LIGHTGRAY
    389     };
     384        {
     385            CUCUL_COLOR_BLACK, CUCUL_COLOR_RED,
     386            CUCUL_COLOR_GREEN, CUCUL_COLOR_BROWN,
     387            CUCUL_COLOR_BLUE, CUCUL_COLOR_MAGENTA,
     388            CUCUL_COLOR_CYAN, CUCUL_COLOR_LIGHTGRAY
     389        };
    390390
    391391    unsigned int j;
     
    393393
    394394    for(j = 0; j < argc; j++)
    395     {
    396         /* Defined in ECMA-48 8.3.117: SGR - SELECT GRAPHIC RENDITION */
    397         if(argv[j] >= 30 && argv[j] <= 37)
    398             g->fg = ansi2cucul[argv[j] - 30];
    399         else if(argv[j] >= 40 && argv[j] <= 47)
    400             g->bg = ansi2cucul[argv[j] - 40];
    401         else if(argv[j] >= 90 && argv[j] <= 97)
    402             g->fg = ansi2cucul[argv[j] - 90] + 8;
    403         else if(argv[j] >= 100 && argv[j] <= 107)
    404             g->bg = ansi2cucul[argv[j] - 100] + 8;
    405         else switch(argv[j])
    406         {
    407         case 0: /* default rendition */
    408             g->fg = CUCUL_COLOR_DEFAULT;
    409             g->bg = CUCUL_COLOR_DEFAULT;
    410             g->bold = g->negative = g->concealed = 0;
    411             break;
    412         case 1: /* bold or increased intensity */
    413             g->bold = 1;
    414             break;
    415         case 4: /* singly underlined */
    416             break;
    417         case 5: /* slowly blinking (less then 150 per minute) */
    418             break;
    419         case 7: /* negative image */
    420             g->negative = 1;
    421             break;
    422         case 8: /* concealed characters */
    423             g->concealed = 1;
    424             break;
    425         case 22: /* normal colour or normal intensity (neither bold nor faint) */
    426             g->bold = 0;
    427             break;
    428         case 28: /* revealed characters */
    429             g->concealed = 0;
    430             break;
    431         case 39: /* default display colour (implementation-defined) */
    432             g->fg = CUCUL_COLOR_DEFAULT;
    433             break;
    434         case 49: /* default background colour (implementation-defined) */
    435             g->bg = CUCUL_COLOR_DEFAULT;
    436             break;
    437         default:
    438             fprintf(stderr, "unknown sgr %i\n", argv[j]);
    439             break;
    440         }
    441     }
     395        {
     396            /* Defined in ECMA-48 8.3.117: SGR - SELECT GRAPHIC RENDITION */
     397            if(argv[j] >= 30 && argv[j] <= 37)
     398                g->fg = ansi2cucul[argv[j] - 30];
     399            else if(argv[j] >= 40 && argv[j] <= 47)
     400                g->bg = ansi2cucul[argv[j] - 40];
     401            else if(argv[j] >= 90 && argv[j] <= 97)
     402                g->fg = ansi2cucul[argv[j] - 90] + 8;
     403            else if(argv[j] >= 100 && argv[j] <= 107)
     404                g->bg = ansi2cucul[argv[j] - 100] + 8;
     405            else switch(argv[j])
     406                {
     407                case 0: /* default rendition */
     408                    g->fg = CUCUL_COLOR_DEFAULT;
     409                    g->bg = CUCUL_COLOR_DEFAULT;
     410                    g->bold = g->negative = g->concealed = 0;
     411                    break;
     412                case 1: /* bold or increased intensity */
     413                    g->bold = 1;
     414                    break;
     415                case 4: /* singly underlined */
     416                    break;
     417                case 5: /* slowly blinking (less then 150 per minute) */
     418                    break;
     419                case 7: /* negative image */
     420                    g->negative = 1;
     421                    break;
     422                case 8: /* concealed characters */
     423                    g->concealed = 1;
     424                    break;
     425                case 22: /* normal colour or normal intensity (neither bold nor faint) */
     426                    g->bold = 0;
     427                    break;
     428                case 28: /* revealed characters */
     429                    g->concealed = 0;
     430                    break;
     431                case 39: /* default display colour (implementation-defined) */
     432                    g->fg = CUCUL_COLOR_DEFAULT;
     433                    break;
     434                case 49: /* default background colour (implementation-defined) */
     435                    g->bg = CUCUL_COLOR_DEFAULT;
     436                    break;
     437                default:
     438                    fprintf(stderr, "unknown sgr %i\n", argv[j]);
     439                    break;
     440                }
     441        }
    442442
    443443    if(g->concealed)
    444     {
    445         myfg = mybg = CUCUL_COLOR_TRANSPARENT;
    446     }
     444        {
     445            myfg = mybg = CUCUL_COLOR_TRANSPARENT;
     446        }
    447447    else
    448     {
    449         myfg = g->negative ? g->bg : g->fg;
    450         mybg = g->negative ? g->fg : g->bg;
    451 
    452         if(g->bold)
    453         {
    454             if(myfg < 8)
    455                 myfg += 8;
    456             else if(myfg == CUCUL_COLOR_DEFAULT)
    457                 myfg = CUCUL_COLOR_WHITE;
    458         }
    459     }
     448        {
     449            myfg = g->negative ? g->bg : g->fg;
     450            mybg = g->negative ? g->fg : g->bg;
     451
     452            if(g->bold)
     453                {
     454                    if(myfg < 8)
     455                        myfg += 8;
     456                    else if(myfg == CUCUL_COLOR_DEFAULT)
     457                        myfg = CUCUL_COLOR_WHITE;
     458                }
     459        }
    460460
    461461    cucul_set_color(cv, myfg, mybg);
Note: See TracChangeset for help on using the changeset viewer.