Subversion Repositories Kolibri OS

Rev

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: