Subversion Repositories Kolibri OS

Rev

Rev 551 | Rev 833 | 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. al equ eax      ; \ decrease kpack'ed size
  31. purge mov       ; /
  32.  
  33. ;---------------------------------------------------------------------
  34. ;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
  35. ;---------------------------------------------------------------------
  36.  
  37. START:
  38.    mov eax, 40
  39.    mov ebx, 100111b
  40.    mcall
  41. red:                    ; перерисовать окно
  42.     call draw_window    ; вызываем процедуру отрисовки окна
  43.  
  44. ;---------------------------------------------------------------------
  45. ;---  ЦИКЛ ОБРАБОТКИ СОБЫТИЙ  ----------------------------------------
  46. ;---------------------------------------------------------------------
  47.  
  48. still:
  49.     mcall 10
  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_box editbox
  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.         push    eax
  73.         call    clear_err
  74.         pop     eax
  75.         push    16
  76.         xor     ebx, ebx
  77.         inc     ebx     ; 16.1 = save to /FD/1
  78.         cmp     ah, 2
  79.         je      doit
  80.         inc     ebx     ; 16.2 = save to /FD/2
  81.         cmp     ah, 3
  82.         je      doit
  83.         pop     ebx
  84.         push    18
  85.         mov     bl, 6   ; 18.6 = save to specified folder
  86.         mov     ecx, path3
  87.         cmp     ah, 4
  88.         je      doit
  89.         mov     ecx, path4
  90. doit:
  91.         pop     eax
  92.         mcall
  93.         call    check_for_error
  94.         jmp     still
  95.  
  96. key:        
  97.     mov  al,2
  98.     mcall
  99.     key_edit_box editbox
  100.     jmp  still
  101.  
  102.  
  103. check_for_error:                      ;Обработчик ошибок
  104.         mov     ecx, [sc.work_text]
  105.         mov     edx, ok
  106.         test    eax, eax
  107.         jz      print
  108.         mov     ecx, 0xdd2222
  109.         add     edx, error3 - ok
  110.         dec     eax
  111.         dec     eax
  112.         jz      print
  113.         add     edx, error5 - error3
  114.         dec     eax
  115.         dec     eax
  116.         jz      print
  117.         add     edx, error8 - error5
  118.         dec     eax
  119.         dec     eax
  120.         dec     eax
  121.         jz      print
  122.         add     edx, error9 - error8
  123.         dec     eax
  124.         jz      print
  125.         add     edx, error10 - error9
  126.         dec     eax
  127.         jz      print
  128.         add     edx, error11 - error10
  129.         dec     eax
  130.         jz      print
  131.         add     edx, aUnknownError - error11
  132.  
  133.  print:
  134.     mov eax,4                              ;надписи
  135.     mov ebx,20 shl 16 + 148
  136.     or  ecx,0x80000000
  137.     mcall
  138.     ret
  139.  
  140. clear_err:
  141.     mov eax,13
  142.     mov ebx,15 shl 16 + 240
  143.     mov ecx,145 shl 16 +15
  144.     mov edx,[sc.work]
  145.     mcall
  146.     ret
  147.  
  148. ;---------------------------------------------------------------------
  149. ;---  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА  ----------------------------------
  150. ;---------------------------------------------------------------------
  151.  
  152. draw_window:
  153.  
  154.    mov  eax,48
  155.    mov  ebx,3
  156.    mov  ecx,sc
  157.    mov  edx,sizeof.system_colors
  158.    mcall
  159.  
  160.    mov eax,12                            ; функция 12: сообщить ОС об отрисовке окна
  161.    mov bl,1                              ; 1 - начинаем рисовать
  162.    mcall
  163.  
  164.                                          ; СОЗДАЁМ ОКНО
  165.    xor eax,eax                           ; функция 0 : определить и отрисовать окно
  166.    mov ebx,200 shl 16 + 270              ; [x старт] *65536 + [x размер]
  167.    mov ecx,200 shl 16 + 190              ; [y старт] *65536 + [y размер]
  168.    mov edx,[sc.work]                     ; цвет рабочей области  RRGGBB,8->color gl
  169.    or  edx,0x34000000
  170.    mov edi,title                        ; ЗАГОЛОВОК ОКНА
  171.    mcall
  172.  
  173. draw_edit_box editbox,use_f9,procinfo   ;рисование edit box'ов
  174.  
  175.    mov al,13                            ;отрисовка теней кнопок
  176.    mov ebx,194 shl 16 + 60
  177.    mov ecx,34 shl 16 +15
  178.    mov edx,0x444444
  179.    mcall
  180.  
  181.    add ecx,20 shl 16
  182.    mcall
  183.  
  184.    add ecx,20 shl 16
  185.    mcall
  186.  
  187.    add ecx,40 shl 16
  188.    mcall
  189.  
  190.    mov eax,8                             ;отрисовка кнопок
  191.    sub ebx,4 shl 16
  192.    sub ecx,4 shl 16
  193.    mov edx,5
  194.    mov esi,[sc.work_button]
  195.    mcall
  196.  
  197.    sub ecx,40 shl 16
  198.    dec edx
  199.    mcall
  200.  
  201.    sub ecx,20 shl 16
  202.    dec edx
  203.    mcall
  204.  
  205.    sub ecx,20 shl 16
  206.    dec edx
  207.    mcall
  208.  
  209.    mov al,4                              ;надписи
  210.    mov ebx,45 shl 16 + 12
  211.    mov ecx,[sc.work_text]
  212.    or  ecx,0x80000000
  213.    mov edx,label1
  214.    mcall
  215.  
  216.    mov ebx,150 shl 16 + 35
  217.    mov edx,path1
  218.    mcall
  219.  
  220.    add ebx,20
  221.    mov edx,path2
  222.    mcall
  223.  
  224.    mov ebx,75 shl 16 + 75
  225.    mov edx,path3
  226.    mcall
  227.  
  228.    mov ebx,30 shl 16 + 97
  229.    mov edx,label2
  230.    mcall
  231.  
  232.    mov ebx,40 shl 16 + 135
  233.    mov edx,label3
  234.    mcall
  235.  
  236.    mov ecx,[sc.work_button_text]
  237.    or  ecx,0x80000000
  238.    mov ebx,195 shl 16 + 35
  239.    mov edx,save
  240.    mcall
  241.  
  242.    add ebx,20
  243.    mcall
  244.  
  245.    add ebx,20
  246.    mcall
  247.  
  248.    add ebx,40
  249.    mcall
  250.  
  251.    mov al,12                            ; функция 12: сообщить ОС об отрисовке окна
  252.    mov ebx,2                            ; 2, закончили рисовать
  253.    mcall
  254.  
  255.    ret                                  ; выходим из процедуры
  256.  
  257.  
  258. ;---------------------------------------------------------------------
  259. ;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
  260. ;---------------------------------------------------------------------
  261.  
  262. title db appname,version,0
  263.  
  264. editbox:
  265. edit1 edit_box 170,10,113,0xffffff,0xaabbcc,0,0,0,512,path4,ed_focus,26,26
  266. editbox_end:
  267.  
  268. if lang eq ru
  269. save    db 'Сохранить',0
  270. label1  db 'Выберите один из вариантов:',0
  271. label2  db 'Или введите полный путь к файлу:',0
  272. label3  db 'Все папки должны существовать',0
  273. ok      db 'RAM-диск сохранен успешно',0
  274. error3  db 'Неизвестная файловая система',0
  275. error5  db 'Несуществующий путь',0
  276. error8  db 'Нет места на диске',0
  277. error9  db 'Таблица FAT разрушена',0
  278. error10 db 'Доступ запрещен',0
  279. error11 db 'Ошибка устройства',0
  280. aUnknownError db 'Неизвестная ошибка',0
  281. else if lang eq et
  282. save    db 'Salvesta',0
  283. label1  db 'Vali №ks variantidest:',0
  284. label2  db 'Vїi sisesta teekond failinimeni:',0
  285. label3  db 'Kїik kataloogid peavad eksisteerima',0
  286. ok      db 'RAM-ketas salvestatud edukalt',0
  287. error3  db 'Tundmatu failis№steem',0
  288. error5  db 'Vigane teekond',0
  289. error8  db 'Ketas tфis',0
  290. error9  db 'FAT tabel vigane',0
  291. error10 db 'Juurdepффs keelatud',0
  292. error11 db 'Seadme viga',0
  293. aUnknownError db 'Tundmatu viga',0
  294.  
  295. else
  296. save    db '  Save',0
  297. label1  db 'Select one of the variants:',0
  298. label2  db '   Or enter full path to file:',0
  299. label3  db '    All folders must exist',0
  300. ok      db 'RAM-drive was saved successfully',0
  301. error3  db 'Unknown file system',0
  302. error5  db 'Incorrect path',0
  303. error8  db 'Disk is full',0
  304. error9  db 'FAT table corrupted',0
  305. error10 db 'Access denied',0
  306. error11 db 'Device error',0
  307. aUnknownError db 'Unknown error',0
  308.  
  309. end if
  310.  
  311. mouse_flag: dd 0x0
  312.  
  313. path1   db '/fd/1/',0
  314. path2   db '/fd/2/',0
  315. path3   db '/hd0/1/kolibri.img',0
  316. path4   db '/hd0/1/kolibri/kolibri.img',0  ;для резервного сохранения
  317.  
  318. ;---------------------------------------------------------------------
  319. I_END:                             ; метка конца программы
  320.  
  321. rb 514
  322.  
  323. sc     system_colors
  324.  
  325. procinfo process_information
  326.  
  327.  
  328.