Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5521 leency 1
use32
2
	org	0x0
3
 
4
	db	'MENUET01'	; 8 byte id
5
	dd	38		; required os
6
	dd	STARTAPP	; program start
7
	dd	I_END		; program image size
8
	dd	0x100000	; required amount of memory
9
	dd	0x100000	; reserved= extended header
10
	dd	filename, 0x0	; I_Param , I_Icon
11
 
12
include "aspAPI.inc"
13
 
14
;Clock_Hz       equ     4608    ; Frequency of clock
15
;Monitor_Hz     equ     70      ; Frequency of monitor
16
;Clock_Scale    equ     Clock_Hz / Monitor_Hz
17
CData		equ	0x40	; Port number of timer 0
18
CMode		equ	0x43	; Port number of timer control word
19
BufSize 	equ	65528	; Frame buffer size - Must be even
20
 
21
struc	MainHeaderRec
22
{
23
	.Padding1	dd	?	; size of the file
24
	.ID		dw	?	; magic
25
	.Frames 	dw	?	; frames
26
	.Padding2	dd	?	; width/height
27
	.Padding3	dd	?	; depth/flags
28
	.Speed		dw	?	; speed
29
	.Reserv 	dw	?	; always = 0
30
	; Only for FLC
31
	.Created	dd	?	; date file attribute
32
	.Creator	dd	?	; creator serial number
33
	.Updated	dd	?	; date of the last change
34
	.Updater	dd	?	; updater serial number
35
	.Aspectx	dw	?	; scale by x
36
	.Aspecty	dw	?	; scale by Y
37
	.Padding4	db	38     dup(?)  ; Reserved. All zeroes.
38
	.Oframe1	dd	?	; offset to the 1st frame
39
	.Oframe2	dd	?	; offset to the 2nd frame
40
	.Padding5	db	40     dup(?)  ; Reserved. All zeroes.
41
}
42
 
43
struc	FrameHeaderRec
44
{
45
	.Size	dd	?	; size
46
	.Padding1	dw	?	; magic
47
	.Chunks dw	?	; chunks
48
	.Padding2	db	8	dup(?)	;Pad to 16 Bytes.       All zeroes.
49
}
50
 
51
 
52
; in:           esi = pointer to the buffer
53
 
54
DrawFrame:
55
	; this is the routine that takes a frame and put it on the screen
56
  @Fli_Loop:					; main loop that goes through all the chunks in a frame
57
    cmp  word [Chunks],0	      ;are there any more chunks to draw?
58
    je	 @Exit
59
    dec  word [Chunks]		      ;decrement Chunks For the chunk to process now
60
 
61
	mov  ax, word [esi+4]		; let AX have the ChunkType
62
	add  esi, 6		     ; skip the ChunkHeader
63
	cmp  ax, 0Bh				; is it a FLI_COLor chunk?
64
	je   @Fli_Color
65
	cmp  ax, 0Ch				; is it a FLI_LC chunk?
66
	je   @Fli_Lc
67
	cmp  ax, 0Dh				; is it a FLI_BLACK chunk?
68
	je   @Fli_Black
69
	cmp  ax, 0Fh				; is it a FLI_BRUN chunk?
70
	je   @Fli_Brun
71
	cmp  ax, 10h				; is it a FLI_COPY chunk?
72
	je   @Fli_Copy
73
	jmp  @Fli_Loop				; This command should not be necessary
74
 
75
  @Fli_Color:
76
	mov  bx, word [esi]			; number of packets in this chunk (always 1?)
77
	add  esi, 2					; skip the NumberofPackets
78
;_________________________________________________________________________________________
79
	mov  al, 0					; start at color 0
80
	xor  cx, cx					; reset CX
81
  @Color_Loop:
82
	or   bx, bx					; set flags
83
	jz   @Fli_Loop				; Exit if no more packages
84
	dec  bx 					; decrement NumberofPackages For the package to process now
85
	mov  cl, byte [esi]			; first Byte in packet tells how many colors to skip
86
	add  al, cl					; add the skiped colors to the start to get the new start
87
	mov  edi, pal
88
	add	di,	cx
89
 
90
		;push  cx       ;----- save how many colors to skip ----->
91
	mov  cl, byte [esi+1]		; next Byte in packet tells how many colors to change
92
	or   cl, cl					; set the flags
93
	jnz  @Jump_Over 			; if NumberstoChange=0 then NumberstoChange=256
94
	inc  ch 					; CH=1 and CL=0 => CX=256
95
  @Jump_Over:
96
	;add  al, cl                                     ; update the color to start at
97
	add  esi, 2					; skip the NumberstoSkip and NumberstoChange Bytes
98
	.set_next_color:
99
	     lodsb	   ; B
100
	     shl     al, 2 ; Enlight the color r*4, g*4, b*4
101
	     push    ax
102
 
103
	     lodsb	   ; G
104
	     shl     al, 2 ; Enlight the color r*4, g*4, b*4
105
	     push    ax
106
 
107
	     lodsb	   ; R
108
	     shl     al, 2 ; Enlight the color r*4, g*4, b*4
109
 
110
	     stosb	   ; R
111
	     pop     ax
112
	     stosb	   ; G
113
	     pop     ax
114
	     stosb	   ; B
115
	     xor     al, al
116
	     stosb	   ; 0
117
	  loop	.set_next_color
118
 
119
	jmp  @Color_Loop			; finish With this packet - jump back
120
  @Fli_Lc:
121
	mov  di, word [esi]			; put LinestoSkip into DI -
122
	mov  ax, di					; - to get the offset address to this line we have to multiply With 320 -
123
	shl  ax, 8					; - DI = old_DI shl 8 + old_DI shl 6 -
124
	shl  di, 6					; - it is the same as DI = old_DI*256 + old_DI*64 = old_DI*320 -
125
	add  di, ax					; - but this way is faster than a plain mul
126
		add  edi, dword [image]
127
	mov  bx, word [esi+2]		; put LinestoChange into BX
128
	add  esi, 4					; skip the LinestoSkip and LinestoChange Words
129
	xor  cx, cx					; reset cx
130
  @Line_Loop:
131
	or   bx, bx					; set flags
132
	jz   @Fli_Loop				; Exit if no more lines to change
133
	dec  bx
134
	mov  dl, byte [esi]			; put PacketsInLine into DL
135
	inc  esi						; skip the PacketsInLine Byte
136
	push edi						; save the offset address of this line
137
  @Pack_Loop:
138
	or   dl, dl					; set flags
139
	jz   @Next_Line 			; Exit if no more packets in this line
140
 
141
	dec  dl
142
	mov  cl, byte [esi]			; put BytestoSkip into CL
143
	add  di, cx					; update the offset address
144
	mov  cl, byte [esi+1]		; put BytesofDatatoCome into CL
145
	or   cl, cl					; set flags
146
	jns  @Copy_Bytes			; no SIGN means that CL number of data is to come -
147
								; - else the next data should be put -CL number of times
148
	mov  al, byte [esi+2]		; put the Byte to be Repeated into AL
149
	add  esi, 3					; skip the packet
150
	neg  cl 					; Repeat -CL times
151
	rep  stosb
152
	jmp  @Pack_Loop 			; finish With this packet
153
  @Copy_Bytes:
154
	add  esi, 2					; skip the two count Bytes at the start of the packet
155
	rep  movsb
156
	jmp  @Pack_Loop 			; finish With this packet
157
  @Next_Line:
158
	pop  edi						; restore the old offset address of the current line
159
	add  edi, 320				; offset address to the next line
160
	jmp  @Line_Loop
161
  @Fli_Black:
162
	mov  edi, dword [image]
163
	mov  cx, 32000				; number of Words in a screen
164
	xor  ax, ax					; color 0 is to be put on the screen
