Backup - Adding design for AxWin3 to git
[tpg/acess2.git] / Usermode / Applications / axwin0_src / main.c
1 /*\r
2 Acess OS Window Manager\r
3 */\r
4 #include "header.h"\r
5 #include "bitmaps.h"\r
6 #include <stdio.h>\r
7 #include <stdlib.h>\r
8 #include <string.h>\r
9 \r
10 #define USE_MOUSE       1\r
11 \r
12 //GLOBALS\r
13  int    giConsoleFP = -1;\r
14  int    giScreenFP = -1;\r
15  int    giScreenMode = 1;\r
16  int    giScreenWidth = SCREEN_WIDTH;\r
17  int    giScreenHeight = SCREEN_HEIGHT;\r
18  int    giScreenDepth = 32;\r
19  int    giScreenSize = SCREEN_WIDTH*SCREEN_HEIGHT*32/8;\r
20 Uint32  *gScreenBuffer;\r
21 #if USE_MOUSE\r
22 int     giMouseFP = -1;\r
23 Uint32          gCursorBMP[sizeof(bmpCursor)*2] = {0};\r
24 int             mouseX=0, mouseY=0;\r
25 Uint8   buttonState;\r
26 #endif\r
27 \r
28 //PROTOTYPES\r
29 extern void Desktop_Init();\r
30 extern void heap_init();\r
31 void UpdateScreen();\r
32 #if USE_MOUSE\r
33 void UpdateMouse();\r
34 void BuildCursor();\r
35 void DrawCursor();\r
36 #endif\r
37 void memsetd(void *to, long val, int count);\r
38 \r
39 //CODE\r
40 int main(void)\r
41 {\r
42          int    tmp;\r
43         \r
44         giConsoleFP = open("/Devices/vterm/1", OPENFLAG_WRITE);\r
45         \r
46         printf("AcessOS GUI version 1\n");\r
47         printf("Opening and Initialising Video and Mouse...");\r
48         \r
49         #if USE_MOUSE\r
50         giMouseFP = open("/Devices/ps2mouse", OPENFLAG_READ);\r
51         #endif\r
52         \r
53         tmp = giScreenWidth;    ioctl(giConsoleFP, 4, &tmp);    // Width\r
54         tmp = giScreenHeight;   ioctl(giConsoleFP, 5, &tmp);    // Height\r
55         tmp = 1;        ioctl(giConsoleFP, 6, &tmp);    // Buffer Mode\r
56         \r
57         giScreenSize = giScreenWidth*giScreenHeight*giScreenDepth/8;\r
58         \r
59         #if USE_MOUSE\r
60         ioctl(giMouseFP, 2, &giScreenWidth);    //Set Max X\r
61         ioctl(giMouseFP, 3, &giScreenHeight);   //Set Max Y\r
62         #endif\r
63         printf("Done.\n");\r
64         \r
65         // Allocate Screen Buffer\r
66         gScreenBuffer = malloc(giScreenSize);\r
67         if(gScreenBuffer == NULL)\r
68                 printf("Unable to allocate double buffer (gScreenBuffer)\n");\r
69         \r
70         UpdateScreen();\r
71         Desktop_Init();\r
72         #if USE_MOUSE\r
73         BuildCursor();  //Create Cursor\r
74         #endif\r
75         \r
76         for(;;) {\r
77                 memset(gScreenBuffer, 0x6666FF, giScreenSize);  // Set Background Colour\r
78                 wmUpdateWindows();\r
79                 #if USE_MOUSE\r
80                 UpdateMouse();\r
81                 DrawCursor();\r
82                 #endif\r
83                 UpdateScreen();\r
84         }\r
85         \r
86         return 1;\r
87 }\r
88 \r
89 /* Copy from the buffer to the screen\r
90  */\r
91 void UpdateScreen()\r
92 {\r
93         printf("Updating Framebuffer.\n");\r
94         seek(giScreenFP, 0, 1); //SEEK SET\r
95         write(giScreenFP, giScreenSize, gScreenBuffer);\r
96 }\r
97 \r
98 #if USE_MOUSE\r
99 void UpdateMouse()\r
100 {\r
101         struct {\r
102                 int     x, y, scroll;\r
103                 Uint8   buttons;\r
104         } data;\r
105         //k_printf("Updating Mouse State...");\r
106         \r
107         seek(giMouseFP, 0, 1);\r
108         read(giMouseFP, sizeof(data), &data);\r
109         \r
110         mouseX = data.x;        mouseY = data.y;\r
111         //Button Press\r
112         if(data.buttons & ~buttonState) {\r
113                 //wmMessageButtonDown();\r
114         }\r
115         //Button Release\r
116         if(~data.buttons & buttonState) {\r
117                 //wmMessageButtonUp();\r
118         }\r
119         \r
120         buttonState = data.buttons;     //Update Button State\r
121         //k_printf("Done.\n");\r
122 }\r
123 \r
124 void DrawCursor()\r
125 {\r
126         int i,j;\r
127         Uint32  *buf, *bi;\r
128         bi = gCursorBMP;\r
129         buf = gScreenBuffer + mouseY*giScreenWidth + mouseX;\r
130         for(i=0;i<24;i++)\r
131         {\r
132                 for(j=0;j<16;j++)\r
133                 {\r
134                         if(*bi&0xFF000000)\r
135                         {\r
136                                 buf[j] = *bi&0xFFFFFF;\r
137                         }\r
138                         bi++;\r
139                 }\r
140                 buf += giScreenWidth;\r
141         }\r
142 }\r
143 \r
144 void BuildCursor()\r
145 {\r
146         int i,j;\r
147         Uint32  px;\r
148         Uint32  *buf, *bi;\r
149         bi = bmpCursor;\r
150         buf = gCursorBMP;\r
151         for(i=0;i<sizeof(bmpCursor)/8;i++)\r
152         {\r
153                 for(j=0;j<8;j++)\r
154                 {\r
155                         px = (*bi & (0xF << ((7-j)*4) )) >> ((7-j)*4);\r
156                         if( px & 0x1 )\r
157                         {\r
158                                 if(px & 8)      *buf = 0xFF000000;      //Black (100% Alpha)\r
159                                 else            *buf = 0xFFFFFFFF;      //White (100% Alpha)\r
160                         }\r
161                         else\r
162                                 *buf = 0;       // 0% Alpha\r
163                         buf++;\r
164                 }\r
165                 bi++;\r
166                 for(j=0;j<8;j++)\r
167                 {\r
168                         px = (*bi & (0xF << ((7-j)*4) )) >> ((7-j)*4);\r
169                         if( px & 0x1 )\r
170                         {\r
171                                 if(px & 8)      *buf = 0xFF000000;      // Black (100% Alpha)\r
172                                 else            *buf = 0xFFFFFFFF;      // White (100% Alpha)\r
173                         }\r
174                         else\r
175                         {\r
176                                 *buf = 0; // 0% Alpha\r
177                         }\r
178                         buf++;\r
179                 }\r
180                 bi++;\r
181         }\r
182 }\r
183 #endif\r

UCC git Repository :: git.ucc.asn.au