Browse Source

* coding style fixes again

tags/v0.99.beta14
Jean-Yves Lamoureux jylam 19 years ago
parent
commit
758db0ca7b
2 changed files with 499 additions and 499 deletions
  1. +242
    -242
      caca/driver_gl.c
  2. +257
    -257
      cucul/import.c

+ 242
- 242
caca/driver_gl.c View File

@@ -163,116 +163,116 @@ static int gl_init_graphics(caca_display_t *dp)
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);


for(i = 32; i < 128; i++) for(i = 32; i < 128; i++)
{ {
glGenTextures(1, (GLuint*)&dp->drv.p->id[i - 32]); glGenTextures(1, (GLuint*)&dp->drv.p->id[i - 32]);
glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]); glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture); 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
} }


for(i = 0; i < 8; i++) for(i = 0; i < 8; i++)
{ {
glGenTextures(1, (GLuint*)&dp->drv.p->id_uni[i]); glGenTextures(1, (GLuint*)&dp->drv.p->id_uni[i]);
glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]); glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture); 16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
} }


for(i = 32; i < 128; i++) for(i = 32; i < 128; i++)
{ {
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);


glColor3f(1, 1, 1); glColor3f(1, 1, 1);
glRasterPos2f(0, 15); glRasterPos2f(0, 15);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i); glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i);


glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]); glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
0, dp->drv.p->height - 16, 16, 16, 0); 0, dp->drv.p->height - 16, 16, 16, 0);


#ifdef HAVE_GLUTCHECKLOOP #ifdef HAVE_GLUTCHECKLOOP
glutCheckLoop(); glutCheckLoop();
#else #else
glutMainLoopEvent(); glutMainLoopEvent();
#endif #endif
glutSwapBuffers(); glutSwapBuffers();


} }
/* CP437 hack */ /* CP437 hack */
for(i = 0; i < 8; i++) for(i = 0; i < 8; i++)
{ {
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 1); glColor3f(1, 1, 1);
glTranslatef(0.5,0.5,0); glTranslatef(0.5,0.5,0);

if(i==0) /* 0x00002580*/
if(i==0) /* 0x00002580*/ {
{ glBegin(GL_QUADS);
glBegin(GL_QUADS); glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7);
glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7); glEnd();
glEnd(); }
} else if(i==1) /* 0x00002584*/
else if(i==1) /* 0x00002584*/ {
{ glBegin(GL_QUADS);
glBegin(GL_QUADS); glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15);
glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15); glEnd();
glEnd(); }
} else if(i==2) /* 0x00002588*/
else if(i==2) /* 0x00002588*/ {
{ glBegin(GL_QUADS);
glBegin(GL_QUADS); glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15);
glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15); glEnd();
glEnd(); }
} else if(i==3) /* 0x0000258c*/
else if(i==3) /* 0x0000258c*/ {
{ glBegin(GL_QUADS);
glBegin(GL_QUADS); glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15);
glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15); glEnd();
glEnd(); }
} else if(i==4) /* 0x00002590*/
else if(i==4) /* 0x00002590*/
{
glBegin(GL_QUADS);
glVertex2f(4,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(4,15);
glEnd();
}
else if(i>=5) /* 0x00002591*/
{
int a, j, k = i-5;
for(j = dp->drv.p->font_height; j--; )
for(a = dp->drv.p->font_width; a--; )
{ {
if(((a + 2 * (j & 1)) & 3) > k) glBegin(GL_QUADS);
continue; glVertex2f(4,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(4,15);
glEnd();
}
else if(i>=5) /* 0x00002591*/
{
int a, j, k = i-5;
for(j = dp->drv.p->font_height; j--; )
for(a = dp->drv.p->font_width; a--; )
{
if(((a + 2 * (j & 1)) & 3) > k)
continue;


glBegin(GL_POINTS); glBegin(GL_POINTS);
glVertex2f(a, j); glVertex2f(a, j);
glEnd(); glEnd();
} }
} }






glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]); glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[i]);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
0, dp->drv.p->height - 16, 16, 16, 0); 0, dp->drv.p->height - 16, 16, 16, 0);
#ifdef HAVE_GLUTCHECKLOOP #ifdef HAVE_GLUTCHECKLOOP
glutCheckLoop(); glutCheckLoop();
#else #else
glutMainLoopEvent(); glutMainLoopEvent();
#endif #endif
glutSwapBuffers(); glutSwapBuffers();
glutPostRedisplay(); glutPostRedisplay();




} }






@@ -310,27 +310,27 @@ static void gl_display(caca_display_t *dp)


