Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ;   RDsave для Kolibri (0.6.5.0 и старше)
  3. ;  
  4. ;   Mario79 2005
  5. ;   Heavyiron 12.02.2007
  6. ;
  7. ;   Компилировать FASM'ом
  8. ;
  9. ;---------------------------------------------------------------------
  10. include 'lang.inc'
  11. include '..\..\..\macros.inc'
  12.  
  13. appname equ 'RDsave '
  14. version equ '1.2'
  15.  
  16.   use32              ; включить 32-битный режим ассемблера
  17.   org    0x0         ; адресация с нуля
  18.  
  19.   db     'MENUET01'  ; 8-байтный идентификатор MenuetOS
  20.   dd     0x01        ; версия заголовка (всегда 1)
  21.   dd     START       ; адрес первой команды
  22.   dd     I_END       ; размер программы
  23.   dd     0x2000      ; количество памяти
  24.   dd     0x2000      ; адрес вершины стэка
  25.   dd     0x0         ; адрес буфера для параметров (не используется)
  26.   dd     0x0         ; зарезервировано
  27.  
  28. include '..\..\..\develop\examples\editbox\trunk\editbox.inc'
  29. use_edit_box procinfo,22,5
  30.  
  31. ;---------------------------------------------------------------------
  32. ;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
  33. ;---------------------------------------------------------------------
  34.  
  35. START:
  36.    mov eax, 40
  37.    mov ebx, 100111b
  38.    mcall
  39. red:                    ; перерисовать окно
  40.     call draw_window    ; вызываем процедуру отрисовки окна
  41.  
  42. ;---------------------------------------------------------------------
  43. ;---  ЦИКЛ ОБРАБОТКИ СОБЫТИЙ  ----------------------------------------
  44. ;---------------------------------------------------------------------
  45.  
  46. still:
  47.     push 10
  48.     pop eax
  49.     mcall
  50.  
  51.     dec  eax             ; перерисовать окно?
  52.     jz   red             ; если да - на метку red
  53.     dec  eax
  54.     jz   key
  55.     dec  eax
  56.     jz   button
  57.  
  58. mouse:
  59.     mouse_edit_boxes editbox,editbox_end
  60.     jmp still
  61.    
  62. button:
  63.     mov  al,17           ; получить идентификатор нажатой кнопки
  64.     mcall
  65.  
  66.     cmp  ah,1            ; кнопка с id=1("закрыть")?
  67.     jne  noclose
  68.     or   eax,-1          ; функция -1: завершить программу
  69.     mcall
  70.  
  71. noclose:
  72.     cmp  ah,2
  73.     jne  path_2
  74.     call clear_err
  75.     mov  al,16
  76.     mov  ebx,1
  77.     mcall
  78.     call check_for_error
  79.     jmp  still
  80.  path_2:
  81.     cmp  ah,3
  82.     jne  path_3
  83.     call clear_err
  84.     mov  al,16
  85.     mov  ebx,2
  86.     mcall
  87.     call check_for_error
  88.     jmp  still
  89.  path_3:
  90.     cmp  ah,4
  91.     jne  path_4
  92.     call clear_err
  93.     mov  al,18
  94.     mov  ebx,6
  95.     mov  ecx,path3
  96.     mcall
  97.     call check_for_error
  98.     jmp  still
  99.  path_4:
  100.     call clear_err
  101.     mov  eax,18
  102.     mov  ebx,6
  103.     mov  ecx,path4
  104.     mcall
  105.     call check_for_error
  106.     jmp  still
  107.  
  108. key:        
  109.     mov  al,2
  110.     mcall
  111.     key_edit_boxes editbox,editbox_end
  112.     jmp  still
  113.  
  114.  
  115. check_for_error:                      ;Обработчик ошибок
  116.     cmp eax,0
  117.     jne err1
  118.     mov ecx,[sc.work_text]
  119.     mov edx,ok
  120.     jmp print
  121.  err1:
  122.     cmp eax,1
  123.     jne err3
  124.     mov ecx,0xdd2222
  125.     mov edx,error11
  126.     jmp print
  127.  err3:
  128.     cmp eax,3
  129.     jne err5
  130.     mov ecx,0xdd2222
  131.     mov edx,error3
  132.     jmp print
  133.  err5:
  134.     cmp eax,5
  135.     jne err8
  136.     mov ecx,0xdd2222
  137.     mov edx,error5
  138.     jmp print
  139.  err8:
  140.     cmp eax,8
  141.     jne err9
  142.     mov ecx,0xdd2222
  143.     mov edx,error8
  144.     jmp print
  145.  err9:
  146.     cmp eax,9
  147.     jne err10
  148.     mov ecx,0xdd2222
  149.     mov edx,error9
  150.     jmp print
  151. err10:
  152.     cmp eax,10
  153.     jne err11
  154.     mov ecx,0xdd2222
  155.     mov edx,error10
  156.     jmp print
  157.  err11:
  158.     mov ecx,0xdd2222
  159.     mov edx,error11
  160.     jmp print
  161.  
  162.  print:
  163.     mov eax,4                              ;надписи
  164.     mov ebx,20 shl 16 + 148
  165.     or  ecx,0x80000000
  166.     mcall
  167.     ret
  168.  
  169. clear_err:
  170.     mov al,13
  171.     mov ebx,15 shl 16 + 240
  172.     mov ecx,145 shl 16 +15
  173.     mov edx,[sc.work]
  174.     mcall
  175.     ret
  176.  
  177. ;---------------------------------------------------------------------
  178. ;---  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА  ----------------------------------
  179. ;---------------------------------------------------------------------
  180.  
  181. draw_window:
  182.  
  183.    mov  eax,48
  184.    mov  ebx,3
  185.    mov  ecx,sc
  186.    mov  edx,sizeof.system_colors
  187.    mcall
  188.  
  189.    mov eax,12                            ; функция 12: сообщить ОС об отрисовке окна
  190.    mov bl,1                              ; 1 - начинаем рисовать
  191.    mcall
  192.  
  193.                                          ; СОЗДАЁМ ОКНО
  194.    xor eax,eax                           ; функция 0 : определить и отрисовать окно
  195.    mov ebx,200 shl 16 + 270              ; [x старт] *65536 + [x размер]
  196.    mov ecx,200 shl 16 + 190              ; [y старт] *65536 + [y размер]
  197.    mov edx,[sc.work]                     ; цвет рабочей области  RRGGBB,8->color gl
  198.    or  edx,0x33000000
  199.    mov edi,title                        ; ЗАГОЛОВОК ОКНА
  200.    mcall
  201.  
  202. draw_edit_boxes editbox,editbox_end,use_f9,procinfo  ;рисование edit box'ов
  203.  
  204.    mov al,13                             ;отрисовка теней кнопок
  205.    mov ebx,194 shl 16 + 60
  206.    mov ecx,34 shl 16 +15
  207.    mov edx,0x444444
  208.    mcall
  209.  
  210.    add ecx,20 shl 16
  211.    mcall
  212.  
  213.    add ecx,20 shl 16
  214.    mcall
  215.  
  216.    add ecx,40 shl 16
  217.    mcall
  218.  
  219.    mov eax,8                             ;отрисовка кнопок
  220.    sub ebx,4 shl 16
  221.    sub ecx,4 shl 16
  222.    mov edx,5
  223.    mov esi,[sc.work_button]
  224.    mcall
  225.  
  226.    sub ecx,40 shl 16
  227.    dec edx
  228.    mcall
  229.  
  230.    sub ecx,20 shl 16
  231.    dec edx
  232.    mcall
  233.  
  234.    sub ecx,20 shl 16
  235.    dec edx
  236.    mcall
  237.  
  238.    mov al,4                              ;надписи
  239.    mov ebx,45 shl 16 + 12
  240.    mov ecx,[sc.work_text]
  241.    or  ecx,0x80000000
  242.    mov edx,label1
  243.    mcall
  244.  
  245.    mov ebx,150 shl 16 + 35
  246.    mov edx,path1
  247.    mcall
  248.  
  249.    add ebx,20
  250.    mov edx,path2
  251.    mcall
  252.  
  253.    mov ebx,75 shl 16 + 75
  254.    mov edx,path3
  255.    mcall
  256.  
  257.    mov ebx,30 shl 16 + 97
  258.    mov edx,label2
  259.    mcall
  260.  
  261.    mov ebx,40 shl 16 + 135
  262.    mov edx,label3
  263.    mcall
  264.  
  265.    mov ecx,[sc.work_button_text]
  266.    or  ecx,0x80000000
  267.    mov ebx,195 shl 16 + 35
  268.    mov edx,save
  269.    mcall
  270.  
  271.    add ebx,20
  272.    mcall
  273.  
  274.    add ebx,20
  275.    mcall
  276.  
  277.    add ebx,40
  278.    mcall
  279.  
  280.    mov al,12                            ; функция 12: сообщить ОС об отрисовке окна
  281.    mov ebx,2                            ; 2, закончили рисовать
  282.    mcall
  283.  
  284.    ret                                  ; выходим из процедуры
  285.  
  286.  
  287. ;---------------------------------------------------------------------
  288. ;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
  289. ;---------------------------------------------------------------------
  290.  
  291. title db appname,version,0
  292.  
  293. editbox:
  294. edit1 edit_box 170,10,113,0xffffff,0xaabbcc,0,0,0,512,path4,ed_focus,26,26
  295. editbox_end:
  296.  
  297. if lang eq ru
  298. save    db 'Сохранить',0
  299. label1  db 'Выберите один из вариантов:',0
  300. label2  db 'Или введите полный путь к файлу:',0
  301. label3  db 'Все папки должны существовать',0
  302. ok      db 'RAM-диск сохранен успешно',0
  303. error3  db 'Неизвестная файловая система',0
  304. error5  db 'Несуществующий путь',0
  305. error8  db 'Нет места на диске',0
  306. error9  db 'Таблица FAT разрушена',0
  307. error10 db 'Доступ запрещен',0
  308. error11 db 'Ошибка устройства',0
  309.  
  310. else
  311. save    db '  Save',0
  312. label1  db 'Select one of the variants:',0
  313. label2  db '   Or enter full path to file:',0
  314. label3  db '    All folders must exist',0
  315. ok      db 'RAM-drive was saved successfully',0
  316. error3  db 'Unknown file system',0
  317. error5  db 'Incorrect path',0
  318. error8  db 'Disk is full',0
  319. error9  db 'FAT table corrupted',0
  320. error10 db 'Access denied',0
  321. error11 db 'Device error',0
  322.  
  323. end if
  324.  
  325. mouse_flag: dd 0x0
  326.  
  327. path1   db '/fd/1/',0
  328. path2   db '/fd/2/',0
  329. path3   db '/hd0/1/kolibri.img',0
  330. path4   db '/hd0/1/kolibri/kolibri.img',0  ;для резервного сохранения
  331.  
  332. ;---------------------------------------------------------------------
  333. I_END:                             ; метка конца программы
  334.  
  335. rb 514
  336.  
  337. sc     system_colors
  338.  
  339. procinfo process_information
  340.  
  341.  
  342.