new display stuff, DOESNT WORK!!11
[my-code/ivac.git] / src / display.c
1 /* display.c -- display management stuff
2  *
3  * hackbard@hackdaworld.dyndns.org
4  *
5  */
6
7 #include "display.h"
8
9 int display_init(t_display *display) {
10
11   struct winsize ws;
12
13   /* dimensions */
14   if(ioctl(1,TIOCGWINSZ,&ws)==-1) {
15     perror("[display] ioctl call");
16     return D_ERROR;
17   }
18   display->max_x=ws.ws_col;
19   display->max_y=ws.ws_row;
20
21   printf("[display] initializing display, width: %02d / height: %02d ...\n",
22          ws.ws_col,ws.ws_row);
23
24   /* allocating 'screen' buffer */
25   if((display->screen=(unsigned char *)malloc(display->max_x*display->max_y))
26      ==NULL) {
27     perror("[display] malloc call");
28     return D_ERROR;
29   }
30   /* space as display pixel default */
31   memset(display->screen,0x20,display->max_x*display->max_y);
32
33   return D_SUCCESS;
34 }
35
36 int display_draw(t_display *display) {
37
38   int x,y;
39
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));
43     printf("\n");
44   }
45
46   return D_SUCCESS;
47 }
48
49 int display_draw_until_line(t_display *display,int line) {
50   
51   int x,y;
52
53   for(y=0;y<line;y++) {
54     for(x=0;x<display->max_x;x++) 
55       printf("%c",*(display->screen+y*display->max_x+x));
56     printf("\n");
57   }
58
59   return D_SUCCESS;
60 }
61
62 int display_clear_screen(t_display *display) {
63  
64   memset(display->screen,0x20,display->max_x*display->max_y);
65
66   return D_SUCCESS;
67 }
68
69 int display_shutdown(t_display *display) {
70
71   free(display->screen);
72
73   puts("[display] shutdown");
74
75   return D_SUCCESS;
76 }
77
78 int display_line(t_display *display,int X,int Y,int X_,int Y_,char sym) {
79
80   double m;
81   int x,y;
82
83   m=(Y_-Y)/(X_-X);
84
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;
88
89   return D_SUCCESS;
90 }
91
92 int display_string(t_display *display,int x,int y,char *string,int len) {
93
94   if(len>display->max_x-x) return D_INV_STRING_LEN;
95
96   memcpy(display->screen+y*display->max_x+x,string,len);
97
98   return D_SUCCESS;
99 }
100
101 int display_string_vert(t_display *display,int x,int y,char *string,int len) {
102
103   int i;
104
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++);
108
109   return D_SUCCESS;
110 }