Blame view

main.c 3.7 KB
4daa2ca3   Jean Wasilewski   Displaying a pixe...
1
2
3
  #include <X11/Xlib.h>
  #include <X11/Xutil.h>
  #include <X11/Xos.h>
4daa2ca3   Jean Wasilewski   Displaying a pixe...
4
5
6
  #include <stdio.h>
  #include <stdlib.h>
  
a0ae785b   Jean Wasilewski   Non working version
7
8
  #define AWESOME 7
  
4daa2ca3   Jean Wasilewski   Displaying a pixe...
9
10
11
12
13
14
  Display *dis;
  int screen;
  Window win;
  GC gc;
  int width=320;
  int height=240;
a0ae785b   Jean Wasilewski   Non working version
15
  int i=0;
4daa2ca3   Jean Wasilewski   Displaying a pixe...
16
  
4daa2ca3   Jean Wasilewski   Displaying a pixe...
17
18
19
20
  void init_x();
  void close_x();
  void redraw();
  
a0ae785b   Jean Wasilewski   Non working version
21
22
  int main ()
  {
4daa2ca3   Jean Wasilewski   Displaying a pixe...
23
24
25
  	XEvent event;		/* the XEvent declaration !!! */
  	KeySym key;		/* a dealie-bob to handle KeyPress Events */	
  	char text[255];		/* a char buffer for KeyPress Events */
4daa2ca3   Jean Wasilewski   Displaying a pixe...
26
  	XColor col;
a0ae785b   Jean Wasilewski   Non working version
27
  	int initOffsetBMP;
4daa2ca3   Jean Wasilewski   Displaying a pixe...
28
29
30
31
32
33
  
  	init_x();
  
  	printf("Patte de canard\n");
  	Colormap cmap = DefaultColormap(dis, DefaultScreen(dis));
  	printf("?\n");
155f7ac1   Jean Wasilewski   Some BMP recognition
34
35
36
37
38
39
40
41
42
43
44
45
46
  
  	FILE* home = NULL;
  	char buffer[4];
  	home = fopen("home.bmp", "r");
  	if(home == NULL)
  		return 0;
  
  	fseek(home, 0x0A, SEEK_SET);
  	buffer[0] = getc(home);
  	buffer[1] = getc(home);
  	buffer[2] = getc(home);
  	buffer[3] = getc(home);
  	printf("Pixel array offset %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
a0ae785b   Jean Wasilewski   Non working version
47
  	initOffsetBMP = buffer[0] + (buffer[1] >> 8) + (buffer[2] >> 16) + (buffer[3] >> 24);
155f7ac1   Jean Wasilewski   Some BMP recognition
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  
  	fseek(home, 0x12, SEEK_SET);
          buffer[0] = getc(home);
          buffer[1] = getc(home);
          buffer[2] = getc(home);
          buffer[3] = getc(home);
          printf("Width %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
  
  	//fseek(home, 0x12, SEEK_SET);
          buffer[0] = getc(home);
          buffer[1] = getc(home);
          buffer[2] = getc(home);
          buffer[3] = getc(home);
          printf("Height %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
  
  	fseek(home, 0x1C, SEEK_SET);
          buffer[0] = getc(home);
          buffer[1] = getc(home);
          printf("Bits Per Pixel %02x %02x\n", buffer[0], buffer[1]);
  
  	if(buffer[1] != 0 || buffer[0] != 0x18)
  	{
  		printf("Could not read BMP\n");
  		return 1;
  	}
  
  
a0ae785b   Jean Wasilewski   Non working version
75
  	fseek(home, initOffsetBMP, SEEK_SET);
155f7ac1   Jean Wasilewski   Some BMP recognition
76
  
a0ae785b   Jean Wasilewski   Non working version
77
78
  	while(1)
  	{
4daa2ca3   Jean Wasilewski   Displaying a pixe...
79
80
  		XNextEvent(dis, &event);
  	
a0ae785b   Jean Wasilewski   Non working version
81
  		if (event.type==Expose && event.xexpose.count==0)
4daa2ca3   Jean Wasilewski   Displaying a pixe...
82
  			redraw();
a0ae785b   Jean Wasilewski   Non working version
83
84
85
86
  
  		if (event.type==KeyPress&& XLookupString(&event.xkey,text,255,&key,0)==1)
  		{
  			if (text[0]=='q')
4daa2ca3   Jean Wasilewski   Displaying a pixe...
87
  				close_x();
4daa2ca3   Jean Wasilewski   Displaying a pixe...
88
89
  			printf("You pressed the %c key!\n",text[0]);
  		}
a0ae785b   Jean Wasilewski   Non working version
90
91
92
93
  		if (event.type==ButtonPress)
  		{
  			//int x=event.xbutton.x,
  			    //y=event.xbutton.y;
4daa2ca3   Jean Wasilewski   Displaying a pixe...
94
95
96
97
98
  
  			//strcpy(text,"X is FUN!");
  			//XSetForeground(dis,gc,rand()%event.xbutton.x%255);
  			//XDrawString(dis,win,gc,x,y, text, strlen(text));
  
a0ae785b   Jean Wasilewski   Non working version
99
100
101
102
103
104
105
106
107
108
109
  		        buffer[0] = getc(home);
  		        buffer[1] = getc(home);
  		        buffer[2] = getc(home);
  
  			int j;
  
  			for(j=0; j<AWESOME; j++)
  			{
  				col.red = buffer[2];
  				col.green = buffer[1];
  				col.blue = buffer[0];
4daa2ca3   Jean Wasilewski   Displaying a pixe...
110
  
a0ae785b   Jean Wasilewski   Non working version
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  
  
  
  
  				if(XAllocColor(dis, cmap, &col) == 0)
  					printf("Failed to allocate color\n");
  				if(XSetForeground(dis, gc, col.pixel) == 0)
  					printf("Failed to set foreground\n");
  				if(XDrawPoint(dis,win,gc,i%width,i/height) == 0)
  					printf("Failed to draw point\n");
  			        buffer[0] = getc(home);
  			        buffer[1] = getc(home);
  			        buffer[2] = getc(home);
  				printf("X %03d Y %03d R %02x G %02x B %02x\n", i%width, i/height, buffer[0], buffer[1], buffer[2]);
  				i++;
  			}
4daa2ca3   Jean Wasilewski   Displaying a pixe...
127
128
  		}
  	}
a0ae785b   Jean Wasilewski   Non working version
129
130
  	printf("End of display\n");
  	return 0;
4daa2ca3   Jean Wasilewski   Displaying a pixe...
131
132
133
  }
  
  void init_x() {
4daa2ca3   Jean Wasilewski   Displaying a pixe...
134
135
136
137
138
139
  	unsigned long black,white;
  
  	dis=XOpenDisplay((char *)0);
     	screen=DefaultScreen(dis);
  	black=BlackPixel(dis,screen),
  	white=WhitePixel(dis, screen);
a0ae785b   Jean Wasilewski   Non working version
140
     	win=XCreateSimpleWindow(dis,DefaultRootWindow(dis),0,0,width,height, 0,black, white);
4daa2ca3   Jean Wasilewski   Displaying a pixe...
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
  	XSetStandardProperties(dis,win,"Howdy","Hi",None,NULL,0,NULL);
  	XSelectInput(dis, win, ExposureMask|ButtonPressMask|KeyPressMask);
          gc=XCreateGC(dis, win, 0,0);        
  	XSetBackground(dis,gc,white);
  	XSetForeground(dis,gc,black);
  	XClearWindow(dis, win);
  	XMapRaised(dis, win);
  };
  
  void close_x() {
  	XFreeGC(dis, gc);
  	XDestroyWindow(dis,win);
  	XCloseDisplay(dis);	
  	exit(1);				
  };
  
  void redraw() {
  	XClearWindow(dis, win);
  };