Subversion Repositories Kolibri OS

Rev

Rev 1999 | Rev 4602 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1999 Rev 4095
1
;
1
;
2
;   LAUNCHER - €‚’Ž‡€“‘Š Žƒ€ŒŒ
2
;   LAUNCHER - €‚’Ž‡€“‘Š Žƒ€ŒŒ
3
;     Š®¤ ¯à®£à ¬¬ë ᮢᥬ ­¥ ®¯â¨¬¨§¨à®¢ ­, ­® ®ç¥­ì ¯à®áâ ¤«ï ¯®­¨¬ ­¨ï.
3
;     Š®¤ ¯à®£à ¬¬ë ᮢᥬ ­¥ ®¯â¨¬¨§¨à®¢ ­, ­® ®ç¥­ì ¯à®áâ ¤«ï ¯®­¨¬ ­¨ï.
4
;     â®â « ã­ç¥à £à㧨⠨­ä®à¬ æ¨î ® ¯à®£à ¬¬ å ¤«ï § ¯ã᪠ ¨§ ä ©« 
4
;     â®â « ã­ç¥à £à㧨⠨­ä®à¬ æ¨î ® ¯à®£à ¬¬ å ¤«ï § ¯ã᪠ ¨§ ä ©« 
5
;     AUTORUN.DAT. ”®à¬ â ®ç¥­ì ¯à®áâ ¨ ¢ ª®¬¬¥­â à¨ïå ­¥ ­ã¦¤ ¥âáï.
5
;     AUTORUN.DAT. ”®à¬ â ®ç¥­ì ¯à®áâ ¨ ¢ ª®¬¬¥­â à¨ïå ­¥ ­ã¦¤ ¥âáï.
6
;
6
;
7
;   Š®¬¯¨«¨àã©â¥ á ¯®¬®éìî FASM 1.52 ¨ ¢ëè¥
7
;   Š®¬¯¨«¨àã©â¥ á ¯®¬®éìî FASM 1.52 ¨ ¢ëè¥
8
;
8
;
9
include "../../../macros.inc"
9
include "../../../macros.inc"
10
 
10
 
11
  use32
11
  use32
12
  org    0x0
12
  org    0x0
13
  db     'MENUET01'              ; 8 byte id
13
  db     'MENUET01'              ; 8 byte id
14
  dd     0x01                    ; header version
14
  dd     0x01                    ; header version
15
  dd     START                   ; start of code
15
  dd     START                   ; start of code
16
  dd     I_END                   ; size of image
16
  dd     I_END                   ; size of image
17
  dd     0x8000                 ; memory for app
17
  dd     0x8000                 ; memory for app
18
  dd     0x8000                 ; esp
18
  dd     0x8000                 ; esp
19
  dd     0x0 , 0x0               ; I_Param , I_Icon
19
  dd     0x0 , 0x0               ; I_Param , I_Icon
20
 
20
 
21
;include "DEBUG.INC"
21
;include "DEBUG.INC"
22
 
22
 
23
START:                           ; start of execution
23
START:                           ; start of execution
24
 
24
 
25
;   mov  eax, 5
25
;   mov  eax, 5
26
;   mov  ebx, 10
26
;   mov  ebx, 10
27
;   mcall
27
;   mcall
28
 
28
 
29
;   mcall 18,15
29
;   mcall 18,15
30
 
30
 
31
   mov  eax, 70               ; load AUTORUN.DAT
31
   mov  eax, 70               ; load AUTORUN.DAT
32
   mov  ebx, autorun_dat_info
32
   mov  ebx, autorun_dat_info
33
   mcall
33
   mcall
34
   add  ebx, file_data
34
   add  ebx, file_data
35
   mov  [fileend], ebx
35
   mov  [fileend], ebx
36
 
36
 
37
; this cycle does not contain an obvious exit condition,
37
; this cycle does not contain an obvious exit condition,
38
; but auxiliary procedures (like "get_string") will exit
38
; but auxiliary procedures (like "get_string") will exit
39
; at EOF
39
; at EOF
40
 start_program:
40
 start_program:
41
   call skip_spaces
41
   call skip_spaces
42
   cmp  al,'#'
42
   cmp  al,'#'
43
   jz   skip_this_string
43
   jz   skip_this_string
44
   call clear_strings
44
   call clear_strings
45
   mov  edi, program
45
   mov  edi, program
46
   call get_string
46
   call get_string
47
   mov  edi, parameters
47
   mov  edi, parameters
48
   call get_string
48
   call get_string
49
   call get_number
49
   call get_number
50
;dps <"STARTING A PROGRAM",13,10>
50
;dps <"STARTING A PROGRAM",13,10>
51
   call run_program
51
   call run_program
52
 skip_this_string:
52
 skip_this_string:
53
   call next_line
53
   call next_line
54
   jmp  start_program
54
   jmp  start_program
55
 
55
 
56
 exit:
56
 exit:
57
   or   eax, -1
57
   or   eax, -1
58
   mcall
58
   mcall
59
 
59
 
60
 
60
 
61
 run_program:     ; time to delay in eax
61
 run_program:     ; time to delay in eax
62
   push eax
62
   push eax
63
   mcall 70, start_info
63
   mcall 70, start_info
64
   pop  ebx
64
   pop  ebx
65
 
65
 
66
; if delay is negative, wait for termination
66
; if delay is negative, wait for termination
67
;   of the spawned process
67
;   of the spawned process
68
   test ebx, ebx
68
   test ebx, ebx
69
   js   must_wait_for_termination
69
   js   must_wait_for_termination
70
; otherwise, simply wait
70
; otherwise, simply wait
71
   mov  eax, 5
71
   mov  eax, 5
72
   mcall
72
   mcall
73
   ret
73
   ret
74
 must_wait_for_termination:
74
 must_wait_for_termination:
75
   mov  esi, eax  ; save slot for the future
75
   mov  esi, eax  ; save slot for the future
76
; get process slot
76
; get process slot
77
   mov  ecx, eax
77
   mov  ecx, eax
78
   mcall 18, 21
78
   mcall 18, 21
79
; if an error has occured, exit
79
; if an error has occured, exit
80
   test eax, eax
80
   test eax, eax
81
   jz   child_exited
81
   jz   child_exited
82
   mov  ecx, eax
82
   mov  ecx, eax
83
; wait
83
; wait
84
 wait_for_termination:
84
 wait_for_termination:
85
   mcall 5, 1
85
   mcall 5, 1
86
   mov  ebx, processinfo
86
   mov  ebx, processinfo
87
   mcall 9
87
   mcall 9
88
   cmp  word [ebx+50], 9 ; the slot was freed?
88
   cmp  word [ebx+50], 9 ; the slot was freed?
89
   jz   child_exited
89
   jz   child_exited
90
   cmp  dword [ebx+30], esi ; the slot is still occupied by our child?
90
   cmp  dword [ebx+30], esi ; the slot is still occupied by our child?
91
   jz   wait_for_termination
91
   jz   wait_for_termination
92
 child_exited:
92
 child_exited:
93
   ret
93
   ret
94
 
94
 
95
 clear_strings:   ; clears buffers
95
 clear_strings:   ; clears buffers
96
   pushad
96
   pushad
97
 
97
 
98
   mov  ecx, 60
98
   mov  ecx, 60
99
   mov  edi, program
99
   mov  edi, program
100
   xor  al, al ;mov  al, ' '
100
   xor  al, al ;mov  al, ' '
101
   rep  stosb
101
   rep  stosb
102
 
102
 
103
   mov  ecx, 60
103
   mov  ecx, 60
104
   mov  edi, parameters
104
   mov  edi, parameters
105
   rep  stosb
105
   rep  stosb
106
 
106
 
107
   popad
107
   popad
108
 ret
108
 ret
109
 
