box_proc	lea	box_routines,a0
	move.w	box_mode,d0
	move.l	(a0,d0.w*4),a0
	jsr	(a0)
	rts
box_routines
	dc.l	keyboard_box
	dc.l	mouse_box
	dc.l	mouse_detection	
;---------------------------------------------
keyboard_box
	moveq.l	#0,d0
	move.b	keycode,d0
	cmp.b	#'k',d0
	bne.s	.right
	move.w	box_x,d0
	move.w	box_x1,d1
	sub.w	box_move,d1
	sub.w	box_move,d0
	bmi.s	.outleft
	move.w	d1,box_x1
	move.w	d0,box_x
	bsr	draw_grab_box
.outleft	rts		
;---------------------------------------------
.right	cmp.b	#'j',d0
	bne.s	.up
	move.l	iff_width_pixels,d2
;;	subq.l	#1,d2
	move.w	box_x1,d0
	move.w	box_x,d1
	add.w	box_move,d1
	add.w	box_move,d0
	cmp.w	d2,d0
	bgt.s	.outright
	move.w	d1,box_x
	move.w	d0,box_x1
	bsr	draw_grab_box
.outright	rts
;---------------------------------------------
.up	cmp.b	#'i',d0
	bne.s	.down
	move.w	box_y,d0
	move.w	box_y1,d1
	sub.w	box_move,d1
	sub.w	box_move,d0
	bmi.s	.outup
	move.w	d1,box_y1
	move.w	d0,box_y
	bsr	draw_grab_box
.outup	rts
;---------------------------------------------
.down	cmp.b	#'m',d0
	bne.s	.shrinkX
	move.l	iff_height,d2
;;	subq.l	#1,d2
	move.w	box_y1,d0
	move.w	box_y,d1
	add.w	box_move,d1
	add.w	box_move,d0
	cmp.w	d2,d0
	bgt.s	.outdown
	move.w	d1,box_y
	move.w	d0,box_y1
	bsr	draw_grab_box
.outdown	rts
;---------------------------------------------
.shrinkX	cmp.b	#'l',d0
	bne.s	.expandX
	move.w	box_x,d0
	move.w	box_X1,d1
	sub.w	d0,d1
	sub.w	box_size,d1
	bmi.s	.outshrinkX
	cmp.w	#1,d1
	ble.s	.outshrinkX
	add.w	box_x,d1
	move.w	d1,box_x1
	bsr	draw_grab_box
.outshrinkX
	rts
;---------------------------------------------
.expandX	cmp.b	#'n',d0
	bne.s	.shrinkY
	move.w	box_x1,d1
	move.l	iff_width_pixels,d0
;;	subq.w	#1,d0
	add.w	box_size,d1
	cmp.w	d0,d1
	bgt.s	.outexpandX
	move.w	d1,box_x1
	bsr	draw_grab_box
.outexpandX
	rts
;---------------------------------------------
.shrinkY	cmp.b	#'o',d0
	bne.s	.expandY
	move.w	box_Y,d0
	move.w	box_Y1,d1
	sub.w	d0,d1
	sub.w	box_size,d1
	bmi.s	.outshrinkY
	cmp.w	#1,d1
	ble.s	.outshrinkY
	add.w	box_Y,d1
	move.w	d1,box_Y1
	bsr	draw_grab_box
.outshrinkY
	rts
;---------------------------------------------
.expandY	cmp.b	#'p',d0
	bne.s	.outexpandy
	move.w	box_y1,d1
	move.l	iff_height,d0
;;	subq.w	#1,d0
	add.w	box_size,d1
	cmp.w	d0,d1
	bgt.s	.outexpandy
	move.w	d1,box_y1
	bsr	draw_grab_box
.outexpandy
	rts
;---------------------------------------------
init_grab_box
	move.w	#0,box_X
	move.w	#0,box_Y
	move.w	#16,box_X1
	move.w	#16,box_Y1
	move.w	#0,box_on
	bsr	draw_grab_box
	rts
;---------------------------------------------
draw_grab_box
	cmp.l	#0,iff_screen
	bne.s	.op
	rts
.op	bsr	get_box_screen
	tst.w	box_on
	beq.s	.okay
	bsr	undraw_grab_box
	
.okay	move.w	box_X,d0
	move.w	box_Y,d1
	move.w	box_x1,d2
	move.w	box_y1,d3
	move.w	d0,oldbox_X
	move.w	d1,oldbox_Y
	move.w	d2,oldbox_X1
	move.w	d3,oldbox_Y1

	move.w	box_x,d0
	move.w	box_x1,d2
	move.w	box_y,d1
	move.w	box_y,d3
	addq.w	#1,d0
	subq.w	#1,d2
	bsr	drawline

	move.w	box_x,d0
	move.w	box_x1,d2
	move.w	box_y1,d1
	move.w	box_y1,d3
	sub.w	#1,d1
	sub.w	#1,d3
	bsr	drawline

	move.w	box_x,d0
	move.w	box_x,d2
	move.w	box_y,d1
	move.w	box_y1,d3
	sub.w	#1,d3
	bsr	drawline

	move.w	box_x1,d0
	move.w	box_x1,d2
	move.w	box_y,d1
	move.w	box_y1,d3
	sub.w	#1,d0
	sub.w	#1,d2
	sub.w	#1,d3
	bsr	drawline

	bsr	print_box_size
	move.w	#1,box_on
	rts
;---------------------------------------------
undraw_grab_box
	tst.w	box_on
	beq	.out
	move.w	oldbox_x,d0
	move.w	oldbox_x1,d2
	move.w	oldbox_y,d1
	move.w	oldbox_y,d3
	addq.w	#1,d0
	subq.w	#1,d2
	bsr	drawline

	move.w	oldbox_x,d0
	move.w	oldbox_x1,d2
	move.w	oldbox_y1,d1
	move.w	oldbox_y1,d3
	sub.w	#1,d1
	sub.w	#1,d3
	bsr	drawline

	move.w	oldbox_x,d0
	move.w	oldbox_x,d2
	move.w	oldbox_y,d1
	move.w	oldbox_y1,d3
	sub.w	#1,d3
	bsr	drawline

	move.w	oldbox_x1,d0
	move.w	oldbox_x1,d2
	move.w	oldbox_y,d1
	move.w	oldbox_y1,d3
	sub.w	#1,d0
	sub.w	#1,d2
	sub.w	#1,d3
	bsr	drawline

.out	move.w	#0,box_on	
	rts
;---------------------------------------------
; -- Draw line routine --
; D0 = X1
; D1 = Y1
; D2 = X2
; D3 = Y2
; A0 = BIT MAP
; A1 = BITPLANE WIDTH IN BYTES
; D4 TO D6 WORK REGS

draweditline
	move.l	editscreenB,a0
	add.l	#40*7,a0
	move.l	#40*8,a1
	ext.l	d0
	ext.l	d1
	ext.l	d2
	ext.l	d3

	bra	drawboy

DrawLine	move.l	box_screen,a0
	move.l	iff_nextline,a1	

drawboy	cmp.w	d0,d2
	bne	outing
	cmp.w	d1,d3
	bne	outing
	rts
outing	Move.l	A1,D4
	Mulu	D1,D4
	Moveq	#-$10,D5
	And.w	D0,D5
	Lsr.w	#3,D5
	Add.w	D5,D4
	Add.l	A0,D4
	Clr.l	D5
	Sub.w	D1,D3
	roxl.b	#1,D5
	tst.w	d3
	Bge.s	Y2gyl
	neg.w	d3
y2gyl	sub.w	d0,d2
	roxl.b	#1,d5
	tst.w	d2
	bge.s	xtgxl
	neg.w	d2
xtgxl	move.w	d3,d1
	sub.w	d2,d1
	bge.s	dygdx
	exg	d2,d3
dygdx	roxl.b	#1,d5
	move.b	OCtant_Table(pc,D5),d5
	Add.w	d2,d2
	Lea	$dff000,a5
	Waitblit
	Move.w	d2,bltbmod(a5)
	sub.w	d3,d2
	bge.s	sighn1
	or.b	#$40,d5
sighn1	Move.w	d2,bltaptl(a5)
	sub.w	d3,d2
	move.w	d2,bltamod(A5)
	move.w	#$8000,bltadat(a5)
	and.w	#$000f,d0
	ror.w	#4,d0
	or.w	#$0a5a,d0
	move.w	#$ffff,bltbdat(a5)
	move.w	#$ffff,bltafwm(a5)

	move.w	d0,bltcon0(a5)
	move.w	d5,bltcon1(a5)
	move.l	d4,bltcpth(A5)
	move.l	d4,bltdpth(A5)
	move.w	a1,bltcmod(a5)
	move.w	a1,bltdmod(a5)
	lsl.w	#6,d3
	addq.w	#2,d3
	move.w	d3,bltsize(A5)
	rts

; -- Octants for line draw routine --

Octant_Table
	dc.b	0*4+1
	Dc.b	4*4+1
	dc.b	2*4+1
	dc.b	5*4+1
	dc.b	1*4+1
	dc.b	6*4+1
	dc.b	3*4+1
	dc.b	7*4+1
	even
;---------------------------------------------
get_box_screen
	move.l	iff_depth,d6
	cmp.l	#8,d6
	bge.s	.a
	addq.l	#1,d6
.a	move.l	d6,box_depth

	lea	iff_table,a0
	lea	box_screen,a1
	move.l	box_depth,d6
	subq.w	#1,d6
.loop	move.l	(a0,d6.w*4),(a1)
	rts
;---------------------------------------------
print_box_size
	move.l	#1,tcol
	move.l	#5+55,d0
	move.l	#20,d1
	moveq.l	#0,d2
	move.w	box_x1,d2
	sub.w	box_x,d2
	moveq.l	#4,d3
	bsr	dec_print
	move.l	#5+55,d0
	move.l	#27,d1
	moveq.l	#0,d2
	move.w	box_y1,d2
	sub.w	box_y,d2
	moveq.l	#4,d3
	bsr	dec_print
	rts
;---------------------------------------------
box_move_size
	bsr	do_icon
	move.w	box_move,d0
	lsl.w	#1,d0
	cmp.w	#64,d0
	ble.s	.okay
	move.w	#1,d0
.okay	move.w	d0,box_move	
	bsr	print_box_moveadd
	rts
;---------------------------------------------
box_add_size
	bsr	do_icon
	move.w	box_size,d0
	lsl.w	#1,d0
	cmp.w	#64,d0
	ble.s	.okay
	move.w	#1,d0
.okay	move.w	d0,box_size
	bsr	print_box_moveadd
	rts
;---------------------------------------------
print_box_moveadd
	move.l	#1,tcol
	move.l	#60,d0
	move.l	#37,d1
	moveq.l	#0,d2
	move.w	box_move,d2
	moveq.l	#4,d3
	bsr	dec_print
	move.l	#60,d0
	move.l	#47,d1
	moveq.l	#0,d2
	move.w	box_size,d2
	moveq.l	#4,d3
	bsr	dec_print
	rts
;---------------------------------------------
print_box_cut_mode
	lea	box_mode_txts(pc),a0
	move.w	box_mode,d0
	move.l	(a0,d0.w*4),a0
	bsr	print
	rts	

box_mode_txts	
	dc.l	box_txt1
	dc.l	box_txt2
	dc.l	box_txt3
;---------------------------------------------
box_cut_mode
	bsr	do_icon
	move.w	box_mode,d0
	add.w	#1,d0
	cmp.w	#3,d0
	blt.s	.okay
	move.w	#0,d0
.okay	move.w	d0,box_mode	
	move.w	#0,box_start
	bsr	print_box_cut_mode
	rts
;---------------------------------------------
do_mouse_detect
	moveq.l	#0,d0
	move.b	ypos,d0
	cmp.w	#200,d0
	bgt.s	.out

	btst	#6,$bfe001
	beq.s	.check
	rts
.check	btst	#6,$bfe001
	beq.s	.check
	bsr	undraw_grab_box
	bsr	mouse_detect
	tst.l	d7
	bmi.s	.out
	move.l	boxstartX,d0
	move.l	boxstartY,d1
	move.l	boxendX,d2
	move.l	boxendY,d3
	move.w	d0,box_x
	move.w	d1,box_y
	move.w	d2,box_x1
	move.w	d3,box_y1
	bsr	draw_grab_box
.out	rts
;---------------------------------------------
