;---------------------------------------------------------------------
;
;   DOCPAK FOR MENUET v1.1
;   Written in pure assembly by Ivushkin Andrey aka Willow
;
;---------------------------------------------------------------------

FILE_COUNT=0
DEF_FILE equ 'g'

macro embed_file fn
{
 forward
   local label,label2,label3
   dd label2-label
   dd label-label3
   label3:
   db fn
   label:
     file fn
   label2:
   FILE_COUNT=FILE_COUNT+1
}
appname equ 'Doc Pack'
   use32
   org    0x0
   db     'MENUET01'              ; 8 byte id
   dd     0x01                    ; header version
   dd     start                   ; start of code
   dd     I_END                   ; size of image
   dd     I_END+0x400             ; memory for app
   dd     I_END+0x400             ; esp
   dd     my_param , 0x0          ; I_Param , I_Icon
include '..\..\..\MACROS.INC'

start:
  cmp   [my_param],0
  je    red
  cmp   [my_param],'a'
  jb    .par_a
  cmp   [my_param],'z'
  jbe   .ok2
 .par_a: 
  mov   [my_param],DEF_FILE
 .ok2:
  movzx ecx,[my_param]
  mov   [my_param],'*'
 .open:
  sub   ecx,'a'-1
  mov   edx,embedded
  xor   esi,esi
 .list: 
  lea   edx,[edx+esi+8]
  mov   esi,[edx-8]
  add   edx,[edx-4]
  test  esi,esi
  jz    .close
  loop  .list
        push    edx
; convert number in esi to decimal representation
        mov     ecx, 10
        push    -'0'
        mov     eax, esi
@@:
        xor	edx, edx
        div     ecx
        push    edx
        test    eax, eax
        jnz     @b
        mov     edi, fsize
@@:
        pop     eax
        add     al, '0'
        stosb
        jnz     @b
  mcall 70,fileinfo
  mov   ecx,eax
  mcall 5,20
  pop   edx
  mcall 60,2
  cmp   [my_param],'*'
  jne   still
 .close: 
  mcall -1

red:
  mov   [my_param],'a'
  
  mov  eax,48
  mov  ebx,3
  mov  ecx,sc
  mov  edx,sizeof.system_colors
  mcall

  mcall 12,1
  
  xor  eax,eax                     
  mov  ebx,220*65536+120        
  mov  ecx,30*65536+FILECOUNT*16+35
  mov  edx,[sc.work]
  or   edx,0x33000000
  mov  edi,title
  mcall

  mov   ecx,FILECOUNT
  mov   ebx,5 shl 16+100
  mov   esi,[sc.work_button]
  mov   edi,5 shl 16+14
  mov   edx,10
  mov   eax,8
 .btnlp:
  push  ecx
  mcall ,,edi
  add   edi,16 shl 16
  inc   edx
  pop   ecx
  loop  .btnlp
  mov   ecx,FILECOUNT
  mov   edx,embedded
  xor   edi,edi
  mov   ebx,25 shl 16+8
  mov   eax,4
 .list: 
  lea   edx,[edx+edi+8]
  mov   edi,[edx-8]
  pusha
  sub   ebx,15 shl 16
  mcall ,,0xff0000,my_param,1
  inc   [my_param]
  popa
  push  ecx
  mcall ,,[sc.work_button_text],,[edx-4]
  pop   ecx
  add   edx,esi
  add   ebx,16
  loop  .list
  mcall 12,2

still:
  mcall 10
  cmp   eax,1
  je    red
  cmp   eax,2
  jne   .nokey
  mcall 2
  cmp   ah,27 ;Esc
  je    start.close
  cmp   ah,'a'
  jb    still
  cmp   ah,'a'+FILECOUNT
  jae   still
  jmp   .cxax
 .nokey:
  mcall 17
  cmp   ah,1
  je    start.close
  sub   ah,10-'a'
 .cxax:
  movzx  ecx,ah
  jmp   start.open

title  db appname,0

fileinfo:
        dd      7
        dd      0
        dd      param
        dd      0 ,0
        db      '/RD/1/TINYPAD',0

param  db '*'
fsize:
       times 10 db '0'
       db 0

embedded: 

; Please use only filenames w/o path!

; -- Start of embedding area ------
  embed_file 'README.TXT'        ;a
  embed_file 'GNU.TXT'           ;b
  embed_file 'HOT_KEYS.TXT'      ;c
  embed_file 'FASM.TXT'          ;d
  embed_file 'MTDBG.TXT'         ;e
  embed_file 'VRR_RUS.TXT'       ;f
  embed_file 'SYSFUNCR.TXT'      ;g
  embed_file 'PPP_RUS.TXT'       ;h
  embed_file 'STACK_RU.TXT'      ;i
  embed_file 'GROBFAR.TXT'       ;j
; -- End of embedding area  -------

  dd 0
FILECOUNT = FILE_COUNT

  if ~ FILECOUNT>0
    error 'No embedded files'
  end if

my_param db 0
  rb 256
I_END:

sc     system_colors
