Subversion Repositories Kolibri OS

Rev

Rev 485 | Rev 833 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; Автор программы Евтихов Максим (Maxxxx32)
  2. ; 01.02.07 - обновлён editbox
  3. ; 31.01.07 - всё теперь рисуется относительно клиентской области
  4. macro draw_status text_ptr
  5. {
  6.         mov     [status.text],dword text_ptr
  7.         call    send_draw_status
  8. }
  9.  
  10.  
  11. title equ 'Screenshooter v 0.9' ; Заголовок окна
  12. include 'macros.inc'  ; вставляем макросы
  13.         meos_header  cmdstr ; вставляем заголовок программы
  14. include 'scrwin.inc'  ; вставляем код окна прдпросмотра
  15. include 'scrsavef.inc'; вставляем процедуру сохранения файла
  16.         use_edit_box   structure_of_potock,22,5 ; \
  17.         use_txt_button                          ;  |
  18.         use_label                               ;  |-- GUI компоненты и некоторые процедуры
  19.         use_check_box                           ;  |
  20.         use_text_work                           ; /
  21. include 'gp.inc'
  22. include 'srectwin.inc'
  23. include 'lang.inc'
  24. ;--- начало программы ---
  25.         app_start
  26.         ;mov     al,[gs:1280*4*1024]
  27.                     ; устанавливаем ipc буффер
  28.         push    60
  29.         pop     eax
  30.         ;mov     ebx,1
  31.         xor     ebx,ebx
  32.         inc     ebx
  33.         mov     ecx,app_ipc
  34.         mov     edx,32
  35.         int     0x40
  36.  
  37.         push    66   ; устанавливаем глобальную горячую клавишу
  38.         pop     eax
  39.         push    eax
  40.         mov     ebx,4
  41.         mov     cl,55    ; 55 - PrintScrn
  42.         xor     edx,edx
  43.         int     0x40
  44.  
  45.         mov     ebx,app
  46.         call    get_slot_n
  47.         mov     [slot_n],ecx
  48.  
  49.         ; устанавливаем маску событий
  50.         set_events_mask (evm_redraw+evm_key+evm_button+evm_mouse+evm_ipc)
  51.  
  52. ; сюда прыгаем при каждой перерисовке
  53. red:
  54.         get_procinfo app   ; получаем информацию о процессе
  55.         get_sys_colors sc  ; получаем системные цвета
  56.  
  57.         ; устанавливаем системные цвета у GUI компонентов
  58.         txt_but_set_sys_color buttons,buttons_end,sc             ; \
  59.         labels_set_sys_color labels,labels_end,sc                ; |
  60.         check_boxes_set_sys_color check_boxes,check_boxes_end,sc ; |
  61.         edit_boxes_set_sys_color editboxes,editboxes_end,sc      ; /
  62.  
  63.         get_screen_prop scr ; получаем информацию об экране
  64.         call    draw_window ; перерисовываем окно
  65. still:
  66.         wait_event red,key,button,mouse,ipc,still ; ждем событий
  67.  
  68. key:
  69.         get_key
  70.         cmp     al,2
  71.         jne     @f
  72.         cmp     ah,55
  73.         jne     @f
  74.         call    shoot
  75.         jmp     still
  76. @@:
  77.         key_edit_boxes editboxes,editboxes_end
  78.         jmp     still
  79. button:
  80.         get_pressed_button
  81.         cmp     ah,1
  82.         je      p_close
  83.         txt_but_ev buttons,buttons_end
  84.         jmp     still
  85. mouse:
  86.         get_active_window
  87.         cmp     eax,[slot_n]
  88.         jne     still
  89.         mouse_check_boxes check_boxes,check_boxes_end
  90.         mouse_edit_boxes editboxes,editboxes_end
  91.         jmp     still
  92. ipc:
  93.         cmp     word [app_ipc+8],2
  94.         jne     @f
  95.         min_window
  96.         jmp     .clear_ipc
  97. @@:
  98.  
  99.         call    draw_number
  100.         call    dr_st
  101.  
  102. .clear_ipc:
  103.         cld
  104.         xor     eax,eax
  105.         movr     ecx,32
  106.         mov     edi,app_ipc
  107.         rep     stosb
  108.         jmp     still
  109.  
  110. p_close:
  111.         btr     dword [flags],1
  112.  
  113.         bt      dword [flags],3
  114.         jnc     @f
  115.         movr    eax,18
  116.         mov     ebx,eax
  117.         mov     ecx,[set_rect_window_pid]
  118.         int     0x40
  119. @@:
  120.  
  121. close:
  122.         app_close
  123.  
  124. ;--------------------------------------------------------------------
  125. ;--- прооцедура перерисовки главного окна ---------------------------
  126. ;--------------------------------------------------------------------
  127. draw_window:
  128. start_draw_window        ; начало перерисовки
  129.         ; определяем окно
  130.         get_skin_height
  131.         mov     ebx,100*65536+320
  132.         mov     ecx,100*65536+220
  133.         add     cx,ax
  134.         mov     edx,[sc.work]
  135.         add     edx,0x34000000;0x33000000
  136.         xor     esi,esi
  137.         ;xor     edi,edi
  138.         mov     edi,grab_text
  139.         xor     eax,eax
  140.         int     0x40
  141.  
  142.         movr     eax,47             ; выводим числа в окно
  143.         mov     bx,4
  144.         shl     ebx,16
  145.         movsx   ecx,word [scr.width] ; ширина экрана
  146.         mov     dx,95
  147.         shl     edx,16
  148.         mov     dx,[label1.top]
  149.         push    dx
  150.         mov     esi,[sc.work_text]
  151.         int     0x40
  152.         movsx   ecx,word [scr.height]   ; высота экрана
  153.         mov     dx,[label2.top]
  154.         int     0x40
  155.         mov     bx,2
  156.         shl     ebx,16
  157.         movsx   ecx,word [scr.bitspp]   ; бит на пиксель
  158.         mov     dx,240
  159.         shl     edx,16
  160.         pop     dx
  161.         int     0x40
  162.         mov     bx,6
  163.         shl     ebx,16
  164.         mov     ecx,[scr.bytesps]       ; байт на строку
  165.         mov     dx,[label2.top]
  166.         int     0x40
  167.  
  168.         call    draw_number      ; прорисовываем номер снимка
  169.         call    dr_st
  170.  
  171.         draw_labels labels,labels_end            ; метки
  172.         draw_edit_boxes editboxes,editboxes_end  ; edit_box
  173.         draw_txt_buttons buttons,buttons_end     ; кнопки
  174.         draw_check_boxes check_boxes,check_boxes_end ; флажки
  175. stop_draw_window      ; конец перерисовки
  176. ret
  177.  
  178. shoot:
  179.         bt      dword [ch4.flags],1   ; включена ли задержка ?
  180.         jnc     @f
  181.         draw_status delay_now
  182.         mov     edi,ed_buffer.2
  183.         call    zstr_to_int
  184.         mov     ebx,eax
  185.         delay
  186. @@:
  187.         call    get_mem_for_shoot; получаем память для снимка
  188.  
  189.  
  190.         bts     dword [flags],0       ; нулевой флаг - снимок есть в памяти
  191.  
  192.         ; делаем снимок
  193.         draw_status shooting
  194.         mov     esi,scr
  195.         mov     edi,[scr_buf.ptr]
  196.         call    copy_screen_to_image
  197.  
  198.         bt      dword [use_rect.flags],1
  199.         jc      .use_rect
  200.         push    dword [scr]
  201.         jmp     @f
  202. .use_rect:
  203.         push    dword [rect.height]
  204. @@:
  205.         pop     dword [scr_buf.size]
  206.  
  207.         bt      dword [ch5.flags],1  ; включено ли автосохранение ?
  208.         jnc     @f
  209.         call    save_file
  210. @@:
  211.         draw_status     shooted_ok
  212.  
  213.         bt      dword [flags],1
  214.         jnc     @f
  215.         ret
  216. @@:
  217.  
  218.         bt      dword [ch2.flags],1  ; показать окно предпросмотра ?
  219.         jnc     @f
  220.         call    show_scr_window
  221. @@:
  222.         bt      word [ch3.flags],1   ; восстановить окно ?
  223.         jnc     @f
  224.  
  225.         delay 100
  226.         mov     ecx,[slot_n]
  227.         activ_window
  228. @@:
  229. ret
  230.  
  231. ;--- получить память для снимка ---
  232. get_mem_for_shoot:
  233.         mov     [scr_buf.ptr],dword __app_end
  234.         bt      dword [use_rect.flags],1 ; фоткать область экрана
  235.         jc      .use_area
  236.         movzx   ecx, word [scr.width]
  237.         movzx   ebx, word [scr.height]
  238.         jmp     @f
  239. .use_area:
  240.         call    read_rect
  241.         movzx   ecx, word [rect.width]
  242.         movzx   ebx, word [rect.height]
  243. @@:
  244.         imul    ecx,ebx
  245.         lea     ecx,[ecx*3]
  246.         add     ecx,__app_end
  247.         mov     [scr_buf.end_ptr],ecx
  248.         xor     ebx,ebx
  249.         inc     ebx
  250.         mov     eax,64
  251.         int     0x40
  252. ret
  253.  
  254. ;--- содать окно проедпросмотра ---
  255. show_scr_window:
  256. pusha
  257.         bt      dword [flags],0
  258.         jnc     @f
  259.         mov     eax,51
  260.         xor     ebx,ebx
  261.         inc     ebx
  262.         movr     ecx,scr_window
  263.         mov     edx,__app_end-1000
  264.         int     0x40
  265. @@:
  266. popa
  267. ret
  268.  
  269. ;--- прочитать и нарисовать текущий номер ---
  270. apply_number:
  271.         mov     edi,ed_buffer.3
  272.         call    zstr_to_int
  273.         mov     [cur_number],eax
  274.         call    draw_number
  275. ret
  276.  
  277. ;--- процедура прорисовки текущего номера ---
  278. draw_number:
  279.         mov     edi,sign_n_input
  280.         call    zstr_to_int
  281.         mov     [sign_n],al
  282.         movr     eax,13
  283.         mov     ebx,150*65536+96
  284.         mov     cx,[label9.top]
  285.         shl     ecx,16
  286.         mov     cx,10
  287.         mov     edx,[sc.work]
  288.         int     0x40
  289.         movr     eax,47
  290.         movsx   bx,byte [sign_n]
  291.         shl     ebx,16
  292.         mov     ecx,[cur_number]
  293.         mov     dx,150
  294.         shl     edx,16
  295.         mov     dx,[label9.top]
  296.         mov     esi,[sc.work_text]
  297.         int     0x40
  298. ret
  299.  
  300. ;--- процедура, запускающая поток автосъемки ---
  301. start_autoshoot:
  302.         bts     dword [flags],1
  303.         jc      @f
  304.         movr     eax,51
  305.         ;mov     ebx,1
  306.         xor     ebx,ebx
  307.         inc     ebx
  308.         mov     ecx,autoshoot
  309.         mov     edx,__app_end-512
  310.         int     0x40
  311. @@:
  312. ret
  313.  
  314. ;--- останавливает этот поток ---
  315. stop_autoshoot:
  316.         btr     dword [flags],1
  317. ret
  318.  
  319. ;--- цикл потока автосъемки ---
  320. autoshoot:
  321.         mov     ecx,[slot_n]
  322.         activ_window
  323. .next:
  324.         bt      dword [flags],1
  325.         jnc     close
  326.         movr     eax,60
  327.         movr     ebx,2
  328.         mov     ecx,[app.pid]
  329.         mov     edx,messages.draw_number
  330.         mov     esi,2
  331.         int     0x40
  332.         call    shoot
  333.         jmp     autoshoot.next
  334.  
  335. ;--- процедура прорисовки строки состояния ---
  336. ; (должна вызываться потоком главного окна)
  337. dr_st:
  338.         movr     eax,38              ; отрезок
  339.         mov     ebx,0*65536+310
  340.         mov     ecx,198*65536+198
  341.         mov     edx,[sc.work_graph]
  342.         int     0x40
  343.  
  344.         movr     eax,13              ; полоска
  345.         mov     bx,310
  346.         mov     ecx,199*65536+15
  347.         mov     edx,[sc.work]
  348.         int     0x40
  349.  
  350.         mov     edi,status
  351.         call    draw_label
  352. ret
  353.  
  354. ;--- процедура получения номера слота потока ---
  355. ; вход ebx - буффер 1024 байт
  356. ; выход ecx - номер слота
  357. get_slot_n:
  358.         movr     eax,9
  359.         xor     ecx,ecx
  360.         dec     ecx
  361.         int     0x40
  362.  
  363.         mov     edx,[ebx+30]
  364.         xor     ecx,ecx
  365. @@:
  366.         movr     eax,9
  367.         inc     ecx
  368.         int     0x40
  369.         cmp     [ebx+30],edx
  370.         je      @f
  371.         jmp     @b
  372. @@:
  373. ret
  374.  
  375. ;--- процедура, запускающая поток, делающий 1 снимок ---
  376. one_shoot:
  377.         mov     ecx,one_shoot_thread
  378.         mov     edx,shoot_esp
  379.         jmp     @f
  380. ;--- процедра, запускающая поток, сохраняющий снимок ---
  381. save_shoot:
  382.         mov     ecx,save_shoot_thread
  383.         mov     edx,shoot_esp
  384. @@:
  385.         bts     dword [flags],2
  386.         jc      .running
  387.         bt      dword [flags],1
  388.         jc      .running
  389.  
  390.         movr     eax,51
  391.         ;mov     ebx,1
  392.         xor     ebx,ebx
  393.         inc     ebx
  394.         int     0x40
  395. .running:
  396. ret
  397.  
  398. ;--- поток, делающий 1 снимок ---
  399. one_shoot_thread:
  400.         mov     ecx,[slot_n]
  401.         activ_window
  402.         bt      dword [ch1.flags],1   ; минимизировать окно ?
  403.         jnc      @f
  404.         movr     eax,60
  405.         movr     ebx,2
  406.         mov     ecx,[app.pid]
  407.         mov     edx,messages.min_window
  408.         mov     esi,2
  409.         int     0x40
  410. @@:
  411.         call    shoot
  412.         btr     dword [flags],2
  413.         jmp     close
  414.  
  415. ;--- процедура, отправляющая главному окну сообщение о перерисовке
  416. ; строки состояния ---
  417. send_draw_status:
  418.         movr     eax,60
  419.         movr     ebx,2
  420.         mov     ecx,[app.pid]
  421.         mov     edx,messages.draw_status
  422.         mov     esi,2
  423.         int     0x40
  424. ret
  425.  
  426. ;--- поток, сохраняюий файл ---
  427. save_shoot_thread:
  428.         mov     ecx,[slot_n]
  429.         activ_window
  430.         call    save_file
  431.         btr     dword [flags],2
  432.         jmp     close
  433.  
  434. ;--- процедура, запускающая поток окна установки области съемки ---
  435. show_set_rect_window:
  436.         bts     dword [flags],3
  437.         jc      @f
  438.         movr     eax,51
  439.         xor     ebx,ebx
  440.         inc     ebx
  441.         mov     ecx,set_rect_window
  442.         mov     edx,set_rect_window_esp
  443.         int     0x40
  444.  
  445.         mov     [set_rect_window_pid],eax
  446. ret
  447.  
  448. @@:
  449.         movr    eax,18
  450.         mov     ebx,eax
  451.         mov     ecx,[set_rect_window_pid]
  452.         int     0x40
  453.         btr     dword [flags],3
  454. ret
  455.  
  456. ;--- получение информации об активном окне ---
  457. get_active_window_info:
  458.         movr    eax,18
  459.         movr    ebx,7
  460.         int     0x40
  461.  
  462.         mov     ecx,eax
  463.         movr    eax,9
  464.         mov     ebx,active_app
  465.         int     0x40
  466. ret
  467.  
  468. ;====================================================================
  469. ;=== данные программы ===============================================
  470. ;====================================================================
  471. messages:
  472. .draw_number dw 0
  473. .draw_status dw 1
  474. .min_window  dw 2
  475.  
  476.  
  477. grab_text:
  478.         db      title,0
  479.  
  480. labels:
  481. label1 label 5,5,0,text.1   ; ширина экрана
  482. label2 label 5,15,0,text.2   ; высота экрана
  483. label3 label 5,25,0,text.3   ; введите имя файла
  484. label4 label 150,5,0,text.4  ; бит на пиксель
  485. label5 label 150,15,0,text.5  ; байт на строку
  486. label6 label 115,138,0,text.6  ; 100 = 1 сек.
  487. ;label7 label 10,190,0,text.7
  488. ;label8 label 10,225,0,text.8
  489. label9 label 5,52,0,text.9   ; номер текущего симка
  490. label10 label 5,185,0,text.10
  491. status label 5,201,0,no_shoot
  492. labels_end:
  493.  
  494. editboxes:
  495. edit1 edit_box 300,5,35,cl_white,0xaabbcc,0,0,0,1024,ed_buffer.1,ed_focus        ; путь к файлу
  496. edit2 edit_box 35,75,134,cl_white,0xaabbcc,0,0,0,9,ed_buffer.2,ed_figure_only    ; задержка
  497. edit3 edit_box 35,165,164,cl_white,0xaabbcc,0,0,0,9,ed_buffer.3,ed_figure_only
  498. edit4 edit_box 16,165,181,cl_white,0xaabbcc,0,0,0,1,sign_n_input,ed_figure_only,1
  499. editboxes_end:
  500.  
  501. buttons:
  502. but1 txt_button 150,5,15,65,2,0,0,but_text.1,one_shoot            ; сделать снимок
  503. but2 txt_button 145,160,15,65,3,0,0,but_text.2,save_shoot          ; сохранить снимок
  504. but3 txt_button 140,115,12,120,4,0,0,but_text.3,show_scr_window    ; показать снимок
  505. but4 txt_button 80,205,15,163,5,0,0,but_text.4,apply_number        ; применить номер
  506. but5 txt_button 150,5,15,85,6,0,0,but_text.5,start_autoshoot     ; начать автосъёмку
  507. but6 txt_button 145,160,15,85,7,0,0,but_text.6,stop_autoshoot     ; остановить автосъёмку
  508. but7 txt_button 40,205,10,150,8,0,0,but_text.7,show_set_rect_window ; задать область
  509. buttons_end:
  510.  
  511. check_boxes:
  512. ch1 check_box 5,105,cl_white,0,0,ch_text.1,(ch_text.2-ch_text.1)  ; свернуть окно
  513. ch2 check_box 5,120,cl_white,0,0,ch_text.2,(ch_text.3-ch_text.2)  ; затем сделать активным
  514. ch3 check_box 145,105,cl_white,0,0,ch_text.3,(ch_text.4-ch_text.3) ; показать снимок
  515. ch4 check_box 5,135,cl_white,0,0,ch_text.4,(ch_text.5-ch_text.4)  ;
  516. ch5 check_box 5,150,cl_white,0,0,ch_text.5,(ch_text.6-ch_text.5)
  517. ch6 check_box 5,165,cl_white,0,0,ch_text.6,(ch_text.7-ch_text.6)
  518. use_rect check_box 145,150,cl_white,0,0,ch_text.7,(ch_text.8-ch_text.7) ; исп. область
  519. ; автонумерация
  520. check_boxes_end:
  521.  
  522. if lang eq ru
  523. text:
  524. .2 db 'Высота экрана:',0
  525. .1 db 'Ширина экрана:',0
  526. .3 db 'Введите полный путь к файлу:',0
  527. .4 db 'Бит на пиксель:',0
  528. .5 db 'Байт на строку:',0
  529. .6 db '100 = 1 секунда',0
  530. ;.7: db 'Введите имя файла:',0
  531. ;.8: db 'Вместо "*" в имени файла будет вставляться номер.',0
  532. .9 db 'Номер текущего снимка:',0
  533. .10 db 'Количество знаков в номере:',0
  534.  
  535. but_text:
  536. .1 db 'Сделать снимок экрана',0
  537. .2 db 'Сохранить снимок экрана',0
  538. .3 db 'Показать снимок сейчас',0
  539. .4 db 'Применить',0
  540. .5 db 'Начать автосъемку',0
  541. .6 db 'Остановить автосъемку',0
  542. .7 db 'задать',0
  543.  
  544. ch_text:
  545. .1 db 'Свернуть окно';,0
  546. .2 db 'Показать снимок';,0
  547. .3 db 'затем сделать активным';,0
  548. .4 db 'Задержка:';,0
  549. .5 db 'Автосохранение';,0
  550. .6 db 'Автонумерация, начиная с';,0
  551. .7 db 'Область'
  552. .8:
  553.  
  554. no_shoot db 'Снимок не сделан',0
  555. shooting db 'Фотографирование...',0
  556. shooted_ok db 'Снимок сделан',0
  557. saving db 'Сохранение...',0
  558. saved_ok db 'Снимок сохранен',0
  559. delay_now db 'Задержка...',0
  560. bad_file_name db 'Имя файла введено неверно',0
  561. disk_filled db 'Диск заполнен',0
  562. bad_fat_table db 'Таблица FAT разрушена',0
  563. ac_den db 'Доступ запрещен',0
  564. device_er db 'Ошибка устройства',0
  565. not_shooted db 'Сделайте снимок !!!',0
  566. no_file_name db 'Введите имя файла !!!',0
  567. invalid_rect db 'Недопустимые размеры области',0
  568.  
  569. else
  570. text:
  571. .2 db 'Screen width:',0
  572. .1 db 'Screen height:',0
  573. .3 db 'Enter full path to the file:',0
  574. .4 db 'Bits per pixel:',0
  575. .5 db 'Bytes per line:',0
  576. .6 db '100 = 1 second',0
  577. ;.7: db 'Enter name of file:',0
  578. ;.8: db 'Instead of "*" in filename the number will be included.',0
  579. .9 db 'Current photo number:',0
  580. .10 db 'Amount of digits in number:',0
  581.  
  582. but_text:
  583. .1 db 'Make screen photo',0
  584. .2 db 'Save screen photo',0
  585. .3 db 'Show photo now',0
  586. .4 db 'Apply',0
  587. .5 db 'Start autoshooting',0
  588. .6 db 'Stop autoshooting',0
  589. .7 db 'Set',0
  590.  
  591. ch_text:
  592. .1 db 'Minimize window';,0
  593. .2 db 'Show photo';,0
  594. .3 db 'then make active';,0
  595. .4 db 'Delay:';,0
  596. .5 db 'Autosave';,0
  597. .6 db 'Start numeration from';,0
  598. .7 db 'Area'
  599. .8:
  600.  
  601. no_shoot db 'There is no photo',0
  602. shooting db 'Photographing...',0
  603. shooted_ok db 'Photo created',0
  604. saving db 'Saving...',0
  605. saved_ok db 'Photo saved',0
  606. delay_now db 'Delay...',0
  607. bad_file_name db 'File name is wrong',0
  608. disk_filled db 'Disk is full',0
  609. bad_fat_table db 'FAT table destroyed',0
  610. ac_den db 'Access denied',0
  611. device_er db 'Device error',0
  612. not_shooted db 'Make photo !!!',0
  613. no_file_name db 'Enter file name !!!',0
  614. invalid_rect db 'Wrong area size',0
  615.  
  616. end if
  617.  
  618. sign_n_input:
  619.         db      '2',0
  620.  
  621. app_ipc ipc_buffer 32
  622.  
  623. mouse_flag: dd 0x0
  624. structure_of_potock:
  625. rb 100
  626.  
  627. cur_number        dd      ?
  628.  
  629. sign_n        db      ?
  630.  
  631. slot_n        dd ?
  632.  
  633. flags        dd ?
  634.  
  635. scr_buf:
  636. .ptr        dd      ?
  637. .end_ptr        dd      ?
  638. .size:
  639. .height        dw      ?
  640. .width        dw      ?
  641.  
  642. fs_struc:
  643. .funk_n        dd      ?
  644.         dd      ?
  645.         dd      ?
  646. .bytes_to_write  dd      ?
  647. .data_ptr        dd    ?,?
  648. .fn_ptr        dd      ?
  649.  
  650. sf_buf:
  651. .bmp_header   dd      ?
  652. .bmp_area     dd      ?
  653. .end          dd      ?
  654.  
  655. set_rect_window_pid dd ?
  656. set_rect_window_slot dd ?
  657.  
  658. rect_input_buffer:
  659. .left rb 6
  660. .top  rb 6
  661. .width  rb 6
  662. .height rb 6
  663.  
  664. cmdstr rb 257
  665.  
  666. ed_buffer:
  667. .1: rb 1025
  668. .2: rb 10
  669. .3: rb 10
  670.  
  671. file_name:
  672.         rb      1058
  673.  
  674. scr screen_prop
  675. rect:
  676. .left dw ?
  677. .top dw ?
  678. .height dw ?
  679. .width dw ?
  680.  
  681.  
  682. sc sys_color_table
  683. app procinfo        ; информация о главном окне
  684. active_app procinfo ; информация об активном окне
  685. set_rect_window_procinfo procinfo  ; информация об окне области
  686. shoot_esp rb 512                   ; стек потока фотканья
  687. set_rect_window_esp rb 512         ; стек окна области
  688.         app_end    ; конец программы