109
 
110
 
110
 
111
 get_string: ; pointer to destination buffer in edi
111
 get_string: ; pointer to destination buffer in edi
112
   pushad
112
   pushad
113
   call skip_spaces
113
   call skip_spaces
114
   mov  esi, [position]
114
   mov  esi, [position]
115
;dpd esi
115
;dpd esi
116
;dps <13,10>
116
;dps <13,10>
117
   add  esi, file_data
117
   add  esi, file_data
118
   cmp  byte [esi], '"'
118
   cmp  byte [esi], '"'
119
   jz   .quoted
119
   jz   .quoted
120
  .start:
120
  .start:
121
   cmp  esi, [fileend]
121
   cmp  esi, [fileend]
122
   jae  exit
122
   jae  exit
123
   lodsb
123
   lodsb
124
   cmp  al, ' '
124
   cmp  al, ' '
125
   jbe  .finish
125
   jbe  .finish
126
   stosb
126
   stosb
127
   inc  [position]
127
   inc  [position]
128
   jmp  .start
128
   jmp  .start
129
  .finish:
129
  .finish:
130
   popad
130
   popad
131
   ret
131
   ret
132
  .quoted:
132
  .quoted:
133
   inc  esi
133
   inc  esi
134
   inc  [position]
134
   inc  [position]
135
  .quoted.start:
135
  .quoted.start:
136
   cmp  esi, [fileend]
136
   cmp  esi, [fileend]
137
   jae  exit
137
   jae  exit
138
   lodsb
138
   lodsb
139
   inc  [position]
139
   inc  [position]
140
   cmp  al, '"'
140
   cmp  al, '"'
141
   je   .finish
141
   je   .finish
142
   stosb
142
   stosb
143
   jmp  .quoted.start
143
   jmp  .quoted.start
144
 
144
 
145
 
145
 
146
 get_number:
146
 get_number:
147
   push ebx esi
147
   push ebx esi
148
   call skip_spaces
148
   call skip_spaces
149
   mov  esi, [position]
149
   mov  esi, [position]
150
   add  esi, file_data
150
   add  esi, file_data
151
   xor  eax, eax
151
   xor  eax, eax
152
   cmp  byte [esi], '-'
152
   cmp  byte [esi], '-'
153
   jnz  @f
153
   jnz  @f
154
   inc  eax
154
   inc  eax
155
   inc  esi
155
   inc  esi
156
   inc  [position]
156
   inc  [position]
157
@@:
157
@@:
158
   push eax
158
   push eax
159
   xor  eax, eax
159
   xor  eax, eax
160
   xor  ebx, ebx
160
   xor  ebx, ebx
161
  .start:
161
  .start:
162
   cmp  esi, [fileend]
162
   cmp  esi, [fileend]
163
   jae  .finish
163
   jae  .finish
164
   lodsb
164
   lodsb
165
   sub  al, '0'
165
   sub  al, '0'
166
   cmp  al, 9
166
   cmp  al, 9
167
   ja   .finish
167
   ja   .finish
168
   lea  ebx,[ebx*4+ebx]
168
   lea  ebx,[ebx*4+ebx]
169
   lea  ebx,[ebx*2+eax]
169
   lea  ebx,[ebx*2+eax]
170
   inc  [position]
170
   inc  [position]
171
   jmp  .start
171
   jmp  .start
172
  .finish:
172
  .finish:
173
   pop  eax
173
   pop  eax
174
   dec  eax
174
   dec  eax
175
   jnz  @f
175
   jnz  @f
176
   neg  ebx
176
   neg  ebx
177
@@:
177
@@:
178
   mov  eax, ebx
178
   mov  eax, ebx
179
   pop  esi ebx
179
   pop  esi ebx
180
 ret
180
 ret
181
 
181
 
182
 
182
 
183
 skip_spaces:
183
 skip_spaces:
184
   push esi
184
   push esi
185
   xor  eax, eax
185
   xor  eax, eax
