; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
; ³ (c) Lord Julus - 2000		 Vxtasy #1 - Magazine source code ³
; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

;===========( The main routine that waits keyboard input )===================

browse proc near			   ; browsing procedure
	mov word ptr cs:push_timer, 0FFFeh ;
	mov already_captioned, 0	   ;
	mov scroll_captioned, 0 	   ;
					   ;
	call video_flush		   ; put on screen
					   ;
gfc_browse_loop:			   ;
	cmp scroll_captioned, 1 	   ;
	je cought_scroll_bar		   ;
	cmp cs:[un_buton], 1		   ;
	je mouse_button 		   ;
	mov scroll_captioned, 0 	   ;
	cmp cs:keys[Kf8], 1		   ;
	je _sound_toggle		   ;
	cmp cs:keys[KDARROW], 1 	   ; pressed down-arrow ?
	je _key_down			   ;
	cmp cs:keys[KKEYPAD2], 1	   ;
	je _key_down			   ;
	cmp cs:keys[KUARROW], 1 	   ; pressed up-arrow ?
	je _key_up			   ;
	cmp cs:keys[KKEYPAD8], 1	   ;
	je _key_up			   ;
	cmp cs:keys[KRARROW], 1 	   ; pressed up-arrow ?
	je _key_right			   ;
	cmp cs:keys[KKEYPAD6], 1	   ;
	je _key_right			   ;
	cmp cs:keys[KLARROW], 1 	   ; pressed up-arrow ?
	je _key_left			   ;
	cmp cs:keys[KKEYPAD4], 1	   ;
	je _key_left			   ;
	cmp cs:keys[KPGDN], 1		   ;
	je _key_pgdn			   ;
	cmp cs:keys[KKEYPAD3], 1	   ;
	je _key_pgdn			   ;
	cmp cs:keys[KPGUP], 1		   ;
	je _key_pgup			   ;
	cmp cs:keys[KKEYPAD9], 1	   ;
	je _key_pgup			   ;
	cmp cs:keys[KHOME], 1		   ;
	je _key_home			   ;
	cmp cs:keys[KKEYPAD7], 1	   ;
	je _key_home			   ;
	cmp cs:keys[KEND], 1		   ;
	je _key_end			   ;
	cmp cs:keys[KKEYPAD1], 1	   ;
	je _key_end			   ;
	cmp cs:keys[KF1], 1		   ;
	je _key_f1			   ;
					   ;
	cmp cs:keys[KESC], 1		   ; pressed ESC ?
	je _exit			   ;
	cmp cs:keys[KENTER], 1		   ;
	je _exit			   ;
	cmp cs:keys[KKEYPADENTER], 1	   ;
	je _exit			   ;
					   ;
	cmp cs:keys[KF7], 1		   ;
	je _key_f7			   ;
					   ;
	cmp cs:keys[KF4], 1		   ;
	jne no_key_f4_2 		   ;
	call key_f4			   ;
					   ;
no_key_f4_2:				   ;
	jmp gfc_browse_loop		   ;
					   ;
;=====( Down key pressed )=================;
					   ;
_key_down:				   ;
	mov cs:keys[KDARROW], 0 	   ; reset the key
	mov cs:keys[KKEYPAD2], 0	   ; reset the key
	cmp overend, 1			   ; are we allow to go down more?
	je gfc_browse_loop		   ; no!
	call godown			   ; and read some more lines
	mov pressedupdn, 1		   ;
	jmp _done_move			   ;
					   ;
;=====( Up key pressed )===================;
					   ;
_key_up:				   ;
	mov cs:keys[KUARROW], 0 	   ; reset the key
	mov cs:keys[KKEYPAD8], 0	   ; reset the key
					   ;
	lea di, firstlinepos		   ;
	call comp_dword_zero		   ;
	jc gfc_browse_loop		   ;
					   ;
	mov overend, 0			   ; and clear downwards allowence
	call goup			   ; and read some more lines.
	mov pressedupdn, 1		   ;
	mov miscdata, 0 		   ;
	jmp _done_move			   ;
					   ;
;=====( Left key pressed )=================;
					   ;
