Rev 3458 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3363 | leency | 1 | #define MEMSIZE 0x3E80 |
2 | #include "..\lib\kolibri.h" |
||
3 | #include "..\lib\figures.h" |
||
4 | #include "..\lib\strings.h" |
||
5 | #include "..\lib\random.h" |
||
6 | #include "..\lib\mem.h" |
||
7 | #include "..\lib\file_system.h" |
||
8 | |||
9 | #ifndef ru |
||
10 | char *BUTTONS_CAPTIONS[]={ |
||
11 | "Перезагрузка [Enter]"w, 13, |
||
12 | "Выключение [End]"w, 181, |
||
4885 | leency | 13 | //"Ядро [Home]"w, 180, |
3363 | leency | 14 | "Отмена [Esc]"w, 27, |
15 | 0}; |
||
16 | #else |
||
17 | char *BUTTONS_CAPTIONS[]={ |
||
18 | " Reboot [Enter]",13, |
||
19 | " Power off [End]",181, |
||
4885 | leency | 20 | //" Kernel [Home]",180, |
3363 | leency | 21 | " Close [Esc]",27, |
22 | 0}; |
||
23 | #endif |
||
24 | |||
25 | system_colors sc; |
||
26 | |||
27 | unsigned char moon[6*6] = FROM "moon.raw"; |
||
28 | |||
29 | int WIN_SIZE_X, WIN_SIZE_Y; |
||
30 | int PANEL_X, PANEL_Y; |
||
31 | |||
4885 | leency | 32 | #define NIGHT_PALEL_HEIGHT 50 |
33 | #define STARS_COUNT 25 |
||
3363 | leency | 34 | |
35 | #define PANEL_SIZE_X 260 |
||
4885 | leency | 36 | #define PANEL_SIZE_Y 148 |
3363 | leency | 37 | |
38 | :void ShadowScreen(dword img, w, h) |
||
39 | { |
||
40 | dword to = w*h*3 + img; |
||
3458 | leency | 41 | for ( ; img < to; img+=4) |
42 | { |
||
43 | ESDWORD[img] >>= 1; |
||
44 | $and ESDWORD[img], 7F7F7F7Fh |
||
45 | } |
||
3363 | leency | 46 | //for ( ; img < to; img+=4) { ESDWORD[img] >>= 2; $and ESDWORD[img], 3F3F3F3Fh } |
47 | } |
||
48 | |||
49 | |||
50 | void main() |
||
51 | { |
||
52 | int key; |
||
53 | dword s1,s2, s3, s4, sides_w; |
||
54 | |||
55 | mem_Init(); |
||
56 | WIN_SIZE_X=GetScreenWidth()+1; |
||
57 | WIN_SIZE_Y=GetScreenHeight()+1; |
||
58 | PANEL_X=WIN_SIZE_X-PANEL_SIZE_X/2; |
||
59 | PANEL_Y=WIN_SIZE_Y-PANEL_SIZE_Y/2; |
||
60 | |||
61 | sides_w = WIN_SIZE_X-PANEL_SIZE_X/2; |
||
62 | s1 = mem_Alloc(WIN_SIZE_X*PANEL_Y*3); |
||
63 | s2 = mem_Alloc(sides_w*PANEL_Y*3); |
||
64 | s3 = mem_Alloc(sides_w*PANEL_Y*3); |
||
65 | s4 = mem_Alloc(WIN_SIZE_X*PANEL_Y*3); |
||
66 | |||
67 | CopyScreen(s1, 0, 0, WIN_SIZE_X, PANEL_Y); |
||
68 | ShadowScreen(s1, WIN_SIZE_X, PANEL_Y); |
||
69 | |||
70 | CopyScreen(s2, 0, PANEL_Y, sides_w, PANEL_SIZE_Y+1); |
||
71 | ShadowScreen(s2, sides_w, PANEL_SIZE_Y+1); |
||
72 | |||
73 | CopyScreen(s3, sides_w+PANEL_SIZE_X+1, PANEL_Y, sides_w-1, PANEL_SIZE_Y+1); |
||
74 | ShadowScreen(s3, sides_w, PANEL_SIZE_Y+1); |
||
75 | |||
76 | CopyScreen(s4, 0, PANEL_Y+PANEL_SIZE_Y+1, WIN_SIZE_X, PANEL_Y-1); |
||
77 | ShadowScreen(s4, WIN_SIZE_X, PANEL_Y-1); |
||
78 | |||
79 | |||
80 | goto _DRAW; |
||
81 | loop() |
||
82 | { |
||
4885 | leency | 83 | WaitEventTimeout(330); |
3363 | leency | 84 | switch(EAX & 0xFF) |
85 | { |
||
86 | case evButton: |
||
87 | key=GetButtonID(); |
||
88 | if (key==1) ExitProcess(); |
||
89 | GOTO _BUTTON_MARK; |
||
90 | |||
91 | case evKey: |
||
92 | key = GetKey(); |
||
93 | _BUTTON_MARK: |
||
94 | if (key== 13) ExitSystem(REBOOT); //ENTER |
||
95 | if (key==180) ExitSystem(KERNEL); //HOME |
||
96 | if (key==181) ExitSystem(TURN_OFF); //END |
||
97 | if (key== 27) ExitProcess(); //ESC |
||
98 | if (key== 19) //CTRL+S |
||
99 | { |
||
100 | RunProgram("rdsave",0); |
||
101 | ExitProcess(); |
||
102 | } |
||
103 | break; |
||
104 | |||
105 | case evReDraw: |
||
106 | sc.get(); |
||
107 | DefineAndDrawWindow(0,0,WIN_SIZE_X, WIN_SIZE_Y, 0x01, 0, 0, 0x01fffFFF); |
||
108 | //_PutImage(0,0,WIN_SIZE_X,WIN_SIZE_Y,shadow_buf); |
||
109 | _PutImage(0,0,WIN_SIZE_X, PANEL_Y,s1); |
||
110 | draw_main_area(PANEL_X, PANEL_Y, PANEL_SIZE_X, PANEL_SIZE_Y); |
||
111 | _PutImage(0,PANEL_Y,sides_w, PANEL_SIZE_Y+1,s2); |
||
112 | _PutImage(sides_w+PANEL_SIZE_X+1,PANEL_Y,sides_w-1, PANEL_SIZE_Y+1,s3); |
||
113 | _PutImage(0,PANEL_Y+PANEL_SIZE_Y+1,WIN_SIZE_X, PANEL_Y-1,s4); |
||
114 | break; |
||
115 | default: _DRAW: |
||
116 | draw_stars(); |
||
117 | } |
||
118 | } |
||
119 | } |
||
120 | |||
121 | |||
122 | void draw_main_area() |
||
123 | { |
||
124 | int i=0; |
||
125 | |||
126 | DrawRectangle(PANEL_X, PANEL_Y, PANEL_SIZE_X, PANEL_SIZE_Y, 0); |
||
127 | DrawBar(PANEL_X+1, PANEL_Y+NIGHT_PALEL_HEIGHT+1, PANEL_SIZE_X-1, PANEL_SIZE_Y-NIGHT_PALEL_HEIGHT-1, sc.work); |
||
128 | |||
4885 | leency | 129 | for (i=0; i<3; i++) |
3363 | leency | 130 | { |
131 | DefineButton(PANEL_X+33, i*23 + PANEL_Y+NIGHT_PALEL_HEIGHT+16, 190,19, BUTTONS_CAPTIONS[i*2+1],sc.work_button); |
||
132 | WriteText(PANEL_X+59, i*23 + PANEL_Y+NIGHT_PALEL_HEIGHT+22, 0x80,sc.work_button_text, BUTTONS_CAPTIONS[i*2]); |
||
133 | } |
||
134 | |||
135 | draw_stars(); |
||
136 | } |
||
137 | |||
4885 | leency | 138 | dword stars_col[4]={0xD2CF19, 0x716900, 0x002041, 0xEAE0DE}; //0x005BFF - голубой, редко |
139 | |||
3363 | leency | 140 | void draw_stars() |
141 | { |
||
142 | |||
143 | int i, x_pic, y_pic, col; |
||
144 | |||
145 | DrawBar(PANEL_X+1, PANEL_Y+1, PANEL_SIZE_X-1, NIGHT_PALEL_HEIGHT, 0x002041); |
||
146 | |||
147 | for (i=0; i |
||
148 | { |
||
4885 | leency | 149 | x_pic = random(PANEL_SIZE_X-2); |
150 | y_pic = random(NIGHT_PALEL_HEIGHT-2); |
||
151 | col = random(4); |
||
152 | PutPixel(PANEL_X+2 +x_pic, PANEL_Y+2 +y_pic, stars_col[col]); |
||
153 | if (stars_col[col]==0xD2CF19) |
||
154 | { |
||
155 | PutPixel(PANEL_X+2 +x_pic+1, PANEL_Y+2 +y_pic, stars_col[col+1]); |
||
156 | PutPixel(PANEL_X+2 +x_pic-1, PANEL_Y+2 +y_pic, stars_col[col+1]); |
||
157 | PutPixel(PANEL_X+2 +x_pic, PANEL_Y+2 +y_pic-1, stars_col[col+1]); |
||
158 | PutPixel(PANEL_X+2 +x_pic, PANEL_Y+2 +y_pic+1, stars_col[col+1]); |
||
159 | } |
||
160 | |||
3363 | leency | 161 | } |
4885 | leency | 162 | _PutImage(PANEL_X+PANEL_SIZE_X-60+random(3),PANEL_Y+10+random(3), 6,6, #moon); |
3363 | leency | 163 | } |
164 | |||
165 | |||
166 | |||
167 | |||
168 | |||
169 | stop:3;>>> |