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))
for(y=0;y<display->max_y;y++) {
for(x=0;x<display->max_x;x++)
- printf("%c",display->screen+y*display->max_x+x);
+ printf("%c",*(display->screen+y*display->max_x+x));
printf("\n");
}
int x,y;
- for(x=0;x<display->max_x;x++) {
- for(y=0;y<line;y++) printf("%c",display->screen+y*display->max_x+x);
- printf("\n");
+ for(y=0;y<line;y++) {
+ for(x=0;x<display->max_x;x++)
+ printf("%c",*(display->screen+y*display->max_x+x));
+ printf("\n");
}
return D_SUCCESS;
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;
}
for(y=0;y<display->max_y;y++)
for(x=0;x<display->max_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;
}
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++);