165
	rep  stosw
166
	jmp  @Fli_Loop				; jump back to main loop
167
  @Fli_Brun:
168
	mov  edi, dword [image]
169
	mov  bx, 200				; numbers of lines in a screen
170
	xor  cx, cx
171
  @Line_Loop2:
172
	mov  dl, byte [esi]			; put PacketsInLine into DL
173
	inc  esi						; skip the PacketsInLine Byte
174
	push edi						; save the offset address of this line
175
  @Pack_Loop2:
176
	or   dl, dl					; set flags
177
	jz   @Next_Line2			; Exit if no more packets in this line
178
	dec  dl
179
	mov  cl, byte [esi]			; put BytesofDatatoCome into CL
180
	or   cl, cl					; set flags
181
	js   @Copy_Bytes2			; SIGN meens that CL number of data is to come -
182
								; - else the next data should be put -CL number of times
183
	mov  al, byte [esi+1]		; put the Byte to be Repeated into AL
184
	add  esi, 2					; skip the packet
185
	rep  stosb
186
	jmp  @Pack_Loop2			; finish With this packet
187
  @Copy_Bytes2:
188
	inc  esi						; skip the count Byte at the start of the packet
189
	neg  cl 					; Repeat -CL times
190
	rep  movsb
191
	jmp  @Pack_Loop2			; finish With this packet
192
  @Next_Line2:
193
	pop  edi						; restore the old offset address of the current line
194
	add  edi, 320				; offset address to the next line
195
	dec  bx 					; any more lines to draw?
196
	jnz  @Line_Loop2
197
	jmp  @Fli_Loop				; jump back to main loop
198
  @Fli_Copy:
199
	mov  edi, dword [image]
200
	mov  cx, 32000				; number of Words in a screen
201
	rep  movsw
202
	jmp  @Fli_Loop				; jump back to main loop
203
  @Exit:
204
 
205
		mov	eax, 65
206
		mov	ebx, dword [image]
207
		mov	ecx, 320*65536+200
208
		mov	edx, 10*65536+100
209
		mov	esi, 8
210
		mov	edi, pal
211
		xor	ebp, ebp
212
		int	0x40
213
 
214
	ret	; DrawFrame end.
215
 
216
TFliPlayer_Init:
217
	mov	eax, 68 	; Init process memory
218
	mov	ebx, 11
219
	int	0x40
220
	cmp	eax, BufSize
221
	jl	.fail
222
  .ok:
223
    ;GetMem(Buffer,BufSize);
224
	mov	eax, 68
225
	mov	ebx, 12
226
	mov	ecx, BufSize
227
	int	0x40
228
	mov	dword [Buffer], eax
229
 
230
		;GetMem(image,32000);
231
		mov	eax, 68
232
		mov	ebx, 12
233
		mov	ecx, 320*200*4		;32000
234
		int	0x40
235
		mov	dword [image], eax
236
 
237
 
238
    mov word [Interval],  -1	; ClearSpeed
239
	mov	ax,	1
240
	ret
241
  .fail:
242
	xor	ax, ax
243
	ret	; TFliPlayer_Init end.
244
 
245
TFliPlayer_Done:
246
    ;FreeMem(Buffer,BufSize);
247
	mov	eax, 68
248
	mov	ebx, 13
249
	mov	ecx, dword [Buffer]
250
	int	0x40
251
 
252
		;FreeMem(image,32000);
253
	mov	eax, 68
254
	mov	ebx, 13
255
	mov	ecx, dword [image]
256
	int	0x40
257
 
258
	ret	; TFliPlayer_Done end.
259
 
260
;       in:     ax = Speed
261
;TFliPlayer_SetSpeed:
262
;       mov     bl,     byte Clock_Scale
263
;       mul     bl
264
;    mov        word [Interval], ax     ;= Speed * Clock_Scale;
265
;       ret     ; TFliPlayer_SetSpeed end.
266
 