line = 0; line = 0;
for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height) for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
{
uint32_t *attr = dp->cv->attr + line * dp->cv->width;

for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
{ {
uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++); uint32_t *attr = dp->cv->attr + line * dp->cv->width;
glDisable(GL_TEXTURE_2D);
glColor3b(((bg & 0xf00) >> 8) * 8,
((bg & 0x0f0) >> 4) * 8,
(bg & 0x00f) * 8);
glBegin(GL_QUADS);
glVertex2f(x, y);
glVertex2f(x + dp->drv.p->font_width, y);
glVertex2f(x + dp->drv.p->font_width,
y + dp->drv.p->font_height);
glVertex2f(x, y + dp->drv.p->font_height);
glEnd();
}


line++; for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
} {
uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++);
glDisable(GL_TEXTURE_2D);
glColor3b(((bg & 0xf00) >> 8) * 8,
((bg & 0x0f0) >> 4) * 8,
(bg & 0x00f) * 8);
glBegin(GL_QUADS);
glVertex2f(x, y);
glVertex2f(x + dp->drv.p->font_width, y);
glVertex2f(x + dp->drv.p->font_width,
y + dp->drv.p->font_height);
glVertex2f(x, y + dp->drv.p->font_height);
glEnd();
}

line++;
}


/* 2nd pass, avoids changing render state too much */ /* 2nd pass, avoids changing render state too much */
glEnable(GL_BLEND); glEnable(GL_BLEND);
@@ -339,70 +339,70 @@ static void gl_display(caca_display_t *dp)


line = 0; line = 0;
for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height) for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
{
uint32_t *attr = dp->cv->attr + line * dp->cv->width;
uint32_t *chars = dp->cv->chars + line * dp->cv->width;

for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
{ {
uint32_t cv = *chars++; uint32_t *attr = dp->cv->attr + line * dp->cv->width;

uint32_t *chars = dp->cv->chars + line * dp->cv->width;
if(cv > 0x00000020 && cv < 0x00000080)
{
uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
glColor3b(((fg & 0xf00) >> 8) * 8,
((fg & 0x0f0) >> 4) * 8,
(fg & 0x00f) * 8);
glBegin(GL_QUADS);
glTexCoord2f(0, dp->drv.p->sh);
glVertex2f(x, y);
glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
glVertex2f(x + dp->drv.p->font_width, y);
glTexCoord2f(dp->drv.p->sw, 0);
glVertex2f(x + dp->drv.p->font_width,
y + dp->drv.p->font_height);
glTexCoord2f(0, 0);
glVertex2f(x, y + dp->drv.p->font_height);
glEnd();
}
else if(cv!=' ')
{
switch(cv)
{
case 0x00002580: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[0]); break;
case 0x00002584: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[1]); break;
case 0x00002588: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[2]); break;
case 0x0000258c: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[3]); break;
case 0x00002590: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[4]); break;
case 0x00002591: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[5]); break;
case 0x00002592: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[6]); break;
case 0x00002593: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[7]); break;
default: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id['?' - 32]); break;
}

uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
glColor3b(((fg & 0xf00) >> 8) * 8,
((fg & 0x0f0) >> 4) * 8,
(fg & 0x00f) * 8);
glBegin(GL_QUADS);
glTexCoord2f(0, dp->drv.p->sh);
glVertex2f(x, y);
glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
glVertex2f(x + dp->drv.p->font_width, y);
glTexCoord2f(dp->drv.p->sw, 0);
glVertex2f(x + dp->drv.p->font_width,
y + dp->drv.p->font_height);
glTexCoord2f(0, 0);
glVertex2f(x, y + dp->drv.p->font_height);
glEnd();

}


attr++; for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
{
uint32_t cv = *chars++;

if(cv > 0x00000020 && cv < 0x00000080)
{
uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
glColor3b(((fg & 0xf00) >> 8) * 8,
((fg & 0x0f0) >> 4) * 8,
(fg & 0x00f) * 8);
glBegin(GL_QUADS);
glTexCoord2f(0, dp->drv.p->sh);
glVertex2f(x, y);
glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
glVertex2f(x + dp->drv.p->font_width, y);
glTexCoord2f(dp->drv.p->sw, 0);
glVertex2f(x + dp->drv.p->font_width,
y + dp->drv.p->font_height);
glTexCoord2f(0, 0);
glVertex2f(x, y + dp->drv.p->font_height);
glEnd();
}
else if(cv!=' ')
{
switch(cv)
{
case 0x00002580: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[0]); break;
case 0x00002584: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[1]); break;
case 0x00002588: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[2]); break;
case 0x0000258c: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[3]); break;
case 0x00002590: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[4]); break;
case 0x00002591: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[5]); break;
case 0x00002592: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[6]); break;
case 0x00002593: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id_uni[7]); break;
default: glBindTexture(GL_TEXTURE_2D, dp->drv.p->id['?' - 32]); break;
}

uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
glColor3b(((fg & 0xf00) >> 8) * 8,
((fg & 0x0f0) >> 4) * 8,
(fg & 0x00f) * 8);
glBegin(GL_QUADS);
glTexCoord2f(0, dp->drv.p->sh);
glVertex2f(x, y);
glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
glVertex2f(x + dp->drv.p->font_width, y);
glTexCoord2f(dp->drv.p->sw, 0);
glVertex2f(x + dp->drv.p->font_width,
y + dp->drv.p->font_height);
glTexCoord2f(0, 0);
glVertex2f(x, y + dp->drv.p->font_height);
glEnd();

}

attr++;
}
line++;
} }
line++;
}
glDisable(GL_BLEND); glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);


@@ -439,88 +439,88 @@ static int gl_get_event(caca_display_t *dp, caca_event_t *ev)


#ifdef HAVE_GLUTCLOSEFUNC #ifdef HAVE_GLUTCLOSEFUNC
if(dp->drv.p->close) if(dp->drv.p->close)
{ {
dp->drv.p->close = 0; dp->drv.p->close = 0;
ev->type = CACA_EVENT_QUIT; ev->type = CACA_EVENT_QUIT;
return 1; return 1;
} }
#endif #endif


if(dp->resize.resized) if(dp->resize.resized)
{ {
ev->type = CACA_EVENT_RESIZE; ev->type = CACA_EVENT_RESIZE;
ev->data.resize.w = dp->cv->width; ev->data.resize.w = dp->cv->width;
ev->data.resize.h = dp->cv->height; ev->data.resize.h = dp->cv->height;
return 1; return 1;
} }


if(dp->drv.p->mouse_changed) if(dp->drv.p->mouse_changed)
{
ev->type = CACA_EVENT_MOUSE_MOTION;
ev->data.mouse.x = dp->mouse.x;
ev->data.mouse.y = dp->mouse.y;
dp->drv.p->mouse_changed = 0;

if(dp->drv.p->mouse_clicked)
{ {
_push_event(dp, ev); ev->type = CACA_EVENT_MOUSE_MOTION;
ev->type = CACA_EVENT_MOUSE_PRESS; ev->data.mouse.x = dp->mouse.x;
ev->data.mouse.button = dp->drv.p->mouse_button; ev->data.mouse.y = dp->mouse.y;
dp->drv.p->mouse_clicked = 0; dp->drv.p->mouse_changed = 0;
}


return 1; if(dp->drv.p->mouse_clicked)
} {
_push_event(dp, ev);
ev->type = CACA_EVENT_MOUSE_PRESS;
ev->data.mouse.button = dp->drv.p->mouse_button;
dp->drv.p->mouse_clicked = 0;
}

return 1;
}


if(dp->drv.p->key != 0) if(dp->drv.p->key != 0)
{ {
ev->type = CACA_EVENT_KEY_PRESS; ev->type = CACA_EVENT_KEY_PRESS;
ev->data.key.ch = dp->drv.p->key; ev->data.key.ch = dp->drv.p->key;
ev->data.key.ucs4 = (uint32_t)dp->drv.p->key; ev->data.key.ucs4 = (uint32_t)dp->drv.p->key;
ev->data.key.utf8[0] = dp->drv.p->key; ev->data.key.utf8[0] = dp->drv.p->key;
ev->data.key.utf8[1] = '\0'; ev->data.key.utf8[1] = '\0';
dp->drv.p->key = 0; dp->drv.p->key = 0;
return 1; return 1;
} }


if(dp->drv.p->special_key != 0) if(dp->drv.p->special_key != 0)
{
switch(dp->drv.p->special_key)
{ {
case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break; switch(dp->drv.p->special_key)
case GLUT_KEY_F2 : ev->data.key.ch = CACA_KEY_F2; break; {
case GLUT_KEY_F3 : ev->data.key.ch = CACA_KEY_F3; break; case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break;
case GLUT_KEY_F4 : ev->data.key.ch = CACA_KEY_F4; break; case GLUT_KEY_F2 : ev->data.key.ch = CACA_KEY_F2; break;
case GLUT_KEY_F5 : ev->data.key.ch = CACA_KEY_F5; break; case GLUT_KEY_F3 : ev->data.key.ch = CACA_KEY_F3; break;
case GLUT_KEY_F6 : ev->data.key.ch = CACA_KEY_F6; break; case GLUT_KEY_F4 : ev->data.key.ch = CACA_KEY_F4; break;
case GLUT_KEY_F7 : ev->data.key.ch = CACA_KEY_F7; break; case GLUT_KEY_F5 : ev->data.key.ch = CACA_KEY_F5; break;
case GLUT_KEY_F8 : ev->data.key.ch = CACA_KEY_F8; break; case GLUT_KEY_F6 : ev->data.key.ch = CACA_KEY_F6; break;
case GLUT_KEY_F9 : ev->data.key.ch = CACA_KEY_F9; break; case GLUT_KEY_F7 : ev->data.key.ch = CACA_KEY_F7; break;
case GLUT_KEY_F10: ev->data.key.ch = CACA_KEY_F10; break; case GLUT_KEY_F8 : ev->data.key.ch = CACA_KEY_F8; break;
case GLUT_KEY_F11: ev->data.key.ch = CACA_KEY_F11; break; case GLUT_KEY_F9 : ev->data.key.ch = CACA_KEY_F9; break;
case GLUT_KEY_F12: ev->data.key.ch = CACA_KEY_F12; break; case GLUT_KEY_F10: ev->data.key.ch = CACA_KEY_F10; break;
case GLUT_KEY_LEFT : ev->data.key.ch = CACA_KEY_LEFT; break; case GLUT_KEY_F11: ev->data.key.ch = CACA_KEY_F11; break;
case GLUT_KEY_RIGHT: ev->data.key.ch = CACA_KEY_RIGHT; break; case GLUT_KEY_F12: ev->data.key.ch = CACA_KEY_F12; break;
case GLUT_KEY_UP : ev->data.key.ch = CACA_KEY_UP; break; case GLUT_KEY_LEFT : ev->data.key.ch = CACA_KEY_LEFT; break;
case GLUT_KEY_DOWN : ev->data.key.ch = CACA_KEY_DOWN; break; case GLUT_KEY_RIGHT: ev->data.key.ch = CACA_KEY_RIGHT; break;
case GLUT_KEY_PAGE_UP : ev->data.key.ch = CACA_KEY_PAGEUP; break; case GLUT_KEY_UP : ev->data.key.ch = CACA_KEY_UP; break;
case GLUT_KEY_PAGE_DOWN : ev->data.key.ch = CACA_KEY_PAGEDOWN; case GLUT_KEY_DOWN : ev->data.key.ch = CACA_KEY_DOWN; break;
break; case GLUT_KEY_PAGE_UP : ev->data.key.ch = CACA_KEY_PAGEUP; break;
case GLUT_KEY_HOME : ev->data.key.ch = CACA_KEY_HOME; break; case GLUT_KEY_PAGE_DOWN : ev->data.key.ch = CACA_KEY_PAGEDOWN;
case GLUT_KEY_END : ev->data.key.ch = CACA_KEY_END; break; break;
case GLUT_KEY_INSERT : ev->data.key.ch = CACA_KEY_INSERT; break; case GLUT_KEY_HOME : ev->data.key.ch = CACA_KEY_HOME; break;

case GLUT_KEY_END : ev->data.key.ch = CACA_KEY_END; break;
default: ev->type = CACA_EVENT_NONE; return 0; case GLUT_KEY_INSERT : ev->data.key.ch = CACA_KEY_INSERT; break;

default: ev->type = CACA_EVENT_NONE; return 0;
}

ev->type = CACA_EVENT_KEY_PRESS;
ev->data.key.ucs4 = 0;
ev->data.key.utf8[0] = '\0';

dp->drv.p->special_key = 0;
return 1;
} }


ev->type = CACA_EVENT_KEY_PRESS;
ev->data.key.ucs4 = 0;
ev->data.key.utf8[0] = '\0';

dp->drv.p->special_key = 0;
return 1;
}

ev->type = CACA_EVENT_NONE; ev->type = CACA_EVENT_NONE;
return 0; return 0;
} }
@@ -557,15 +557,15 @@ static void gl_handle_reshape(int w, int h)
caca_display_t *dp = gl_d; caca_display_t *dp = gl_d;


if(dp->drv.p->bit) /* Do not handle reshaping at the first time */ if(dp->drv.p->bit) /* Do not handle reshaping at the first time */
{ {
dp->drv.p->new_width = w; dp->drv.p->new_width = w;
dp->drv.p->new_height = h; dp->drv.p->new_height = h;


dp->resize.w = w / dp->drv.p->font_width; dp->resize.w = w / dp->drv.p->font_width;
dp->resize.h = (h / dp->drv.p->font_height) + 1; dp->resize.h = (h / dp->drv.p->font_height) + 1;


dp->resize.resized = 1; dp->resize.resized = 1;
} }
else else
dp->drv.p->bit = 1; dp->drv.p->bit = 1;
} }


+ 257
- 257
cucul/import.c View File

@@ -75,24 +75,24 @@ cucul_canvas_t * cucul_import_canvas(cucul_buffer_t *buffer, char const *format)


/* Autodetection */ /* Autodetection */
if(!strcasecmp("", format)) if(!strcasecmp("", format))
{
unsigned int i=0;
/* if 4 first letters are CACA */
if(buffer->size >= 4 &&
buf[0] == 'C' && buf[1] == 'A' && buf[2] == 'C' && buf[3] != 'A')
return import_caca(buffer->data, buffer->size);

/* If we find ESC[ argv, we guess it's an ANSI file */
while(i < buffer->size - 1)
{ {
if((buf[i] == 0x1b) && (buf[i+1] == '[')) unsigned int i=0;
return import_ansi(buffer->data, buffer->size); /* if 4 first letters are CACA */
i++; if(buffer->size >= 4 &&
} buf[0] == 'C' && buf[1] == 'A' && buf[2] == 'C' && buf[3] != 'A')
return import_caca(buffer->data, buffer->size);

/* If we find ESC[ argv, we guess it's an ANSI file */
while(i < buffer->size - 1)
{
if((buf[i] == 0x1b) && (buf[i+1] == '['))
return import_ansi(buffer->data, buffer->size);
i++;
}


/* Otherwise, import it as text */ /* Otherwise, import it as text */
return import_text(buffer->data, buffer->size); return import_text(buffer->data, buffer->size);
} }
return NULL; return NULL;
} }


@@ -108,13 +108,13 @@ cucul_canvas_t * cucul_import_canvas(cucul_buffer_t *buffer, char const *format)
char const * const * cucul_get_import_list(void) char const * const * cucul_get_import_list(void)
{ {
static char const * const list[] = static char const * const list[] =
{ {
"", "autodetect", "", "autodetect",
"text", "plain text", "text", "plain text",
"caca", "native libcaca format", "caca", "native libcaca format",
"ansi", "ANSI coloured text", "ansi", "ANSI coloured text",
NULL, NULL NULL, NULL
}; };


return list; return list;
} }
@@ -139,9 +139,9 @@ static cucul_canvas_t *import_caca(void const *data, unsigned int size)
return NULL; return NULL;


width = ((uint32_t)buf[8] << 24) | ((uint32_t)buf[9] << 16) width = ((uint32_t)buf[8] << 24) | ((uint32_t)buf[9] << 16)
| ((uint32_t)buf[10] << 8) | (uint32_t)buf[11]; | ((uint32_t)buf[10] << 8) | (uint32_t)buf[11];
height = ((uint32_t)buf[12] << 24) | ((uint32_t)buf[13] << 16) height = ((uint32_t)buf[12] << 24) | ((uint32_t)buf[13] << 16)
| ((uint32_t)buf[14] << 8) | (uint32_t)buf[15]; | ((uint32_t)buf[14] << 8) | (uint32_t)buf[15];


if(!width || !height) if(!width || !height)
return NULL; return NULL;
@@ -155,16 +155,16 @@ static cucul_canvas_t *import_caca(void const *data, unsigned int size)
return NULL; return NULL;


for(n = height * width; n--; ) for(n = height * width; n--; )
{ {
cv->chars[n] = ((uint32_t)buf[16 + 0 + 8 * n] << 24) cv->chars[n] = ((uint32_t)buf[16 + 0 + 8 * n] << 24)
| ((uint32_t)buf[16 + 1 + 8 * n] << 16) | ((uint32_t)buf[16 + 1 + 8 * n] << 16)
| ((uint32_t)buf[16 + 2 + 8 * n] << 8) | ((uint32_t)buf[16 + 2 + 8 * n] << 8)
| (uint32_t)buf[16 + 3 + 8 * n]; | (uint32_t)buf[16 + 3 + 8 * n];
cv->attr[n] = ((uint32_t)buf[16 + 4 + 8 * n] << 24) cv->attr[n] = ((uint32_t)buf[16 + 4 + 8 * n] << 24)
| ((uint32_t)buf[16 + 5 + 8 * n] << 16) | ((uint32_t)buf[16 + 5 + 8 * n] << 16)
| ((uint32_t)buf[16 + 6 + 8 * n] << 8) | ((uint32_t)buf[16 + 6 + 8 * n] << 8)
| (uint32_t)buf[16 + 7 + 8 * n]; | (uint32_t)buf[16 + 7 + 8 * n];
} }


return cv; return cv;
} }
@@ -179,33 +179,33 @@ static cucul_canvas_t *import_text(void const *data, unsigned int size)
cucul_set_color(cv, CUCUL_COLOR_DEFAULT, CUCUL_COLOR_TRANSPARENT); cucul_set_color(cv, CUCUL_COLOR_DEFAULT, CUCUL_COLOR_TRANSPARENT);


for(i = 0; i < size; i++) for(i = 0; i < size; i++)
{ {
unsigned char ch = *text++; unsigned char ch = *text++;


if(ch == '\r') if(ch == '\r')
continue; continue;


if(ch == '\n') if(ch == '\n')
{ {
x = 0; x = 0;
y++; y++;
continue; continue;
} }


if(x >= width || y >= height) if(x >= width || y >= height)
{ {
if(x >= width) if(x >= width)
width = x + 1; width = x + 1;


if(y >= height) if(y >= height)
height = y + 1; height = y + 1;


cucul_set_canvas_size(cv, width, height); cucul_set_canvas_size(cv, width, height);
} }


cucul_putchar(cv, x, y, ch); cucul_putchar(cv, x, y, ch);
x++; x++;
} }


