Subversion Repositories Kolibri OS

Rev

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

  1. ;---------------------------------------------------------------------
  2. ;
  3. ;   DOCPAK FOR MENUET v1.1
  4. ;   Written in pure assembly by Ivushkin Andrey aka Willow
  5. ;
  6. ;---------------------------------------------------------------------
  7.  
  8. FILE_COUNT=0
  9. DEF_FILE equ 'g'
  10.  
  11. macro embed_file fn
  12. {
  13.  forward
  14.    local label,label2,label3
  15.    dd label2-label
  16.    dd label-label3
  17.    label3:
  18.    db fn
  19.    label:
  20.      file '%DOCDIR%' # fn
  21.    label2:
  22.    FILE_COUNT=FILE_COUNT+1
  23. }
  24. appname equ 'Doc Pack'
  25.    use32
  26.    org    0x0
  27.    db     'MENUET01'              ; 8 byte id
  28.    dd     0x01                    ; header version
  29.    dd     start                   ; start of code
  30.    dd     I_END                   ; size of image
  31.    dd     I_END+0x400             ; memory for app
  32.    dd     I_END+0x400             ; esp
  33.    dd     my_param , 0x0          ; I_Param , I_Icon
  34. include '../../../macros.inc'
  35. include 'lang.inc'
  36.  
  37. start:
  38.   cmp   [my_param],0
  39.   je    red
  40.   cmp   [my_param],'a'
  41.   jb    .par_a
  42.   cmp   [my_param],'z'
  43.   jbe   .ok2
  44.  .par_a:
  45.   mov   [my_param],DEF_FILE
  46.  .ok2:
  47.   movzx ecx,[my_param]
  48.   mov   [my_param],'*'
  49.  .open:
  50.   sub   ecx,'a'-1
  51.   mov   edx,embedded
  52.   xor   esi,esi
  53.  .list:
  54.   lea   edx,[edx+esi+8]
  55.   mov   esi,[edx-8]
  56.   add   edx,[edx-4]
  57.   test  esi,esi
  58.   jz    .close
  59.   loop  .list
  60.         push    edx
  61. ; convert number in esi to decimal representation
  62.         mov     ecx, 10
  63.         push    -'0'
  64.         mov     eax, esi
  65. @@:
  66.         xor     edx, edx
  67.         div     ecx
  68.         push    edx
  69.         test    eax, eax
  70.         jnz     @b
  71.         mov     edi, fsize
  72. @@:
  73.         pop     eax
  74.         add     al, '0'
  75.         stosb
  76.         jnz     @b
  77.   mcall 70,fileinfo
  78.   mov   ecx,eax
  79.   mcall 5,20
  80.   pop   edx
  81.   mcall 60,2
  82.   cmp   [my_param],'*'
  83.   jne   still
  84.  .close:
  85.   mcall -1
  86.  
  87. red:
  88.   mov   [my_param],'a'
  89.  
  90.   mov  eax,48
  91.   mov  ebx,3
  92.   mov  ecx,sc
  93.   mov  edx,sizeof.system_colors
  94.   mcall
  95.  
  96.   mcall 12,1
  97.  
  98.   xor  eax,eax                    
  99.   mov  ebx,220*65536+120        
  100.   mov  ecx,30*65536+FILECOUNT*16+35
  101.   mov  edx,[sc.work]
  102.   or   edx,0x34000000
  103.   mov  edi,title
  104.   mcall
  105.  
  106.   mov   ecx,FILECOUNT
  107.   mov   ebx,5 shl 16+100
  108.   mov   esi,[sc.work_button]
  109.   mov   edi,5 shl 16+14
  110.   mov   edx,10
  111.   mov   eax,8
  112.  .btnlp:
  113.   push  ecx
  114.   mcall ,,edi
  115.   add   edi,16 shl 16
  116.   inc   edx
  117.   pop   ecx
  118.   loop  .btnlp
  119.   mov   ecx,FILECOUNT
  120.   mov   edx,embedded
  121.   xor   edi,edi
  122.   mov   ebx,25 shl 16+8
  123.   mov   eax,4
  124.  .list:
  125.   lea   edx,[edx+edi+8]
  126.   mov   edi,[edx-8]
  127.   pusha
  128.   sub   ebx,15 shl 16
  129.   mcall ,,0xff0000,my_param,1
  130.   inc   [my_param]
  131.   popa
  132.   push  ecx
  133.   mcall ,,[sc.work_button_text],,[edx-4]
  134.   pop   ecx
  135.   add   edx,esi
  136.   add   ebx,16
  137.   loop  .list
  138.   mcall 12,2
  139.  
  140. still:
  141.   mcall 10
  142.   cmp   eax,1
  143.   je    red
  144.   cmp   eax,2
  145.   jne   .nokey
  146.   mcall 2
  147.   cmp   ah,27 ;Esc
  148.   je    start.close
  149.   cmp   ah,'a'
  150.   jb    still
  151.   cmp   ah,'a'+FILECOUNT
  152.   jae   still
  153.   jmp   .cxax
  154.  .nokey:
  155.   mcall 17
  156.   cmp   ah,1
  157.   je    start.close
  158.   sub   ah,10-'a'
  159.  .cxax:
  160.   movzx  ecx,ah
  161.   jmp   start.open
  162.  
  163. title  db appname,0
  164.  
  165. fileinfo:
  166.         dd      7
  167.         dd      0
  168.         dd      param
  169.         dd      0 ,0
  170.         db      '/sys/TINYPAD',0
  171.  
  172. param  db '*'
  173. fsize:
  174.        times 10 db '0'
  175.        db 0
  176.  
  177. embedded:
  178.  
  179. ; Please use only filenames w/o path!
  180.  
  181. ; -- Start of embedding area ------
  182.   embed_file 'README.TXT'        ;a
  183. if lang eq ru
  184.   embed_file 'GNU.TXT'           ;b
  185. else
  186.   embed_file 'COPYING.TXT'       ;b
  187. end if
  188.   embed_file 'HOT_KEYS.TXT'      ;c
  189.   embed_file 'FASM.TXT'          ;d
  190.   embed_file 'MTDBG.TXT'         ;e
  191. if lang eq ru
  192.   embed_file 'VRR_RUS.TXT'       ;f
  193.   embed_file 'SYSFUNCR.TXT'      ;g
  194.   embed_file 'STACK_RU.TXT'      ;h
  195.   embed_file 'GROBFAR.TXT'       ;i
  196. else
  197.   embed_file 'VRR_ENG.TXT'       ;f
  198.   embed_file 'SYSFUNCS.TXT'      ;g
  199.   embed_file 'STACK.TXT'         ;h
  200.   embed_file 'FARA.TXT'          ;i
  201. end if
  202.   embed_file 'KFAR_KEYS.TXT'     ;j
  203.   embed_file 'INI.TXT'           ;k
  204. ; -- End of embedding area  -------
  205.  
  206.   dd 0
  207. FILECOUNT = FILE_COUNT
  208.  
  209.   if ~ FILECOUNT>0
  210.     error 'No embedded files'
  211.   end if
  212.  
  213. my_param db 0
  214.   rb 256
  215. I_END:
  216.  
  217. sc     system_colors
  218.