267
 
268
 
269
ReadHeader: ;Boolean;
270
	;BlockRead(FliFile,MainHeader,SizeOf(MainHeader))       ; Read header record
271
	mov	eax, dword [filepos]
272
	mov	dword [InfoStructure+4], eax
273
	mov	dword [InfoStructure+12], 128
274
	mov	dword [InfoStructure+16], MainHeader
275
	mov	eax, 70
276
	mov	ebx, InfoStructure
277
 
278
	int	0x40
279
 
280
	mov	eax, 128
281
	mov	dword [filepos], eax
282
 
283
    mov ax, word [MainHeader.ID]
284
	cmp	ax, 0xAF11 ; FLI ?
285
	je	.fli
286
 
287
	cmp	ax, 0xAF12 ; FLC ?
288
	je	.flc
289
 
290
	xor	ax,	ax	; Not a .FLI File
291
	ret
292
  .fli:
293
	mov	byte [filetype], 1
294
	jmp	.ok
295
  .flc:
296
	mov	byte [filetype], 2
297
  .ok:
298
;       cmp     word [Interval], -1
299
;       jne     @f
300
;       ; Read speed from header
301
;       mov     ax,     word [MainHeader.Speed]
302
;       mov     bl,     byte Clock_Scale
303
;       mul     bl
304
;    mov        word [Interval], ax     ;= Speed * Clock_Scale;
305
	mov	ax, 1
306
;  @@:
307
	ret	; ReadHeader end.
308
 
309
ReadFrame:
310
	;BlockRead(FliFile,FrameHeader,SizeOf(FrameHeader));
311
	mov	eax, dword [filepos]
312
	mov	dword [InfoStructure+4], eax
313
	mov	dword [InfoStructure+12], 16
314
	mov	dword [InfoStructure+16], FrameHeader
315
	mov	eax, 70
316
	mov	ebx, InfoStructure
317
 
318
	int	0x40
319
 
320
	add	dword [filepos], 16
321
	;FrameSize := FrameHeader.Size - SizeOf(FrameHeader);
322
	mov	eax, dword [FrameHeader.Size]
323
	sub	eax, 16
324
	mov dword [FrameSize], eax
325
    xor ecx, ecx
326
 
327
	ret	; ReadFrame end.
328
 
329
ProcessFrame:
330
	;BlockRead(FliFile,Buffer^,FrameSize);
331
	mov	eax, dword [filepos]
332
	mov	dword [InfoStructure+4], eax
333
	mov	eax,	dword [FrameSize]
334
	mov	dword [InfoStructure+12], eax
335
	mov	eax, dword [Buffer]
336
	mov	dword [InfoStructure+16], eax
337
	mov	eax, 70
338
	mov	ebx, InfoStructure
339
 
340
	int	0x40
341
 
342
	mov	eax,	dword [FrameSize]
343
	add	dword [filepos], eax
344
	mov	esi, dword [Buffer]
345
	mov	dx, word [FrameHeader.Chunks]
346
	mov	word [Chunks], dx
347
	call DrawFrame
348
 
349
	ret	; ProcessFrame end.
350
 
351
 
352
;       in:     esi = pointer to the filename
353
TFliPlayer_Play:
354
	mov	eax, 70
355
	mov	ebx, InfoStructure
356
	mov	dword [InfoStructure+12], 1
357
	mov	dword [InfoStructure+16], FrameHeader
358
	int	0x40
359
	test	ax,	ax
360
	jnz	.err
361
 
362
	call	ReadHeader
363
	test	ax,	ax
364
	jz	.err
365
 
366
	call	ReadFrame
367
 
368
	mov	eax, dword [FrameSize]
369
	add	eax, 128+16
370
	mov	dword [RestartPos], eax
371
	call	ProcessFrame
372
 
373
 
374
  .play_again:
375
	mov	word [Frame], 1
376
	  .show_next_frame:
377
 
