1 /* display.c -- display management stuff
3 * hackbard@hackdaworld.dyndns.org
9 int display_init(t_display *display) {
14 if(ioctl(1,TIOCGWINSZ,&ws)==-1) {
15 perror("[display] ioctl call");
18 display->max_x=ws.ws_col;
19 display->max_y=ws.ws_row;
21 printf("[display] initializing display, width: %02d / height: %02d ...\n",
24 /* allocating 'screen' buffer */
25 if((display->screen=(unsigned char *)malloc(display->max_x*display->max_y))
27 perror("[display] malloc call");
30 /* space as display pixel default */
31 memset(display->screen,0x20,display->max_x*display->max_y);
36 int display_draw(t_display *display) {
40 for(y=0;y<display->max_y;y++) {
41 for(x=0;x<display->max_x;x++)
42 printf("%c",*(display->screen+y*display->max_x+x));
49 int display_draw_until_line(t_display *display,int line) {
54 for(x=0;x<display->max_x;x++)
55 printf("%c",*(display->screen+y*display->max_x+x));
62 int display_clear_screen(t_display *display) {
64 memset(display->screen,0x20,display->max_x*display->max_y);
69 int display_shutdown(t_display *display) {
71 free(display->screen);
73 puts("[display] shutdown");
78 int display_line(t_display *display,int X,int Y,int X_,int Y_,char sym) {
85 for(y=0;y<display->max_y;y++)
86 for(x=0;x<display->max_x;x++)
87 if((int)((x-X)*m+Y)==y) *(display->screen+y*display->max_x+x)=sym;
92 int display_string(t_display *display,int x,int y,char *string,int len) {
94 if(len>display->max_x-x) return D_INV_STRING_LEN;
96 memcpy(display->screen+y*display->max_x+x,string,len);
101 int display_string_vert(t_display *display,int x,int y,char *string,int len) {
105 if(len>display->max_y-y) return D_INV_STRING_LEN;
106 for(i=y*display->max_x+x;i<(y+len)*display->max_x+x;i+=display->max_x)
107 *(display->screen+i)=*(string++);