_key_right:				   ;
	mov cs:keys[KRARROW], 0 	   ; reset the key
	mov cs:keys[KKEYPAD6], 0	   ; reset the key
	cmp dispsmth, 0 		   ;
	je no_left_movement		   ;
	inc rightmove			   ;
	mov pressedupdn, 0		   ;
	mov miscdata, 0 		   ;
					   ;
no_left_movement:			   ;
	jmp _done_move			   ;
					   ;
;=====( Right key pressed )================;
					   ;
_key_left:				   ;
	mov cs:keys[KLARROW], 0 	   ; reset the key
	mov cs:keys[KKEYPAD4], 0	   ; reset the key
	cmp rightmove, 0		   ;
	je no_right_movement		   ;
	dec rightmove			   ;
	mov pressedupdn, 0		   ;
	mov miscdata, 0 		   ;
					   ;
no_right_movement:			   ;
	jmp _done_move			   ;
					   ;
;=====( Page Up key pressed )==============;
					   ;
_key_pgup:				   ;
	mov cs:keys[KPGUP], 0		   ; reset the key
	mov cs:keys[KKEYPAD9], 0	   ; reset the key
	lea di, firstlinepos		   ; firstlinepos is a double word
	call comp_dword_zero		   ;
	jc gfc_browse_loop		   ;
					   ;
ok_browse1:				   ;
	mov overend, 0			   ; and clear downwards allowence
	mov ax, 0			   ;
	call pageup			   ;
	mov pressedupdn, 1		   ;
					   ;
	jmp _done_move			   ;
					   ;
;=====( Page down key pressed )============;
					   ;
_key_pgdn:				   ;
	mov cs:keys[KPGDN], 0		   ; reset the key
	mov cs:keys[KKEYPAD3], 0	   ; reset the key
	cmp overend, 1			   ; are we allow to go down more?
	je gfc_browse_loop		   ; no!
	call pagedown			   ;
	mov pressedupdn, 1		   ;
	mov miscdata, 0 		   ;
					   ;
	jmp _done_move			   ;
					   ;
;=====( Home key pressed )=================;
					   ;
_key_home:				   ;
	mov byte ptr cs:keys[KHOME], 0	   ;
	mov byte ptr cs:keys[KKEYPAD7], 0  ;
	call homeproc			   ;
	mov pressedupdn, 1		   ;
	jmp _done_move			   ;
					   ;
;=====( End key pressed )==================;
					   ;
_key_end:				   ;
	mov byte ptr cs:keys[KEND], 0	   ;
	mov byte ptr cs:keys[KKEYPAD1], 0  ;
	call endproc			   ;
	mov pressedupdn, 1		   ;
	jmp _done_move			   ;
					   ;
_sound_toggle:				   ;
	mov cs:keys[KF8], 0		   ;
	mov ax, 1			   ;
	sub ax, soundstatus		   ;
	mov soundstatus, ax		   ;
	cmp soundstatus, 0		   ;
	jne _no_stopping		   ;
	call EndPlayer			   ;
					   ;
_no_stopping:				   ;
	jmp gfc_browse_loop		   ;
					   ;
_key_f1:				   ;
	mov cs:keys[KF1], 0		   ;
	call save_to_page_3		   ;
	mov disable, 1			   ;
	mov ax, 3			   ;
	call makewindow 		   ;
					   ;
	mov ax, 1			   ;
	mov dx, 1421h			   ;
	mov b_shad_attr, 03h shl 4 + 00h   ;
	mov waitread, 0 		   ;
	call waitwindow 		   ;
					   ;
	call restore_from_page_3	   ;
	mov disable, 0			   ;
	jmp gfc_browse_loop		   ;
					   ;
					   ;
_key_f7:				   ;
	mov cs:keys[KF7], 0		   ;
	cmp cs:keys[KRIGHTSHIFT],1	   ;
	je default_tc			   ;
	cmp cs:keys[KLEFTSHIFT], 1	   ;
	je default_tc			   ;
					   ;
	mov al, tc			   ;
	cmp al, 15d			   ;
	jne no_margin			   ;
	mov al, 1			   ;
	jmp set_tc			   ;
					   ;
default_tc:				   ;
	mov cs:keys[KRIGHTSHIFT],0	   ;
	mov cs:keys[KLEFTSHIFT], 0	   ;
	mov al, 7			   ;
	jmp set_tc			   ;
					   ;
no_margin:				   ;
	inc al				   ;
set_tc: 				   ;
	mov [tc], al			   ;
	call video_flush		   ;
	jmp gfc_browse_loop		   ;
					   ;
;==========================================;
mouse_button:				   ;
	mov ax, scrollbarv		   ;
	cmp ax, 1			   ;
	je check_for_vertical_scroll	   ;
					   ;
check_for_vertical_scroll:		   ;
	mov dx, scroll_pos		   ;
	xor cx, cx			   ;
	mov cl, dl			   ;
	mov dl, dh			   ;
	mov dh, 0			   ;
					   ;
	cmp dx, mouse_oriz		   ;
	jne not_right_scroll_line	   ;
	mov ax, mouse_vert		   ;
	cmp ax, scrollbars-1		   ;
	je on_scroll_up 		   ;
	jb not_right_scroll_line	   ;
	cmp ax, scrollbare		   ;
	je on_scroll_down		   ;
	ja not_right_scroll_line	   ;
					   ;
	cmp cx, mouse_vert		   ;
;	je cought_scroll_bar		   ;
	mov cs:[un_buton], 0		   ;
	ja _key_pgup			   ;
	jb _key_pgdn			   ;
	jmp no_mouse_exit		   ;
					   ;
cought_scroll_bar:			   ;
	mov scroll_captioned, 1 	   ;
	mov dx, scroll_pos		   ;
	xor cx, cx			   ;
	mov cl, dl			   ;
	cmp cx, mouse_vert		   ;
	jb _key_down			   ;
	ja _key_up			   ;
	cmp cs:[un_buton], 0		   ;
	jne cought_scroll_bar		   ;
	mov scroll_captioned, 0 	   ;
	jmp gfc_browse_loop		   ;
					   ;
not_right_scroll_line:			   ;
	cmp already_captioned, 1	   ;
	jne not_captioned_yet		   ;
	cmp cs:[un_buton], 0		   ;
	jne no_mouse_exit		   ;
	jmp check_again_button		   ;
					   ;
not_captioned_yet:			   ;
	mov cx, mouse_vert		   ;
	cmp cx, 22d			   ;
	jne no_mouse_exit		   ;
					   ;
	mov dx, mouse_oriz		   ;
	cmp dx, 44			   ;
	jb no_mouse_exit		   ;
	cmp dx, 53			   ;
	ja no_mouse_exit		   ;
					   ;
	mov already_captioned, 1	   ;
					   ;
no_mouse_exit:				   ;
	jmp gfc_browse_loop		   ;
					   ;
check_again_button:			   ;
	mov cx, mouse_vert		   ;
	cmp cx, 22d			   ;
	jne reset_it			   ;
					   ;
	mov dx, mouse_oriz		   ;
	cmp dx, 44			   ;
	jb reset_it			   ;
	cmp dx, 53			   ;
	ja reset_it			   ;
					   ;
	jmp _exit			   ;
					   ;
reset_it:				   ;
	mov already_captioned, 0	   ;
	jmp gfc_browse_loop		   ;
					   ;
on_scroll_up:				   ;
	dec word ptr cs:push_timer	   ;
	cmp word ptr cs:push_timer, 0	   ;
	jne  gfc_browse_loop		   ;
;	mov cs:[un_buton], 0		   ;
	mov cs:push_timer, 0FFFEh	   ;
	jmp _key_up			   ;
					   ;
on_scroll_down: 			   ;
	dec word ptr cs:push_timer	   ;
	cmp word ptr cs:push_timer, 0	   ;
	jne  gfc_browse_loop		   ;
;	mov cs:[un_buton], 0		   ;
	mov cs:push_timer, 0FFFeh	   ;
	jmp _key_down			   ;
					   ;
_done_move:				   ;
	mov crtpoint, si		   ; save the new current point
	call video_flush		   ; flush buffer to screen
	jmp gfc_browse_loop		   ; and loop
					   ;
_exit:					   ; exit now...
	mov cs:keys[KESC], 0		   ;
	mov cs:keys[KENTER], 0		   ;
	mov cs:keys[KKEYPADENTER], 0	   ;
					   ;
	ret				   ;
browse endp				   ;
push_timer dw 0 			   ;
;============================================================================