Subversion Repositories Kolibri OS

Rev

Rev 123 | Rev 485 | 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 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.  
  36. start:
  37.   cmp   [my_param],0
  38.   je    red
  39.   cmp   [my_param],'a'
  40.   jb    .par_a
  41.   cmp   [my_param],'z'
  42.   jbe   .ok2
  43.  .par_a:
  44.   mov   [my_param],DEF_FILE
  45.  .ok2:
  46.   movzx ecx,[my_param]
  47.   mov   [my_param],'*'
  48.  .open:
  49.   sub   ecx,'a'-1
  50.   mov   edx,embedded
  51.   xor   esi,esi
  52.  .list:
  53.   lea   edx,[edx+esi+8]
  54.   mov   esi,[edx-8]
  55.   add   edx,[edx-4]
  56.   test  esi,esi
  57.   jz    .close
  58.   loop  .list
  59.         push    edx
  60. ; convert number in esi to decimal representation
  61.         mov     ecx, 10
  62.         push    -'0'
  63.         mov     eax, esi
  64. @@:
  65.         xor     edx, edx
  66.         div     ecx
  67.         push    edx
  68.         test    eax, eax
  69.         jnz     @b
  70.         mov     edi, fsize
  71. @@:
  72.         pop     eax
  73.         add     al, '0'
  74.         stosb
  75.         jnz     @b
  76.   mcall 70,fileinfo
  77.   mov   ecx,eax
  78.   mcall 5,20
  79.   pop   edx
  80.   mcall 60,2
  81.   cmp   [my_param],'*'
  82.   jne   still
  83.  .close:
  84.   mcall -1
  85.  
  86. red:
  87.   mov   [my_param],'a'
  88.  
  89.   mov  eax,48
  90.   mov  ebx,3
  91.   mov  ecx,sc
  92.   mov  edx,sizeof.system_colors
  93.   int  0x40
  94.  
  95.   mcall 12,1
  96.  
  97.   xor  eax,eax                    
  98.   mov  ebx,220*65536+120        
  99.   mov  ecx,30*65536+FILECOUNT*16+35
  100.   mov  edx,[sc.work]
  101.   or   edx,0x33000000
  102.   mov  edi,header
  103.   int  0x40
  104.  
  105.   mov   ecx,FILECOUNT
  106.   mov   ebx,5 shl 16+100
  107.   mov   esi,[sc.work_button]
  108.   mov   edi,5 shl 16+14
  109.   mov   edx,10
  110.   mov   eax,8
  111.  .btnlp:
  112.   push  ecx
  113.   mcall ,,edi
  114.   add   edi,16 shl 16
  115.   inc   edx
  116.   pop   ecx
  117.   loop  .btnlp
  118.   mov   ecx,FILECOUNT
  119.   mov   edx,embedded
  120.   xor   edi,edi
  121.   mov   ebx,25 shl 16+8
  122.   mov   eax,4
  123.  .list:
  124.   lea   edx,[edx+edi+8]
  125.   mov   edi,[edx-8]
  126.   pusha
  127.   sub   ebx,15 shl 16
  128.   mcall ,,0xff0000,my_param,1
  129.   inc   [my_param]
  130.   popa
  131.   push  ecx
  132.   mcall ,,[sc.work_button_text],,[edx-4]
  133.   pop   ecx
  134.   add   edx,esi
  135.   add   ebx,16
  136.   loop  .list
  137.   mcall 12,2
  138.  
  139. still:
  140.   mcall 10
  141.   cmp   eax,1
  142.   je    red
  143.   cmp   eax,2
  144.   jne   .nokey
  145.   mcall 2
  146.   cmp   ah,27 ;Esc
  147.   je    start.close
  148.   cmp   ah,'a'
  149.   jb    still
  150.   cmp   ah,'a'+FILECOUNT
  151.   jae   still
  152.   jmp   .cxax
  153.  .nokey:
  154.   mcall 17
  155.   cmp   ah,1
  156.   je    start.close
  157.   sub   ah,10-'a'
  158.  .cxax:
  159.   movzx  ecx,ah
  160.   jmp   start.open
  161.  
  162. header  db appname,0
  163.  
  164. fileinfo:
  165.         dd      7
  166.         dd      0
  167.         dd      param
  168.         dd      0 ,0
  169.         db      '/RD/1/TINYPAD',0
  170.  
  171. param  db '*'
  172. fsize:
  173.        times 10 db '0'
  174.        db 0
  175.  
  176. embedded:
  177.  
  178. ; Please use only filenames w/o path!
  179.  
  180. ; -- Start of embedding area ------
  181.   embed_file 'README.TXT'        ;a
  182.   embed_file 'GNU.TXT'           ;b
  183.   embed_file 'HOT_KEYS.TXT'      ;c
  184.   embed_file 'FASM.TXT'          ;d
  185.   embed_file 'MTDBG.TXT'         ;e
  186.   embed_file 'VRR_RUS.TXT'       ;f
  187.   embed_file 'SYSFUNCR.TXT'      ;g
  188.   embed_file 'PPP_RUS.TXT'       ;h
  189.   embed_file 'STACK_RU.TXT'      ;i
  190.   embed_file 'GROBFAR.TXT'       ;j
  191. ; -- End of embedding area  -------
  192.  
  193.   dd 0
  194. FILECOUNT = FILE_COUNT
  195.  
  196.   if ~ FILECOUNT>0
  197.     error 'No embedded files'
  198.   end if
  199.  
  200. my_param db 0
  201.   rb 256
  202. I_END:
  203.  
  204. sc     system_colors
  205.