Subversion Repositories Kolibri OS

Rev

Rev 9870 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;      Copyright (C) 2021-2022, Michael Frolov aka Doczom
  2.  
  3. macro send_notify send_str{
  4.       mov     dword[run_notify.message], send_str
  5.       mcall   SF_FILE, run_notify
  6. }
  7.  
  8.   use32
  9.   org    0
  10.  
  11.   db     'MENUET01'
  12.   dd     1
  13.   dd     START
  14.   dd     I_END
  15.   dd     MEM
  16.   dd     STACKTOP
  17.   dd     PATH
  18.   dd     0
  19.  
  20. include '..\..\proc32.inc'
  21. include '..\..\macros.inc'
  22. include '..\..\KOSfuncs.inc'
  23. include '..\..\dll.inc'
  24.  
  25. include 'parser.inc'
  26. START:
  27. ;init heap
  28.         mcall   68, 11
  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
  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. @@:
  43. ;;óñòàíîâêà ìàñêà ñîáûòèé íà ïîëó÷åíèå ïåðåïèñîâêè è íàæàòèÿ íà êíîïêó
  44.         mcall   SF_SET_EVENTS_MASK, 0x05
  45. ;load driver
  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
  50. main:
  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
  60. ;;îæèäàíèå ñîáûòèÿ â òå÷åíèè 2000ìñ
  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
  67.  
  68. button:
  69.         mcall   SF_GET_BUTTON
  70.  
  71.         cmp     eax, 1
  72.         jz      still
  73.         dec     ah
  74.         je      exit
  75. ;; id button micro_info = 8
  76.         cmp     ah, 7 ;// ah-1=7
  77.         jnz     .no_micro_info
  78.         xor     byte[flag_micro_info], 1
  79.         jmp     still
  80. .no_micro_info:
  81. ; id button log = 9
  82.         cmp     ah, 8 ; 9-1
  83.         jnz     .no_log_button
  84.         cmp     dword[text_log_butt], _start_log
  85.         jnz     .log_stop
  86.  
  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. @@:
  108.         mcall   51, 1, thread_timer, thread_timer.stack
  109.         mov     dword[text_log_butt], _stop_log
  110.         jmp     still
  111. .log_stop:
  112.         ; ïðîáóæäàåì ïîòîê ÷åðåç ôüþòåêñ
  113.         mov     byte[futex_cmd], 1  ; stop thread
  114.         mcall   SF_FUTEX, SSF_WAKE, [futex_handle], 1
  115.         mcall   68, 1 ; ïåðåêëþ÷àåì ïîòîêè, äëÿ òîãî, ÷òîáû ñîîáùåíèå ïðèøëî ïîòîêó ñ òàéìåðîì
  116.  
  117.         ; ìåíÿåì òåêñò â êíîïêå
  118.         mov     dword[text_log_butt], _start_log
  119.         jmp     still
  120. .err_alloc_mem:
  121.         send_notify Error_text.alloc_1
  122.         jmp     still
  123. .no_log_button:
  124. ; id button save = 10
  125.         cmp     ah, 9 ; 10-1
  126.         jnz     still
  127.         cmp     dword[log_ptr], 0
  128.         jnz     @f
  129.         send_notify Error_text.save_log
  130.         jmp     still
  131. @@:
  132.         cmp     byte[futex_cmd], 2 ; 2 - save file
  133.         jnz     @f
  134.         send_notify Error_text.save_log_1
  135.         jmp     still
  136. @@:
  137.         ; òóò âûçîâ ôóíêöèè openDialog
  138.         invoke  OpenDialog_Start, OpenDialog_data
  139.  
  140.         cmp     [OpenDialog_data.status], 1
  141.         jne     still
  142.  
  143.         ;mov      dword[log_path], openfile_path
  144.  
  145.         ; ïðîáóæäàåì ïîòîê ÷åðåç ôüþòåêñ
  146.         mov     byte[futex_cmd], 2  ; save_log
  147.         mcall   SF_FUTEX, SSF_WAKE, [futex_handle], 1
  148.         test    eax, eax
  149.         jnz     still
  150.  
  151.         mcall   51, 1, thread_timer, thread_timer.stack
  152.         mcall   68, 1 ; ïåðåêëþ÷àåì ïîòîêè, äëÿ òîãî, ÷òîáû ñîîáùåíèå ïðèøëî ïîòîêó ñ òàéìåðîì
  153. @@:
  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
  160.  
  161. align 4
  162. draw:
  163.         mcall   SF_REDRAW, SSF_BEGIN_DRAW
  164.         mcall   SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  165.  
  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
  174.  
  175.  
  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
  183.  
  184.         mcall   SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
  185.  
  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
  191.  
  192.         mov     esi,0x00000115     ; link with 58 line
  193.         mov     edx,0x00000132
  194.         mcall
  195. ;;ñîçäàíèå êíîïêè ïåðåêëþ÷åíèÿ ðåæèìà
  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
  202. ;;âûâîä çíàêà íà êíîïêó
  203. ;;òàê êàê ôóíêöèÿ writeText íå äîëæíà èçìåíÿòü ðåãèñòðû
  204. ;;ïðèñâîåíèÿ â ðåãèñòðû eax è ecx ïðîèñõîäÿò òîëüêî 1 ðàç
  205. ;; Äàëåå, òàê êàê òåêñò âûâîäèòñÿ ïî÷òè âñåãäà ñ îäèíàêîâûì
  206. ;; ñìåùåíèåì âíèç(ðàâíûì 15)  äûííûå(ñòðîêè) èìåþò îäèíàêîâûé
  207. ;; ðàçìåð , òî èñïîëüçóåòñÿ èíñòðóêöèÿ add
  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
  214.  
  215.        ;ñîçäàíèå êíîïêè çàïóñêà/âûêëþ÷åíèÿ ëîãà
  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
  229.  
  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
  244.  
  245.         ;âûâîä "Tctl:"
  246.         mov     ebx, 0x00150035
  247.         mov     ecx, 0x90000000
  248.         add     ecx, [sc.work_text]
  249.         mov     edx, _Tctl
  250.         mcall
  251.  
  252.         ;âûâîä "Tmax:"
  253.         add      ebx, 0x15
  254.         add      edx, 7
  255.         mcall
  256.  
  257.         ;âûâîä "Tcrit hyst:"
  258.         ;mov ebx,0x0015005f
  259.         add     ebx, 0x15
  260.         add     edx, 7
  261.         mcall
  262.  
  263.         ;âûâîä "Tcrit:"
  264.         add     ebx, 0x15;0x2a
  265.         add     edx, 7
  266.         mcall
  267.  
  268.         ;âûâîä "Tdie:"
  269.         ;mov ebx,0x00150089 ;0x00a5005f
  270.         add      ebx, 0x15
  271.         add      edx, 7
  272.         mcall
  273.  
  274.         ;âûâîä "Tccd1:"
  275.         add     ebx, 0x2b;0x19
  276.         add     edx, 7
  277.         mcall
  278.  
  279.         ;âûâîä "Tccd2:"
  280.         add     ebx, 0x15
  281.         add     edx, 7
  282.         mcall
  283.  
  284.         ;âûâîä "Tccd3:"
  285.         add     ebx, 0x15
  286.         add     edx, 7
  287.         mcall
  288.  
  289.         ;âûâîä "Tccd4:"
  290.         add     ebx, 0x15
  291.         add     edx, 7
  292.         mcall
  293.  
  294.         ;âûâîä "Tccd5:"
  295.         mov     ebx, 0x009d00b4
  296.         add     edx, 7
  297.         mcall
  298.  
  299.         ;âûâîä "Tccd6:"
  300.         add     ebx, 0x15
  301.         add     edx, 7
  302.         mcall
  303.  
  304.         ;âûâîä "Tccd7:"
  305.         add     ebx, 0x15
  306.         add     edx, 7
  307.         mcall
  308.  
  309.         ;âûâîä "Tccd8:"
  310.         add     ebx, 0x15
  311.         add     edx, 7
  312.         mcall
  313. ;;;;;;input data driver;;;;;;;;;
  314.         mov     eax, 0x004a0035  ;0x004a0020
  315.         mov     ebx, drv_data.Tctl  ;âûâîä äàííûõ îò äðàéâåðà
  316.         call    write_data
  317.  
  318.         add     eax, 0x15
  319.         mov     byte[write_data.defaunt_color], 1
  320.         mov     ebx, drv_data.Tmax
  321.         call    write_data
  322.  
  323.         add     eax, 0x2a
  324.         mov     byte[write_data.defaunt_color], 1
  325.         mov     ebx, drv_data.Tcrit
  326.         call    write_data
  327.  
  328.         add     eax, 0x40;0x19
  329.         mov     ebx, drv_data.Tccd1
  330.         call    write_data
  331.  
  332.         add     eax, 0x15
  333.         add     ebx, 4
  334.         call    write_data
  335.  
  336.         add     eax, 0x15
  337.         add     ebx, 4
  338.         call    write_data
  339.  
  340.         add     eax, 0x15
  341.         add     ebx, 4
  342.         call    write_data
  343.  
  344.         mov     eax, 0x00d000b4
  345.         add     ebx, 4
  346.         call    write_data
  347.  
  348.         add     eax, 0x15
  349.         add     ebx, 4
  350.         call    write_data
  351.  
  352.         add     eax, 0x15
  353.         add     ebx, 4
  354.         call    write_data
  355.  
  356.         add     eax, 0x15
  357.         add     ebx, 4
  358.         call    write_data
  359.  
  360.         mov     eax, 0x004a0089
  361.         mov     ebx, drv_data.Tdie
  362.         mov     byte[write_data.defaunt_color], 1
  363.         call    write_data
  364.  
  365.         mov     eax, 0x004a005f
  366.         mov     byte[write_data.defaunt_color], 1
  367.         mov     ebx, drv_data.Tcrit_hyst
  368.         call    write_data
  369.  
  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
  374.  
  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
  379.  
  380.         jmp     @f
  381. .micro:
  382.         mov     esi, 0x00000035
  383.         mov     edx, 0x000000c0
  384.         mcall
  385.  
  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
  392.  
  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
  399.  
  400.         add     ebx, 0x00a00000
  401.         mov     ecx, 0x81000000
  402.         add     ecx, [sc.work_text]
  403.         mov     edx, _down
  404.         mcall
  405.  
  406.         mov     eax, 0x004a0020
  407.         mov     ebx, drv_data.Tctl
  408.         call    write_data
  409. @@:
  410.         mcall SF_REDRAW, SSF_END_DRAW
  411.         ret
  412. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  413. ;; procedure write_data(eax, ebx);
  414. ;; eax=x*65536+y
  415. ;; ebx = pointer on value
  416. ;; edx = 1 - set color, 0 - set defaunt color
  417. ;; ecx register don`t save
  418. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  419. align 4
  420. write_data:
  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
  438. @@:
  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
  448. @@:
  449.         cmp     dword[drv_data.Tcrit], -1
  450.         jz      .end_set_color
  451.         cmp     dword[drv_data.Tcrit], 0
  452.         jz      .end_set_color
  453.  
  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
  463. @@:
  464.         cmp     eax, 7
  465.         jb      @f
  466.         mov     dword[.color_text], 0x00f07000 ; orange
  467.         jmp     .end_set_color
  468. @@:
  469.         mov     dword[.color_text], 0x0000a500 ; green
  470. .end_set_color:
  471.         pop     ecx
  472.         pop     edx
  473.         pop     eax
  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)
  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
  499. .write:
  500.         mov     ecx, edx
  501.         pop     edx     ; edx = koord
  502.         push    ecx     ;save mask string
  503.  
  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
  513.  
  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
  521.  
  522.         mov     eax, SF_DRAW_NUMBER
  523.         mov     edx, ebx
  524.         mov     esi, 0x10000000
  525.         add     esi, [.color_text]
  526.         mov     ebx, 0x00030000
  527.  
  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
  538.  
  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
  548. .color_text:    rd 1 ; color input temp
  549. .defaunt_color: rb 1 ; flag set color
  550. ;; end proc
  551.  
  552. error_drv:
  553.        send_notify Error_text
  554. exit:
  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
  561.  
  562.         mcall    18, 18, dword[PID_AUTO_SAVE]
  563.         mcall SF_TERMINATE_PROCESS
  564.  
  565. err_load_lib:
  566.         send_notify Error_text.load_lib
  567.         mcall SF_TERMINATE_PROCESS
  568.  
  569. align 4
  570. index_item:
  571.         dd    1
  572.  
  573. ;eax = int   value / 1000
  574. ;ebx = *str
  575. ; èç çà êîíêðåòèêè äàííîãî ïðèëàæåíèÿ(à èìåííî èçìåðåíèå òåìïåðàòóðû ïðîöà), ñîìíèâàþñü
  576. ; ÷òî ïîòðåáóåòñÿ áîëüøå 3 öèôð íà çíà÷åíèå(õõõ.õõõ) òàê ÷òî áóäåò êîñòûëü
  577. align 4
  578. int_to_str:
  579.         push    ecx edx esi
  580.         mov     ecx, '0000'
  581.         mov     [ebx], ecx
  582.         mov     [ebx + 5], ecx
  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
  591.         and     eax, 0x3ff ; 1023
  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
  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.  
  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:
  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
  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
  728. ;Data_program;
  729. title       db 'AMDtemp',0
  730. path_drv    db '/kolibrios/drivers/sensors/k10temp.sys',0
  731. Error_text  db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0
  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.  
  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
  748. _Tcrit_hyst db 'Thyst:',0;'Tcrit hyst:',0
  749. _Tcrit      db 'Tcrit:',0
  750. _Tdie       db 'Tdie: ',0
  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.  
  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.  
  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
  831. .sizeof = $ - drv_data ;
  832.  
  833. align 4
  834. drv_struct:
  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
  841. align 4
  842. run_notify:
  843.                  dd 7
  844.                  dd 0
  845. .message:        dd Error_text
  846.                  dd 0
  847.                  dd 0
  848.                  db '/sys/@notify',0
  849. align 4
  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
  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.  
  858. ;äûííûå äëÿ äèàëîãà îòêðûòèÿ ôàéëîâ
  859. align 4
  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.  
  901. align 4
  902. PATH:
  903.    rb 512 ; buffer for command line. string for save log.
  904. sc      system_colors
  905. I_END:
  906.    rd 256
  907. STACKTOP:
  908.  
  909.         rb      512 ; 512 byte for stack
  910. thread_timer.stack:
  911.         rb      512 ; 512 byte for stack
  912. thread_auto_save.stack:
  913. ;rb 1024
  914.         procinfo process_information
  915.         openfile_path:
  916.                 rb 4096
  917. MEM: