Subversion Repositories Kolibri OS

Rev

Rev 109 | Rev 142 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
;
2
;   LAUNCHER - АВТОЗАПУСК ПРОГРАММ
3
;     Код программы совсем не оптимизирован, но очень прост для понимания.
4
;     Этот лаунчер грузит информацию о программах для запуска из файла
5
;     AUTORUN.DAT. Формат очень прост и в комментариях не нуждается.
6
;
7
;   Компилируйте с помощью FASM 1.52 и выше
8
;
132 diamond 9
include "MACROS.INC"
31 halyavin 10
 
11
  use32
12
  org    0x0
13
  db     'MENUET01'              ; 8 byte id
14
  dd     0x01                    ; header version
15
  dd     START                   ; start of code
16
  dd     I_END                   ; size of image
17
  dd     0x8000                 ; memory for app
18
  dd     0x8000                 ; esp
19
  dd     0x0 , 0x0               ; I_Param , I_Icon
20
 
21
;include "DEBUG.INC"
22
 
23
START:                           ; start of execution
24
 
132 diamond 25
;   mov  eax, 5
26
;   mov  ebx, 10
27
;   int  0x40
31 halyavin 28
 
132 diamond 29
   mcall 18,15
30
 
31 halyavin 31
   mov  eax, 58               ; load AUTORUN.DAT
32
   mov  ebx, autorun_dat_info
33
   int  0x40
34
 
35
   call get_number
36
   mov  [number_of_files], eax
37
;dps "NUMBER OF FILES: "
38
;dpd eax
39
;dps <13,10>
40
   call next_line
41
 
42
 start_program:
43
;dps <"STARTING A PROGRAM",13,10>
44
   call clear_strings
45
   mov  edi, program
46
   call get_string
47
   mov  edi, parameters
48
   call get_string
49
   call get_number
50
   call run_program
51
   call next_line
52
   dec  [number_of_files]
53
   jnz  start_program
54
 
55
 exit:
56
   or   eax, -1
57
   int  0x40
58
 
59
 
60
 run_program:     ; time to delay in eax
61
   push eax
62
   mcall 58, start_info
63
   pop  ebx
64
 
65
   mov  eax, 5
66
   int  0x40
67
 ret
68
 
69
 
70
 clear_strings:   ; clears buffers
71
   pushad
72
 
73
   mov  ecx, 60
74
   mov  edi, program
75
   xor  al, al ;mov  al, ' '
76
   rep  stosb
77
 
78
   mov  ecx, 60
79
   mov  edi, parameters
80
   xor  al, al
81
   rep  stosb
82
 
83
   popad
84
 ret
85
 
86
 
87
 get_string: ; pointer to destination buffer in edi
88
   pushad
89
   call skip_spaces
90
   mov  esi, [position]
91
;dpd esi
92
;dps <13,10>
93
   add  esi, file_data
94
  .start:
95
   lodsb
96
   cmp  al, ' '
97
   je   .finish
98
   stosb
99
   inc  [position]
100
   jmp  .start
101
  .finish:
102
   popad
103
 ret
104
 
105
 
106
 get_number:
107
   push ebx esi
108
   call skip_spaces
109
   mov  esi, [position]
110
   add  esi, file_data
111
   xor  eax, eax
112
   xor  ebx, ebx
113
  .start:
114
   lodsb
115
   cmp  al, '0'
116
   jb   .finish
117
   cmp  al, '9'
118
   ja   .finish
119
   sub  al, '0'
120
   imul ebx, 10
121
   add  ebx, eax
122
   inc  [position]
123
   jmp  .start
124
  .finish:
125
   mov  eax, ebx
126
   pop  esi ebx
127
 ret
128
 
129
 
130
 skip_spaces:
131
   pushad
132
   xor  eax, eax
133
   mov  esi, [position]
134
   add  esi, file_data
135
  .start:
136
   lodsb
137
   cmp  al, ' '
138
   jne  .finish
139
   inc  [position]
140
   jmp  .start
141
  .finish:
142
;dps "NOW AL = "
143
;mov [tmp],al
144
;mov edx, tmp
145
;call debug_outstr
146
;dps <13,10>
147
   popad
148
 ret
149
 
150
 
151
 next_line:
152
   pushad
153
   mov  esi, [position]
154
   add  esi, file_data
155
  .start:
156
   lodsb
157
   cmp  al, 13
158
   je   .finish
159
   inc  [position]
160
   jmp  .start
161
  .finish:
162
   add  [position], 2
163
   inc  esi
164
   lodsb
165
   cmp  al, '#'
166
   je   .skipline
167
   cmp  al, 13
168
   jne  .donotskip
169
  .skipline:
170
   call next_line
171
  .donotskip:
172
   popad
173
 ret
174
 
175
 
176
 
177
; DATA:
178
 position          dd 0            ; position in file
179
 
180
 autorun_dat_info:                 ; AUTORUN.DAT
181
   .mode           dd 0            ; read file
182
   .start_block    dd 0            ; block to read
183
   .blocks         dd 0x10         ; 16*512 bytes max
184
   .address        dd file_data
185
   .workarea       dd work_area
186
   db "/RD/1/AUTORUN.DAT",0
187
 
188
 start_info:
189
   .mode           dd 16
190
                   dd 0
191
   .params         dd parameters
192
                   dd 0
193
   .workarea       dd work_area
194
   .path: ;      
195
 
196
I_END:
197
 
198
 program           rb 61 ; 60 + [0] char
199
 parameters        rb 61
200
 
201
 number_of_files   dd ?
202
 
203
 work_area         rb 0x4000
204
 file_data         rb 16*512