X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Fivac.git;a=blobdiff_plain;f=src%2Fdisplay.c;fp=src%2Fdisplay.c;h=c46c11c9aeff52ad5530d68e3d5e732bea9e08cc;hp=afb2a574a0db594eff724f8e604d9d031b5e3a6b;hb=050a55681aaf01024a475eb4e68880040af758bd;hpb=3830fbef8513acf7689afa26c5dfeca68ba4900c diff --git a/src/display.c b/src/display.c index afb2a57..c46c11c 100644 --- a/src/display.c +++ b/src/display.c @@ -8,11 +8,18 @@ int display_init(t_display *display) { - puts("[display] initializing display ..."); + struct winsize ws; /* dimensions */ - display->max_x=atoi(getenv("COLUMNS")); - display->max_y=atoi(getenv("LINES")); + if(ioctl(1,TIOCGWINSZ,&ws)==-1) { + perror("[display] ioctl call"); + return D_ERROR; + } + display->max_x=ws.ws_col; + display->max_y=ws.ws_row; + + printf("[display] initializing display, width: %02d / height: %02d ...\n", + ws.ws_col,ws.ws_row); /* allocating 'screen' buffer */ if((display->screen=(unsigned char *)malloc(display->max_x*display->max_y)) @@ -32,7 +39,7 @@ int display_draw(t_display *display) { for(y=0;ymax_y;y++) { for(x=0;xmax_x;x++) - printf("%c",display->screen+y*display->max_x+x); + printf("%c",*(display->screen+y*display->max_x+x)); printf("\n"); } @@ -43,9 +50,10 @@ int display_draw_until_line(t_display *display,int line) { int x,y; - for(x=0;xmax_x;x++) { - for(y=0;yscreen+y*display->max_x+x); - printf("\n"); + for(y=0;ymax_x;x++) + printf("%c",*(display->screen+y*display->max_x+x)); + printf("\n"); } return D_SUCCESS; @@ -53,7 +61,7 @@ int display_draw_until_line(t_display *display,int line) { int display_clear_screen(t_display *display) { - memcpy(display->screen,0x20,display->max_x*display->max_y); + memset(display->screen,0x20,display->max_x*display->max_y); return D_SUCCESS; } @@ -76,7 +84,7 @@ int display_line(t_display *display,int X,int Y,int X_,int Y_,char sym) { for(y=0;ymax_y;y++) for(x=0;xmax_x;x++) - if((int)((x-X)*m+Y)==y) display->screen+y*display->max_x+x=sym; + if((int)((x-X)*m+Y)==y) *(display->screen+y*display->max_x+x)=sym; return D_SUCCESS; } @@ -92,8 +100,9 @@ int display_string(t_display *display,int x,int y,char *string,int len) { int display_string_vert(t_display *display,int x,int y,char *string,int len) { - if(len>display->max_y-y) return D_INV_STRING_LEN; + int i; + if(len>display->max_y-y) return D_INV_STRING_LEN; for(i=y*display->max_x+x;i<(y+len)*display->max_x+x;i+=display->max_x) *(display->screen+i)=*(string++);