return cv; return cv;
} }
@@ -223,155 +223,155 @@ static cucul_canvas_t *import_ansi(void const *data, unsigned int size)
ansi_parse_grcm(cv, &grcm, 1, &dummy); ansi_parse_grcm(cv, &grcm, 1, &dummy);


for(i = 0; i < size; i += skip) for(i = 0; i < size; i += skip)
{
skip = 1;

/* Wrap long lines */
if((unsigned int)x >= width)
{ {
x = 0; skip = 1;
y++;
}

if(buffer[i] == '\x1a' && size - i >= 8
&& !memcmp(buffer + i + 1, "SAUCE00", 7))
break; /* End before SAUCE data */


if(buffer[i] == '\r') /* Wrap long lines */
continue; /* DOS sucks */ if((unsigned int)x >= width)

{
if(buffer[i] == '\n') x = 0;
{ y++;
x = 0; }
y++;
continue;
}

/* Interpret escape commands, as per Standard ECMA-48 "Control
* Functions for Coded Character Sets", 5.4. Control sequences. */
if(buffer[i] == '\x1b' && buffer[i + 1] == '[')
{
unsigned int argc = 0, argv[101];
unsigned int param, inter, final;

/* Compute offsets to parameter bytes, intermediate bytes and
* to the final byte. Only the final byte is mandatory, there
* can be zero of the others.
* 0 param=2 inter final final+1
* +-----+------------------+---------------------+-----------------+
* | CSI | parameter bytes | intermediate bytes | final byte |
* | | 0x30 - 0x3f | 0x20 - 0x2f | 0x40 - 0x7e |
* | ^[[ | 0123456789:;<=>? | SPC !"#$%&'()*+,-./ | azAZ@[\]^_`{|}~ |
* +-----+------------------+---------------------+-----------------+
*/
param = 2;

for(inter = param; i + inter < size; inter++)
if(buffer[i + inter] < 0x30 || buffer[i + inter] > 0x3f)
break;

for(final = inter; i + final < size; final++)
if(buffer[i + final] < 0x20 || buffer[i + final] > 0x2f)
break;


if(buffer[i + final] < 0x40 || buffer[i + final] > 0x7e) if(buffer[i] == '\x1a' && size - i >= 8
break; /* Invalid Final Byte */ && !memcmp(buffer + i + 1, "SAUCE00", 7))
break; /* End before SAUCE data */


skip += final; if(buffer[i] == '\r')
continue; /* DOS sucks */


/* Sanity checks */ if(buffer[i] == '\n')
if(param < inter && buffer[i + param] >= 0x3c) {
{ x = 0;
fprintf(stderr, "private sequence \"^[[%.*s\"\n", y++;
final - param + 1, buffer + i + param); continue;
continue; /* Private sequence, skip it entirely */ }
}


if(final - param > 100) /* Interpret escape commands, as per Standard ECMA-48 "Control
continue; /* Suspiciously long sequence, skip it */ * Functions for Coded Character Sets", 5.4. Control sequences. */
if(buffer[i] == '\x1b' && buffer[i + 1] == '[')
{
unsigned int argc = 0, argv[101];
unsigned int param, inter, final;

/* Compute offsets to parameter bytes, intermediate bytes and
* to the final byte. Only the final byte is mandatory, there
* can be zero of the others.
* 0 param=2 inter final final+1
* +-----+------------------+---------------------+-----------------+
* | CSI | parameter bytes | intermediate bytes | final byte |
* | | 0x30 - 0x3f | 0x20 - 0x2f | 0x40 - 0x7e |
* | ^[[ | 0123456789:;<=>? | SPC !"#$%&'()*+,-./ | azAZ@[\]^_`{|}~ |
* +-----+------------------+---------------------+-----------------+
*/
param = 2;

for(inter = param; i + inter < size; inter++)
if(buffer[i + inter] < 0x30 || buffer[i + inter] > 0x3f)
break;

for(final = inter; i + final < size; final++)
if(buffer[i + final] < 0x20 || buffer[i + final] > 0x2f)
break;

if(buffer[i + final] < 0x40 || buffer[i + final] > 0x7e)
break; /* Invalid Final Byte */

skip += final;

/* Sanity checks */
if(param < inter && buffer[i + param] >= 0x3c)
{
fprintf(stderr, "private sequence \"^[[%.*s\"\n",
final - param + 1, buffer + i + param);
continue; /* Private sequence, skip it entirely */
}

if(final - param > 100)
continue; /* Suspiciously long sequence, skip it */

/* Parse parameter bytes as per ECMA-48 5.4.2: Parameter string
* format */
if(param < inter)
{
argv[0] = 0;
for(j = param; j < inter; j++)
{
if(buffer[i + j] == ';')
argv[++argc] = 0;
else if(buffer[i + j] >= '0' && buffer[i + j] <= '9')
argv[argc] = 10 * argv[argc] + (buffer[i + j] - '0');
}
argc++;
}

/* Interpret final byte. The code representations are given in
* ECMA-48 5.4: Control sequences, and the code definitions are
* given in ECMA-48 8.3: Definition of control functions. */
switch(buffer[i + final])
{
case 'f': /* CUP - Cursor Position */
case 'H': /* HVP - Character And Line Position */
x = (argc > 1) ? argv[1] - 1 : 0;
y = (argc > 0) ? argv[0] - 1 : 0;
break;
case 'A': /* CUU - Cursor Up */
y -= argc ? argv[0] : 1;
if(y < 0)
y = 0;
break;
case 'B': /* CUD - Cursor Down */
y += argc ? argv[0] : 1;
break;
case 'C': /* CUF - Cursor Right */
x += argc ? argv[0] : 1;
break;
case 'D': /* CUB - Cursor Left */
x -= argc ? argv[0] : 1;
if(x < 0)
x = 0;
break;
case 's': /* Private (save cursor position) */
save_x = x;
save_y = y;
break;
case 'u': /* Private (reload cursor positin) */
x = save_x;
y = save_y;
break;
case 'J': /* ED - Erase In Page */
if(argv[0] == 2)
x = y = 0;
break;
case 'K': /* EL - Erase In Line */
for(j = x; j < width; j++)
_cucul_putchar32(cv, j, y, (uint32_t)' ');
x = width;
break;
case 'm': /* SGR - Select Graphic Rendition */
ansi_parse_grcm(cv, &grcm, argc, argv);
break;
default:
fprintf(stderr, "unknown command %c\n", buffer[i + final]);
break;
}

continue;
}


/* Parse parameter bytes as per ECMA-48 5.4.2: Parameter string /* We're going to paste a character. First make sure the canvas
* format */ * is big enough. */
if(param < inter) if((unsigned int)y >= height)
{
argv[0] = 0;
for(j = param; j < inter; j++)
{ {
if(buffer[i + j] == ';') height = y + 1;
argv[++argc] = 0; cucul_set_canvas_size(cv, width, height);
else if(buffer[i + j] >= '0' && buffer[i + j] <= '9')
argv[argc] = 10 * argv[argc] + (buffer[i + j] - '0');
} }
argc++;
}

/* Interpret final byte. The code representations are given in
* ECMA-48 5.4: Control sequences, and the code definitions are
* given in ECMA-48 8.3: Definition of control functions. */
switch(buffer[i + final])
{
case 'f': /* CUP - Cursor Position */
case 'H': /* HVP - Character And Line Position */
x = (argc > 1) ? argv[1] - 1 : 0;
y = (argc > 0) ? argv[0] - 1 : 0;
break;
case 'A': /* CUU - Cursor Up */
y -= argc ? argv[0] : 1;
if(y < 0)
y = 0;
break;
case 'B': /* CUD - Cursor Down */
y += argc ? argv[0] : 1;
break;
case 'C': /* CUF - Cursor Right */
x += argc ? argv[0] : 1;
break;
case 'D': /* CUB - Cursor Left */
x -= argc ? argv[0] : 1;
if(x < 0)
x = 0;
break;
case 's': /* Private (save cursor position) */
save_x = x;
save_y = y;
break;
case 'u': /* Private (reload cursor positin) */
x = save_x;
y = save_y;
break;
case 'J': /* ED - Erase In Page */
if(argv[0] == 2)
x = y = 0;
break;
case 'K': /* EL - Erase In Line */
for(j = x; j < width; j++)
_cucul_putchar32(cv, j, y, (uint32_t)' ');
x = width;
break;
case 'm': /* SGR - Select Graphic Rendition */
ansi_parse_grcm(cv, &grcm, argc, argv);
break;
default:
fprintf(stderr, "unknown command %c\n", buffer[i + final]);
break;
}

continue;
}


/* We're going to paste a character. First make sure the canvas /* Now paste our character */
* is big enough. */ _cucul_putchar32(cv, x, y, _cucul_cp437_to_utf32(buffer[i]));
if((unsigned int)y >= height) x++;
{
height = y + 1;
cucul_set_canvas_size(cv, width, height);
} }


/* Now paste our character */
_cucul_putchar32(cv, x, y, _cucul_cp437_to_utf32(buffer[i]));
x++;
}

