1 /* display.c -- display management stuff
3 * hackbard@hackdaworld.dyndns.org
9 int display_init(t_display *display) {
11 puts("[display] initializing display ...");
14 display->max_x=atoi(getenv("COLUMNS"));
15 display->max_y=atoi(getenv("LINES"));
17 /* allocating 'screen' buffer */
18 if((display->screen=(unsigned char *)malloc(display->max_x*display->max_y))
20 perror("[display] malloc call");
23 /* space as display pixel default */
24 memset(display->screen,0x20,display->max_x*display->max_y);
29 int display_draw(t_display *display) {
33 for(y=0;y<display->max_y;y++) {
34 for(x=0;x<display->max_x;x++)
35 printf("%c",display->screen+y*display->max_x+x);
42 int display_draw_until_line(t_display *display,int line) {
46 for(x=0;x<display->max_x;x++) {
47 for(y=0;y<line;y++) printf("%c",display->screen+y*display->max_x+x);
54 int display_clear_screen(t_display *display) {
56 memcpy(display->screen,0x20,display->max_x*display->max_y);
61 int display_shutdown(t_display *display) {
63 free(display->screen);
65 puts("[display] shutdown");
70 int display_line(t_display *display,int X,int Y,int X_,int Y_,char sym) {
77 for(y=0;y<display->max_y;y++)
78 for(x=0;x<display->max_x;x++)
79 if((int)((x-X)*m+Y)==y) display->screen+y*display->max_x+x=sym;
84 int display_string(t_display *display,int x,int y,char *string,int len) {
86 if(len>display->max_x-x) return D_INV_STRING_LEN;
88 memcpy(display->screen+y*display->max_x+x,string,len);
93 int display_string_vert(t_display *display,int x,int y,char *string,int len) {
95 if(len>display->max_y-y) return D_INV_STRING_LEN;
97 for(i=y*display->max_x+x;i<(y+len)*display->max_x+x;i+=display->max_x)
98 *(display->screen+i)=*(string++);