new display stuff, DOESNT WORK!!11
[my-code/ivac.git] / src / display.c
index afb2a57..c46c11c 100644 (file)
@@ -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;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");
   }
 
@@ -43,9 +50,10 @@ int display_draw_until_line(t_display *display,int line) {
   
   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;
@@ -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;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;
 }
@@ -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++);