378
			call	ReadFrame
379
			cmp	dword [FrameSize], 0
380
			je	@f
381
			call	ProcessFrame
382
		  @@:
383
 
384
		  ;REPEAT UNTIL GetClock > Timeout;
385
			mov	eax, 5
386
			mov	ebx, 2
387
			int	0x40
388
 
389
			push	edi
390
			call	process_events
391
			pop	edi
392
 
393
			mov	al, byte [stop]
394
			cmp	al, 1
395
			je	.end
396
 
397
			mov	ax, word [Frame]
398
			inc	ax
399
			mov	word [Frame], ax
400
 
401
			cmp	ax, word [MainHeader.Frames]
402
			jng	.show_next_frame
403
		mov	eax,	dword [RestartPos]
404
		mov	dword [InfoStructure+4], eax
405
		mov	eax, 128
406
		mov	dword [filepos], eax
407
 
408
	jmp	.play_again
409
  .end:
410
	mov	dword [filepos], 0
411
	xor	ax, ax
412
  .err:
413
 
414
	ret	; TFliPlayer_Play end.
415
 
416
 
417
;       in:     esi = pointer to filename
418
AAPlay:
419
	mov	byte [pausetime], 0
420
	mov	byte [stop], 0
421
	cmp	byte [playtime], 1
422
	je	.end
423
	call	unprint_error
424
 
425
	mov	byte [playtime], 1
426
	call	TFliPlayer_Play
427
	test	ax, ax
428
	jz	.end
429
	call	print_error
430
  .end:
431
	mov	byte [playtime], 0
432
	ret	; AAPlay end.
433
 
434
 
435
 
436
N_KEYCOLOR equ 0x00444444 ; Normal button color
437
TEXTCOLOR  equ 0x80FFFFFF ; Text color
438
BUTCAPCOLOR  equ 0x0000FF00 ; Button caption color
439
 
440
 
441
unprint_error:
442
	mov eax, 13
443
	mov ebx, 10*65536+320
444
	mov ecx, 50*65536+15
445
	mov edx, 0 ; color
446
	int 0x40
447
ret
448
 
449
print_error:
450
	;call   unprint_error
451
 
452
	mov	ebx, 15*65536+54
453
	mov	edx, error_text
454
	mov	ecx, TEXTCOLOR - 0x0000FFFF
455
	mov	eax, 4
456
	int	0x40
457
 
458
ret
459
 
460
print_filename:
461
	mov eax, 13
462
	mov ebx, 10*65536+320
463
	mov ecx, 30*65536+15
464
	mov edx, 0 ; color
465
	int 0x40
466
 
467
	mov	ebx, 15*65536+34
468
	mov	edx, filename
469
	mov	ecx, TEXTCOLOR - 0x00FF00FF
470
	mov	eax, 4
471
	int	0x40
472
 
473
ret
474
 
475
;**********************************
476
;*  input: ecx = type of map      *
477
;**********************************
478
get_keyboard_map:
479
	mov	eax, 26
480
	mov	ebx, 2
481
	mov	edx, keymap
482
	int	0x40
483
ret
484
 
485
;**********************************
486
;*  input: ecx = type of mode    *
487
;**********************************
488
set_keyboard_mode:
489
	mov	eax, 66
490
	mov	ebx, 1	   ; Set keyboard mode
491
	int	0x40
492
ret
493
 
494
get_control_keys_state:
495
	mov	eax, 66
496
	mov	ebx, 3
497
	int	0x40
498
ret
499
 
500
reload_ascii_keymap:
501
	pusha
502
	call	get_control_keys_state
503
	mov	ecx, 1
504
 
505
	test	ax, 1				; Left  Shift pressed ?
506
	jnz	 @f
507
	test	ax, 2				; Right Shift pressed ?
508
	jnz	 @f
509
	test	ax, 0x40			; Caps  Lock  on ?
510
	jz	.load_ascii_keymap
511
      @@:
512
	mov	ecx, 2
513
      .load_ascii_keymap:
514
	call	get_keyboard_map
515
	popa
516
  ret
517
 
518
 
519
STARTAPP:
520
 
521
	call	TFliPlayer_Init
522
	test	ax, ax
523
	jz	close_app
524
 
525
	mov	ecx, 1	   ; to send scancodes.
526
	call	set_keyboard_mode
527
	call	reload_ascii_keymap
528
	call	draw_window
529
	call	print_filename
530
 
531
	cmp  [filename], byte 0
532
	je   .noparam
533
	call	AAPlay
534
  .noparam:
535
	jmp	still
536
 
537
 
538
draw_window:
539
	start_draw_window 20,170,340,310,0x14224466,labelt
540
	draw_button 15,70,20,20,2,N_KEYCOLOR,keyText,1,BUTCAPCOLOR		; Play
541
 
542
	mov	ecx, BUTCAPCOLOR
543
 
544
	mov	edx, keyText
545
	mov	ebx, 21*65536+77	       ; |
546
	call	out_symbol
547
 
548
	mov	edx, keyText+1
549
	mov	ebx, 22*65536+75	       ; -
550
	call	out_symbol
551
 
552
	mov	ebx, 24*65536+76	       ; -
553
      @@:
554
	call	out_symbol
555
	inc	ebx
556
	cmp	ebx, 24*65536+79
557
	jl	@b
558
 
559
	mov	ebx, 22*65536+79	       ; -
560
	call	out_symbol
561
 
562
	mov	ebx, 26*65536+77	       ; -
563
	call	out_symbol
564
 
565
	draw_button 45,70,20,20,3,N_KEYCOLOR,keyText,1,BUTCAPCOLOR		; Pause
566
 
567
	mov	ecx, BUTCAPCOLOR
568
 
569
	mov	edx, keyText
570
	mov	ebx, 49*65536+77	       ; |
571
	call	out_symbol
572
 
573
	mov	ebx, 51*65536+77	       ; |
574
	call	out_symbol
575
 
576
	mov	ebx, 54*65536+77	       ; |
577
	call	out_symbol
578
 
579
	mov	ebx, 55*65536+77	       ; |
580
	call	out_symbol
581
 
582
	mov	ebx, 56*65536+77	       ; |
583
	call	out_symbol
584
 
585
	draw_button 75,70,20,20,4,N_KEYCOLOR,keyText,1,BUTCAPCOLOR		; Stop
586
 
587
	bar	81,77,8,7,BUTCAPCOLOR
588
 
589
	end_draw_window
590
	ret
591
 
592
process_events:
593
	mov	eax, 11 	    ; Test if there is an event in the queue.
594
	int	0x40
595
 
596
	cmp	eax,1		       ; redraw request ?
597
	jnz	@f
598
	call	red
599
	ret
600
      @@:
601
	cmp	eax,3		       ; button in buffer ?
602
	jnz	@f
603
	call	button
604
	ret
605
      @@:
606
	cmp	eax,2		       ; key in buffer ?
607
	jnz	@f
608
 
609
	call	key
610
      @@:
611
	;jz      key
612
      ;  cmp     eax, 2
613
      ;  jnz     @f
614
      ;
615
      ;  cmp     byte [playtime], 0
616
      ;  je      @f
617
	;int     0x40
618
      ;@@:
619
 
620
	ret
621
 
622
still:
623
	call	process_events
624
	jmp	still
625
 
626
red:
627
	call	draw_window
628
	ret	;jmp    still
629
 
630
key:
631
	mov	eax, 2
632
	int	0x40
633
 
634
	test	al, al
635
	jnz	.end
636
 
637
	cmp	ah, 1 ; Esc
638
	jne	@f
639
	jmp	close_app
640
  @@:
641
	cmp	ah, 28 ; Enter
642
	jne	@f
643
	call	AAPlay
644
	jmp	.end
