Rev 9870 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
9883 | Doczom | 1 | ;; Copyright (C) 2021-2022, Michael Frolov aka Doczom |
9870 | Doczom | 2 | |
3 | macro send_notify send_str{ |
||
4 | mov dword[run_notify.message], send_str |
||
5 | mcall SF_FILE, run_notify |
||
6 | } |
||
7 | |||
9108 | Doczom | 8 | use32 |
9 | org 0 |
||
10 | |||
11 | db 'MENUET01' |
||
12 | dd 1 |
||
13 | dd START |
||
9870 | Doczom | 14 | dd I_END |
15 | dd MEM |
||
9108 | Doczom | 16 | dd STACKTOP |
9771 | Doczom | 17 | dd PATH |
9108 | Doczom | 18 | dd 0 |
9870 | Doczom | 19 | |
20 | include '..\..\proc32.inc' |
||
9108 | Doczom | 21 | include '..\..\macros.inc' |
22 | include '..\..\KOSfuncs.inc' |
||
9870 | Doczom | 23 | include '..\..\dll.inc' |
9199 | Doczom | 24 | |
9883 | Doczom | 25 | include 'parser.inc' |
9108 | Doczom | 26 | START: |
9870 | Doczom | 27 | ;init heap |
9883 | Doczom | 28 | mcall 68, 11 |
9870 | Doczom | 29 | ; load lib |
30 | stdcall dll.Load, @IMPORT |
||
31 | or eax, eax |
||
32 | jnz err_load_lib |
||
33 | ; init opendial |
||
34 | invoke OpenDialog_Init, OpenDialog_data |
||
35 | ; init futex |
||
9883 | Doczom | 36 | mcall SF_FUTEX, SSF_CREATE, futex_cmd |
37 | mov [futex_handle], eax |
||
38 | ; parse cmd_line |
||
39 | cmp byte[PATH], 0 |
||
40 | jz @f |
||
41 | call parse_cmd |
||
42 | @@: |
||
9108 | Doczom | 43 | ;;установка маска событий на получение переписовки и нажатия на кнопку |
9883 | Doczom | 44 | mcall SF_SET_EVENTS_MASK, 0x05 |
9108 | Doczom | 45 | ;load driver |
9883 | Doczom | 46 | mcall SF_SYS_MISC, SSF_LOAD_DRIVER_PE, [drv_ptr], 0 |
47 | mov dword[drv_struct.handl], eax |
||
48 | test eax, eax ;проверка загрузки |
||
49 | jz error_drv |
||
9760 | Doczom | 50 | main: |
9883 | Doczom | 51 | mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct |
52 | cmp dword[save_ptr], 0 |
||
53 | jz still |
||
54 | mcall 51, 1, thread_auto_save, thread_auto_save.stack |
||
55 | cmp eax, -1 |
||
56 | jz still |
||
57 | mov dword[PID_AUTO_SAVE], eax |
||
58 | still: ;void main() |
||
59 | call draw |
||
9108 | Doczom | 60 | ;;ожидание события в течении 2000мс |
9883 | Doczom | 61 | mcall SF_WAIT_EVENT_TIMEOUT, 200 ;2 second |
62 | dec eax ; redraw request ? |
||
63 | je still |
||
64 | cmp eax, 2 ;button |
||
65 | jz button |
||
66 | jmp still |
||
9108 | Doczom | 67 | |
68 | button: |
||
9883 | Doczom | 69 | mcall SF_GET_BUTTON |
9108 | Doczom | 70 | |
9883 | Doczom | 71 | cmp eax, 1 |
72 | jz still |
||
73 | dec ah |
||
74 | je exit |
||
9108 | Doczom | 75 | ;; id button micro_info = 8 |
9883 | Doczom | 76 | cmp ah, 7 ;// ah-1=7 |
77 | jnz .no_micro_info |
||
78 | xor byte[flag_micro_info], 1 |
||
79 | jmp still |
||
9870 | Doczom | 80 | .no_micro_info: |
81 | ; id button log = 9 |
||
9883 | Doczom | 82 | cmp ah, 8 ; 9-1 |
83 | jnz .no_log_button |
||
84 | cmp dword[text_log_butt], _start_log |
||
85 | jnz .log_stop |
||
9771 | Doczom | 86 | |
9870 | Doczom | 87 | cmp dword[log_ptr], 0 |
88 | jnz @f |
||
89 | mcall 68, SSF_MEM_ALLOC, 19 ; начальные данные для Graph |
||
90 | test eax, eax |
||
91 | jz .err_alloc_mem |
||
92 | |||
93 | mov [log_ptr], eax |
||
94 | mov dword[log_size], 19 |
||
95 | mov edi, eax |
||
96 | mov eax,[drv_data.Tmax] |
||
97 | mov ebx, graph_start.new_data |
||
98 | call int_to_str |
||
99 | mov esi, graph_start |
||
100 | ; set base value in log |
||
101 | movsd |
||
102 | movsd |
||
103 | movsd |
||
104 | movsd |
||
105 | movsw |
||
106 | movsb |
||
107 | @@: |
||
9883 | Doczom | 108 | mcall 51, 1, thread_timer, thread_timer.stack |
109 | mov dword[text_log_butt], _stop_log |
||
110 | jmp still |
||
9870 | Doczom | 111 | .log_stop: |
112 | ; пробуждаем поток через фьютекс |
||
9883 | Doczom | 113 | mov byte[futex_cmd], 1 ; stop thread |
114 | mcall SF_FUTEX, SSF_WAKE, [futex_handle], 1 |
||
115 | mcall 68, 1 ; переключаем потоки, для того, чтобы сообщение пришло потоку с таймером |
||
9870 | Doczom | 116 | |
117 | ; меняем текст в кнопке |
||
118 | mov dword[text_log_butt], _start_log |
||
119 | jmp still |
||
120 | .err_alloc_mem: |
||
121 | send_notify Error_text.alloc_1 |
||
9883 | Doczom | 122 | jmp still |
9870 | Doczom | 123 | .no_log_button: |
124 | ; id button save = 10 |
||
9883 | Doczom | 125 | cmp ah, 9 ; 10-1 |
126 | jnz still |
||
127 | cmp dword[log_ptr], 0 |
||
128 | jnz @f |
||
9870 | Doczom | 129 | send_notify Error_text.save_log |
9883 | Doczom | 130 | jmp still |
9870 | Doczom | 131 | @@: |
132 | cmp byte[futex_cmd], 2 ; 2 - save file |
||
133 | jnz @f |
||
134 | send_notify Error_text.save_log_1 |
||
9883 | Doczom | 135 | jmp still |
9870 | Doczom | 136 | @@: |
137 | ; тут вызов функции openDialog |
||
138 | invoke OpenDialog_Start, OpenDialog_data |
||
139 | |||
9883 | Doczom | 140 | cmp [OpenDialog_data.status], 1 |
141 | jne still |
||
9870 | Doczom | 142 | |
143 | ;mov dword[log_path], openfile_path |
||
144 | |||
145 | ; пробуждаем поток через фьютекс |
||
9883 | Doczom | 146 | mov byte[futex_cmd], 2 ; save_log |
147 | mcall SF_FUTEX, SSF_WAKE, [futex_handle], 1 |
||
148 | test eax, eax |
||
149 | jnz still |
||
9870 | Doczom | 150 | |
9883 | Doczom | 151 | mcall 51, 1, thread_timer, thread_timer.stack |
152 | mcall 68, 1 ; переключаем потоки, для того, чтобы сообщение пришло потоку с таймером |
||
9870 | Doczom | 153 | @@: |
9883 | Doczom | 154 | mov byte[futex_cmd], 3 ; save_log & exit |
155 | mcall SF_FUTEX, SSF_WAKE, [futex_handle], 1 |
||
156 | test eax, eax |
||
157 | jz @b |
||
158 | mcall 68, 1 ; переключаем потоки, для того, чтобы сообщение пришло потоку с таймером |
||
159 | jmp still |
||
9870 | Doczom | 160 | |
9771 | Doczom | 161 | align 4 |
9108 | Doczom | 162 | draw: |
9883 | Doczom | 163 | mcall SF_REDRAW, SSF_BEGIN_DRAW |
164 | mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors |
||
9108 | Doczom | 165 | |
9883 | Doczom | 166 | mov eax, dword[sc.work_graph] |
167 | mov dword[frame_struct.FR_OUTER_COLOR], eax |
||
168 | mov eax, dword[sc.work_light] |
||
169 | mov dword[frame_struct.FR_INNER_COLOR], eax |
||
170 | mov eax, dword[sc.work_text] |
||
171 | mov dword[frame_struct.FR_FORE_COLOR], eax |
||
172 | mov eax, dword[sc.work] |
||
173 | mov dword[frame_struct.FR_BACK_COLOR], eax |
||
9870 | Doczom | 174 | |
175 | |||
9883 | Doczom | 176 | mov eax, SF_CREATE_WINDOW |
177 | mov ebx, 0x00ff0132 |
||
178 | mov ecx, 0x00150114 ; link with 80 line |
||
179 | mov edx, 0x14000000 |
||
180 | add edx, [sc.work] |
||
181 | mov edi, title |
||
182 | mcall |
||
9108 | Doczom | 183 | |
9883 | Doczom | 184 | mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct |
9108 | Doczom | 185 | |
9883 | Doczom | 186 | cmp byte[flag_micro_info], 1 |
187 | mov eax, SF_CHANGE_WINDOW |
||
188 | mov ebx, -1 |
||
189 | mov ecx, ebx |
||
190 | jz draw.micro |
||
9108 | Doczom | 191 | |
9883 | Doczom | 192 | mov esi,0x00000115 ; link with 58 line |
193 | mov edx,0x00000132 |
||
194 | mcall |
||
9108 | Doczom | 195 | ;;создание кнопки переключения режима |
9883 | Doczom | 196 | mov eax, SF_DEFINE_BUTTON |
197 | mov ebx, 0x00fc0010 |
||
198 | mov ecx, 0x001d0015 |
||
199 | mov edx, 0x00000008 |
||
200 | mov esi, [sc.work_button] |
||
201 | mcall |
||
9108 | Doczom | 202 | ;;вывод знака на кнопку |
203 | ;;так как функция writeText не должна изменять регистры |
||
204 | ;;присвоения в регистры eax и ecx происходят только 1 раз |
||
205 | ;; Далее, так как текст выводится почти всегда с одинаковым |
||
206 | ;; смещением вниз(равным 15) дынные(строки) имеют одинаковый |
||
207 | ;; размер , то используется инструкция add |
||
9883 | Doczom | 208 | mov eax, SF_DRAW_TEXT |
209 | mov ebx, 0x01000020 |
||
210 | mov ecx, 0x81000000 |
||
211 | add ecx, [sc.work_text] |
||
212 | mov edx, _up |
||
213 | mcall |
||
9108 | Doczom | 214 | |
9870 | Doczom | 215 | ;создание кнопки запуска/выключения лога |
9883 | Doczom | 216 | mov eax, SF_DEFINE_BUTTON |
217 | mov ebx, 0x00a00070 |
||
218 | mov ecx, 0x004a0015 |
||
219 | mov edx, 0x00000009 ;id button |
||
220 | mov esi, [sc.work_button] |
||
221 | mcall |
||
222 | ; вывод текста |
||
223 | mov eax, SF_DRAW_TEXT |
||
224 | mov ebx, 0x00a8004c |
||
225 | mov ecx, 0x90000000 |
||
226 | add ecx, [sc.work_text] |
||
227 | mov edx, [text_log_butt] |
||
228 | mcall |
||
9870 | Doczom | 229 | |
9883 | Doczom | 230 | ;создание кнопки сохранения лога в файл |
231 | mov eax, SF_DEFINE_BUTTON |
||
232 | mov ebx, 0x00a00070 |
||
233 | mov ecx, 0x00630015 |
||
234 | mov edx, 0x0000000a ; id=10 |
||
235 | mov esi, [sc.work_button] |
||
236 | mcall |
||
237 | ; вывод текста |
||
238 | mov eax, SF_DRAW_TEXT |
||
239 | mov ebx, 0x00a80065 |
||
240 | mov ecx, 0x90000000 |
||
241 | add ecx, [sc.work_text] |
||
242 | mov edx, _save_log |
||
243 | mcall |
||
9870 | Doczom | 244 | |
9883 | Doczom | 245 | ;вывод "Tctl:" |
246 | mov ebx, 0x00150035 |
||
247 | mov ecx, 0x90000000 |
||
248 | add ecx, [sc.work_text] |
||
249 | mov edx, _Tctl |
||
250 | mcall |
||
9108 | Doczom | 251 | |
9883 | Doczom | 252 | ;вывод "Tmax:" |
253 | add ebx, 0x15 |
||
254 | add edx, 7 |
||
255 | mcall |
||
9108 | Doczom | 256 | |
9883 | Doczom | 257 | ;вывод "Tcrit hyst:" |
258 | ;mov ebx,0x0015005f |
||
259 | add ebx, 0x15 |
||
260 | add edx, 7 |
||
261 | mcall |
||
9870 | Doczom | 262 | |
9883 | Doczom | 263 | ;вывод "Tcrit:" |
264 | add ebx, 0x15;0x2a |
||
265 | add edx, 7 |
||
266 | mcall |
||
9108 | Doczom | 267 | |
9883 | Doczom | 268 | ;вывод "Tdie:" |
269 | ;mov ebx,0x00150089 ;0x00a5005f |
||
270 | add ebx, 0x15 |
||
271 | add edx, 7 |
||
272 | mcall |
||
9870 | Doczom | 273 | |
9883 | Doczom | 274 | ;вывод "Tccd1:" |
275 | add ebx, 0x2b;0x19 |
||
276 | add edx, 7 |
||
277 | mcall |
||
9108 | Doczom | 278 | |
9883 | Doczom | 279 | ;вывод "Tccd2:" |
280 | add ebx, 0x15 |
||
281 | add edx, 7 |
||
282 | mcall |
||
9108 | Doczom | 283 | |
9883 | Doczom | 284 | ;вывод "Tccd3:" |
285 | add ebx, 0x15 |
||
286 | add edx, 7 |
||
287 | mcall |
||
9108 | Doczom | 288 | |
9883 | Doczom | 289 | ;вывод "Tccd4:" |
290 | add ebx, 0x15 |
||
291 | add edx, 7 |
||
292 | mcall |
||
9108 | Doczom | 293 | |
9883 | Doczom | 294 | ;вывод "Tccd5:" |
295 | mov ebx, 0x009d00b4 |
||
296 | add edx, 7 |
||
297 | mcall |
||
9108 | Doczom | 298 | |
9883 | Doczom | 299 | ;вывод "Tccd6:" |
300 | add ebx, 0x15 |
||
301 | add edx, 7 |
||
302 | mcall |
||
9108 | Doczom | 303 | |
9883 | Doczom | 304 | ;вывод "Tccd7:" |
305 | add ebx, 0x15 |
||
306 | add edx, 7 |
||
307 | mcall |
||
9108 | Doczom | 308 | |
9883 | Doczom | 309 | ;вывод "Tccd8:" |
310 | add ebx, 0x15 |
||
311 | add edx, 7 |
||
312 | mcall |
||
9108 | Doczom | 313 | ;;;;;;input data driver;;;;;;;;; |
9883 | Doczom | 314 | mov eax, 0x004a0035 ;0x004a0020 |
315 | mov ebx, drv_data.Tctl ;вывод данных от драйвера |
||
316 | call write_data |
||
9108 | Doczom | 317 | |
9883 | Doczom | 318 | add eax, 0x15 |
319 | mov byte[write_data.defaunt_color], 1 |
||
320 | mov ebx, drv_data.Tmax |
||
321 | call write_data |
||
9108 | Doczom | 322 | |
9883 | Doczom | 323 | add eax, 0x2a |
324 | mov byte[write_data.defaunt_color], 1 |
||
325 | mov ebx, drv_data.Tcrit |
||
326 | call write_data |
||
9108 | Doczom | 327 | |
9883 | Doczom | 328 | add eax, 0x40;0x19 |
329 | mov ebx, drv_data.Tccd1 |
||
330 | call write_data |
||
9108 | Doczom | 331 | |
9883 | Doczom | 332 | add eax, 0x15 |
333 | add ebx, 4 |
||
334 | call write_data |
||
9108 | Doczom | 335 | |
9883 | Doczom | 336 | add eax, 0x15 |
337 | add ebx, 4 |
||
338 | call write_data |
||
9108 | Doczom | 339 | |
9883 | Doczom | 340 | add eax, 0x15 |
341 | add ebx, 4 |
||
342 | call write_data |
||
9108 | Doczom | 343 | |
9883 | Doczom | 344 | mov eax, 0x00d000b4 |
345 | add ebx, 4 |
||
346 | call write_data |
||
9108 | Doczom | 347 | |
9883 | Doczom | 348 | add eax, 0x15 |
349 | add ebx, 4 |
||
350 | call write_data |
||
9108 | Doczom | 351 | |
9883 | Doczom | 352 | add eax, 0x15 |
353 | add ebx, 4 |
||
354 | call write_data |
||
9108 | Doczom | 355 | |
9883 | Doczom | 356 | add eax, 0x15 |
357 | add ebx, 4 |
||
358 | call write_data |
||
9108 | Doczom | 359 | |
9883 | Doczom | 360 | mov eax, 0x004a0089 |
361 | mov ebx, drv_data.Tdie |
||
362 | mov byte[write_data.defaunt_color], 1 |
||
363 | call write_data |
||
9108 | Doczom | 364 | |
9883 | Doczom | 365 | mov eax, 0x004a005f |
366 | mov byte[write_data.defaunt_color], 1 |
||
367 | mov ebx, drv_data.Tcrit_hyst |
||
368 | call write_data |
||
9870 | Doczom | 369 | |
9883 | Doczom | 370 | mov dword[frame_struct.FR_WIDTH], 0x0f008a |
371 | mov dword[frame_struct.FR_HEIGHT], 0x280075 |
||
372 | mov dword[frame_struct.FR_TEXT], frame_text_1 |
||
373 | invoke frame_draw, frame_struct |
||
9870 | Doczom | 374 | |
9883 | Doczom | 375 | mov dword[frame_struct.FR_WIDTH],0x0f0114 |
376 | mov dword[frame_struct.FR_HEIGHT], 0xa70060 |
||
377 | mov dword[frame_struct.FR_TEXT], frame_text_2 |
||
378 | invoke frame_draw, frame_struct |
||
9870 | Doczom | 379 | |
9883 | Doczom | 380 | jmp @f |
9108 | Doczom | 381 | .micro: |
9883 | Doczom | 382 | mov esi, 0x00000035 |
383 | mov edx, 0x000000c0 |
||
384 | mcall |
||
9108 | Doczom | 385 | |
9883 | Doczom | 386 | mov eax, SF_DEFINE_BUTTON |
387 | mov ebx, 0x00a70010 |
||
388 | mov ecx, 0x001d0015 |
||
389 | mov edx, eax;0x00000008 |
||
390 | mov esi, [sc.work_button] |
||
391 | mcall |
||
9108 | Doczom | 392 | |
9883 | Doczom | 393 | mov eax, SF_DRAW_TEXT |
394 | mov ebx, 0x000a0020 |
||
395 | mov ecx, 0x90000000 |
||
396 | add ecx, [sc.work_text] |
||
397 | mov edx, _Tctl |
||
398 | mcall |
||
9108 | Doczom | 399 | |
9883 | Doczom | 400 | add ebx, 0x00a00000 |
401 | mov ecx, 0x81000000 |
||
402 | add ecx, [sc.work_text] |
||
403 | mov edx, _down |
||
404 | mcall |
||
9108 | Doczom | 405 | |
9883 | Doczom | 406 | mov eax, 0x004a0020 |
407 | mov ebx, drv_data.Tctl |
||
408 | call write_data |
||
9108 | Doczom | 409 | @@: |
9883 | Doczom | 410 | mcall SF_REDRAW, SSF_END_DRAW |
411 | ret |
||
9108 | Doczom | 412 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
413 | ;; procedure write_data(eax, ebx); |
||
414 | ;; eax=x*65536+y |
||
9858 | Doczom | 415 | ;; ebx = pointer on value |
416 | ;; edx = 1 - set color, 0 - set defaunt color |
||
9108 | Doczom | 417 | ;; ecx register don`t save |
418 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
9771 | Doczom | 419 | align 4 |
9108 | Doczom | 420 | write_data: |
9883 | Doczom | 421 | push eax ;save koord |
422 | push ebx ;save *value |
||
423 | ;mov edx,[ebx] ;edx=value |
||
424 | mov esi, ebx |
||
425 | cmp dword[ebx], -1 ; flag ziro data |
||
426 | mov ecx, 0x90000000 |
||
427 | mov ebx, eax |
||
428 | jnz @f |
||
429 | ;write n/a |
||
430 | add ecx, [sc.work_text] |
||
431 | mov eax, SF_DRAW_TEXT |
||
432 | add ebx, 0x00100000 |
||
433 | mov edx, _NA |
||
434 | mcall |
||
435 | pop ebx |
||
436 | pop eax |
||
437 | ret |
||
9108 | Doczom | 438 | @@: |
9883 | Doczom | 439 | ;set color |
440 | push eax |
||
441 | push edx |
||
442 | push ecx |
||
443 | mov dword[.color_text], 0x000000cf ;blue |
||
444 | cmp byte[.defaunt_color], 1 |
||
445 | jnz @f |
||
446 | ;mov dword[.color_text], 0x000000cf ;blue |
||
447 | jmp .end_set_color |
||
9858 | Doczom | 448 | @@: |
9883 | Doczom | 449 | cmp dword[drv_data.Tcrit], -1 |
450 | jz .end_set_color |
||
451 | cmp dword[drv_data.Tcrit], 0 |
||
452 | jz .end_set_color |
||
9870 | Doczom | 453 | |
9883 | Doczom | 454 | xor edx, edx |
455 | mov eax, [esi] |
||
456 | imul eax, 10 |
||
457 | xor edx, edx |
||
458 | div dword[drv_data.Tcrit] |
||
459 | cmp eax, 9 |
||
460 | jb @f |
||
461 | mov dword[.color_text], 0x00d50000 ; red |
||
462 | jmp .end_set_color |
||
9858 | Doczom | 463 | @@: |
9883 | Doczom | 464 | cmp eax, 7 |
465 | jb @f |
||
466 | mov dword[.color_text], 0x00f07000 ; orange |
||
467 | jmp .end_set_color |
||
9858 | Doczom | 468 | @@: |
9883 | Doczom | 469 | mov dword[.color_text], 0x0000a500 ; green |
9858 | Doczom | 470 | .end_set_color: |
9883 | Doczom | 471 | pop ecx |
472 | pop edx |
||
473 | pop eax |
||
9108 | Doczom | 474 | ;write_value |
475 | ; value / 1000 =value_in_1 |
||
476 | ;input value_in_1,koord_start |
||
477 | ; if value >=100 then dot_kord=4 ; =0x20 |
||
478 | ; if value >10 then dot_kord=3; =0x18 |
||
479 | ; dot_kord=2 |
||
480 | ;input ".", koord_start+dot_koord*size_w(char) |
||
481 | ;value-value_in_1 = value_in_2 |
||
482 | ;input value_in_2, koord_start+dot_kord+1*size_w(char=8) |
||
9883 | Doczom | 483 | push eax ;save koord |
484 | mov eax, [esi] ; eax = value |
||
485 | xor edx, edx |
||
486 | mov ebx, 1000 |
||
487 | div ebx |
||
488 | cmp eax, 100 |
||
489 | jae .dot_4 |
||
490 | cmp eax, 10 |
||
491 | jae .dot_3 ; ----| |
||
492 | mov edi, 0x10 ; | |
||
493 | jmp .write ; | |
||
494 | .dot_4: ; | |
||
495 | xor edi, edi ; | |
||
496 | jmp .write ; | |
||
497 | .dot_3: ; <-| |
||
498 | mov edi, 8 |
||
9108 | Doczom | 499 | .write: |
9883 | Doczom | 500 | mov ecx, edx |
501 | pop edx ; edx = koord |
||
502 | push ecx ;save mask string |
||
9108 | Doczom | 503 | |
9883 | Doczom | 504 | shl edi, 16 |
505 | push edx ; save koord |
||
506 | add edx, edi |
||
507 | mov ecx, eax ;ecx = value/1000 |
||
508 | mov ebx, 0x80030000 ; ebx = mask sysfn47 |
||
509 | mov eax, SF_DRAW_NUMBER |
||
510 | mov esi, 0x10000000 |
||
511 | add esi, [.color_text] |
||
512 | mcall |
||
9870 | Doczom | 513 | |
9883 | Doczom | 514 | pop ebx ; ebx = koord |
515 | add ebx, 0x00180000 ; x + x_size_char*3 |
||
516 | mov eax, SF_DRAW_TEXT |
||
517 | mov ecx, 0x90000000 |
||
518 | add ecx, [.color_text] |
||
519 | mov edx, _dot |
||
520 | mcall |
||
9870 | Doczom | 521 | |
9883 | Doczom | 522 | mov eax, SF_DRAW_NUMBER |
523 | mov edx, ebx |
||
524 | mov esi, 0x10000000 |
||
525 | add esi, [.color_text] |
||
526 | mov ebx, 0x00030000 |
||
9108 | Doczom | 527 | |
9883 | Doczom | 528 | add edx, 0x80000 |
529 | pop ecx |
||
530 | mcall |
||
531 | mov eax, SF_DRAW_TEXT |
||
532 | mov ebx, edx |
||
533 | mov ecx, 0x80000000 |
||
534 | add ecx, [.color_text] |
||
535 | add ebx, 0x180000 |
||
536 | mov edx, _t |
||
537 | mcall |
||
9108 | Doczom | 538 | |
9883 | Doczom | 539 | mov ecx, 0x90000000 |
540 | add ecx, [.color_text] |
||
541 | add ebx, 0x60000 |
||
542 | mov edx, _C |
||
543 | mcall |
||
544 | pop ebx |
||
545 | pop eax |
||
546 | mov byte[.defaunt_color], 0 |
||
547 | ret |
||
9858 | Doczom | 548 | .color_text: rd 1 ; color input temp |
549 | .defaunt_color: rb 1 ; flag set color |
||
550 | ;; end proc |
||
9108 | Doczom | 551 | |
552 | error_drv: |
||
9870 | Doczom | 553 | send_notify Error_text |
9108 | Doczom | 554 | exit: |
9883 | Doczom | 555 | mov byte[futex_cmd], 2 |
556 | mcall SF_FUTEX, SSF_WAKE, [futex_handle], 1 |
||
557 | mcall 68, 1 ; переключаем потоки, для того, чтобы сообщение пришло потоку с таймером |
||
558 | ; destroy futex |
||
559 | mcall SF_FUTEX, SSF_DESTROY, [futex_handle] |
||
560 | mcall 68, 13, [log_ptr] ; free page |
||
9870 | Doczom | 561 | |
9883 | Doczom | 562 | mcall 18, 18, dword[PID_AUTO_SAVE] |
563 | mcall SF_TERMINATE_PROCESS |
||
9760 | Doczom | 564 | |
9870 | Doczom | 565 | err_load_lib: |
9883 | Doczom | 566 | send_notify Error_text.load_lib |
567 | mcall SF_TERMINATE_PROCESS |
||
9760 | Doczom | 568 | |
9771 | Doczom | 569 | align 4 |
9760 | Doczom | 570 | index_item: |
571 | dd 1 |
||
9771 | Doczom | 572 | |
9760 | Doczom | 573 | ;eax = int value / 1000 |
574 | ;ebx = *str |
||
575 | ; из за конкретики данного прилажения(а именно измерение температуры проца), сомниваюсь |
||
576 | ; что потребуется больше 3 цифр на значение(ххх.ххх) так что будет костыль |
||
9771 | Doczom | 577 | align 4 |
9760 | Doczom | 578 | int_to_str: |
579 | push ecx edx esi |
||
580 | mov ecx, '0000' |
||
581 | mov [ebx], ecx |
||
9870 | Doczom | 582 | mov [ebx + 5], ecx |
9760 | Doczom | 583 | |
584 | xor edx, edx |
||
585 | mov esi, 1000 |
||
586 | div esi |
||
587 | push edx |
||
588 | mov esi, 10 |
||
589 | push ebx |
||
590 | add ebx, 3 |
||
9771 | Doczom | 591 | and eax, 0x3ff ; 1023 |
9760 | Doczom | 592 | .loop: |
593 | test eax, eax |
||
594 | jz @f |
||
595 | xor edx, edx |
||
596 | div esi |
||
597 | add edx, '0' |
||
598 | mov byte[ebx], dl |
||
599 | dec ebx |
||
600 | jmp .loop |
||
601 | @@: |
||
602 | pop ebx |
||
603 | add ebx, 8;4 |
||
604 | pop edx |
||
605 | test edx, edx |
||
606 | jz @f |
||
607 | mov eax, edx |
||
608 | imul eax, 10 |
||
609 | xor edx, edx |
||
610 | push edx |
||
611 | push ebx |
||
612 | jmp .loop |
||
613 | @@: |
||
614 | pop esi edx ecx |
||
615 | ret |
||
9870 | Doczom | 616 | |
617 | thread_timer: |
||
618 | mcall 40, 0x00 ; очищаем маску событий |
||
619 | @@: |
||
620 | mov byte[futex_cmd], 0x00 |
||
621 | mcall SF_FUTEX, SSF_WAIT, [futex_handle],[futex_cmd], 100*60 ; 1 min |
||
622 | test eax, eax |
||
623 | jz .check_cmd |
||
624 | cmp eax, -2 |
||
625 | je .exit ; error |
||
626 | ; realloc log |
||
627 | mov ecx, [log_size] |
||
628 | mov edx, [log_ptr] |
||
629 | add ecx, 20 ; size item data |
||
630 | mov ebx, SSF_MEM_REALLOC ; 20 |
||
631 | mcall 68 |
||
632 | test eax, eax |
||
633 | jz .err_alloc_2 |
||
634 | mov [log_ptr], eax |
||
635 | add eax, [log_size] |
||
636 | mov [log_size], ecx;edx |
||
637 | mov edi, eax |
||
638 | ; get new data temp |
||
639 | push edi |
||
640 | mov eax,[index_item] |
||
641 | imul eax,1000 |
||
642 | mov ebx, graph_start.new_data |
||
643 | call int_to_str |
||
644 | |||
645 | mov ebx, [log_ptr] |
||
646 | mov eax, [graph_start.new_data] |
||
647 | mov [ebx + 2], eax ; rewrite index x koord |
||
648 | |||
649 | inc dword[index_item] |
||
650 | mov eax,[drv_data.Tctl] |
||
651 | mov ebx, graph_start.new_data_2 |
||
652 | call int_to_str |
||
653 | pop edi |
||
654 | mov esi, graph_start.new_data |
||
655 | ; save data |
||
656 | movsd |
||
657 | movsd |
||
658 | movsd |
||
659 | movsd |
||
660 | movsd |
||
661 | |||
9883 | Doczom | 662 | cmp dword[save_ptr], 0 |
663 | jz .no_save_mode |
||
664 | push dword[log_path] |
||
665 | mov eax, [save_ptr] |
||
666 | mov [log_path], eax |
||
667 | mcall 70, file_log |
||
668 | pop dword[log_path] |
||
669 | .no_save_mode: |
||
9870 | Doczom | 670 | jmp @b |
671 | .err_alloc_2: |
||
672 | send_notify Error_text.alloc_2 |
||
673 | jmp @b |
||
674 | .check_cmd: |
||
675 | test byte[futex_cmd], 0x02 ; 1- stop 2 - save in file |
||
676 | jz .exit |
||
677 | mcall 70, file_log |
||
678 | test byte[futex_cmd], 1 |
||
679 | jz @b |
||
680 | .exit: |
||
681 | mov byte[futex_cmd], 0x00 |
||
682 | mcall -1 |
||
9883 | Doczom | 683 | |
684 | thread_auto_save: |
||
685 | mcall 40, 0 ;clear event mask |
||
686 | ;calculate first data in file(4 value border graphic) |
||
687 | mov eax,[drv_data.Tmax] |
||
688 | mov ebx, graph_start_1.new_data |
||
689 | call int_to_str |
||
690 | ;create file |
||
691 | mcall 70, .file |
||
692 | mov dword[.file], 3 |
||
693 | mov dword[.log_size], 20 |
||
694 | mov dword[.log_offset], 19 |
||
695 | mov dword[.log_ptr], graph_start_1.new_data |
||
696 | @@: |
||
697 | mcall 5, 100*60 |
||
698 | ; add new item in file |
||
699 | push dword[.log_offset] |
||
700 | mov dword[.log_size], 4 |
||
701 | mov dword[.log_offset], 2 |
||
702 | mov eax,[.index_item] |
||
703 | imul eax,1000 |
||
704 | mov ebx, graph_start_1.new_data |
||
705 | call int_to_str |
||
706 | mcall SF_FILE, .file |
||
707 | inc dword[.index_item] |
||
708 | pop dword[.log_offset] |
||
709 | mov dword[.log_size], 20 |
||
710 | ; get string y koord |
||
711 | mov eax,[drv_data.Tctl] |
||
712 | mov ebx, graph_start_1.new_data_2 |
||
713 | call int_to_str |
||
714 | mcall SF_FILE, .file |
||
715 | add dword[.log_offset], 20 |
||
716 | jmp @b |
||
717 | mcall -1 |
||
718 | .index_item: dd 1 |
||
719 | .file: |
||
720 | dd 2 |
||
721 | .log_offset: dd 0 |
||
722 | dd 0 |
||
723 | .log_size: dd 19 |
||
724 | .log_ptr: dd graph_start_1 |
||
725 | db 0 |
||
726 | save_ptr: dd 0 ; pointer to save file or zero |
||
727 | PID_AUTO_SAVE: dd 0 ; for break this thread |
||
9108 | Doczom | 728 | ;Data_program; |
9116 | Doczom | 729 | title db 'AMDtemp',0 |
9120 | Doczom | 730 | path_drv db '/kolibrios/drivers/sensors/k10temp.sys',0 |
9199 | Doczom | 731 | Error_text db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0 |
9870 | Doczom | 732 | .save_log: db '"Error save log\nThe log has not been created" -tdE',0 |
733 | .save_log_1:db '"Error save log\nThe log file is already saving" -tdE',0 |
||
734 | .alloc_1: db '"Error alloc memory for log" -tdE',0 |
||
735 | .alloc_2: db '"Error alloc memory for new koord" -tdE',0 |
||
736 | .load_lib: db '"Error load library" -tdE',0 |
||
737 | |||
9108 | Doczom | 738 | _NA db 'N/A',0 |
739 | _dot db '.',0 |
||
740 | _t db 0x1d,0x00 |
||
741 | _C db 'C',0x00 |
||
742 | _down db 0x1f,0x00 |
||
743 | _up db 0x1e,0x00 |
||
744 | |||
745 | |||
746 | _Tctl db 'Tctl: ',0 |
||
747 | _Tmax db 'Tmax: ',0 |
||
9870 | Doczom | 748 | _Tcrit_hyst db 'Thyst:',0;'Tcrit hyst:',0 |
9108 | Doczom | 749 | _Tcrit db 'Tcrit:',0 |
9870 | Doczom | 750 | _Tdie db 'Tdie: ',0 |
9108 | Doczom | 751 | _Tccd1 db 'Tccd1:',0 |
752 | _Tccd2 db 'Tccd2:',0 |
||
753 | _Tccd3 db 'Tccd3:',0 |
||
754 | _Tccd4 db 'Tccd4:',0 |
||
755 | _Tccd5 db 'Tccd5:',0 |
||
756 | _Tccd6 db 'Tccd6:',0 |
||
757 | _Tccd7 db 'Tccd7:',0 |
||
758 | _Tccd8 db 'Tccd8:',0 |
||
759 | |||
9870 | Doczom | 760 | _start_log: db 'start loging',0 |
761 | _stop_log: db 'stop loging ',0 |
||
762 | _save_log: db ' save log ',0 |
||
763 | text_log_butt: dd _start_log |
||
764 | |||
765 | align 4 |
||
766 | file_log: |
||
767 | dd 2 |
||
768 | dd 0 |
||
769 | dd 0 |
||
770 | log_size: dd 0 |
||
771 | log_ptr: dd 0 |
||
772 | db 0 |
||
773 | log_path: dd openfile_path |
||
774 | |||
775 | futex_handle: dd 0 |
||
776 | futex_cmd: dd 0 ;1- stop 2 - save in file & no exit 3 - save in file & exit |
||
777 | |||
778 | drv_ptr: dd path_drv ; pointer to path on driver |
||
779 | |||
780 | frame_text_1: db 'General info',0 |
||
781 | frame_text_2: db 'Extended info',0 |
||
782 | |||
783 | align 16 |
||
784 | @IMPORT: |
||
785 | |||
786 | library box_lib , 'box_lib.obj', \ |
||
787 | proc_lib , 'proc_lib.obj' |
||
788 | |||
789 | import proc_lib, \ |
||
790 | OpenDialog_Init , 'OpenDialog_init',\ |
||
791 | OpenDialog_Start , 'OpenDialog_start' |
||
792 | |||
793 | import box_lib,\ |
||
794 | frame_draw , 'frame_draw' |
||
795 | |||
796 | frame_struct: |
||
797 | dd 0;FR_STYLE в коде либы не используется |
||
798 | .FR_WIDTH dw 0x8a;FR_WIDTH |
||
799 | dw 0x0f;FR_LEFT start x |
||
800 | .FR_HEIGHT dw 0x75;FR_HEIGHT |
||
801 | dw 0x28;FR_TOP start y |
||
802 | .FR_OUTER_COLOR dd 0xff;FR_OUTER_COLOR внешний окрас линии при флаге x000z |
||
803 | .FR_INNER_COLOR dd 0xff00;FR_INNER_COLOR внутрений окрас линии при флаге x000z |
||
804 | dd 00001b;FR_FLAGS |
||
805 | ;FR_CAPTION equ 00001b показывать заголовок или нет |
||
806 | ;FR_FILLED equ 10000b закрашивает внутрению область цветом фона текста |
||
807 | .FR_TEXT dd 0;FR_TEXT тут и так понятно |
||
808 | dd 0;FR_TEXT_POSITION 0 - сверху текст 1 - снизу текст |
||
809 | dd 1;FR_FONT |
||
810 | dd 0x0c;FR_FONT_HEIGHT смещение координаты y выводимого текста |
||
811 | .FR_FORE_COLOR dd 0xff;FR_FORE_COLOR цвет текста |
||
812 | .FR_BACK_COLOR dd 0xffffff;FR_BACK_COLOR фон символов текста |
||
813 | |||
9108 | Doczom | 814 | ;;flag mode input data |
815 | flag_micro_info db 1 |
||
816 | drv_data: |
||
817 | .Tctl dd -1 |
||
818 | .Tdie dd -1 |
||
819 | .Tccd1 dd -1 |
||
820 | .Tccd2 dd -1 |
||
821 | .Tccd3 dd -1 |
||
822 | .Tccd4 dd -1 |
||
823 | .Tccd5 dd -1 |
||
824 | .Tccd6 dd -1 |
||
825 | .Tccd7 dd -1 |
||
826 | .Tccd8 dd -1 |
||
827 | |||
828 | .Tmax dd -1 |
||
829 | .Tcrit dd -1 |
||
830 | .Tcrit_hyst dd -1 |
||
9120 | Doczom | 831 | .sizeof = $ - drv_data ; |
9108 | Doczom | 832 | |
9771 | Doczom | 833 | align 4 |
9108 | Doczom | 834 | drv_struct: |
9199 | Doczom | 835 | .handl dd 0 |
836 | dd 0 |
||
837 | dd 0 |
||
838 | dd 0 |
||
839 | dd drv_data |
||
840 | dd drv_data.sizeof;52 ; 13*4 |
||
9771 | Doczom | 841 | align 4 |
9199 | Doczom | 842 | run_notify: |
843 | dd 7 |
||
844 | dd 0 |
||
9870 | Doczom | 845 | .message: dd Error_text |
9199 | Doczom | 846 | dd 0 |
847 | dd 0 |
||
9870 | Doczom | 848 | db '/sys/@notify',0 |
9771 | Doczom | 849 | align 4 |
9883 | Doczom | 850 | graph_start_1: db '0 0000 0 ' ; 9 byte |
851 | .new_data: db '0000.0000 ' ; 10-19 byte 10 byte |
||
852 | .new_data_2: db '0000.0000 ' ; 20-29 byte 10 byte |
||
853 | align 4 |
||
9771 | Doczom | 854 | graph_start: db '0 0000 0 ' ; 9 byte |
855 | .new_data: db '0000.0000 ' ; 10-19 byte 10 byte |
||
856 | .new_data_2: db '0000.0000 ' ; 20-29 byte 10 byte |
||
857 | |||
9870 | Doczom | 858 | ;дынные для диалога открытия файлов |
9771 | Doczom | 859 | align 4 |
9870 | Doczom | 860 | OpenDialog_data: |
861 | .type dd 1 ;0 - открыть, 1 - сохранить, 2 - выбрать директорию |
||
862 | .procinfo dd procinfo ;+4 это для получения данных потока |
||
863 | .com_area_name dd communication_area_name ;+8 |
||
864 | .com_area dd 0 ;+12 как я понял, сюда будет записан указатель на расшареную память |
||
865 | .opendir_path dd 0 ;+16 путь к папке, которая будет при открытии компонента |
||
866 | .dir_default_path dd default_dir ;+20 путь к папке, если opendir_path=0 |
||
867 | .start_path dd opendialog_path ;+24 путь к opendialog |
||
868 | .draw_window dd draw ;+28 функция перерисовки окна, вызвавшего opendialog |
||
869 | .status dd 0 ;+32 0, 2 - выход или ошибка 1 - юзер нажал OK |
||
870 | .openfile_path dd openfile_path ;+36 указатель на буфер для путь к открываемому файлу |
||
871 | .filename_area dd filename_area ;+40 указатель на буфер для названия файла |
||
872 | .filter_area dd 0;Filter указатель на массив фильторов поиска |
||
873 | .x: |
||
874 | .x_size dw 420 ;+48 ; Window X size |
||
875 | .x_start dw 10 ;+50 ; Window X position |
||
876 | .y: |
||
877 | .y_size dw 320 ;+52 ; Window y size |
||
878 | .y_start dw 10 ;+54 ; Window Y position |
||
879 | |||
880 | ;формат фильтров |
||
881 | ;Filter: |
||
882 | ;dd Filter.end - Filter.1 |
||
883 | ;.1: |
||
884 | ;db 'ASM',0 |
||
885 | ;db 'INC',0 |
||
886 | ;db 'TXT',0 |
||
887 | ;.end: |
||
888 | ;db 0 |
||
889 | |||
890 | |||
891 | default_dir db '/sys',0 ;директория по умолчанию |
||
892 | |||
893 | communication_area_name: |
||
894 | db 'FFFFFFFF_open_dialog',0 |
||
895 | opendialog_path: |
||
896 | db '/sys/File managers/opendial',0 |
||
897 | filename_area: |
||
898 | db 'temp1.grf',0 |
||
899 | rb 256 |
||
900 | |||
9771 | Doczom | 901 | align 4 |
902 | PATH: |
||
903 | rb 512 ; buffer for command line. string for save log. |
||
9108 | Doczom | 904 | sc system_colors |
905 | I_END: |
||
906 | rd 256 |
||
907 | STACKTOP: |
||
9870 | Doczom | 908 | |
909 | rb 512 ; 512 byte for stack |
||
910 | thread_timer.stack: |
||
9883 | Doczom | 911 | rb 512 ; 512 byte for stack |
912 | thread_auto_save.stack: |
||
9870 | Doczom | 913 | ;rb 1024 |
914 | procinfo process_information |
||
915 | openfile_path: |
||
916 | rb 4096 |
||
9108 | Doczom | 917 | MEM:-| |