*----------------------------------------------------*
*--- Routines to handle block data manipulation   ---*
*----------------------------------------------------*

*** Note at present the block manipulation routines are
*** set up to deal with 16 pixel blocks for ABII,the 
*** code is therefore a bit hardwired - but it should be
*** easy to convert it to handle 8,16 or 32


DELETE_TEXT	EQU	0
DRAW_TEXT	EQU	1

FORWARD		EQU	0
FORWARD_FIRST	EQU	1
REVERSE		EQU	2


******************************************
****     EDIT SINGLE BLOCK           *****
******************************************
Edit_Single_Block
	
	jsr  convert_mouse_and_store	
	move.l page_pointer,a0
	clr.l	d2
	move.w screen_y_pos(a0),d2
	add.w	d1,d2		;giving y position down screen
	move.l	current_map_ptr,a1
	divu	map_block_size(a1),d2
	mulu	num_x_blocks_in_page,d2
	
	divu	map_block_size(a1),d0	;blocks in
	
	add.w	d2,d0
	move.w	current_page,d1
	mulu	num_blocks_in_page,d1
	add.w	d1,d0			;gives us the block
	
	cmp.w	#MAX_DATA_BLOCKS,d0	;just in case
	blt.s	within_sblock_range
	move.w	#MAX_DATA_BLOCKS-1,d0
within_sblock_range	

	move.w	d0,currently_selected_block


	clr.w	Edit_Blk_Mode	
	move.l	#edit_block_data_window,a0
	jsr	create_window

	bsr	Set_New_Attributes
	
	move.l	#edit_single_block_data_buttons,a0
	jsr	display_button_list
	move.l	#edit_block_other_buttons,a0
	jsr	display_button_list
	move.l	#edit_blk_attr_buttons,a0
	jsr	display_button_list

	bsr	Display_Attr_Titles
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Menu
	bsr	Display_Shooting_Menu
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice

	rts


******************************************
*****REMOVE SINGLE EDIT BLOCK WINDOW *****
******************************************
remove_single_edit_block_window

	move.l	#edit_single_block_data_buttons,a0
	jsr	remove_button_list
	move.l	#edit_block_other_buttons,a0
	jsr	remove_button_list
	move.l	#edit_blk_attr_buttons,a0
	jsr	remove_button_list	
	move.l	#edit_block_data_window,a0
	jsr	destroy_window
	jsr	Display_Graphic_Page
	
	rts


******************************************
****     DISPLAY EDIT WINDOW         *****
******************************************
display_edit_window

	clr.w	Edit_Blk_Mode	
	move.l	#edit_block_data_window,a0
	jsr	create_window
	move.l	#edit_block_data_buttons,a0
	jsr	display_button_list
	move.l	#edit_block_other_buttons,a0
	jsr	display_button_list
	move.l	#edit_blk_attr_buttons,a0
	jsr	display_button_list
	rts



******************************************
*****	REMOVE EDIT BLOCK WINDOW     *****
******************************************
remove_edit_block_window

	move.l	#edit_block_data_buttons,a0
	jsr	remove_button_list
	move.l	#edit_block_other_buttons,a0
	jsr	remove_button_list
	move.l	#edit_blk_attr_buttons,a0
	jsr	remove_button_list	
	move.l	#edit_block_data_window,a0
	jsr	destroy_window
	jsr	Display_Graphic_Page
	
	rts


******************************************
****     VIEW BLOCK ATTRIBUTES       *****
******************************************
View_Block_Attributes	

	move.l	#Block_Attr1,a0
	move.w	#8-1,d0
clear_attr_butts
	clr.b	button_start(a0)	;clear button contents
	add.l	#block_butt_size,a0
	dbra	d0,clear_attr_butts


	clr.w	CompareData
	move.w	#1,Edit_Blk_Mode	;set flag
	move.l	#edit_block_data_window,a0
	jsr	create_window
	move.l	#view_block_data_buttons,a0
	jsr	display_button_list
	move.l	#edit_block_other_buttons,a0
	jsr	display_button_list
	move.l	#edit_blk_attr_buttons,a0
	jsr	display_button_list
	
	clr.w	Standing_Menu_Pos
	clr.w	Shooting_Menu_Pos
	clr.w	Standing_Choice
	clr.w	Shooting_Choice
	bsr	Display_Attr_Titles
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Menu
	bsr	Display_Shooting_Menu
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice

	
	rts

******************************************
*****	REMOVE VIEW BLOCK WINDOW     *****
******************************************
remove_view_block_window

	move.l	#view_block_data_buttons,a0
	jsr	remove_button_list
	move.l	#edit_block_other_buttons,a0
	jsr	remove_button_list
	move.l	#edit_blk_attr_buttons,a0
	jsr	remove_button_list	
	move.l	#edit_block_data_window,a0
	jsr	destroy_window

	move.l	clicked_button,a0	
	moveq	#0,d1
	tst.b	button_data(a0)
	bne.s	dont_add_any_data

	bsr	Add_Specified_Blks_To_Group		
	bra.s	display_new_grps
dont_add_any_data
	bsr	Clear_Blk_Group	
display_new_grps	
	jsr	Display_Graphic_Page	
	rts

******************************************
*****	ADD SPECIFIED BLKS TO GROUP  *****
******************************************
Add_Specified_Blks_To_Group
	move.l	block_data_ptr,a0
	move.l	#block_group_data,a1
	move.w	CompareData,d1
	move.w	#MAX_DATA_BLOCKS-1,d0
view_loop
	cmp.w	(a0)+,d1
	beq.s	add_block_to_group
	clr.b	(a1)			
	bra.s	test_next_blk
add_block_to_group
	move.b	#1,(a1)
test_next_blk
	add.l	#1,a1
	dbra	d0,view_loop	
	rts

******************************************
*****    	CLEAR BLK GROUP      *****
******************************************
Clear_Blk_Group
	move.l	#block_group_data,a1
	move.w	#MAX_DATA_BLOCKS-1,d0
clear_blk_loop
	clr.b	(a1)+
	dbra	d0,clear_blk_loop
	rts

******************************************
****     ENTER BLOCK INTO GROUP      *****
******************************************
Enter_Block_Into_Group
*If block already selected - remove from group

	jsr  convert_mouse_and_store	
	move.l page_pointer,a0
	clr.l	d2
	move.w screen_y_pos(a0),d2
	add.w	d1,d2		;giving y position down screen
	move.l	current_map_ptr,a1
	divu	map_block_size(a1),d2
	mulu	num_x_blocks_in_page,d2
	
	divu	map_block_size(a1),d0	;blocks in
	
	add.w	d2,d0
	move.w	current_page,d1
	mulu	num_blocks_in_page,d1
	add.w	d1,d0			;gives us the block
	
	cmp.w	#MAX_DATA_BLOCKS,d0
	blt.s	within_block_range
	move.w	#MAX_DATA_BLOCKS-1,d0
within_block_range	

	ext.l	d0	
	move.l	#block_group_data,a0
	tst.b	(a0,d0)
	beq.s	set_block_as_highlighted
	clr.b	(a0,d0)
	jsr	display_graphic_page
	rts	
set_block_as_highlighted	
	move.b	#1,(a0,d0)
display_highlight	
	divu	#320,d0
	clr.w	d0
	swap	d0		;gives modulo
	move.l	page_pointer,a1
	move.w  screen_y_pos(a1),d2
	ext.l   d2
	move.l  current_map_ptr,a1
	divu.w  map_block_size(a1),d2
	mulu	num_x_blocks_in_page,d2
	sub.l	d2,d0
	bsr	Highlight_Block	
	rts

******************************************
****     DISPLAY OVERLAYS            *****
******************************************
Display_Overlays
	move.w	current_page,d0
	move.l	#block_group_data,a0
	mulu	#320,d0
	add.l	d0,a0		;get page pos
	
	move.l page_pointer,a1
	move.w screen_y_pos(a1),d2
	ext.l  d2
	move.l current_map_ptr,a1
	divu.w  map_block_size(a1),d2
	mulu	num_x_blocks_in_page,d2
	add.l	d2,a0
	move.w	#(320)-1,d1
	sub.w	d2,d1		
	
	clr.w	d0
check_for_display
	tst.b	(a0)+
	beq.s	dont_display_ov
	
	movem.l	d0-d1/a0,-(sp)
	bsr	HighLight_Block	
	movem.l	(sp)+,d0-d1/a0
dont_display_ov	
	addq.w	#1,d0
	dbra	d1,check_for_display		
	rts
	
******************************************
****     HIGHLIGHT BLOCK             *****
******************************************
HighLight_Block
*send block in d0

	move.l #main_screen_struct,a0
	move.l	screen_mem(a0),a0

	divu	num_x_blocks_in_page,d0	
	moveq	#0,d1
	move.w	d0,d1		;lines down
	lsl.w	#4,d1		;pixels down
			
	clr.w	d0
	swap	d0		;gives blocks in
	lsl.w	#4,d0		;gives pixels in
	
	move.l	current_map_ptr,a1
	move.w	map_planes(a1),d5
	subq.w	#1,d5

draw_blk_lines	
	
	move.w	d0,d2
	move.w	d1,d3
	move.l	current_map_ptr,a1
	add.w	map_block_size(a1),d2
	add.w	map_block_size(a1),d3
	
	movem.l	a6/d5,-(sp)
	movem.l	a0/d0-d3,-(sp)
	jsr	Dark_Line	
	movem.l	(sp)+,a0/d0-d3
	
	movem.l	a0/d0-d3,-(sp)
	move.l	current_map_ptr,a1
	add.w	map_block_size(a1),d1
	sub.w	map_block_size(a1),d3
	jsr	Dark_Line
	
	movem.l	(sp)+,a0/d0-d3	
	
	move.l	#main_screen_struct,a2
	move.w	screen_x_size(a2),d4
	asr.w	#3,d4
	mulu	screen_y_size(a2),d4
	add.l	d4,a0	
		
	movem.l	(sp)+,a6/d5

	dbra	d5,draw_blk_lines
	
	rts		
		
block_group_data
	ds.b	MAX_DATA_BLOCKS		;max number of blocks	


***************************************
***** LOAD BLOCK DATA              ****
***************************************
Load_Block_Data

	move.l	#Load_Block_Data_Into_Memory,File_Routine_Pointer
	jsr	display_file_request
	rts

***************************************
***** LOAD BLOCK DATA INTO MEMORY  ****
***************************************
Load_Block_Data_Into_Memory

	movem.l	a6,-(sp)

	jsr	remove_file_request

	move.l	#Current_Filename,d1
	move.l	#MODE_OLD,d2
	move.l	dosbase,a6
	jsr	Open(a6)

	tst.l	d0
	beq	could_not_load_block_data	
	bsr	Load_Block_Data_From_File
	move.l	#Project_DataList,d0
	move.l	#Current_Filename,a0
	jsr	Set_Project_Information
		
	bra.s	exit_load_block_data
could_not_load_block_data
	jsr	display_error
exit_load_block_data	
	movem.l	(sp)+,a6

	rts
***************************************
***** LOAD BLOCK DATA FROM FILE    ****
***************************************
Load_Block_Data_From_File
*Send filehandle in d0
	
	move.l	d0,d1		;filehandle
	move.w	#16-1,d0
	move.l	#Blk_Standing_Strings,d2
load_stand_strings
	move.l	dosbase,a6
	move.l	#11,d3
	movem.l	d0-d3,-(sp)
	jsr	read(a6)
	movem.l	(sp)+,d0-d3
	add.l	#12,d2
	dbra	d0,load_stand_strings
	
	move.w	#16-1,d0
	move.l	#Blk_Shooting_Strings,d2
load_shoot_strings
	move.l	dosbase,a6
	move.l	#11,d3
	movem.l	d0-d3,-(sp)
	jsr	read(a6)
	movem.l	(sp)+,d0-d3
	add.l	#12,d2
	dbra	d0,load_shoot_strings

	move.w	#8-1,d0
	move.l	#Blk_Bit_Attrs,d2
load_attr_strings
	move.l	dosbase,a6
	move.l	#11,d3
	movem.l	d0-d3,-(sp)
	jsr	read(a6)
	movem.l	(sp)+,d0-d3
	add.l	#12,d2
	dbra	d0,load_attr_strings
	
	move.l	block_data_ptr,d2
	move.l	#MAX_BLOCKS_MEM,d3
	move.l	dosbase,a6
	move.l	d1,-(sp)
	jsr	read(a6)
	move.l	(sp)+,d1
	
	move.l	dosbase,a6
	jsr	close(a6)
	rts
	
***************************************
***** SAVE BLOCK DATA              ****
***************************************
Save_Block_Data
	move.l	#Save_Block_Data_To_Disk,File_Routine_Pointer
	jsr	display_file_request
	rts

***************************************
***** SAVE BLOCK DATA TO DISK      ****
***************************************
Save_Block_Data_To_Disk

	movem.l	a6,-(sp)

	jsr	remove_file_request

	move.l	#Current_Filename,d1
	move.l	#MODE_NEW,d2
	move.l	dosbase,a6
	jsr	Open(a6)

	tst.l	d0
	beq	could_not_save_block_data
	
	
	
	move.l	d0,d1		;filehandle
	move.w	#16-1,d0
	move.l	#Blk_Standing_Strings,d2
save_stand_strings
	move.l	dosbase,a6
	move.l	#11,d3
	movem.l	d0-d3,-(sp)
	jsr	write(a6)
	movem.l	(sp)+,d0-d3
	add.l	#12,d2
	dbra	d0,save_stand_strings
	
	move.w	#16-1,d0
	move.l	#Blk_Shooting_Strings,d2
save_shoot_strings
	move.l	dosbase,a6
	move.l	#11,d3
	movem.l	d0-d3,-(sp)
	jsr	read(a6)
	movem.l	(sp)+,d0-d3
	add.l	#12,d2
	dbra	d0,save_shoot_strings

	move.w	#8-1,d0
	move.l	#Blk_Bit_Attrs,d2
save_attr_strings
	move.l	dosbase,a6
	move.l	#11,d3
	movem.l	d0-d3,-(sp)
	jsr	read(a6)
	movem.l	(sp)+,d0-d3
	add.l	#12,d2
	dbra	d0,save_attr_strings
		
	move.l	block_data_ptr,d2
	move.l	#MAX_BLOCKS_MEM,d3
	move.l	dosbase,a6
	move.l	d1,-(sp)
	jsr	write(a6)
	move.l	(sp)+,d1
	
	move.l	dosbase,a6
	jsr	close(a6)		
	bra.s	exit_save_block_data
could_not_save_block_data
	jsr	display_error
exit_save_block_data	
	movem.l	(sp)+,a6
	rts

******************************************
****     EDIT BLOCK GROUP            *****
******************************************
Edit_Block_Group
	move.l	#block_group_data,block_group_ptr
	clr.w	currently_selected_block
	move.w	#FORWARD_FIRST,d7
	bsr	Find_Next_Block
	tst.w	currently_selected_block
	bmi.s	dont_open_window
	bsr	Set_New_Attributes
	bsr	Display_Edit_Window
	bsr	Display_Attr_Titles
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Menu
	bsr	Display_Shooting_Menu
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice
dont_open_window	
	rts

block_group_ptr
	dc.l	0
current_block_ptr
	dc.l	0	

******************************************
****    SELECT BLOCK ATTR            *****
******************************************
Select_Block_Attr

	move.l	clicked_button,a0	
	moveq	#0,d1
	move.b	button_data(a0),d1

	tst.w	Edit_Blk_Mode
	bne.s	Set_Data_For_View

	clr.l	d0
	move.w	currently_selected_block,d0
	move.l	block_data_ptr,a0
	lsl	d0
			
	bset.b	d1,1(a0,d0)
	bra.s	End_Select_Block_Attr
set_data_for_view
	bset.b	d1,CompareData
End_Select_Block_Attr
	rts

Edit_Blk_Mode	dc.w	0
CompareData	dc.w	0	

STANDING_MENU_X	EQU	10+16
STANDING_MENU_Y EQU 	20


SHOOTING_MENU_X	EQU	130+16
SHOOTING_MENU_Y EQU 	20

MENU_CHOICES	EQU	5

ATTR_Y_POS	EQU	108

*******************************************
****** DISPLAY ATTR TITLES           ******
*******************************************
Display_Attr_Titles

	move.w	#DRAW_TEXT,d3
	move.l	#Standing_Title,a1
	move.l	#edit_block_data_window,a0
	move.w	#STANDING_MENU_X+32,d0
	move.w	#2,d1
	move.w	#2,d2
	jsr	write_text
	
	move.l	#Shooting_Title,a1
	move.l	#edit_block_data_window,a0
	move.w	#SHOOTING_MENU_X+32,d0
	move.w	#2,d1
	move.w	#2,d2
	jsr	write_text
	
	move.l	#Blk_Bit_Attrs,a1
	move.w	#4-1,d7
	move.w	#DRAW_TEXT,d3	
	move.w	#STANDING_MENU_X,d0
	move.w	#ATTR_Y_POS,d1
	move.w	#2,d2
display_blk_set1
	jsr	write_text
	add.w	#FONT_HEIGHT,d1
	add.l	#12,a1
	dbra	d7,display_blk_set1
	
	move.l	#Blk_Bit_Attrs2,a1
	move.w	#4-1,d7
	move.w	#DRAW_TEXT,d3	
	move.w	#SHOOTING_MENU_X+16,d0
	move.w	#ATTR_Y_POS,d1
	move.w	#2,d2
display_blk_set2
	jsr	write_text
	add.w	#FONT_HEIGHT,d1
	add.l	#12,a1
	dbra	d7,display_blk_set2
	rts

*******************************************
****** SCROLL STANDING_UP            ******
*******************************************
Scroll_Standing_Up
	tst.w	Standing_Menu_Pos
	beq.s	cannot_move_standing_up
	move.w	#DELETE_TEXT,d3
	bsr	Display_Standing_Menu
	subq.w	#1,Standing_Menu_Pos
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Menu
cannot_move_standing_up
	rts

*******************************************
****** SCROLL STANDING DOWN          ******
*******************************************
Scroll_Standing_Down
	cmp.w	#11,Standing_Menu_Pos
	beq.s	cannot_move_standing_down
	move.w	#DELETE_TEXT,d3
	bsr	Display_Standing_Menu
	addq.w	#1,Standing_Menu_Pos
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Menu
cannot_move_standing_down
	rts

*******************************************
****** SCROLL SHOOTING_UP            ******
*******************************************
Scroll_Shooting_Up
	tst.w	Shooting_Menu_Pos
	beq.s	cannot_move_shooting_up
	move.w	#DELETE_TEXT,d3
	bsr	Display_Shooting_Menu
	subq.w	#1,Shooting_Menu_Pos
	move.w	#DRAW_TEXT,d3
	bsr	Display_Shooting_Menu
cannot_move_shooting_up
	rts

*******************************************
****** SCROLL SHOOTING DOWN          ******
*******************************************
Scroll_Shooting_Down
	cmp.w	#11,Shooting_Menu_Pos
	beq.s	cannot_move_shooting_down
	move.w	#DELETE_TEXT,d3
	bsr	Display_Shooting_Menu
	addq.w	#1,Shooting_Menu_Pos
	move.w	#DRAW_TEXT,d3
	bsr	Display_Shooting_Menu
cannot_move_shooting_down
	rts

	
*******************************************
****** DISPLAY STANDING MENU         ******
*******************************************
Display_Standing_Menu
*send delete or draw in d3

	move.w	Standing_Menu_Pos,d0
	mulu	#12,d0
	move.l	#Blk_Standing_Strings,a1
	add.l	d0,a1
	move.l	#edit_block_data_window,a0
	move.w	#STANDING_MENU_X,d0
	move.w	#STANDING_MENU_Y,d1
	move.w	#4,d2
	move.w	#MENU_CHOICES-1,d7
draw_up_standing_menu	
	jsr	write_text
	add.l	#12,a1
	add.w	#FONT_HEIGHT,d1
	dbra	d7,draw_up_standing_menu
	rts

*******************************************
****** DISPLAY STANDING CHOICE       ******
*******************************************
Display_Standing_Choice
*send delete or draw in d3

	move.w	Standing_Choice,d0
	mulu	#12,d0
	move.l	#Blk_Standing_Strings,a1
	add.l	d0,a1
	move.l	#edit_block_data_window,a0
	move.w	#STANDING_MENU_X,d0
	move.w	#STANDING_MENU_Y+(MENU_CHOICES+1)*FONT_HEIGHT,d1
	move.w	#1,d2	
	jsr	write_text
	rts

*******************************************
****** DISPLAY SHOOTING CHOICE       ******
*******************************************
Display_Shooting_Choice
*send delete or draw in d3

	move.w	Shooting_Choice,d0
	mulu	#12,d0
	move.l	#Blk_Shooting_Strings,a1
	add.l	d0,a1
	move.l	#edit_block_data_window,a0
	move.w	#SHOOTING_MENU_X,d0
	move.w	#SHOOTING_MENU_Y+(MENU_CHOICES+1)*FONT_HEIGHT,d1
	move.w	#1,d2	
	jsr	write_text
	rts

*******************************************
****** FIND NEXT BLOCK               ******
*******************************************
Find_Next_Block
*Direction in d7
	move.l	block_group_ptr,a0
	move.w	currently_selected_block,d0	

	cmp.w	#FORWARD_FIRST,d7
	beq.s	Skip_First_Time
	cmp.w	#FORWARD,d7
	beq.s	Test_Forward
find_block_reverse_loop	
	subq.w	#1,d0
	subq.l	#1,a0
	tst.w	d0
	bge.s	not_at_start_of_list
	move.w	#MAX_DATA_BLOCKS-1,d0
	move.l	#block_group_data+MAX_DATA_BLOCKS-1,a0
not_at_start_of_list
	tst.b	(a0)
	bne.s	found_a_block
	cmp.w	currently_selected_block,d0	;full circle?
	beq.s	no_blocks_found	
	bra.s	find_block_reverse_loop		
Test_Forward	
	addq.w	#1,d0	
	addq.l	#1,a0
	cmp.w	#MAX_DATA_BLOCKS,d0
	bne.s	not_at_end_of_list
	clr.w	d0
	move.l	#block_group_data,a0
not_at_end_of_list	
	cmp.w	currently_selected_block,d0	;full circle?
	beq.s	no_blocks_found	
Skip_First_Time	
	tst.b	(a0)
	beq.s	Test_Forward
found_a_block
	move.l	a0,block_group_ptr
	move.w	d0,currently_selected_block
	rts
no_blocks_found
	move.w	#-1,currently_selected_block
	rts

currently_selected_block	dc.w	0

*******************************************
****** SET NEW ATTRIBUTES            ******
*******************************************
Set_New_Attributes

	moveq	#0,d0
	move.w	currently_selected_block,d0
	moveq	#0,d1
	moveq	#0,d2
	move.l	block_data_ptr,a0
	lsl.w	d0
	move.b	1(a0,d0),d1		;block data, first byte = stand shoot
	move.b	(a0,d0),d3
		
	move.w	d1,d2
	andi.w	#$f0,d1
	lsr	#4,d1		
	move.w	d1,shooting_choice
	andi.w	#$f,d2
	move.w	d2,standing_choice	

	move.l	#Block_Attr1,a0
	move.w	#8-1,d0
set_attr_bits
	lsr.b	d3
	bcc.s	set_button_clear
	move.b	#1,button_start(a0)
	bra.s	set_next_button
set_button_clear
	clr.b	button_start(a0)	
set_next_button		
	add.l	#block_butt_size,a0
	dbra	d0,set_attr_bits
	rts

*******************************************
****** DISPLAY SHOOTING MENU         ******
*******************************************
Display_Shooting_Menu
*send delete or draw in d3

	move.w	Shooting_Menu_Pos,d0
	mulu	#12,d0
	move.l	#Blk_Shooting_Strings,a1
	add.l	d0,a1
	move.l	#edit_block_data_window,a0
	move.w	#SHOOTING_MENU_X,d0
	move.w	#SHOOTING_MENU_Y,d1
	move.w	#4,d2
	move.w	#MENU_CHOICES-1,d7
draw_up_shooting_menu	
	jsr	write_text
	add.l	#12,a1
	add.w	#FONT_HEIGHT,d1
	dbra	d7,draw_up_shooting_menu
	rts

*******************************************
****** SELECT STANDING CHOICE        ******
*******************************************
Select_Standing_Choice
	move.w	#DELETE_TEXT,d3
	bsr	Display_Standing_Choice

	move.l	clicked_button,a0	
	moveq	#0,d1
	move.b	button_data(a0),d1

	add.w	Standing_Menu_Pos,d1
	move.w	d1,Standing_Choice
	
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Choice
		
	tst.w	Edit_Blk_Mode
	bne.s	Set_StandData_For_View

	move.w	Standing_Choice,d1
	lsl	#4,d1
	clr.l	d0
	move.w	currently_selected_block,d0
	move.l	block_data_ptr,a0
	lsl	d0
	move.b	(a0,d0),d2
	andi.b	#$0f,d2
	or.b	d1,d2
	move.b	d2,(a0,d0)
	bra.s	End_Select_Stand_Block
Set_StandData_for_view
	move.b	CompareData+1,d2
	andi.b	#$f0,d2
	move.w	Standing_Choice,d1
	or.w	d1,d2
	move.b	d2,CompareData+1
End_Select_Stand_Block	
	rts

*******************************************
****** SELECT SHOOTING CHOICE        ******
*******************************************
Select_Shooting_Choice
	move.w	#DELETE_TEXT,d3
	bsr	Display_Shooting_Choice

	move.l	clicked_button,a0	
	moveq	#0,d1
	move.b	button_data(a0),d1

	add.w	Shooting_Menu_Pos,d1
	move.w	d1,Shooting_Choice
	
	move.w	#DRAW_TEXT,d3
	bsr	Display_Shooting_Choice
		
	tst.w	Edit_Blk_Mode
	bne.s	Set_ShootData_For_View

	move.w	Shooting_Choice,d1
	clr.l	d0
	move.w	currently_selected_block,d0
	move.l	block_data_ptr,a0
	lsl	d0
	move.b	(a0,d0),d2
	andi.b	#$f0,d2
	or.b	d1,d2
	move.b	d2,(a0,d0)
	bra.s	End_Select_Shoot_Block
Set_ShootData_for_view
	move.b	CompareData+1,d2
	andi.b	#$f,d2
	move.w	Shooting_Choice,d1
	lsl	#4,d1
	or.w	d1,d2
	move.b	d2,CompareData+1
End_Select_Shoot_Block	
	rts

*******************************************
****** SELECT PREV BLOCK             ******
*******************************************
Select_Prev_Block	
	move.w	#DELETE_TEXT,d3
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice
	move.l	#edit_blk_attr_buttons,a0
	jsr	Remove_Button_List
	move.w	#REVERSE,d7
	bsr	Find_Next_Block
	bsr	Set_New_Attributes
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice
	move.l	#edit_blk_attr_buttons,a0
	jsr	Display_Button_List
	rts


*******************************************
****** SELECT NEXT BLOCK             ******
*******************************************
Select_Next_Block	
	move.w	#DELETE_TEXT,d3
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice
	move.l	#edit_blk_attr_buttons,a0
	jsr	Remove_Button_List
	move.w	#FORWARD,d7
	bsr	Find_Next_Block
	tst.w	currently_selected_block
	bmi.s	block_find_error
	bsr	Set_New_Attributes
	move.w	#DRAW_TEXT,d3
	bsr	Display_Standing_Choice
	bsr	Display_Shooting_Choice
	move.l	#edit_blk_attr_buttons,a0
	jsr	Display_Button_List
	rts
block_find_error
	bsr	Remove_Edit_Block_Window	
	rts

*******************************************
****** APPLY DATA TO BLOCK GROUP     ******
*******************************************
Apply_Data_To_Block_Group
	move.l	block_group_ptr,a1		;save
	move.w	currently_selected_block,d5
	clr.l	d6
	move.w	d5,d6
	move.l	block_data_ptr,a2
	lsl	d6
	move.w	(a2,d6),d6		;contains data
	move.w	#FORWARD,d7	
Apply_Loop
	bsr	Find_Next_Block
	moveq	#0,d4
	move.w	currently_selected_block,d4
	bmi.s	end_of_apply
	cmp.w	d4,d5
	beq.s	end_of_apply
	move.l	block_data_ptr,a2
	lsl	d4
	move.w	d6,(a2,d4)
	bra.s	Apply_Loop
end_of_apply
	move.w	d5,currently_selected_block
	move.l	a1,a0
	rts

*******************************************
****** REMOVE BLOCK FROM GROUP       ******
*******************************************
Remove_Block_From_Group
	move.l	block_group_ptr,a0
	clr.b	(a0)		;remove from group
	bsr	Select_Next_Block
	move.w	#FORWARD,d7
	rts

*******************************************
****** Add_Current_Attr_To_Group     ******
*******************************************
Add_Current_Attr_To_Group	
	clr.l	d0
	move.w	currently_selected_block,d0
	move.l	block_data_ptr,a0
	lsl	d0
	move.w	(a0,d0),CompareData	
	bsr	Add_Specified_Blks_To_Group	
	rts
	
	
Standing_Menu_Pos	dc.w	0
Shooting_Menu_Pos	dc.w	0
Standing_Choice		dc.w	0
Shooting_Choice		dc.w	0
	
edit_block_data_window
	dc.w	320
	dc.w	192		;full screen
	dc.w	0
	dc.w	0
	dc.l	0
	dc.l	0
	dc.b	"BLOCK ATTRIBUTES",0
	even		

view_block_data_buttons
	dc.l	view_block_data_ok,view_block_data_cancel
	dc.l	-1


edit_single_block_data_buttons
	dc.l	edit_single_block_data_ok
	dc.l	-1

edit_block_data_buttons
	dc.l	edit_block_data_ok
	dc.l	Block_Left_Arrow,Block_Right_Arrow
	dc.l	Apply_Button,Remove_Blk_Button,Set_Group_Blk_Button
	dc.l	-1
edit_blk_attr_buttons	
	dc.l	Block_Attr1,Block_Attr2,Block_Attr3,Block_Attr4
	dc.l	Block_Attr5,Block_Attr6,Block_Attr7,Block_Attr8
	dc.l	-1
edit_block_other_buttons	
	dc.l	Standing_Up_Arrow,Standing_Down_Arrow
	dc.l	Shooting_Up_Arrow,Shooting_Down_Arrow
	dc.l	StandMenu1,StandMenu2,StandMenu3,StandMenu4,StandMenu5
	dc.l	ShootMenu1,ShootMenu2,ShootMenu3,ShootMenu4,ShootMenu5
	dc.l	-1	

edit_block_data_ok
	dc.w	(320/2)-48
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	ok_custom_button
	dc.l	0	;not used
        dc.l	remove_edit_block_window
	dc.b	0		
	even

edit_single_block_data_ok
	dc.w	(320/2)-48
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	ok_custom_button
	dc.l	0	;not used
        dc.l	remove_single_edit_block_window
	dc.b	0		
	even


view_block_data_ok
	dc.w	32
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	ok_custom_button
	dc.l	0	;not used
        dc.l	remove_view_block_window
	dc.b	0		
	even

view_block_data_cancel
	dc.w	320-128
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	1
	dc.b	0	;not used
	dc.l	cancel_custom_button
	dc.l	0	;not used
        dc.l	remove_view_block_window
	dc.b	0		
	even


edit_data_button
	dc.w	BUTTON_4
	dc.w	FOURTH_ROW
	dc.w	MAIN_BUTTON_SCREEN	;frame type
	dc.b	STANDARD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	MODE_EDIT_BLOCK
	dc.b	0	;not used
	dc.l	0	;not used
	dc.l	0	;not used
	dc.l	edit_block_group
	dc.b	"EDIT GRP",0
	EVEN

edit_blk_button
	dc.w	BUTTON_5
	dc.w	FOURTH_ROW
	dc.w	MAIN_BUTTON_SCREEN	;frame type
	dc.b	STANDARD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	MODE_EDIT_SINGLE_BLOCK
	dc.b	0	;not used
	dc.l	0	;not used
	dc.l	0	;not used
	dc.l	select_block_mode
	dc.b	"EDIT BLK",0
	EVEN


select_data_button
	dc.w	BUTTON_4
	dc.w	THIRD_ROW
	dc.w	MAIN_BUTTON_SCREEN	;frame type
	dc.b	STANDARD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	MODE_EDIT_BLOCK
	dc.b	0	;not used
	dc.l	0	;not used
	dc.l	0	;not used
	dc.l	select_block_mode
	dc.b	"SEL GRP",0
	EVEN

view_data_button
	dc.w	BUTTON_3
	dc.w	FOURTH_ROW
	dc.w	MAIN_BUTTON_SCREEN	;frame type
	dc.b	STANDARD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	MODE_EDIT_BLOCK
	dc.b	0	;not used
	dc.l	0	;not used
	dc.l	0	;not used
	dc.l	view_block_attributes
	dc.b	"VIEW ATTR",0
	EVEN

*-------------------Window buttons------------------*

Block_Attr1
	dc.w	STANDING_MENU_X-16
	dc.w	ATTR_Y_POS
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	0	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	
Block_Butt_Size	equ	*-Block_Attr1	

Block_Attr2
	dc.w	STANDING_MENU_X-16
	dc.w	ATTR_Y_POS+FONT_HEIGHT
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	1	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Block_Attr3
	dc.w	STANDING_MENU_X-16
	dc.w	ATTR_Y_POS+FONT_HEIGHT*2
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	2	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Block_Attr4
	dc.w	STANDING_MENU_X-16
	dc.w	ATTR_Y_POS+FONT_HEIGHT*3
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	3	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Block_Attr5
	dc.w	SHOOTING_MENU_X
	dc.w	ATTR_Y_POS
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	4	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Block_Attr6
	dc.w	SHOOTING_MENU_X
	dc.w	ATTR_Y_POS+FONT_HEIGHT
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	5	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Block_Attr7
	dc.w	SHOOTING_MENU_X
	dc.w	ATTR_Y_POS+FONT_HEIGHT*2
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	6	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Block_Attr8
	dc.w	SHOOTING_MENU_X
	dc.w	ATTR_Y_POS+FONT_HEIGHT*3
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+TOGGLE_BUTTON
	dc.b	NOT_DEPRESSED	
	dc.b	7	;index
	dc.b	0	;not used
	dc.l	tick_box_button	;not used
	dc.l	0	;not used
	dc.l	Select_Block_Attr
	dc.b	0		
	EVEN	

Standing_Up_Arrow
	dc.w	2
	dc.w	STANDING_MENU_Y+FONT_HEIGHT
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+HOLD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	arrow_up
	dc.l	0	;not used
	dc.l	scroll_standing_up
	dc.b	0		
	EVEN	

Standing_Down_Arrow
	dc.w	2
	dc.w	STANDING_MENU_Y+FONT_HEIGHT*3
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+HOLD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	arrow_down
	dc.l	0	;not used
	dc.l	scroll_standing_down
	dc.b	0		
	EVEN	

Shooting_Up_Arrow
	dc.w	320-62
	dc.w	STANDING_MENU_Y+FONT_HEIGHT
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+HOLD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	arrow_up
	dc.l	0	;not used
	dc.l	scroll_shooting_up
	dc.b	0		
	EVEN	

Shooting_Down_Arrow
	dc.w	320-62
	dc.w	STANDING_MENU_Y+FONT_HEIGHT*3
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+HOLD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	arrow_down
	dc.l	0	;not used
	dc.l	scroll_shooting_down
	dc.b	0		
	EVEN	

Block_Left_Arrow
	dc.w	192-8
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+HOLD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	arrow_left
	dc.l	0	;not used
	dc.l	select_prev_block
	dc.b	0		
	EVEN	

Block_Right_Arrow
	dc.w	210
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON+HOLD_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	arrow_right
	dc.l	0	;not used
	dc.l	select_next_block
	dc.b	0		
	EVEN	

StandMenu1
	dc.w	STANDING_MENU_X
	dc.w	STANDING_MENU_Y
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Standing_Choice
	dc.b	0		
	EVEN					

StandMenu2
	dc.w	STANDING_MENU_X
	dc.w	STANDING_MENU_Y+FONT_HEIGHT
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	1
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Standing_Choice
	dc.b	0		
	EVEN	

StandMenu3
	dc.w	STANDING_MENU_X
	dc.w	STANDING_MENU_Y+FONT_HEIGHT*2
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	2
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Standing_Choice
	dc.b	0		
	EVEN	

StandMenu4
	dc.w	STANDING_MENU_X
	dc.w	STANDING_MENU_Y+FONT_HEIGHT*3
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	3
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Standing_Choice
	dc.b	0		
	EVEN	

StandMenu5
	dc.w	STANDING_MENU_X
	dc.w	STANDING_MENU_Y+FONT_HEIGHT*4
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	4
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Standing_Choice
	dc.b	0		
	EVEN	

ShootMenu1
	dc.w	SHOOTING_MENU_X
	dc.w	SHOOTING_MENU_Y
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Shooting_Choice
	dc.b	0		
	EVEN					

ShootMenu2
	dc.w	SHOOTING_MENU_X
	dc.w	SHOOTING_MENU_Y+FONT_HEIGHT
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	1
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Shooting_Choice
	dc.b	0		
	EVEN	

ShootMenu3
	dc.w	SHOOTING_MENU_X
	dc.w	SHOOTING_MENU_Y+FONT_HEIGHT*2
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	2
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Shooting_Choice
	dc.b	0		
	EVEN	

ShootMenu4
	dc.w	SHOOTING_MENU_X
	dc.w	SHOOTING_MENU_Y+FONT_HEIGHT*3
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	3
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Shooting_Choice
	dc.b	0		
	EVEN	

ShootMenu5
	dc.w	SHOOTING_MENU_X
	dc.w	SHOOTING_MENU_Y+FONT_HEIGHT*4
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	4
	dc.b	0	;not used
	dc.l	MenuButton ;not used
	dc.l	0	;not used
	dc.l	Select_Shooting_Choice
	dc.b	0		
	EVEN	

Apply_Button
	dc.w	5
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l    apply_custom_button ;not used
	dc.l	0	;not used
	dc.l	Apply_Data_To_Block_Group
	dc.b	0		
	EVEN	

Remove_Blk_Button
	dc.w	5+36
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l    remove_custom_button ;not used
	dc.l	0	;not used
	dc.l	Remove_Block_From_Group
	dc.b	0		
	EVEN	

Set_Group_Blk_Button
	dc.w	5+36+36
	dc.w	128+32
	dc.w	WINDOW	;frame type
	dc.b	CUSTOM_BUTTON	;standard
	dc.b	NOT_DEPRESSED	
	dc.b	0
	dc.b	0	;not used
	dc.l    setgroup_custom_button ;not used
	dc.l	0	;not used
	dc.l	Add_Current_Attr_To_Group
	dc.b	0		
	EVEN	


Blk_Standing_Strings
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0			
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	
Blk_Shooting_Strings
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0		;0 not available
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	
Blk_Bit_Attrs
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
Blk_Bit_Attrs2	
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	dc.b	"Undefined  ",0
	
	even

Shooting_Title
	dc.b	"SHOOT",0
Standing_Title
	dc.b	"STAND",0					