645
  @@:
646
	cmp	ah, 15 ; Tab
647
	je	.end
648
	cmp	ah, 29 ; Left Control
649
	je	.end
650
	cmp	ah, 42 ; Left Shift
651
	je	.end
652
 
653
	cmp	ah, 14 ; BackSpace
654
	jne	@f
655
 
656
	; strlen(filename)
657
	mov	edi, filename
658
	xor	al, al	; search for the end of the filename
659
	repne	scasb
660
	cmp	edi, filename+2
661
	jl	.end
662
 
663
	cmp	edi, filename+2
664
	jl	.end
665
	mov	byte [edi-2], 0
666
 
667
	call	print_filename
668
	jmp	.end
669
 
670
  @@:
671
	cmp	ah, 57 ; Space
672
	je	.input_symbol
673
	cmp	ah, 2
674
	jl	.end
675
	cmp	ah, 54
676
	jg	.end
677
 
678
  .input_symbol:
679
	mov	byte [stop], 1
680
	call	reload_ascii_keymap
681
	; strlen(filename)
682
	mov	edi, filename
683
	xor	al, al	; search for the end of the filename
684
	repne	scasb
685
	cmp	edi, filename+52
686
	jg	.end
687
 
688
	shr	ax, 8
689
	and	eax, 0x7F
690
	mov	al, byte [keymap+eax]	; Read ASCII from the keymap table.
691
	mov	byte [edi-1], al
692
	mov	byte [edi], 0
693
 
694
	call	print_filename
695
  .end:
696
	ret
697
 
698
button:
699
	mov	eax, 17 	    ; Get pressed button code
700
	int	0x40
701
 
702
	cmp	ah, 1		    ; Test x button
703
	je	close_app
704
 
705
	cmp	ah, 2		    ; Test "Play" button
706
	jne	@f
707
	call	AAPlay
708
	jmp	.end
709
  @@:
710
 
711
	cmp	ah, 3		    ; Test "Pause" button
712
	jne	@f
713
	cmp	byte [playtime], 1
714
	jne	@f
715
 
716
	not	byte [pausetime]
717
      .pause:
718
	call	process_events
719
	cmp	byte [pausetime], 0
720
	jne	.pause
721
 
722
  @@:
723
	cmp	ah, 4		    ; Test "Stop" button
724
	jne	@f
725
	mov	byte [stop], 1
726
	jne	@f
727
  @@:
728
 
729
  .end:
730
	ret
731
close_app:
732
 
733
    cmp     dword [image], 0
734
    je	    @f
735
    call    TFliPlayer_Done
736
  @@:
737
    mov  eax,-1 		 ; close this program
738
    int  0x40
739
 
740
 
741
; DATA
742
; Application Title
743
labelt		db	'FLI Player v0.31',0
744
keyText 	db	'|-_'
745
 
746
 
747
error_text	db	"Can't load file.",0
748
filepos 	dd	0x0
749
filetype	db	0     ; 0 - unsupported, 1 - fli, 2 - flc
750
 
751
playtime	db	0
752
pausetime	db	0
753
stop		db	0
754
 
755
pal		rb	256*4
756
image		dd	0
757
InfoStructure:
758
			dd	0x0	; subfunction number
759
			dd	filepos ; position in the file in bytes
760
			dd	0x0	; upper part of the position address
761
			dd	0x0	; number of     bytes to read
762
			dd	0x0	; pointer to the buffer to write data
763
			db	0
764
			dd	filename
765
 
766
keymap	rb	128
767
 
768
I_END:
769
 
770
Buffer		dd	?
771
Interval	dw	?
772
 
773
Chunks		dw	?
774
 
775
FrameSize	dd	?
776
RestartPos	dd	?
777
Frame		dw	?
778
 
779
MainHeader	MainHeaderRec
780
FrameHeader	FrameHeaderRec
781
 
782
filename	db	'/hd0/2/',0
783
		rb	46
784