186
   mov  esi, [position]
186
   mov  esi, [position]
187
   add  esi, file_data
187
   add  esi, file_data
188
  .start:
188
  .start:
189
   cmp  esi, [fileend]
189
   cmp  esi, [fileend]
190
   jae  .finish
190
   jae  .finish
191
   lodsb
191
   lodsb
192
   cmp  al, ' '
192
   cmp  al, ' '
193
   ja   .finish
193
   ja   .finish
194
   inc  [position]
194
   inc  [position]
195
   jmp  .start
195
   jmp  .start
196
  .finish:
196
  .finish:
197
;dps "NOW AL = "
197
;dps "NOW AL = "
198
;mov [tmp],al
198
;mov [tmp],al
199
;mov edx, tmp
199
;mov edx, tmp
200
;call debug_outstr
200
;call debug_outstr
201
;dps <13,10>
201
;dps <13,10>
202
   pop  esi
202
   pop  esi
203
 ret
203
 ret
204
 
204
 
205
 
205
 
206
 next_line:
206
 next_line:
207
   mov  esi, [position]
207
   mov  esi, [position]
208
   add  esi, file_data
208
   add  esi, file_data
209
  .start:
209
  .start:
210
   cmp  esi, [fileend]
210
   cmp  esi, [fileend]
211
   jae  exit
211
   jae  exit
212
   lodsb
212
   lodsb
213
   cmp  al, 13
213
   cmp  al, 13
214
   je   .finish
214
   je   .finish
215
   cmp  al, 10
215
   cmp  al, 10
216
   je   .finish
216
   je   .finish
217
   inc  [position]
217
   inc  [position]
218
   jmp  .start
218
   jmp  .start
219
  .finish:
219
  .finish:
220
   inc  [position]
220
   inc  [position]
221
   cmp  esi, [fileend]
221
   cmp  esi, [fileend]
222
   jae  exit
222
   jae  exit
223
   lodsb
223
   lodsb
224
   cmp  al, 13
224
   cmp  al, 13
225
   je   .finish
225
   je   .finish
226
   cmp  al, 10
226
   cmp  al, 10
227
   je   .finish
227
   je   .finish
228
   ret
228
   ret
229
 
229
 
230
 
230
 
231
 
231
 
232
; DATA:
232
; DATA:
233
 position          dd 0            ; position in file
233
 position          dd 0            ; position in file
234
 
234
 
235
 autorun_dat_info:                 ; AUTORUN.DAT
235
 autorun_dat_info:                 ; AUTORUN.DAT
236
   .mode           dd 0            ; read file
236
   .mode           dd 0            ; read file
237
   .start_block    dd 0            ; block to read
237
   .start_block    dd 0            ; block to read
238
                   dd 0
238
                   dd 0
239
   .blocks         dd 16*512       ; 16*512 bytes max
239
   .blocks         dd 16*512       ; 16*512 bytes max
240
   .address        dd file_data
240
   .address        dd file_data
241
   db "AUTORUN.DAT",0
241
   db "/SYS/SETTINGS/AUTORUN.DAT",0
242
 
242
 
243
 start_info:
243
 start_info:
244
   .mode           dd 7
244
   .mode           dd 7
245
                   dd 0
245
                   dd 0
246
   .params         dd parameters
246
   .params         dd parameters
247
                   dd 0
247
                   dd 0
248
                   dd 0
248
                   dd 0
249
   .path: ;      
249
   .path: ;      
250
 
250
 
251
I_END:
251
I_END:
252
 
252
 
253
 program           rb 61 ; 60 + [0] char
253
 program           rb 61 ; 60 + [0] char
254
 parameters        rb 61
254
 parameters        rb 61
255
 
255
 
256
 processinfo       rb 1024
256
 processinfo       rb 1024
257
 fileend           dd ?
257
 fileend           dd ?
258
 
258
 
259
 file_data         rb 16*512
259
 file_data         rb 16*512