return cv; return cv;
} }


@@ -381,82 +381,82 @@ static void ansi_parse_grcm(cucul_canvas_t *cv, struct ansi_grcm *g,
unsigned int argc, unsigned int const *argv) unsigned int argc, unsigned int const *argv)
{ {
static uint8_t const ansi2cucul[] = static uint8_t const ansi2cucul[] =
{ {
CUCUL_COLOR_BLACK, CUCUL_COLOR_RED, CUCUL_COLOR_BLACK, CUCUL_COLOR_RED,
CUCUL_COLOR_GREEN, CUCUL_COLOR_BROWN, CUCUL_COLOR_GREEN, CUCUL_COLOR_BROWN,
CUCUL_COLOR_BLUE, CUCUL_COLOR_MAGENTA, CUCUL_COLOR_BLUE, CUCUL_COLOR_MAGENTA,
CUCUL_COLOR_CYAN, CUCUL_COLOR_LIGHTGRAY CUCUL_COLOR_CYAN, CUCUL_COLOR_LIGHTGRAY
}; };


unsigned int j; unsigned int j;
uint8_t myfg, mybg; uint8_t myfg, mybg;


for(j = 0; j < argc; j++) for(j = 0; j < argc; j++)
{
/* Defined in ECMA-48 8.3.117: SGR - SELECT GRAPHIC RENDITION */
if(argv[j] >= 30 && argv[j] <= 37)
g->fg = ansi2cucul[argv[j] - 30];
else if(argv[j] >= 40 && argv[j] <= 47)
g->bg = ansi2cucul[argv[j] - 40];
else if(argv[j] >= 90 && argv[j] <= 97)
g->fg = ansi2cucul[argv[j] - 90] + 8;
else if(argv[j] >= 100 && argv[j] <= 107)
g->bg = ansi2cucul[argv[j] - 100] + 8;
else switch(argv[j])
{ {
case 0: /* default rendition */ /* Defined in ECMA-48 8.3.117: SGR - SELECT GRAPHIC RENDITION */
g->fg = CUCUL_COLOR_DEFAULT; if(argv[j] >= 30 && argv[j] <= 37)
g->bg = CUCUL_COLOR_DEFAULT; g->fg = ansi2cucul[argv[j] - 30];
g->bold = g->negative = g->concealed = 0; else if(argv[j] >= 40 && argv[j] <= 47)
break; g->bg = ansi2cucul[argv[j] - 40];
case 1: /* bold or increased intensity */ else if(argv[j] >= 90 && argv[j] <= 97)
g->bold = 1; g->fg = ansi2cucul[argv[j] - 90] + 8;
break; else if(argv[j] >= 100 && argv[j] <= 107)
case 4: /* singly underlined */ g->bg = ansi2cucul[argv[j] - 100] + 8;
break; else switch(argv[j])
case 5: /* slowly blinking (less then 150 per minute) */ {
break; case 0: /* default rendition */
case 7: /* negative image */ g->fg = CUCUL_COLOR_DEFAULT;
g->negative = 1; g->bg = CUCUL_COLOR_DEFAULT;
break; g->bold = g->negative = g->concealed = 0;
case 8: /* concealed characters */ break;
g->concealed = 1; case 1: /* bold or increased intensity */
break; g->bold = 1;
case 22: /* normal colour or normal intensity (neither bold nor faint) */ break;
g->bold = 0; case 4: /* singly underlined */
break; break;
case 28: /* revealed characters */ case 5: /* slowly blinking (less then 150 per minute) */
g->concealed = 0; break;
break; case 7: /* negative image */
case 39: /* default display colour (implementation-defined) */ g->negative = 1;
g->fg = CUCUL_COLOR_DEFAULT; break;
break; case 8: /* concealed characters */
case 49: /* default background colour (implementation-defined) */ g->concealed = 1;
g->bg = CUCUL_COLOR_DEFAULT; break;
break; case 22: /* normal colour or normal intensity (neither bold nor faint) */
default: g->bold = 0;
fprintf(stderr, "unknown sgr %i\n", argv[j]); break;
break; case 28: /* revealed characters */
g->concealed = 0;
break;
case 39: /* default display colour (implementation-defined) */
g->fg = CUCUL_COLOR_DEFAULT;
break;
case 49: /* default background colour (implementation-defined) */
g->bg = CUCUL_COLOR_DEFAULT;
break;
default:
fprintf(stderr, "unknown sgr %i\n", argv[j]);
break;
}
} }
}


if(g->concealed) if(g->concealed)
{ {
myfg = mybg = CUCUL_COLOR_TRANSPARENT; myfg = mybg = CUCUL_COLOR_TRANSPARENT;
} }
else else
{
myfg = g->negative ? g->bg : g->fg;
mybg = g->negative ? g->fg : g->bg;

if(g->bold)
{ {
if(myfg < 8) myfg = g->negative ? g->bg : g->fg;
myfg += 8; mybg = g->negative ? g->fg : g->bg;
else if(myfg == CUCUL_COLOR_DEFAULT) if(g->bold)
myfg = CUCUL_COLOR_WHITE; {
if(myfg < 8)
myfg += 8;
else if(myfg == CUCUL_COLOR_DEFAULT)
myfg = CUCUL_COLOR_WHITE;
}
} }
}


cucul_set_color(cv, myfg, mybg); cucul_set_color(cv, myfg, mybg);
} }


||||||
x
 
000:0
Loading…
Cancel
Save