Subversion Repositories Kolibri OS

Rev

Rev 180 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
123 diamond 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
 
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
  mcall 12,1
89
  mcall 0,<220,120>,<30,FILECOUNT*16+35>,0x3b0b0b0
90
  mcall 4,<8,8>,0x10ffffff,title,titlen-title
91
  mov   ecx,FILECOUNT
92
  mov   ebx,10 shl 16+100
93
  mov   esi,0xb0b0b0
94
  mov   edi,27 shl 16+14
95
  mov   edx,10
96
  mov   eax,8
97
 .btnlp:
98
  push  ecx
99
  mcall ,,edi
100
  add   edi,16 shl 16
101
  inc   edx
102
  pop   ecx
103
  loop  .btnlp
104
  mov   ecx,FILECOUNT
105
  mov   edx,embedded
106
  xor   edi,edi
107
  mov   ebx,30 shl 16+30
108
  mov   eax,4
109
 .list:
110
  lea   edx,[edx+edi+8]
111
  mov   edi,[edx-8]
112
  pusha
113
  sub   ebx,15 shl 16
114
  mcall ,,0xff,my_param,1
115
  inc   [my_param]
116
  popa
117
  push  ecx
118
  mcall ,,0xffffff,,[edx-4]
119
  pop   ecx
120
  add   edx,esi
121
  add   ebx,16
122
  loop  .list
123
  mcall 12,2
124
 
125
still:
126
  mcall 10
127
  cmp   eax,1
128
  je    red
129
  cmp   eax,2
130
  jne   .nokey
131
  mcall 2
132
  cmp   ah,27 ;Esc
133
  je    start.close
134
  cmp   ah,'a'
135
  jb    still
136
  cmp   ah,'a'+FILECOUNT
137
  jae   still
138
  jmp   .cxax
139
 .nokey:
140
  mcall 17
141
  cmp   ah,1
142
  je    start.close
143
  sub   ah,10-'a'
144
 .cxax:
145
  movzx  ecx,ah
146
  jmp   start.open
147
 
148
title  db 'Doc Pack'
149
titlen:
150
 
151
fileinfo:
152
        dd      7
153
        dd      0
154
        dd      param
155
        dd      0, 0
156
        db      '/RD/1/TINYPAD',0
157
 
158
param  db '*'
159
fsize:
160
       times 10 db '0'
161
       db 0
162
 
163
embedded:
164
 
165
; Please use only filenames w/o path!
166
 
167
; -- Start of embedding area ------
168
  embed_file 'README.TXT'        ;a
169
  embed_file 'GNU.TXT'           ;b
170
  embed_file 'HOT_KEYS.TXT'      ;c
171
  embed_file 'FASM.TXT'          ;d
172
  embed_file 'MTDBG.TXT'         ;e
173
  embed_file 'VRR_RUS.TXT'       ;f
174
  embed_file 'SYSFUNCR.TXT'      ;g
175
  embed_file 'PPP_RUS.TXT'       ;h
176
  embed_file 'STACK_RU.TXT'      ;i
177
  embed_file 'GROBFAR.TXT'      ;j
178
; -- End of embedding area  -------
179
 
180
  dd 0
181
FILECOUNT = FILE_COUNT
182
 
183
  if ~ FILECOUNT>0
184
    error 'No embedded files'
185
  end if
186
 
187
my_param db 0
188
  rb 256
189
I_END: