Przeglądaj źródła

* coding style fixes again

tags/v0.99.beta14
Jean-Yves Lamoureux jylam 18 lat temu
rodzic
commit
758db0ca7b
2 zmienionych plików z 499 dodań i 499 usunięć
  1. +242
    -242
      caca/driver_gl.c
  2. +257
    -257
      cucul/import.c

+ 242
- 242
caca/driver_gl.c Wyświetl plik

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

for(i = 32; i < 128; i++)
{
glGenTextures(1, (GLuint*)&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_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
}
{
glGenTextures(1, (GLuint*)&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_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
}

for(i = 0; i < 8; i++)
{
glGenTextures(1, (GLuint*)&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_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
}
{
glGenTextures(1, (GLuint*)&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_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty_texture);
}

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

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

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

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

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

if(i==0) /* 0x00002580*/
{
glBegin(GL_QUADS);
glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7);
glEnd();
}
else if(i==1) /* 0x00002584*/
{
glBegin(GL_QUADS);
glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15);
glEnd();
}
else if(i==2) /* 0x00002588*/
{
glBegin(GL_QUADS);
glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15);
glEnd();
}
else if(i==3) /* 0x0000258c*/
{
glBegin(GL_QUADS);
glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15);
glEnd();
}
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--; )
{
glDisable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 1);
glTranslatef(0.5,0.5,0);

if(i==0) /* 0x00002580*/
{
glBegin(GL_QUADS);
glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,7); glVertex2f(0,7);
glEnd();
}
else if(i==1) /* 0x00002584*/
{
glBegin(GL_QUADS);
glVertex2f(0,7); glVertex2f(9,7); glVertex2f(9,15); glVertex2f(0,15);
glEnd();
}
else if(i==2) /* 0x00002588*/
{
glBegin(GL_QUADS);
glVertex2f(0,0); glVertex2f(9,0); glVertex2f(9,15); glVertex2f(0,15);
glEnd();
}
else if(i==3) /* 0x0000258c*/
{
glBegin(GL_QUADS);
glVertex2f(0,0); glVertex2f(4,0); glVertex2f(4,15); glVertex2f(0,15);
glEnd();
}
else if(i==4) /* 0x00002590*/
{
if(((a + 2 * (j & 1)) & 3) > k)
continue;
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)
continue;

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



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


}
}



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

line = 0;
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++);
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();
}
uint32_t *attr = dp->cv->attr + line * dp->cv->width;

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 */
glEnable(GL_BLEND);
@@ -339,70 +339,70 @@ static void gl_display(caca_display_t *dp)

line = 0;
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++;

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();

}
uint32_t *attr = dp->cv->attr + line * dp->cv->width;
uint32_t *chars = dp->cv->chars + line * dp->cv->width;

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_TEXTURE_2D);

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

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

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

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_PRESS;
ev->data.mouse.button = dp->drv.p->mouse_button;
dp->drv.p->mouse_clicked = 0;
}
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;

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)
{
ev->type = CACA_EVENT_KEY_PRESS;
ev->data.key.ch = 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[1] = '\0';
dp->drv.p->key = 0;
return 1;
}
{
ev->type = CACA_EVENT_KEY_PRESS;
ev->data.key.ch = 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[1] = '\0';
dp->drv.p->key = 0;
return 1;
}

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;
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_F4 : ev->data.key.ch = CACA_KEY_F4; break;
case GLUT_KEY_F5 : ev->data.key.ch = CACA_KEY_F5; break;
case GLUT_KEY_F6 : ev->data.key.ch = CACA_KEY_F6; break;
case GLUT_KEY_F7 : ev->data.key.ch = CACA_KEY_F7; break;
case GLUT_KEY_F8 : ev->data.key.ch = CACA_KEY_F8; break;
case GLUT_KEY_F9 : ev->data.key.ch = CACA_KEY_F9; break;
case GLUT_KEY_F10: ev->data.key.ch = CACA_KEY_F10; break;
case GLUT_KEY_F11: ev->data.key.ch = CACA_KEY_F11; break;
case GLUT_KEY_F12: ev->data.key.ch = CACA_KEY_F12; break;
case GLUT_KEY_LEFT : ev->data.key.ch = CACA_KEY_LEFT; break;
case GLUT_KEY_RIGHT: ev->data.key.ch = CACA_KEY_RIGHT; break;
case GLUT_KEY_UP : ev->data.key.ch = CACA_KEY_UP; break;
case GLUT_KEY_DOWN : ev->data.key.ch = CACA_KEY_DOWN; break;
case GLUT_KEY_PAGE_UP : ev->data.key.ch = CACA_KEY_PAGEUP; break;
case GLUT_KEY_PAGE_DOWN : ev->data.key.ch = CACA_KEY_PAGEDOWN;
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;
case GLUT_KEY_INSERT : ev->data.key.ch = CACA_KEY_INSERT; break;

default: ev->type = CACA_EVENT_NONE; return 0;
switch(dp->drv.p->special_key)
{
case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break;
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_F4 : ev->data.key.ch = CACA_KEY_F4; break;
case GLUT_KEY_F5 : ev->data.key.ch = CACA_KEY_F5; break;
case GLUT_KEY_F6 : ev->data.key.ch = CACA_KEY_F6; break;
case GLUT_KEY_F7 : ev->data.key.ch = CACA_KEY_F7; break;
case GLUT_KEY_F8 : ev->data.key.ch = CACA_KEY_F8; break;
case GLUT_KEY_F9 : ev->data.key.ch = CACA_KEY_F9; break;
case GLUT_KEY_F10: ev->data.key.ch = CACA_KEY_F10; break;
case GLUT_KEY_F11: ev->data.key.ch = CACA_KEY_F11; break;
case GLUT_KEY_F12: ev->data.key.ch = CACA_KEY_F12; break;
case GLUT_KEY_LEFT : ev->data.key.ch = CACA_KEY_LEFT; break;
case GLUT_KEY_RIGHT: ev->data.key.ch = CACA_KEY_RIGHT; break;
case GLUT_KEY_UP : ev->data.key.ch = CACA_KEY_UP; break;
case GLUT_KEY_DOWN : ev->data.key.ch = CACA_KEY_DOWN; break;
case GLUT_KEY_PAGE_UP : ev->data.key.ch = CACA_KEY_PAGEUP; break;
case GLUT_KEY_PAGE_DOWN : ev->data.key.ch = CACA_KEY_PAGEDOWN;
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;
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;
return 0;
}
@@ -557,15 +557,15 @@ static void gl_handle_reshape(int w, int h)
caca_display_t *dp = gl_d;

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

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

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


+ 257
- 257
cucul/import.c Wyświetl plik

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

/* Autodetection */
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] == '['))
return import_ansi(buffer->data, buffer->size);
i++;
}
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] == '['))
return import_ansi(buffer->data, buffer->size);
i++;
}

/* Otherwise, import it as text */
return import_text(buffer->data, buffer->size);
}
/* Otherwise, import it as text */
return import_text(buffer->data, buffer->size);
}
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)
{
static char const * const list[] =
{
"", "autodetect",
"text", "plain text",
"caca", "native libcaca format",
"ansi", "ANSI coloured text",
NULL, NULL
};
{
"", "autodetect",
"text", "plain text",
"caca", "native libcaca format",
"ansi", "ANSI coloured text",
NULL, NULL
};

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

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)
| ((uint32_t)buf[14] << 8) | (uint32_t)buf[15];
| ((uint32_t)buf[14] << 8) | (uint32_t)buf[15];

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

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

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);

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

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

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

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

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

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

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

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);

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

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

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

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

if(buffer[i] == '\n')
{
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;
/* Wrap long lines */
if((unsigned int)x >= width)
{
x = 0;
y++;
}

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

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

/* 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(buffer[i] == '\n')
{
x = 0;
y++;
continue;
}

if(final - param > 100)
continue; /* Suspiciously long sequence, skip it */
/* 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)
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
* format */
if(param < inter)
{
argv[0] = 0;
for(j = param; j < inter; j++)
/* We're going to paste a character. First make sure the canvas
* is big enough. */
if((unsigned int)y >= height)
{
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');
height = y + 1;
cucul_set_canvas_size(cv, width, height);
}
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
* is big enough. */
if((unsigned int)y >= height)
{
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++;
}

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

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)
{
static uint8_t const ansi2cucul[] =
{
CUCUL_COLOR_BLACK, CUCUL_COLOR_RED,
CUCUL_COLOR_GREEN, CUCUL_COLOR_BROWN,
CUCUL_COLOR_BLUE, CUCUL_COLOR_MAGENTA,
CUCUL_COLOR_CYAN, CUCUL_COLOR_LIGHTGRAY
};
{
CUCUL_COLOR_BLACK, CUCUL_COLOR_RED,
CUCUL_COLOR_GREEN, CUCUL_COLOR_BROWN,
CUCUL_COLOR_BLUE, CUCUL_COLOR_MAGENTA,
CUCUL_COLOR_CYAN, CUCUL_COLOR_LIGHTGRAY
};

unsigned int j;
uint8_t myfg, mybg;

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 */
g->fg = CUCUL_COLOR_DEFAULT;
g->bg = CUCUL_COLOR_DEFAULT;
g->bold = g->negative = g->concealed = 0;
break;
case 1: /* bold or increased intensity */
g->bold = 1;
break;
case 4: /* singly underlined */
break;
case 5: /* slowly blinking (less then 150 per minute) */
break;
case 7: /* negative image */
g->negative = 1;
break;
case 8: /* concealed characters */
g->concealed = 1;
break;
case 22: /* normal colour or normal intensity (neither bold nor faint) */
g->bold = 0;
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;
/* 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 */
g->fg = CUCUL_COLOR_DEFAULT;
g->bg = CUCUL_COLOR_DEFAULT;
g->bold = g->negative = g->concealed = 0;
break;
case 1: /* bold or increased intensity */
g->bold = 1;
break;
case 4: /* singly underlined */
break;
case 5: /* slowly blinking (less then 150 per minute) */
break;
case 7: /* negative image */
g->negative = 1;
break;
case 8: /* concealed characters */
g->concealed = 1;
break;
case 22: /* normal colour or normal intensity (neither bold nor faint) */
g->bold = 0;
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)
{
myfg = mybg = CUCUL_COLOR_TRANSPARENT;
}
{
myfg = mybg = CUCUL_COLOR_TRANSPARENT;
}
else
{
myfg = g->negative ? g->bg : g->fg;
mybg = g->negative ? g->fg : g->bg;

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

if(g->bold)
{
if(myfg < 8)
myfg += 8;
else if(myfg == CUCUL_COLOR_DEFAULT)
myfg = CUCUL_COLOR_WHITE;
}
}
}

cucul_set_color(cv, myfg, mybg);
}


Ładowanie…
Anuluj
Zapisz