
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/nurbsutl.c
	mc68030
	mc68881
	XREF	_call_user_error
	XREF	_gluProject
	XREF	_glLoadMatrixf
	XREF	_glPopMatrix
	XREF	_glPushMatrix
	XREF	_glViewport
	XREF	_glMatrixMode
	XREF	_glPopAttrib
	XREF	_glPushAttrib
	XREF	_glGetIntegerv
	XREF	_glGetDoublev
	XREF	_qsort
	XREF	_abort
	XREF	_malloc
	XREF	_free
	XREF	_fabs__r
	XREF	_sqrt__r

	SECTION "_test_knot:0",CODE


;GLenum
	XDEF	_test_knot
_test_knot
	movem.l	d2-d5/a2,-(a7)
	fmovem.x fp2,-(a7)
	movem.l	$24(a7),d4/a2
	move.l	$2C(a7),d5
L332
;	tmp_knot=knot[0];
	fmove.s	(a2),fp2
;	knot_mult=1;
	moveq	#1,d3
;	for(i=1;
	moveq	#1,d2
	bra.b	L341
L333
;		if(knot[i] < tmp_knot)
	fmove.s	0(a2,d2.l*4),fp0
	fcmp.x	fp2,fp0
	fboge.b	L335
L334
	move.l	#$1879E,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d5/a2
	rts
L335
;		if(fabs(tmp_knot-knot[i]) > EPSILON)
	fmove.x	fp2,fp0
	fsub.s	0(a2,d2.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L339
L336
;			if(knot_mult>order)
	cmp.l	d5,d3
	ble.b	L338
L337
	move.l	#$1879F,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d5/a2
	rts
L338
;			knot_mult=1;
	moveq	#1,d3
;			tmp_knot=knot[i];
	fmove.s	0(a2,d2.l*4),fp2
	bra.b	L340
L339
;			++knot_mult;
	addq.l	#1,d3
L340
	addq.l	#1,d2
L341
	cmp.l	d4,d2
	blt.b	L333
L342
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d5/a2
	rts

	SECTION "_knot_sort:0",CODE

	rts

;static int
_knot_sort
	fmovem.x fp2/fp3,-(a7)
	move.l	$20(a7),a0
	move.l	$1C(a7),a1
L343
;	x=*((GLfloat *)a);
	fmove.s	(a1),fp3
;	y=*((GLfloat *)b);
	fmove.s	(a0),fp2
;	if(fabs(x-y) < EPSILON)
	fmove.x	fp3,fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L345
L344
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	rts
L345
;	if(x > y)
	fcmp.x	fp2,fp3
	fbole.b	L347
L346
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	rts
L347
	moveq	#-1,d0
	fmovem.x (a7)+,fp2/fp3
	rts

	SECTION "_collect_unified_knot:0",CODE


;void
	XDEF	_collect_unified_knot
_collect_unified_knot
L361	EQU	-$3C
	link	a5,#L361
	movem.l	d2-d7/a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
	move.l	$C(a5),a0
	move.l	$8(a5),a4
	fmove.s	$14(a5),fp2
	fmove.s	$10(a5),fp3
L348
;	src_knot=src->unified_knot;
	move.l	$8(a0),a2
;	dest_knot=dest->unified_knot;
	move.l	a4,a1
	move.l	$8(a1),a3
;	src_t_min=src->t_min;
	move.l	$14(a0),d1
;	src_t_max=src->t_max;
	move.l	$18(a0),-$10(a5)
;	dest_t_min=dest->t_min;
	move.l	a4,a0
	move.l	$14(a0),-$14(a5)
;	dest_t_max=dest->t_max;
	move.l	a4,a0
	move.l	$18(a0),d5
;	src_nknots=src->unified_nknots;
;	dest_nknots=dest->unified_nknots;
	move.l	a4,a0
;	k=new_cnt=dest_nknots;
	move.l	$C(a0),d6
	move.l	d6,d7
;	for(i=src_t_min;
	move.l	d1,d3
	bra	L359
L349
;		if(src_knot[i] - maximal_min_knot > -EPSILON &&
	fmove.s	0(a2,d3.l*4),fp0
	fsub.x	fp3,fp0
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp0
	fbole.b	L358
L350
	fmove.s	0(a2,d3.l*4),fp0
	fsub.x	fp2,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L358
L351
;		not_found_flag=GL_TRUE;
	moveq	#1,d4
;		for(j=dest_t_min;
	move.l	-$14(a5),d2
	bra.b	L355
L352
;			if(fabs(dest_knot[j]-src_knot[i]) < EPSILON)
	fmove.s	0(a3,d2.l*4),fp0
	fsub.s	0(a2,d3.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L354
L353
;				not_found_flag=GL_FALSE;
	moveq	#0,d4
;				
	bra.b	L356
L354
	addq.l	#1,d2
L355
	cmp.l	d5,d2
	ble.b	L352
L356
;		if(not_found_flag)
	tst.b	d4
	beq.b	L358
L357
;			dest_knot[k++]=src_knot[i];
	move.l	d6,d0
	move.l	d6,d1
	addq.l	#1,d1
	move.l	d1,d6
	move.l	0(a2,d3.l*4),0(a3,d0.l*4)
;			++new_cnt;
	move.l	d7,d0
	addq.l	#1,d0
	move.l	d0,d7
;			++(dest->t_max);
	move.l	a4,a0
	move.l	$18(a0),d0
	addq.l	#1,d0
	move.l	a4,a0
	move.l	d0,$18(a0)
;			++(dest->delta_nknots);
	move.l	a4,a0
	move.l	$1C(a0),d0
	addq.l	#1,d0
	move.l	a4,a0
	move.l	d0,$1C(a0)
L358
	addq.l	#1,d3
L359
	cmp.l	-$10(a5),d3
	ble	L349
L360
;	dest->unified_nknots=new_cnt;
	move.l	a4,a0
	move.l	d7,$C(a0)
;	qsort((void *)dest_knot,(size_t)new_cnt,(size_t)sizeof(GLfloat),
	move.l	#_knot_sort,-(a7)
	pea	4.w
	move.l	d7,-(a7)
	move.l	a3,-(a7)
	jsr	_qsort
	add.w	#$10,a7
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_set_new_t_min_t_max:0",CODE


;static void
_set_new_t_min_t_max
L424	EQU	-$1C
	link	a5,#L424
	movem.l	d2/d3/a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
	move.l	$8(a5),a2
	move.l	$14(a5),a3
	move.l	$10(a5),a4
	fmove.s	$18(a5),fp2
	fmove.s	$1C(a5),fp3
L362
;	if(minimal_max_knot-maximal_min_knot < EPSILON)
	fmove.x	fp3,fp0
	fsub.x	fp2,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L364
L363
;		geom_knot->t_min=geom_knot->t_max=0;
	clr.l	$18(a2)
	clr.l	$14(a2)
;		color_knot->t_min=color_knot->t_max=0;
	move.l	$C(a5),a0
	clr.l	$18(a0)
	move.l	$C(a5),a0
	clr.l	$14(a0)
;		normal_knot->t_min=normal_knot->t_max=0;
	move.l	a4,a0
	clr.l	$18(a0)
	move.l	a4,a0
	clr.l	$14(a0)
;		texture_knot->t_min=texture_knot->t_max=0;
	move.l	a3,a0
	clr.l	$18(a0)
	move.l	a3,a0
	clr.l	$14(a0)
	bra	L423
L364
;		if(geom_knot->unified_knot!=NULL)
	move.l	$8(a2),a0
	cmp.w	#0,a0
	beq.b	L376
L365
;			cnt=geom_knot->unified_nknots;
	move.l	$C(a2),d2
;			for(t_min=0;
	moveq	#0,d3
	bra.b	L369
L366
;				if(fabs((geom_knot->unified_knot)[t_min] - maximal_min_knot)
	move.l	$8(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L368
L367
;					
	bra.b	L370
L368
	addq.l	#1,d3
L369
	cmp.l	d2,d3
	blo.b	L366
L370
;			for(t_max=cnt-1;
	subq.l	#1,d2
	bra.b	L374
L371
;				if(fabs((geom_knot->unified_knot)[t_max] - minimal_max_knot)
	move.l	$8(a2),a0
	fmove.s	0(a0,d2.l*4),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L373
L372
;					
	bra.b	L375
L373
	subq.l	#1,d2
L374
	tst.l	d2
	bne.b	L371
L375
	bra.b	L387
L376
;		if(geom_knot->nknots)
	tst.l	4(a2)
	beq.b	L387
L377
;			cnt=geom_knot->nknots;
	move.l	4(a2),d2
;			for(t_min=0;
	moveq	#0,d3
	bra.b	L381
L378
;				if(fabs((geom_knot->knot)[t_min] - maximal_min_knot) < EPSIL
	move.l	(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L380
L379
;					
	bra.b	L382
L380
	addq.l	#1,d3
L381
	cmp.l	d2,d3
	blo.b	L378
L382
;			for(t_max=cnt-1;
	subq.l	#1,d2
	bra.b	L386
L383
;				if(fabs((geom_knot->knot)[t_max] - minimal_max_knot) < EPSIL
	move.l	(a2),a0
	fmove.s	0(a0,d2.l*4),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L385
L384
;					
	bra.b	L387
L385
	subq.l	#1,d2
L386
	tst.l	d2
	bne.b	L383
L387
;		geom_knot->t_min=t_min;
	move.l	d3,$14(a2)
;		geom_knot->t_max=t_max;
	move.l	d2,$18(a2)
;		if(color_knot->unified_knot!=NULL)
	move.l	$C(a5),a1
	move.l	$8(a1),a0
	cmp.w	#0,a0
	beq	L399
L388
;			cnt=color_knot->unified_nknots;
	move.l	$C(a5),a0
	move.l	$C(a0),d2
;			for(t_min=0;
	moveq	#0,d3
	bra.b	L392
L389
;				if(fabs((color_knot->unified_knot)[t_min] - maximal_min_knot)
	move.l	$C(a5),a1
	move.l	$8(a1),a0
	fmove.s	0(a0,d3.l*4),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L391
L390
;					
	bra.b	L393
L391
	addq.l	#1,d3
L392
	cmp.l	d2,d3
	blo.b	L389
L393
;			for(t_max=cnt-1;
	subq.l	#1,d2
	bra.b	L397
L394
;				if(fabs((color_knot->unified_knot)[t_max] - minimal_max_knot)
	move.l	$C(a5),a1
	move.l	$8(a1),a0
	fmove.s	0(a0,d2.l*4),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L396
L395
;					
	bra.b	L398
L396
	subq.l	#1,d2
L397
	tst.l	d2
	bne.b	L394
L398
;			color_knot->t_min=t_min;
	move.l	$C(a5),a0
	move.l	d3,$14(a0)
;			color_knot->t_max=t_max;
	move.l	$C(a5),a0
	move.l	d2,$18(a0)
L399
;		if(normal_knot->unified_knot!=NULL)
	move.l	a4,a1
	move.l	$8(a1),a0
	cmp.w	#0,a0
	beq	L411
L400
;			cnt=normal_knot->unified_nknots;
	move.l	a4,a0
	move.l	$C(a0),d2
;			for(t_min=0;
	moveq	#0,d3
	bra.b	L404
L401
;				if(fabs((normal_knot->unified_knot)[t_min] - maximal_min_kno
	move.l	a4,a1
	move.l	$8(a1),a0
	fmove.s	0(a0,d3.l*4),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L403
L402
;					
	bra.b	L405
L403
	addq.l	#1,d3
L404
	cmp.l	d2,d3
	blo.b	L401
L405
;			for(t_max=cnt-1;
	subq.l	#1,d2
	bra.b	L409
L406
;				if(fabs((normal_knot->unified_knot)[t_max] - minimal_max_kno
	move.l	a4,a1
	move.l	$8(a1),a0
	fmove.s	0(a0,d2.l*4),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L408
L407
;					
	bra.b	L410
L408
	subq.l	#1,d2
L409
	tst.l	d2
	bne.b	L406
L410
;			normal_knot->t_min=t_min;
	move.l	a4,a0
	move.l	d3,$14(a0)
;			normal_knot->t_max=t_max;
	move.l	a4,a0
	move.l	d2,$18(a0)
L411
;		if(texture_knot->unified_knot!=NULL)
	move.l	a3,a1
	move.l	$8(a1),a0
	cmp.w	#0,a0
	beq	L423
L412
;			cnt=texture_knot->unified_nknots;
	move.l	a3,a0
	move.l	$C(a0),d2
;			for(t_min=0;
	moveq	#0,d3
	bra.b	L416
L413
;				if(fabs((texture_knot->unified_knot)[t_min] - maximal_min_kn
	move.l	a3,a1
	move.l	$8(a1),a0
	fmove.s	0(a0,d3.l*4),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L415
L414
;					
	bra.b	L417
L415
	addq.l	#1,d3
L416
	cmp.l	d2,d3
	blo.b	L413
L417
;			for(t_max=cnt-1;
	subq.l	#1,d2
	bra.b	L421
L418
;				if(fabs((texture_knot->unified_knot)[t_max] - minimal_max_kn
	move.l	a3,a1
	move.l	$8(a1),a0
	fmove.s	0(a0,d2.l*4),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L420
L419
;					
	bra.b	L422
L420
	subq.l	#1,d2
L421
	tst.l	d2
	bne.b	L418
L422
;			texture_knot->t_min=t_min;
	move.l	a3,a0
	move.l	d3,$14(a0)
;			texture_knot->t_max=t_max;
	move.l	a3,a0
	move.l	d2,$18(a0)
L423
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts

	SECTION "_select_knot_working_range:0",CODE


;GLenum
	XDEF	_select_knot_working_range
_select_knot_working_range
L482	EQU	-$44
	link	a5,#L482
	movem.l	d2/a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
	movem.l	$10(a5),a2-a4
L425
;	max_nknots=geom_knot->nknots;
	move.l	$C(a5),a0
	move.l	4(a0),d2
;	if(color_knot->unified_knot)
	tst.l	$8(a2)
	beq.b	L427
L426
;		max_nknots+=color_knot->nknots;
	add.l	4(a2),d2
L427
;	if(normal_knot->unified_knot)
	move.l	a3,a1
	tst.l	$8(a1)
	beq.b	L429
L428
;		max_nknots+=normal_knot->nknots;
	move.l	a3,a0
	add.l	4(a0),d2
L429
;	if(texture_knot->unified_knot)
	move.l	a4,a1
	tst.l	$8(a1)
	beq.b	L431
L430
;		max_nknots+=texture_knot->nknots;
	move.l	a4,a0
	add.l	4(a0),d2
L431
;	maximal_min_knot=(geom_knot->knot)[geom_knot->t_min];
	move.l	$C(a5),a1
	move.l	(a1),a0
	move.l	$C(a5),a1
	move.l	$14(a1),d0
	fmove.s	0(a0,d0.l*4),fp3
;	minimal_max_knot=(geom_knot->knot)[geom_knot->t_max];
	move.l	$C(a5),a1
	move.l	(a1),a0
	move.l	$C(a5),a1
	move.l	$18(a1),d0
	fmove.s	0(a0,d0.l*4),fp2
;	if(max_nknots!=geom_knot->nknots)
	move.l	$C(a5),a0
	cmp.l	4(a0),d2
	beq	L481
L432
;		if((geom_knot->unified_knot=
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	$C(a5),a1
	move.l	d0,$8(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L434
L433
;			call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L434
;		geom_knot->unified_nknots=geom_knot->nknots;
	move.l	$C(a5),a0
	move.l	4(a0),d0
	move.l	$C(a5),a0
	move.l	d0,$C(a0)
;		for(i=0;
	moveq	#0,d0
	bra.b	L436
L435
;			(geom_knot->unified_knot)[i]=(geom_knot->knot)[i];
	move.l	$C(a5),a1
	move.l	(a1),a0
	fmove.s	0(a0,d0.l*4),fp0
	move.l	$C(a5),a1
	move.l	$8(a1),a0
	fmove.s	fp0,0(a0,d0.l*4)
	addq.l	#1,d0
L436
	move.l	$C(a5),a0
	cmp.l	4(a0),d0
	blt.b	L435
L437
;		if(color_knot->unified_knot)
	tst.l	$8(a2)
	beq	L447
L438
;			if((color_knot->knot)[color_knot->t_min] - maximal_min_knot >
	move.l	$14(a2),d0
	move.l	(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	fsub.x	fp3,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L440
L439
;				maximal_min_knot=(color_knot->knot)[color_knot->t_min];
	move.l	$14(a2),d0
	move.l	(a2),a0
	fmove.s	0(a0,d0.l*4),fp3
L440
;			if(minimal_max_knot - (color_knot->knot)[color_knot->t_max] >
	move.l	$18(a2),d0
	move.l	(a2),a0
	fmove.x	fp2,fp0
	fsub.s	0(a0,d0.l*4),fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L442
L441
;				minimal_max_knot=(color_knot->knot)[color_knot->t_max];
	move.l	$18(a2),d0
	move.l	(a2),a0
	fmove.s	0(a0,d0.l*4),fp2
L442
;			if((color_knot->unified_knot=
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,$8(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L444
L443
;				free(geom_knot->unified_knot);
	move.l	$C(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;				call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L444
;			color_knot->unified_nknots=color_knot->nknots;
	move.l	4(a2),d0
	move.l	d0,$C(a2)
;			for(i=0;
	moveq	#0,d0
	bra.b	L446
L445
;				(color_knot->unified_knot)[i]=(color_knot->knot)[i];
	move.l	(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	move.l	$8(a2),a0
	fmove.s	fp0,0(a0,d0.l*4)
	addq.l	#1,d0
L446
	cmp.l	4(a2),d0
	blt.b	L445
L447
;		if(normal_knot->unified_knot)
	move.l	a3,a1
	tst.l	$8(a1)
	beq	L457
L448
;			if((normal_knot->knot)[normal_knot->t_min] - maximal_min_knot 
	move.l	a3,a1
	move.l	(a1),a0
	move.l	a3,a1
	move.l	$14(a1),d0
	fmove.s	0(a0,d0.l*4),fp0
	fsub.x	fp3,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L450
L449
;				maximal_min_knot=(normal_knot->knot)[normal_knot->t_min];
	move.l	a3,a1
	move.l	(a1),a0
	move.l	a3,a1
	move.l	$14(a1),d0
	fmove.s	0(a0,d0.l*4),fp3
L450
;			if(minimal_max_knot - (normal_knot->knot)[normal_knot->t_max] 
	move.l	a3,a1
	move.l	(a1),a0
	move.l	a3,a1
	move.l	$18(a1),d0
	fmove.x	fp2,fp0
	fsub.s	0(a0,d0.l*4),fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L452
L451
;				minimal_max_knot=(normal_knot->knot)[normal_knot->t_max];
	move.l	a3,a1
	move.l	(a1),a0
	move.l	a3,a1
	move.l	$18(a1),d0
	fmove.s	0(a0,d0.l*4),fp2
L452
;			if((normal_knot->unified_knot=
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a3,a1
	move.l	d0,$8(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L454
L453
;				free(geom_knot->unified_knot);
	move.l	$C(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;				free(color_knot->unified_knot);
	move.l	$8(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;				call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L454
;			normal_knot->unified_nknots=normal_knot->nknots;
	move.l	a3,a0
	move.l	4(a0),d0
	move.l	a3,a0
	move.l	d0,$C(a0)
;			for(i=0;
	moveq	#0,d0
	bra.b	L456
L455
;				(normal_knot->unified_knot)[i]=(normal_knot->knot)[i];
	move.l	a3,a1
	move.l	(a1),a0
	fmove.s	0(a0,d0.l*4),fp0
	move.l	a3,a1
	move.l	$8(a1),a0
	fmove.s	fp0,0(a0,d0.l*4)
	addq.l	#1,d0
L456
	move.l	a3,a0
	cmp.l	4(a0),d0
	blt.b	L455
L457
;		if(texture_knot->unified_knot)
	move.l	a4,a1
	tst.l	$8(a1)
	beq	L467
L458
;			if((texture_knot->knot)[texture_knot->t_min] - maximal_min_kno
	move.l	a4,a1
	move.l	(a1),a0
	move.l	a4,a1
	move.l	$14(a1),d0
	fmove.s	0(a0,d0.l*4),fp0
	fsub.x	fp3,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L460
L459
;				maximal_min_knot=(texture_knot->knot)[texture_knot->t_min];
	move.l	a4,a1
	move.l	(a1),a0
	move.l	a4,a1
	move.l	$14(a1),d0
	fmove.s	0(a0,d0.l*4),fp3
L460
;			if(minimal_max_knot - (texture_knot->knot)[texture_knot->t_max
	move.l	a4,a1
	move.l	(a1),a0
	move.l	a4,a1
	move.l	$18(a1),d0
	fmove.x	fp2,fp0
	fsub.s	0(a0,d0.l*4),fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L462
L461
;				minimal_max_knot=(texture_knot->knot)[texture_knot->t_max];
	move.l	a4,a1
	move.l	(a1),a0
	move.l	a4,a1
	move.l	$18(a1),d0
	fmove.s	0(a0,d0.l*4),fp2
L462
;			if((texture_knot->unified_knot=
	move.l	d2,d0
	moveq	#2,d2
	asl.l	d2,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a4,a1
	move.l	d0,$8(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L464
L463
;				free(geom_knot->unified_knot);
	move.l	$C(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;				free(color_knot->unified_knot);
	move.l	$8(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;				free(normal_knot->unified_knot);
	move.l	a3,a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;				call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L464
;			texture_knot->unified_nknots=texture_knot->nknots;
	move.l	a4,a0
	move.l	4(a0),d0
	move.l	a4,a0
	move.l	d0,$C(a0)
;			for(i=0;
	moveq	#0,d0
	bra.b	L466
L465
;				(texture_knot->unified_knot)[i]=(texture_knot->knot)[i];
	move.l	a4,a1
	move.l	(a1),a0
	fmove.s	0(a0,d0.l*4),fp0
	move.l	a4,a1
	move.l	$8(a1),a0
	fmove.s	fp0,0(a0,d0.l*4)
	addq.l	#1,d0
L466
	move.l	a4,a0
	cmp.l	4(a0),d0
	blt.b	L465
L467
;		if(minimal_max_knot-maximal_min_knot < EPSILON)
	fmove.x	fp2,fp0
	fsub.x	fp3,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L469
L468
;			geom_knot->unified_nknots=0;
	move.l	$C(a5),a0
	clr.l	$C(a0)
;			color_knot->unified_nknots=0;
	clr.l	$C(a2)
;			normal_knot->unified_nknots=0;
	move.l	a3,a0
	clr.l	$C(a0)
;			texture_knot->unified_nknots=0;
	move.l	a4,a0
	clr.l	$C(a0)
	bra	L481
L469
;			if(color_knot->unified_knot)
	tst.l	$8(a2)
	beq.b	L471
L470
;				collect_unified_knot(geom_knot,color_knot,maximal_min_knot,
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	a2,-(a7)
	move.l	$C(a5),-(a7)
	jsr	_collect_unified_knot
	add.w	#$10,a7
L471
;			if(normal_knot->unified_knot)
	move.l	a3,a1
	tst.l	$8(a1)
	beq.b	L473
L472
;				collect_unified_knot(geom_knot,normal_knot,maximal_min_knot,
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	a3,-(a7)
	move.l	$C(a5),-(a7)
	jsr	_collect_unified_knot
	add.w	#$10,a7
L473
;			if(texture_knot->unified_knot)
	move.l	a4,a1
	tst.l	$8(a1)
	beq.b	L475
L474
;				collect_unified_knot(geom_knot,texture_knot,maximal_min_knot
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	a4,-(a7)
	move.l	$C(a5),-(a7)
	jsr	_collect_unified_knot
	add.w	#$10,a7
L475
;			if(color_knot->unified_knot)
	tst.l	$8(a2)
	beq.b	L477
L476
;				collect_unified_knot(color_knot,geom_knot,maximal_min_knot,
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	$C(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_collect_unified_knot
	add.w	#$10,a7
L477
;			if(normal_knot->unified_knot)
	move.l	a3,a1
	tst.l	$8(a1)
	beq.b	L479
L478
;				collect_unified_knot(normal_knot,geom_knot,maximal_min_knot,
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	$C(a5),-(a7)
	move.l	a3,-(a7)
	jsr	_collect_unified_knot
	add.w	#$10,a7
L479
;			if(texture_knot->unified_knot)
	move.l	a4,a1
	tst.l	$8(a1)
	beq.b	L481
L480
;				collect_unified_knot(texture_knot,geom_knot,maximal_min_knot
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	$C(a5),-(a7)
	move.l	a4,-(a7)
	jsr	_collect_unified_knot
	add.w	#$10,a7
L481
;	set_new_t_min_t_max(geom_knot,color_knot,normal_knot,texture_knot,
	fmove.s	fp2,-(a7)
	fmove.s	fp3,-(a7)
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	move.l	a2,-(a7)
	move.l	$C(a5),-(a7)
	jsr	_set_new_t_min_t_max
	add.w	#$18,a7
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts

	SECTION "_free_unified_knots:0",CODE


;void
	XDEF	_free_unified_knots
_free_unified_knots
	movem.l	a2-a4,-(a7)
	movem.l	$10(a7),a1/a4
	move.l	$1C(a7),a2
	move.l	$18(a7),a3
L483
;	if(geom_knot->unified_knot)
	tst.l	$8(a1)
	beq.b	L485
L484
;		free(geom_knot->unified_knot);
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
L485
;	if(color_knot->unified_knot)
	move.l	a4,a1
	tst.l	$8(a1)
	beq.b	L487
L486
;		free(color_knot->unified_knot);
	move.l	a4,a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
L487
;	if(normal_knot->unified_knot)
	move.l	a3,a1
	tst.l	$8(a1)
	beq.b	L489
L488
;		free(normal_knot->unified_knot);
	move.l	a3,a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
L489
;	if(texture_knot->unified_knot)
	tst.l	$8(a2)
	beq.b	L491
L490
;		free(texture_knot->unified_knot);
	move.l	$8(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
L491
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_explode_knot:0",CODE


;GLenum
	XDEF	_explode_knot
_explode_knot
L521	EQU	-$34
	link	a5,#L521
	movem.l	d2-d7/a2/a3,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$8(a5),a3
L492
;	GLint nknots,n_new_knots=0;
	moveq	#0,d7
;	if(the_knot->unified_knot)
	move.l	a3,a1
	tst.l	$8(a1)
	beq.b	L494
L493
;		knot=the_knot->unified_knot;
	move.l	a3,a0
	move.l	$8(a0),a2
;		nknots=the_knot->unified_nknots;
	move.l	a3,a0
	move.l	$C(a0),-$C(a5)
	bra.b	L495
L494
;		knot=the_knot->knot;
	move.l	a3,a0
	move.l	(a0),a2
;		nknots=the_knot->nknots;
	move.l	a3,a0
	move.l	4(a0),-$C(a5)
L495
;	ord=the_knot->order;
	move.l	a3,a0
	move.l	$10(a0),d4
;	t_min=the_knot->t_min;
	move.l	a3,a0
	move.l	$14(a0),d6
;	t_max=the_knot->t_max;
	move.l	a3,a0
	move.l	$18(a0),d5
;	for(i=t_min;
	move.l	d6,d3
	bra.b	L503
L496
;		tmp_float=knot[i];
	fmove.s	0(a2,d3.l*4),fp2
;		for(j=0;
	moveq	#0,d2
	bra.b	L500
L497
;			if(fabs(tmp_float-knot[i+j])>EPSILON)
	move.l	d3,d0
	add.l	d2,d0
	fmove.x	fp2,fp0
	fsub.s	0(a2,d0.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L499
L498
;				
	bra.b	L502
L499
	addq.l	#1,d2
L500
	cmp.l	d4,d2
	bge.b	L502
L501
	move.l	d3,d0
	add.l	d2,d0
	cmp.l	d5,d0
	ble.b	L497
L502
;		n_new_knots+=ord-j;
	move.l	d4,d0
	sub.l	d2,d0
	move.l	d7,d1
	add.l	d0,d1
	move.l	d1,d7
;		i+=j;
	add.l	d2,d3
L503
	cmp.l	d5,d3
	ble.b	L496
L504
;	if((new_knot=(GLfloat *)malloc(sizeof(GLfloat)*(nknots+n_new_knots)
	move.l	-$C(a5),d0
	add.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a1
	cmp.w	#0,a1
	bne.b	L506
L505
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L506
;	for(j=0;
	moveq	#0,d2
	bra.b	L508
L507
;		new_knot[j]=knot[j];
	move.l	0(a2,d2.l*4),0(a1,d2.l*4)
	addq.l	#1,d2
L508
	cmp.l	d6,d2
	blt.b	L507
L509
;	for(i=j;
	move.l	d2,d3
	bra.b	L516
L510
;		tmp_float=knot[i];
	fmove.s	0(a2,d3.l*4),fp2
;		for(k=0;
	moveq	#0,d0
	bra.b	L514
L511
;			new_knot[j++]=knot[i];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	0(a2,d3.l*4),0(a1,d1.l*4)
;			if(tmp_float==knot[i+1])
	lea	4(a2),a0
	fcmp.s	0(a0,d3.l*4),fp2
	fbne.b	L513
L512
;				i++;
	addq.l	#1,d3
L513
	addq.l	#1,d0
L514
	cmp.l	d4,d0
	blt.b	L511
L515
	addq.l	#1,d3
L516
	cmp.l	d5,d3
	ble.b	L510
L517
;	for(i=t_max+1;
	move.l	d5,d3
	addq.l	#1,d3
	bra.b	L519
L518
;		new_knot[j++]=knot[i];
	move.l	d2,d0
	addq.l	#1,d2
	move.l	0(a2,d3.l*4),0(a1,d0.l*4)
	addq.l	#1,d3
L519
	cmp.l	-$C(a5),d3
	blt.b	L518
L520
;	the_knot->new_knot=new_knot;
	move.l	a3,a0
	move.l	a1,$22(a0)
;	the_knot->delta_nknots+=n_new_knots;
	move.l	a3,a0
	move.l	$1C(a0),d0
	add.l	d7,d0
	move.l	a3,a0
	move.l	d0,$1C(a0)
;	the_knot->t_max+=n_new_knots;
	move.l	a3,a0
	move.l	$18(a0),d0
	add.l	d7,d0
	move.l	a3,a0
	move.l	d0,$18(a0)
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

	SECTION "_calc_alphas:0",CODE


;GLenum
	XDEF	_calc_alphas
_calc_alphas
L551	EQU	-$50
	link	a5,#L551
	movem.l	d2-d7/a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
L522
;	knot=the_knot->knot;
	move.l	$8(a5),a0
	move.l	(a0),a2
;	order=the_knot->order;
	move.l	$8(a5),a0
	move.l	$10(a0),-$1C(a5)
;	new_knot=the_knot->new_knot;
	move.l	$8(a5),a0
	move.l	$22(a0),a3
;	n=the_knot->nknots-the_knot->order;
	move.l	$8(a5),a0
	move.l	4(a0),d5
	move.l	$8(a5),a0
	sub.l	$10(a0),d5
;	m=n+the_knot->delta_nknots;
	move.l	$8(a5),a0
	move.l	d5,d0
	add.l	$1C(a0),d0
	move.l	d0,d7
;	if((alpha=(GLfloat *)malloc(sizeof(GLfloat)*n*m))==NULL)
	move.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	d7,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a4
	move.l	a4,a0
	cmp.w	#0,a0
	bne.b	L524
L523
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L524
;	if((alpha_new=(GLfloat *)malloc(sizeof(GLfloat)*n*m))==NULL)
	move.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	d7,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,-$24(a5)
	move.l	-$24(a5),a0
	cmp.w	#0,a0
	bne.b	L526
L525
;		free(alpha);
	move.l	a4,-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L526
;	for(j=0;
	moveq	#0,d3
	bra.b	L535
L527
;		for(i=0;
	moveq	#0,d2
	bra.b	L533
L528
;			if((knot[i] <= new_knot[j]) && (new_knot[j] < knot[i+1]))
	fmove.s	0(a2,d2.l*4),fp1
	fcmp.s	0(a3,d3.l*4),fp1
	fbogt.b	L531
L529
	lea	4(a2),a0
	fmove.s	0(a3,d3.l*4),fp1
	fcmp.s	0(a0,d2.l*4),fp1
	fboge.b	L531
L530
;				tmp_float=1.0;
	fmove.s	#$.3F800000,fp2
	bra.b	L532
L531
;				tmp_float=0.0;
	fmove.s	#$.00000000,fp2
L532
;			alpha[i+j*n]=tmp_float;
	move.l	d3,d0
	muls.l	d5,d0
	add.l	d2,d0
	fmove.s	fp2,0(a4,d0.l*4)
	addq.l	#1,d2
L533
	cmp.l	d5,d2
	blt.b	L528
L534
	addq.l	#1,d3
L535
	cmp.l	d7,d3
	blt.b	L527
L536
;	for(k=1;
	moveq	#1,d4
	bra	L549
L537
;		for(j=0;
	moveq	#0,d3
	bra	L547
L538
;			for(i=0;
	moveq	#0,d2
	bra	L545
L539
;				denom=knot[i+k]-knot[i];
	move.l	d2,d0
	add.l	d4,d0
	fmove.s	0(a2,d0.l*4),fp3
	fsub.s	0(a2,d2.l*4),fp3
;				if(fabs(denom)<EPSILON)
	fmove.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L541
L540
;					tmp_float=0.0;
	fmove.s	#$.00000000,fp2
	bra.b	L542
L541
;					tmp_float=(new_knot[j+k]-knot[i])/denom*
	move.l	d3,d0
	add.l	d4,d0
	fmove.s	0(a3,d0.l*4),fp2
	fsub.s	0(a2,d2.l*4),fp2
	fdiv.x	fp3,fp2
	move.l	d3,d0
	muls.l	d5,d0
	add.l	d2,d0
	fmul.s	0(a4,d0.l*4),fp2
L542
;				denom=knot[i+k+1]-knot[i+1];
	move.l	d2,d0
	add.l	d4,d0
	lea	4(a2),a0
	fmove.s	0(a0,d0.l*4),fp3
	lea	4(a2),a0
	fsub.s	0(a0,d2.l*4),fp3
;				if(fabs(denom)>EPSILON)
	fmove.x	fp3,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L544
L543
;					tmp_float+=(knot[i+k+1]-new_knot[j+k])/denom*
	move.l	d2,d0
	add.l	d4,d0
	lea	4(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	move.l	d3,d0
	add.l	d4,d0
	fsub.s	0(a3,d0.l*4),fp0
	fdiv.x	fp3,fp0
	move.l	d2,d0
	addq.l	#1,d0
	move.l	d3,d1
	muls.l	d5,d1
	add.l	d1,d0
	fmul.s	0(a4,d0.l*4),fp0
	fadd.x	fp0,fp2
L544
;				alpha_new[i+j*n]=tmp_float;
	move.l	d3,d0
	muls.l	d5,d0
	add.l	d2,d0
	move.l	-$24(a5),a1
	fmove.s	fp2,0(a1,d0.l*4)
	addq.l	#1,d2
L545
	cmp.l	d5,d2
	blt	L539
L546
	addq.l	#1,d3
L547
	cmp.l	d7,d3
	blt	L538
L548
;		tmp_alpha=alpha_new;
	move.l	-$24(a5),a0
;		alpha_new=alpha;
	move.l	a4,-$24(a5)
;		alpha=tmp_alpha;
	move.l	a0,a4
	addq.l	#1,d4
L549
	cmp.l	-$1C(a5),d4
	blt	L537
L550
;	the_knot->alpha=alpha;
	move.l	$8(a5),a1
	move.l	a4,$26(a1)
;	free(alpha_new);
	move.l	-$24(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_calc_new_ctrl_pts:0",CODE


;GLenum
	XDEF	_calc_new_ctrl_pts
_calc_new_ctrl_pts
L567	EQU	-$44
	link	a5,#L567
	movem.l	d2-d7/a2-a4,-(a7)
	movem.l	$14(a5),d2/a2
	move.l	$10(a5),a0
	move.l	$8(a5),a4
L552
;	new_knot=the_knot->new_knot;
;	n=the_knot->nknots-the_knot->order;
	move.l	4(a0),-$18(a5)
	move.l	-$18(a5),d0
	sub.l	$10(a0),d0
	move.l	d0,-$18(a5)
;	alpha=the_knot->alpha;
	move.l	$26(a0),a3
;	m=the_knot->t_max+1-the_knot->t_min-the_knot->order;
	move.l	$18(a0),-$14(a5)
	addq.l	#1,-$14(a5)
	move.l	-$14(a5),d0
	sub.l	$14(a0),d0
	move.l	d0,-$14(a5)
	move.l	-$14(a5),d0
	sub.l	$10(a0),d0
	move.l	d0,-$14(a5)
;	k=the_knot->t_min;
	move.l	$14(a0),-$C(a5)
;	if((*new_ctrl=(GLfloat *)malloc(sizeof(GLfloat)*dim*m))==NULL)
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	-$14(a5),d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L554
L553
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L554
;	for(j=0;
	moveq	#0,d3
	bra.b	L565
L555
;		for(l=0;
	moveq	#0,d0
	bra.b	L557
L556
;			(*new_ctrl)[j*dim+l]=0.0;
	move.l	d3,d1
	muls.l	d2,d1
	add.l	d0,d1
	move.l	(a2),a0
	clr.l	0(a0,d1.l*4)
	addq.l	#1,d0
L557
	cmp.l	d2,d0
	blt.b	L556
L558
;		for(i=0;
	moveq	#0,d4
	bra.b	L563
L559
;			index1=i+(j+k)*n;
	move.l	d3,d0
	add.l	-$C(a5),d0
	muls.l	-$18(a5),d0
	move.l	d4,d1
	add.l	d0,d1
	move.l	d1,d7
;			index2=i*stride;
	move.l	d4,d5
	muls.l	$C(a5),d5
;			for(l=0;
	moveq	#0,d0
	bra.b	L561
L560
;				(*new_ctrl)[j*dim+l]+=alpha[index1]*ctrl[index2+l];
	move.l	d7,d1
	fmove.s	0(a3,d1.l*4),fp1
	move.l	d5,d1
	add.l	d0,d1
	fmul.s	0(a4,d1.l*4),fp1
	move.l	d3,d1
	muls.l	d2,d1
	add.l	d0,d1
	move.l	(a2),a0
	lea	0(a0,d1.l*4),a0
	fmove.s	(a0),fp0
	fadd.x	fp1,fp0
	fmove.s	fp0,(a0)
	addq.l	#1,d0
L561
	cmp.l	d2,d0
	blt.b	L560
L562
	addq.l	#1,d4
L563
	cmp.l	-$18(a5),d4
	blt.b	L559
L564
	addq.l	#1,d3
L565
	cmp.l	-$14(a5),d3
	blt	L555
L566
;	*ncontrol=(GLint)m;
	move.l	$1C(a5),a0
	move.l	-$14(a5),(a0)
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_calc_factor:0",CODE


;	GLfloat bez_pt[4];
_calc_factor
L587	EQU	-$174
	link	a5,#L587
	movem.l	d2-d6/a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	movem.l	$10(a5),d3/d4
	move.l	$C(a5),d5
	move.l	$1C(a5),d6
	move.l	$8(a5),a2
	fmove.s	$18(a5),fp5
L568
;	glGetDoublev(GL_MODELVIEW_MATRIX,model);
	pea	-$80(a5)
	pea	$BA6.w
	jsr	_glGetDoublev
	addq.w	#$8,a7
;	glGetDoublev(GL_PROJECTION_MATRIX,proj);
	pea	-$100(a5)
	pea	$BA7.w
	jsr	_glGetDoublev
	addq.w	#$8,a7
;	glGetIntegerv(GL_VIEWPORT,viewport);
	pea	-$110(a5)
	pea	$BA2.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;	if(dim==4)
	move.l	d6,d0
	cmp.l	#4,d0
	bne	L575
L569
;		w=(GLdouble)pts[indx+3];
	lea	$C(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
	fmove.x	fp0,fp4
;		x=(GLdouble)pts[indx]/w;
	fmove.s	0(a2,d3.l*4),fp0
	fmove.x	fp0,fp2
	fdiv.x	fp4,fp2
;		y=(GLdouble)pts[indx+1]/w;
	lea	4(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
	fmove.x	fp0,fp1
	fdiv.x	fp4,fp1
;		z=(GLdouble)pts[indx+2]/w;
	lea	$8(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
	fdiv.x	fp4,fp0
;		gluProject(x,y,z,model,proj,viewport,&winx1,&winy1,&winz);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp0,-(a7)
	fmove.d	fp1,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;		len=0.0;
	fmove.d	#$.00000000.00000000,fp3
;		for(i=1;
	moveq	#1,d2
	bra	L573
L570
;			w=(GLdouble)pts[indx+i*stride+3];
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	lea	$C(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmove.x	fp0,fp4
;			x=(GLdouble)pts[indx+i*stride]/w;
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	fmove.s	0(a2,d0.l*4),fp0
	fmove.x	fp0,fp2
	fdiv.x	fp4,fp2
;			y=(GLdouble)pts[indx+i*stride+1]/w;
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	lea	4(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmove.x	fp0,fp1
	fdiv.x	fp4,fp1
;			z=(GLdouble)pts[indx+i*stride+2]/w;
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	lea	$8(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	fdiv.x	fp4,fp0
;			if(gluProject(x,y,z,model,proj,viewport,&winx2,&winy2,&winz))
	pea	-$148(a5)
	pea	-$158(a5)
	pea	-$150(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp0,-(a7)
	fmove.d	fp1,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
	tst.l	d0
	beq.b	L572
L571
;				dx=winx2-winx1;
	fmove.d	-$150(a5),fp0
	fsub.d	-$138(a5),fp0
;				dy=winy2-winy1;
	fmove.d	-$158(a5),fp1
	fsub.d	-$140(a5),fp1
;				len+=sqrt(dx*dx+dy*dy);
	fmove.x	fp0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp2,fp0
	fmove.x	fp1,fp2
	fmul.x	fp1,fp2
	fadd.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
	fadd.x	fp0,fp3
L572
;			winx1=winx2;
	move.l	-$150(a5),-$138(a5)
	move.l	-$14C(a5),-$134(a5)
; winy1=winy2;
	move.l	-$158(a5),-$140(a5)
	move.l	-$154(a5),-$13C(a5)
	addq.l	#1,d2
L573
	cmp.l	d5,d2
	blt	L570
L574
	bra	L586
L575
;		x=(GLdouble)pts[indx];
	fmove.s	0(a2,d3.l*4),fp0
	fmove.x	fp0,fp2
;		y=(GLdouble)pts[indx+1];
	lea	4(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
	fmove.x	fp0,fp1
;		if(dim==2)
	move.l	d6,d0
	cmp.l	#2,d0
	bne.b	L577
L576
;			z=0.0;
	fmove.d	#$.00000000.00000000,fp0
	bra.b	L578
L577
;			z=(GLdouble)pts[indx+2];
	lea	$8(a2),a0
	fmove.s	0(a0,d3.l*4),fp0
L578
;		gluProject(x,y,z,model,proj,viewport,&winx1,&winy1,&winz);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp0,-(a7)
	fmove.d	fp1,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;		len=0.0;
	fmove.d	#$.00000000.00000000,fp3
;		for(i=1;
	moveq	#1,d2
	bra	L585
L579
;			x=(GLdouble)pts[indx+i*stride];
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	fmove.s	0(a2,d0.l*4),fp0
	fmove.x	fp0,fp2
;			y=(GLdouble)pts[indx+i*stride+1];
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	lea	4(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmove.x	fp0,fp1
;			if(dim==2)
	move.l	d6,d0
	cmp.l	#2,d0
	bne.b	L581
L580
;				z=0.0;
	fmove.d	#$.00000000.00000000,fp0
	bra.b	L582
L581
;				z=(GLdouble)pts[indx+i*stride+2];
	move.l	d2,d0
	muls.l	d4,d0
	add.l	d3,d0
	lea	$8(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
L582
;			if(gluProject(x,y,z,model,proj,viewport,&winx2,&winy2,&winz))
	pea	-$148(a5)
	pea	-$158(a5)
	pea	-$150(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp0,-(a7)
	fmove.d	fp1,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
	tst.l	d0
	beq.b	L584
L583
;				dx=winx2-winx1;
	fmove.d	-$150(a5),fp0
	fsub.d	-$138(a5),fp0
;				dy=winy2-winy1;
	fmove.d	-$158(a5),fp1
	fsub.d	-$140(a5),fp1
;				len+=sqrt(dx*dx+dy*dy);
	fmove.x	fp0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp2,fp0
	fmove.x	fp1,fp2
	fmul.x	fp1,fp2
	fadd.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
	fadd.x	fp0,fp3
L584
;			winx1=winx2;
	move.l	-$150(a5),-$138(a5)
	move.l	-$14C(a5),-$134(a5)
; winy1=winy2;
	move.l	-$158(a5),-$140(a5)
	move.l	-$154(a5),-$13C(a5)
	addq.l	#1,d2
L585
	cmp.l	d5,d2
	blt	L579
L586
;	len /= tolerance;
	fmove.x	fp5,fp0
	fdiv.x	fp0,fp3
	fmove.l	fp3,d0
	addq.l	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_bezier_curve:0",CODE


;static void
_bezier_curve
	movem.l	d2-d6/a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	movem.l	$58(a7),d2/d4/d5
	move.l	$50(a7),a0
	move.l	$4C(a7),a1
	fmove.s	$54(a7),fp5
L588
;	if(order >= 2)
	cmp.l	#2,d4
	blo	L599
L589
;		bincoeff = order-1;
	move.l	d4,d1
	subq.l	#1,d1
;		s = 1.0-t;
	fmove.x	fp5,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fsub.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.x	fp0,fp4
;		for(k=0;
	moveq	#0,d0
	bra.b	L591
L590
;			out[k] = s*cp[k] + bincoeff*t*cp[offset+k];
	fmove.x	fp4,fp1
	fmul.s	0(a1,d0.l*4),fp1
	fmove.l	d1,fp0
	fmul.x	fp5,fp0
	move.l	d5,d3
	add.l	d0,d3
	fmul.s	0(a1,d3.l*4),fp0
	fadd.x	fp0,fp1
	fmove.s	fp1,0(a0,d0.l*4)
	addq.l	#1,d0
L591
	cmp.l	d2,d0
	blo.b	L590
L592
;		for(i=2, cp+=2*offset, powert=t*t;
	moveq	#2,d3
	move.l	d5,d0
	moveq	#1,d6
	asl.l	d6,d0
	moveq	#2,d6
	asl.l	d6,d0
	add.l	d0,a1
	fmove.x	fp5,fp3
	fmul.x	fp5,fp3
	bra.b	L597
L593
;			bincoeff *= order-i;
	move.l	d4,d0
	sub.l	d3,d0
	mulu.l	d0,d1
;			bincoeff /= i;
	divul.l	d3,d1
;			for(k=0;
	moveq	#0,d0
	bra.b	L595
L594
;				out[k] = s*out[k] + bincoeff*powert*cp[k];
	fmove.x	fp4,fp1
	fmul.s	0(a0,d0.l*4),fp1
	fmove.l	d1,fp0
	fmul.x	fp3,fp0
	fmul.s	0(a1,d0.l*4),fp0
	fadd.x	fp0,fp1
	fmove.s	fp1,0(a0,d0.l*4)
	addq.l	#1,d0
L595
	cmp.l	d2,d0
	blo.b	L594
L596
	addq.l	#1,d3
	fmul.x	fp5,fp3
	move.l	d5,d0
	moveq	#2,d6
	asl.l	d6,d0
	add.l	d0,a1
L597
	cmp.l	d4,d3
	blo.b	L593
L598
	bra.b	L602
L599
;		for(k=0;
	moveq	#0,d0
	bra.b	L601
L600
;			out[k] = cp[k];
	move.l	0(a1,d0.l*4),0(a0,d0.l*4)
	addq.l	#1,d0
L601
	cmp.l	d2,d0
	blo.b	L600
L602
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,d2-d6/a2
	rts

	SECTION "_calc_parametric_factor:0",CODE


;static GLint
_calc_parametric_factor
L625	EQU	-$1A8
	link	a5,#L625
	movem.l	d2-d6/a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	move.l	$1C(a5),d2
	move.l	$C(a5),d4
	move.l	$10(a5),d5
	move.l	$14(a5),d6
	move.l	$8(a5),a2
L603
;	GLdouble len=0.0
	fmove.d	#$.00000000.00000000,fp7
;	P = 2*(order+2);
	move.l	d4,d0
	addq.l	#2,d0
	move.l	d0,d3
	moveq	#1,d0
	asl.l	d0,d3
;	glGetDoublev(GL_MODELVIEW_MATRIX,model);
	pea	-$80(a5)
	pea	$BA6.w
	jsr	_glGetDoublev
	addq.w	#$8,a7
;	glGetDoublev(GL_PROJECTION_MATRIX,proj);
	pea	-$100(a5)
	pea	$BA7.w
	jsr	_glGetDoublev
	addq.w	#$8,a7
;	glGetIntegerv(GL_VIEWPORT,viewport);
	pea	-$110(a5)
	pea	$BA2.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;	z_med = (viewport[2] + viewport[3]) * 0.5;
	lea	-$110(a5),a0
	move.l	$8(a0),d0
	lea	-$110(a5),a0
	add.l	$C(a0),d0
	fmove.l	d0,fp5
	fmul.d	#$.3FE00000.00000000,fp5
;	switch(dim)
	cmp.l	#3,d2
	beq	L610
	bgt.b	L626
	cmp.l	#2,d2
	beq	L616
	bra	L622
L626
	cmp.l	#4,d2
	beq.b	L604
	bra	L622
;		
L604
;			for(i=1;
	moveq	#1,d2
	bra	L608
L605
;				bezier_curve(pts+indx, bez_pt, (GLfloat)i/(GLfloat)P, 4,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	4.w
	fmove.l	d2,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				w = (GLdouble)bez_pt[3];
	lea	-$190(a5),a0
	fmove.s	$C(a0),fp0
;				x = (GLdouble)bez_pt[0] / w;
	fmove.s	-$190(a5),fp1
	fmove.x	fp1,fp2
	fdiv.x	fp0,fp2
;				y = (GLdouble)bez_pt[1] / w;
	lea	-$190(a5),a0
	fmove.s	4(a0),fp1
	fmove.x	fp1,fp4
	fdiv.x	fp0,fp4
;				z = (GLdouble)bez_pt[2] / w;
	lea	-$190(a5),a0
	fmove.s	$8(a0),fp1
	fmove.x	fp1,fp3
	fdiv.x	fp0,fp3
;				gluProject(x,y,z,model,proj,viewport,&x3,&y3,&z3);
	pea	-$178(a5)
	pea	-$170(a5)
	pea	-$168(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z3 *= z_med;
	fmove.d	-$178(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$178(a5)
;				bezier_curve(pts+indx, bez_pt, (GLfloat)(i-1)/(GLfloat)P, 4,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	4.w
	move.l	d2,d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				w = (GLdouble)bez_pt[3];
	lea	-$190(a5),a0
	fmove.s	$C(a0),fp0
;				x = (GLdouble)bez_pt[0] / w;
	fmove.s	-$190(a5),fp1
	fmove.x	fp1,fp2
	fdiv.x	fp0,fp2
;				y = (GLdouble)bez_pt[1] / w;
	lea	-$190(a5),a0
	fmove.s	4(a0),fp1
	fmove.x	fp1,fp4
	fdiv.x	fp0,fp4
;				z = (GLdouble)bez_pt[2] / w;
	lea	-$190(a5),a0
	fmove.s	$8(a0),fp1
	fmove.x	fp1,fp3
	fdiv.x	fp0,fp3
;				gluProject(x,y,z,model,proj,viewport,&x1,&y1,&z1);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z1 *= z_med;
	fmove.d	-$148(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$148(a5)
;				bezier_curve(pts+indx, bez_pt, (GLfloat)(i+1)/(GLfloat)P, 4,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	4.w
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				w = (GLdouble)bez_pt[3];
	lea	-$190(a5),a0
	fmove.s	$C(a0),fp0
;				x = (GLdouble)bez_pt[0] / w;
	fmove.s	-$190(a5),fp1
	fmove.x	fp1,fp2
	fdiv.x	fp0,fp2
;				y = (GLdouble)bez_pt[1] / w;
	lea	-$190(a5),a0
	fmove.s	4(a0),fp1
	fmove.x	fp1,fp4
	fdiv.x	fp0,fp4
;				z = (GLdouble)bez_pt[2] / w;
	lea	-$190(a5),a0
	fmove.s	$8(a0),fp1
	fmove.x	fp1,fp3
	fdiv.x	fp0,fp3
;				gluProject(x,y,z,model,proj,viewport,&x2,&y2,&z2);
	pea	-$160(a5)
	pea	-$158(a5)
	pea	-$150(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z2 *= z_med;
	fmove.d	-$160(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$160(a5)
;				x = x2-x1;
	fmove.d	-$150(a5),fp2
	fsub.d	-$138(a5),fp2
;				y = y2-y1;
	fmove.d	-$158(a5),fp4
	fsub.d	-$140(a5),fp4
;				z = z2-z1;
	fmove.d	-$160(a5),fp3
	fsub.d	-$148(a5),fp3
;				tmp = sqrt(x*x+y*y+z*z);
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.x	fp4,fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.x	fp3,fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;				x /= tmp;
	fdiv.x	fp0,fp2
;				y /= tmp;
	fdiv.x	fp0,fp4
;				z /= tmp;
	fdiv.x	fp0,fp3
;				tmp = x3*x+y3*y+z3*z-x1*x-y1*y-z1*z;
	fmove.d	-$168(a5),fp0
	fmul.x	fp2,fp0
	fmove.d	-$170(a5),fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.d	-$178(a5),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	-$138(a5),fp1
	fmul.x	fp2,fp1
	fsub.x	fp1,fp0
	fmove.d	-$140(a5),fp1
	fmul.x	fp4,fp1
	fsub.x	fp1,fp0
	fmove.d	-$148(a5),fp1
	fmul.x	fp3,fp1
	fsub.x	fp1,fp0
;				x = x1+x*tmp-x3;
	fmul.x	fp0,fp2
	fadd.d	-$138(a5),fp2
	fsub.d	-$168(a5),fp2
;				y = y1+y*tmp-y3;
	fmul.x	fp0,fp4
	fadd.d	-$140(a5),fp4
	fsub.d	-$170(a5),fp4
;				z = z1+z*tmp-z3;
	fmul.x	fp0,fp3
	fadd.d	-$148(a5),fp3
	fsub.d	-$178(a5),fp3
;				tmp = sqrt(x*x+y*y+z*z);
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.x	fp0,fp2
	fmove.x	fp4,fp0
	fmul.x	fp4,fp0
	fadd.x	fp0,fp2
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp2
	fmove.d	fp2,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;				if(tmp > len)
	fcmp.x	fp7,fp0
	fbole.b	L607
L606
;					len = tmp;
	fmove.d	fp0,fp7
L607
	addq.l	#1,d2
L608
	cmp.l	d3,d2
	blt	L605
L609
;			
	bra	L622
L610
;			for(i=1;
	moveq	#1,d2
	bra	L614
L611
;				bezier_curve(pts+indx, bez_pt, (GLfloat)i/(GLfloat)P, 3,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	3.w
	fmove.l	d2,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				x = (GLdouble)bez_pt[0];
	fmove.s	-$190(a5),fp0
	fmove.x	fp0,fp2
;				y = (GLdouble)bez_pt[1];
	lea	-$190(a5),a0
	fmove.s	4(a0),fp0
	fmove.x	fp0,fp4
;				z = (GLdouble)bez_pt[2];
	lea	-$190(a5),a0
	fmove.s	$8(a0),fp0
	fmove.x	fp0,fp3
;				gluProject(x,y,z,model,proj,viewport,&x3,&y3,&z3);
	pea	-$178(a5)
	pea	-$170(a5)
	pea	-$168(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z3 *= z_med;
	fmove.d	-$178(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$178(a5)
;				bezier_curve(pts+indx, bez_pt, (GLfloat)(i-1)/(GLfloat)P, 3,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	3.w
	move.l	d2,d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				x = (GLdouble)bez_pt[0];
	fmove.s	-$190(a5),fp0
	fmove.x	fp0,fp2
;				y = (GLdouble)bez_pt[1];
	lea	-$190(a5),a0
	fmove.s	4(a0),fp0
	fmove.x	fp0,fp4
;				z = (GLdouble)bez_pt[2];
	lea	-$190(a5),a0
	fmove.s	$8(a0),fp0
	fmove.x	fp0,fp3
;				gluProject(x,y,z,model,proj,viewport,&x1,&y1,&z1);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z1 *= z_med;
	fmove.d	-$148(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$148(a5)
;				bezier_curve(pts+indx, bez_pt, (GLfloat)(i+1)/(GLfloat)P, 3,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	3.w
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				x = (GLdouble)bez_pt[0];
	fmove.s	-$190(a5),fp0
	fmove.x	fp0,fp2
;				y = (GLdouble)bez_pt[1];
	lea	-$190(a5),a0
	fmove.s	4(a0),fp0
	fmove.x	fp0,fp4
;				z = (GLdouble)bez_pt[2];
	lea	-$190(a5),a0
	fmove.s	$8(a0),fp0
	fmove.x	fp0,fp3
;				gluProject(x,y,z,model,proj,viewport,&x2,&y2,&z2);
	pea	-$160(a5)
	pea	-$158(a5)
	pea	-$150(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z2 *= z_med;
	fmove.d	-$160(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$160(a5)
;				x = x2-x1;
	fmove.d	-$150(a5),fp2
	fsub.d	-$138(a5),fp2
;				y = y2-y1;
	fmove.d	-$158(a5),fp4
	fsub.d	-$140(a5),fp4
;				z = z2-z1;
	fmove.d	-$160(a5),fp3
	fsub.d	-$148(a5),fp3
;				tmp = sqrt(x*x+y*y+z*z);
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.x	fp4,fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.x	fp3,fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;				x /= tmp;
	fdiv.x	fp0,fp2
;				y /= tmp;
	fdiv.x	fp0,fp4
;				z /= tmp;
	fdiv.x	fp0,fp3
;				tmp = x3*x+y3*y+z3*z-x1*x-y1*y-z1*z;
	fmove.d	-$168(a5),fp0
	fmul.x	fp2,fp0
	fmove.d	-$170(a5),fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.d	-$178(a5),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	-$138(a5),fp1
	fmul.x	fp2,fp1
	fsub.x	fp1,fp0
	fmove.d	-$140(a5),fp1
	fmul.x	fp4,fp1
	fsub.x	fp1,fp0
	fmove.d	-$148(a5),fp1
	fmul.x	fp3,fp1
	fsub.x	fp1,fp0
;				x = x1+x*tmp-x3;
	fmul.x	fp0,fp2
	fadd.d	-$138(a5),fp2
	fsub.d	-$168(a5),fp2
;				y = y1+y*tmp-y3;
	fmul.x	fp0,fp4
	fadd.d	-$140(a5),fp4
	fsub.d	-$170(a5),fp4
;				z = z1+z*tmp-z3;
	fmul.x	fp0,fp3
	fadd.d	-$148(a5),fp3
	fsub.d	-$178(a5),fp3
;				tmp = sqrt(x*x+y*y+z*z);
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.x	fp0,fp2
	fmove.x	fp4,fp0
	fmul.x	fp4,fp0
	fadd.x	fp0,fp2
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp2
	fmove.d	fp2,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;				if(tmp > len)
	fcmp.x	fp7,fp0
	fbole.b	L613
L612
;					len = tmp;
	fmove.d	fp0,fp7
L613
	addq.l	#1,d2
L614
	cmp.l	d3,d2
	blt	L611
L615
;			
	bra	L622
L616
;			for(i=1;
	moveq	#1,d2
	bra	L620
L617
;				bezier_curve(pts+indx, bez_pt, (GLfloat)i/(GLfloat)P, 2,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	2.w
	fmove.l	d2,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				x = (GLdouble)bez_pt[0];
	fmove.s	-$190(a5),fp0
	fmove.x	fp0,fp2
;				y = (GLdouble)bez_pt[1];
	lea	-$190(a5),a0
	fmove.s	4(a0),fp0
	fmove.x	fp0,fp4
;				z = 0.0;
;				gluProject(x,y,z,model,proj,viewport,&x3,&y3,&z3);
	pea	-$178(a5)
	pea	-$170(a5)
	pea	-$168(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	clr.l	-(a7)
	clr.l	-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z3 *= z_med;
	fmove.d	-$178(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$178(a5)
;				bezier_curve(pts+indx, bez_pt, (GLfloat)(i-1)/(GLfloat)P, 2,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	2.w
	move.l	d2,d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				x = (GLdouble)bez_pt[0];
	fmove.s	-$190(a5),fp0
	fmove.x	fp0,fp2
;				y = (GLdouble)bez_pt[1];
	lea	-$190(a5),a0
	fmove.s	4(a0),fp0
	fmove.x	fp0,fp4
;				z = 0.0;
;				gluProject(x,y,z,model,proj,viewport,&x1,&y1,&z1);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	clr.l	-(a7)
	clr.l	-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z1 *= z_med;
	fmove.d	-$148(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$148(a5)
;				bezier_curve(pts+indx, bez_pt, (GLfloat)(i+1)/(GLfloat)P, 2,
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	pea	2.w
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	pea	-$190(a5)
	pea	0(a2,d5.l*4)
	jsr	_bezier_curve
	add.w	#$18,a7
;				x = (GLdouble)bez_pt[0];
	fmove.s	-$190(a5),fp0
	fmove.x	fp0,fp2
;				y = (GLdouble)bez_pt[1];
	lea	-$190(a5),a0
	fmove.s	4(a0),fp0
	fmove.x	fp0,fp4
;				z = 0.0;
;				gluProject(x,y,z,model,proj,viewport,&x2,&y2,&z2);
	pea	-$160(a5)
	pea	-$158(a5)
	pea	-$150(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	clr.l	-(a7)
	clr.l	-(a7)
	fmove.d	fp4,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
;				z2 *= z_med;
	fmove.d	-$160(a5),fp0
	fmul.x	fp5,fp0
	fmove.d	fp0,-$160(a5)
;				x = x2-x1;
	fmove.d	-$150(a5),fp2
	fsub.d	-$138(a5),fp2
;				y = y2-y1;
	fmove.d	-$158(a5),fp4
	fsub.d	-$140(a5),fp4
;				z = z2-z1;
	fmove.d	-$160(a5),fp3
	fsub.d	-$148(a5),fp3
;				tmp = sqrt(x*x+y*y+z*z);
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.x	fp4,fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.x	fp3,fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;				x /= tmp;
	fdiv.x	fp0,fp2
;				y /= tmp;
	fdiv.x	fp0,fp4
;				z /= tmp;
	fdiv.x	fp0,fp3
;				tmp = x3*x+y3*y+z3*z-x1*x-y1*y-z1*z;
	fmove.d	-$168(a5),fp0
	fmul.x	fp2,fp0
	fmove.d	-$170(a5),fp1
	fmul.x	fp4,fp1
	fadd.x	fp1,fp0
	fmove.d	-$178(a5),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.d	-$138(a5),fp1
	fmul.x	fp2,fp1
	fsub.x	fp1,fp0
	fmove.d	-$140(a5),fp1
	fmul.x	fp4,fp1
	fsub.x	fp1,fp0
	fmove.d	-$148(a5),fp1
	fmul.x	fp3,fp1
	fsub.x	fp1,fp0
;				x = x1+x*tmp-x3;
	fmul.x	fp0,fp2
	fadd.d	-$138(a5),fp2
	fsub.d	-$168(a5),fp2
;				y = y1+y*tmp-y3;
	fmul.x	fp0,fp4
	fadd.d	-$140(a5),fp4
	fsub.d	-$170(a5),fp4
;				z = z1+z*tmp-z3;
	fmul.x	fp0,fp3
	fadd.d	-$148(a5),fp3
	fsub.d	-$178(a5),fp3
;				tmp = sqrt(x*x+y*y+z*z);
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.x	fp0,fp2
	fmove.x	fp4,fp0
	fmul.x	fp4,fp0
	fadd.x	fp0,fp2
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp2
	fmove.d	fp2,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;				if(tmp > len)
	fcmp.x	fp7,fp0
	fbole.b	L619
L618
;					len = tmp;
	fmove.d	fp0,fp7
L619
	addq.l	#1,d2
L620
	cmp.l	d3,d2
	blt	L617
L621
;			
L622
;	if(len < tolerance)
	fmove.s	$18(a5),fp0
	fmove.x	fp7,fp1
	fcmp.x	fp0,fp1
	fboge.b	L624
L623
	move.l	d4,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts
L624
	fmove.s	$18(a5),fp0
	fmove.x	fp7,fp1
	fdiv.x	fp0,fp1
	fmove.d	fp1,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
	addq.l	#2,d4
	fmove.l	d4,fp1
	fmul.x	fp1,fp0
	fadd.d	#$.3FF00000.00000000,fp0
	fmove.l	fp0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_calc_sampling_3D:0",CODE


;static GLenum
_calc_sampling_3D
L654	EQU	-$60
	link	a5,#L654
	movem.l	d2-d7/a2-a4,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$10(a5),d5
	move.l	$1C(a5),a3
	move.l	$20(a5),a4
	fmove.s	$C(a5),fp2
L627
;	ufactor_cnt=new_ctrl->s_bezier_cnt;
	move.l	$8(a5),a0
	move.l	$60(a0),-$10(a5)
;	vfactor_cnt=new_ctrl->t_bezier_cnt;
	move.l	$8(a5),a0
	move.l	$64(a0),-$14(a5)
;	if((*ufactors=(GLint *)malloc(sizeof(GLint)*ufactor_cnt*3))
	move.l	-$10(a5),d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	#3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a3,a1
	move.l	d0,(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L629
L628
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L629
;	if((*vfactors=(GLint *)malloc(sizeof(GLint)*vfactor_cnt*3))
	move.l	-$14(a5),d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	#3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a4,a1
	move.l	d0,(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L631
L630
;		free(*ufactors);
	move.l	a3,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L631
;	ctrl=new_ctrl->geom_ctrl;
	move.l	$8(a5),a0
	move.l	(a0),a2
;	offset1=new_ctrl->geom_t_stride*vorder;
	move.l	$8(a5),a0
	move.l	$8(a0),-$18(a5)
	move.l	-$18(a5),d0
	muls.l	$18(a5),d0
	move.l	d0,-$18(a5)
;	offset2=new_ctrl->geom_s_stride*uorder;
	move.l	$8(a5),a0
	move.l	4(a0),d0
	muls.l	$14(a5),d0
	move.l	d0,d7
;	for(j=0;
	moveq	#0,d3
	bra	L641
L632
;		*(*vfactors+j*3+1)=tmp_factor1=calc_factor(ctrl,vorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d5,-(a7)
	move.l	d3,d0
	muls.l	-$18(a5),d0
	move.l	d0,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
	move.l	d0,d4
	move.l	a4,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	d4,4(a0)
;		for(i=1;
	moveq	#1,d2
	bra.b	L636
L633
;			tmp_factor2=calc_factor(ctrl,vorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d5,-(a7)
	move.l	d3,d0
	muls.l	-$18(a5),d0
	move.l	d2,d1
	muls.l	d7,d1
	add.l	d1,d0
	move.l	d0,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
;			if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L635
L634
;				tmp_factor1=tmp_factor2;
	move.l	d0,d4
L635
	addq.l	#1,d2
L636
	cmp.l	-$10(a5),d2
	blt.b	L633
L637
;			j*offset2,offset3,tolerance,dim);
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d5,-(a7)
	move.l	d3,d0
	muls.l	-$18(a5),d0
	muls.l	d7,d2
	add.l	d2,d0
	move.l	$8(a5),a0
	sub.l	4(a0),d0
	move.l	d0,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
	move.l	a4,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	lea	0(a0,d1.l*4),a0
	move.l	d0,$8(a0)
;		if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L639
L638
;			*(*vfactors+j*3)=tmp_factor2;
	move.l	a4,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	move.l	d0,0(a0,d1.l*4)
	bra.b	L640
L639
;			*(*vfactors+j*3)=tmp_factor1;
	move.l	a4,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	move.l	d4,0(a0,d0.l*4)
L640
	addq.l	#1,d3
L641
	cmp.l	-$14(a5),d3
	blt	L632
L642
;	offset3=new_ctrl->geom_s_stride;
	move.l	$8(a5),a0
	move.l	4(a0),-$20(a5)
;	offset2=new_ctrl->geom_s_stride*uorder;
	move.l	$8(a5),a0
	move.l	4(a0),d0
	muls.l	$14(a5),d0
	move.l	d0,d7
;	for(j=0;
	moveq	#0,d3
	bra	L652
L643
;		*(*ufactors+j*3+1)=tmp_factor1=calc_factor(ctrl,uorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	-$20(a5),-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	move.l	d0,-(a7)
	move.l	$14(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
	move.l	d0,d4
	move.l	a3,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	d4,4(a0)
;		for(i=1;
	moveq	#1,d2
	bra.b	L647
L644
;			tmp_factor2=calc_factor(ctrl,uorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	-$20(a5),-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	move.l	d2,d1
	muls.l	-$18(a5),d1
	add.l	d1,d0
	move.l	d0,-(a7)
	move.l	$14(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
;			if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L646
L645
;				tmp_factor1=tmp_factor2;
	move.l	d0,d4
L646
	addq.l	#1,d2
L647
	cmp.l	-$14(a5),d2
	blt.b	L644
L648
;		*(*ufactors+j*3+2)=tmp_factor2=calc_factor(ctrl,uorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	-$20(a5),-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	muls.l	-$18(a5),d2
	add.l	d2,d0
	move.l	$8(a5),a0
	sub.l	$8(a0),d0
	move.l	d0,-(a7)
	move.l	$14(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
	move.l	a3,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	lea	0(a0,d1.l*4),a0
	move.l	d0,$8(a0)
;		if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L650
L649
;			*(*ufactors+j*3)=tmp_factor2;
	move.l	a3,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	move.l	d0,0(a0,d1.l*4)
	bra.b	L651
L650
;			*(*ufactors+j*3)=tmp_factor1;
	move.l	a3,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	move.l	d4,0(a0,d0.l*4)
L651
	addq.l	#1,d3
L652
	cmp.l	-$10(a5),d3
	blt	L643
L653
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_calc_sampling_param_3D:0",CODE


;static GLenum
_calc_sampling_param_3D
L682	EQU	-$60
	link	a5,#L682
	movem.l	d2-d7/a2-a4,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$10(a5),d5
	move.l	$1C(a5),a3
	move.l	$20(a5),a4
	fmove.s	$C(a5),fp2
L655
;	ufactor_cnt=new_ctrl->s_bezier_cnt;
	move.l	$8(a5),a0
	move.l	$60(a0),-$10(a5)
;	vfactor_cnt=new_ctrl->t_bezier_cnt;
	move.l	$8(a5),a0
	move.l	$64(a0),-$14(a5)
;	if((*ufactors=(GLint *)malloc(sizeof(GLint)*ufactor_cnt*3))
	move.l	-$10(a5),d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	#3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a3,a1
	move.l	d0,(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L657
L656
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L657
;	if((*vfactors=(GLint *)malloc(sizeof(GLint)*vfactor_cnt*3))
	move.l	-$14(a5),d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	#3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a4,a1
	move.l	d0,(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L659
L658
;		free(*ufactors);
	move.l	a3,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L659
;	ctrl=new_ctrl->geom_ctrl;
	move.l	$8(a5),a0
	move.l	(a0),a2
;	offset1=new_ctrl->geom_t_stride*vorder;
	move.l	$8(a5),a0
	move.l	$8(a0),-$18(a5)
	move.l	-$18(a5),d0
	muls.l	$18(a5),d0
	move.l	d0,-$18(a5)
;	offset2=new_ctrl->geom_s_stride*uorder;
	move.l	$8(a5),a0
	move.l	4(a0),d0
	muls.l	$14(a5),d0
	move.l	d0,d7
;	for(j=0;
	moveq	#0,d3
	bra	L669
L660
;		*(*vfactors+j*3+1)=tmp_factor1=calc_parametric_factor(ctrl,vorde
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d5,-(a7)
	move.l	d3,d0
	muls.l	-$18(a5),d0
	move.l	d0,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
	move.l	d0,d4
	move.l	a4,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	d4,4(a0)
;		for(i=1;
	moveq	#1,d2
	bra.b	L664
L661
;			tmp_factor2=calc_parametric_factor(ctrl,vorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d5,-(a7)
	move.l	d3,d0
	muls.l	-$18(a5),d0
	move.l	d2,d1
	muls.l	d7,d1
	add.l	d1,d0
	move.l	d0,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
;			if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L663
L662
;				tmp_factor1=tmp_factor2;
	move.l	d0,d4
L663
	addq.l	#1,d2
L664
	cmp.l	-$10(a5),d2
	blt.b	L661
L665
;		*(*vfactors+j*3+2)=tmp_factor2=calc_parametric_factor(ctrl,vorde
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d5,-(a7)
	move.l	d3,d0
	muls.l	-$18(a5),d0
	muls.l	d7,d2
	add.l	d2,d0
	move.l	$8(a5),a0
	sub.l	4(a0),d0
	move.l	d0,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
	move.l	a4,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	lea	0(a0,d1.l*4),a0
	move.l	d0,$8(a0)
;		if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L667
L666
;			*(*vfactors+j*3)=tmp_factor2;
	move.l	a4,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	move.l	d0,0(a0,d1.l*4)
	bra.b	L668
L667
;			*(*vfactors+j*3)=tmp_factor1;
	move.l	a4,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	move.l	d4,0(a0,d0.l*4)
L668
	addq.l	#1,d3
L669
	cmp.l	-$14(a5),d3
	blt	L660
L670
;	offset3=new_ctrl->geom_s_stride;
	move.l	$8(a5),a0
	move.l	4(a0),-$20(a5)
;	offset2=new_ctrl->geom_s_stride*uorder;
	move.l	$8(a5),a0
	move.l	4(a0),d0
	muls.l	$14(a5),d0
	move.l	d0,d7
;	for(j=0;
	moveq	#0,d3
	bra	L680
L671
;		*(*ufactors+j*3+1)=tmp_factor1=calc_parametric_factor(ctrl,uorde
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	-$20(a5),-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	move.l	d0,-(a7)
	move.l	$14(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
	move.l	d0,d4
	move.l	a3,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	d4,4(a0)
;		for(i=1;
	moveq	#1,d2
	bra.b	L675
L672
;			tmp_factor2=calc_parametric_factor(ctrl,uorder,
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	-$20(a5),-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	move.l	d2,d1
	muls.l	-$18(a5),d1
	add.l	d1,d0
	move.l	d0,-(a7)
	move.l	$14(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
;			if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L674
L673
;				tmp_factor1=tmp_factor2;
	move.l	d0,d4
L674
	addq.l	#1,d2
L675
	cmp.l	-$14(a5),d2
	blt.b	L672
L676
;		*(*ufactors+j*3+2)=tmp_factor2=calc_parametric_factor(ctrl,uorde
	move.l	d5,-(a7)
	fmove.s	fp2,-(a7)
	move.l	-$20(a5),-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	muls.l	-$18(a5),d2
	add.l	d2,d0
	move.l	$8(a5),a0
	sub.l	$8(a0),d0
	move.l	d0,-(a7)
	move.l	$14(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
	move.l	a3,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	lea	0(a0,d1.l*4),a0
	move.l	d0,$8(a0)
;		if(tmp_factor2>tmp_factor1)
	cmp.l	d4,d0
	ble.b	L678
L677
;			*(*ufactors+j*3)=tmp_factor2;
	move.l	a3,a1
	move.l	d3,d1
	muls.l	#3,d1
	move.l	(a1),a0
	move.l	d0,0(a0,d1.l*4)
	bra.b	L679
L678
;			*(*ufactors+j*3)=tmp_factor1;
	move.l	a3,a1
	move.l	d3,d0
	muls.l	#3,d0
	move.l	(a1),a0
	move.l	d4,0(a0,d0.l*4)
L679
	addq.l	#1,d3
L680
	cmp.l	-$10(a5),d3
	blt	L671
L681
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_calc_sampling_2D:0",CODE


;static GLenum
_calc_sampling_2D
	movem.l	d2-d6/a2/a3,-(a7)
	fmovem.x fp2,-(a7)
	movem.l	$30(a7),d0/d5
	movem.l	$3C(a7),d3/a2
	move.l	$2C(a7),a3
	fmove.s	$38(a7),fp2
L683
;	factor_cnt=cnt/order;
	move.l	d0,d4
	divsl.l	d5,d4
;	if((*factors=(GLint *)malloc(sizeof(GLint)*factor_cnt))==NULL)
	move.l	d4,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L685
L684
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d6/a2/a3
	rts
L685
;	offset=order*dim;
	move.l	d5,d0
	muls.l	d3,d0
	move.l	d0,d6
;	for(i=0;
	moveq	#0,d2
	bra.b	L690
L686
;		tmp_factor=calc_factor(ctrl,order,i*offset,dim,tolerance,dim);
	move.l	d3,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d3,-(a7)
	move.l	d2,d0
	muls.l	d6,d0
	move.l	d0,-(a7)
	move.l	d5,-(a7)
	move.l	a3,-(a7)
	jsr	_calc_factor
	add.w	#$18,a7
;		if(tmp_factor == 0)
	tst.l	d0
	bne.b	L688
L687
;			(*factors)[i]=1;
	move.l	(a2),a0
	move.l	#1,0(a0,d2.l*4)
	bra.b	L689
L688
;			(*factors)[i]=tmp_factor;
	move.l	(a2),a0
	move.l	d0,0(a0,d2.l*4)
L689
	addq.l	#1,d2
L690
	cmp.l	d4,d2
	blt.b	L686
L691
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d6/a2/a3
	rts

	SECTION "_set_sampling_and_culling:0",CODE


;static void
_set_sampling_and_culling
L698	EQU	-$14
	link	a5,#L698
	move.l	a2,-(a7)
	move.l	$8(a5),a2
L692
;	if(nobj->auto_load_matrix==GL_FALSE)
	tst.b	$12(a2)
	bne	L697
L693
;		glPushAttrib( (GLbitfield) (GL_VIEWPORT_BIT | GL_TRANSFORM_BIT));
	pea	$1800.w
	jsr	_glPushAttrib
	addq.w	#4,a7
;		for(i=0;
	moveq	#0,d0
	bra.b	L695
L694
;			m[i]=nobj->sampling_matrices.viewport[i];
	lea	$94(a2),a0
	fmove.s	0(a0,d0.l*4),fp0
	lea	-$14(a5),a0
	fmove.s	fp0,0(a0,d0.l*4)
	addq.l	#1,d0
L695
	cmp.l	#4,d0
	blt.b	L694
L696
;		glViewport(m[0],m[1],m[2],m[3]);
	lea	-$14(a5),a0
	fmove.s	$C(a0),fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	lea	-$14(a5),a0
	fmove.s	$8(a0),fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	lea	-$14(a5),a0
	fmove.s	4(a0),fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	fmove.s	-$14(a5),fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	jsr	_glViewport
	add.w	#$10,a7
;		glMatrixMode(GL_PROJECTION);
	pea	$1701.w
	jsr	_glMatrixMode
	addq.w	#4,a7
;		glPushMatrix();
	jsr	_glPushMatrix
;		glLoadMatrixf(nobj->sampling_matrices.proj);
	pea	$54(a2)
	jsr	_glLoadMatrixf
	addq.w	#4,a7
;		glMatrixMode(GL_MODELVIEW);
	pea	$1700.w
	jsr	_glMatrixMode
	addq.w	#4,a7
;		glPushMatrix();
	jsr	_glPushMatrix
;		glLoadMatrixf(nobj->sampling_matrices.model);
	pea	$14(a2)
	jsr	_glLoadMatrixf
	addq.w	#4,a7
L697
	move.l	(a7)+,a2
	unlk	a5
	rts

	SECTION "_revert_sampling_and_culling:0",CODE


;static void
_revert_sampling_and_culling
	move.l	4(a7),a0
L699
;	if(nobj->auto_load_matrix==GL_FALSE)
	tst.b	$12(a0)
	bne.b	L701
L700
;		glMatrixMode(GL_MODELVIEW);
	pea	$1700.w
	jsr	_glMatrixMode
	addq.w	#4,a7
;		glPopMatrix();
	jsr	_glPopMatrix
;		glMatrixMode(GL_PROJECTION);
	pea	$1701.w
	jsr	_glMatrixMode
	addq.w	#4,a7
;		glPopMatrix();
	jsr	_glPopMatrix
;		glPopAttrib();
	jsr	_glPopAttrib
L701
	rts

	SECTION "_glu_do_sampling_3D:0",CODE


;GLenum
	XDEF	_glu_do_sampling_3D
_glu_do_sampling_3D
L705	EQU	-$8
	link	a5,#L705
	movem.l	d2/a2-a4,-(a7)
	move.l	$8(a5),a2
	move.l	$14(a5),a3
	move.l	$10(a5),a4
L702
;	*sfactors=NULL;
	move.l	a4,a1
	clr.l	(a1)
;	*tfactors=NULL;
	move.l	a3,a1
	clr.l	(a1)
;	dim=nobj->surface.geom.dim;
	move.l	$DC(a2),d2
;	set_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_set_sampling_and_culling
	addq.w	#4,a7
;	if((err=calc_sampling_3D(new_ctrl,nobj->sampling_tolerance,dim,
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	move.l	$D8(a2),-(a7)
	move.l	$D4(a2),-(a7)
	move.l	d2,-(a7)
	move.l	$A8(a2),-(a7)
	move.l	$C(a5),-(a7)
	jsr	_calc_sampling_3D
	add.w	#$1C,a7
	move.l	d0,d2
	cmp.l	#$18707,d2
	bne.b	L704
L703
;		revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
;		call_user_error(nobj,err);
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L704
;	revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts

	SECTION "_glu_do_sampling_uv:0",CODE


;GLenum
	XDEF	_glu_do_sampling_uv
_glu_do_sampling_uv
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$28(a7),a0/a2/a3
	move.l	$24(a7),a4
L706
;	s_cnt = new_ctrl->s_bezier_cnt;
	move.l	$60(a0),d5
;	t_cnt = new_ctrl->t_bezier_cnt;
	move.l	$64(a0),d4
;	*sfactors=NULL;
	clr.l	(a2)
;	*tfactors=NULL;
	move.l	a3,a1
	clr.l	(a1)
;	if((*sfactors=(GLint *)malloc(sizeof(GLint)*s_cnt*3))
	move.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	#3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L708
L707
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d6/a2-a4
	rts
L708
;	if((*tfactors=(GLint *)malloc(sizeof(GLint)*t_cnt*3))
	move.l	d4,d0
	moveq	#2,d1
	asl.l	d1,d0
	mulu.l	#3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	a3,a1
	move.l	d0,(a1)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L710
L709
;		free(*sfactors);
	move.l	(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d6/a2-a4
	rts
L710
;	u_steps = nobj->u_step;
	move.l	a4,a0
	move.l	$B0(a0),d2
;	v_steps = nobj->v_step;
	move.l	a4,a0
	move.l	$B4(a0),d1
;	for(i=0;
	moveq	#0,d0
	bra.b	L712
L711
;		*(*sfactors+i*3) = u_steps;
	move.l	d0,d3
	muls.l	#3,d3
	move.l	(a2),a0
	move.l	d2,0(a0,d3.l*4)
;		*(*sfactors+i*3+1) = u_steps;
	move.l	d0,d3
	muls.l	#3,d3
	move.l	(a2),a0
	lea	0(a0,d3.l*4),a0
	move.l	d2,4(a0)
;		*(*sfactors+i*3+2) = u_steps;
	move.l	d0,d3
	muls.l	#3,d3
	move.l	(a2),a0
	lea	0(a0,d3.l*4),a0
	move.l	d2,$8(a0)
	addq.l	#1,d0
L712
	cmp.l	d5,d0
	blt.b	L711
L713
;	for(i=0;
	moveq	#0,d0
	bra.b	L715
L714
;		*(*tfactors+i*3) = v_steps;
	move.l	a3,a1
	move.l	d0,d2
	muls.l	#3,d2
	move.l	(a1),a0
	move.l	d1,0(a0,d2.l*4)
;		*(*tfactors+i*3+1) = v_steps;
	move.l	a3,a1
	move.l	d0,d2
	muls.l	#3,d2
	move.l	(a1),a0
	lea	0(a0,d2.l*4),a0
	move.l	d1,4(a0)
;		*(*tfactors+i*3+2) = v_steps;
	move.l	a3,a1
	move.l	d0,d2
	muls.l	#3,d2
	move.l	(a1),a0
	lea	0(a0,d2.l*4),a0
	move.l	d1,$8(a0)
	addq.l	#1,d0
L715
	cmp.l	d4,d0
	blt.b	L714
L716
	moveq	#0,d0
	movem.l	(a7)+,d2-d6/a2-a4
	rts

	SECTION "_glu_do_sampling_param_3D:0",CODE


;GLenum
	XDEF	_glu_do_sampling_param_3D
_glu_do_sampling_param_3D
L720	EQU	-$8
	link	a5,#L720
	movem.l	d2/a2-a4,-(a7)
	move.l	$8(a5),a2
	move.l	$14(a5),a3
	move.l	$10(a5),a4
L717
;	*sfactors=NULL;
	move.l	a4,a1
	clr.l	(a1)
;	*tfactors=NULL;
	move.l	a3,a1
	clr.l	(a1)
;	dim=nobj->surface.geom.dim;
	move.l	$DC(a2),d2
;	set_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_set_sampling_and_culling
	addq.w	#4,a7
;	if((err=calc_sampling_param_3D(new_ctrl,nobj->parametric_tolerance
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	move.l	$D8(a2),-(a7)
	move.l	$D4(a2),-(a7)
	move.l	d2,-(a7)
	move.l	$AC(a2),-(a7)
	move.l	$C(a5),-(a7)
	jsr	_calc_sampling_param_3D
	add.w	#$1C,a7
	move.l	d0,d2
	cmp.l	#$18707,d2
	bne.b	L719
L718
;		revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
;		call_user_error(nobj,err);
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L719
;	revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts

	SECTION "_glu_do_sampling_2D:0",CODE


;GLenum
	XDEF	_glu_do_sampling_2D
_glu_do_sampling_2D
	movem.l	d2-d4/a2-a4,-(a7)
	movem.l	$24(a7),d2-d4/a4
	movem.l	$1C(a7),a2/a3
L721
;	set_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_set_sampling_and_culling
	addq.w	#4,a7
;	err=calc_sampling_2D(ctrl,cnt,order,nobj->sampling_tolerance,dim,
	move.l	a4,-(a7)
	move.l	d4,-(a7)
	move.l	$A8(a2),-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	a3,-(a7)
	jsr	_calc_sampling_2D
	add.w	#$18,a7
	move.l	d0,d2
;	revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	move.l	d2,d0
	movem.l	(a7)+,d2-d4/a2-a4
	rts

	SECTION "_glu_do_sampling_u:0",CODE


;GLenum
	XDEF	_glu_do_sampling_u
_glu_do_sampling_u
	movem.l	d2/d3/a2/a3,-(a7)
	move.l	$20(a7),d0
	move.l	$1C(a7),d2
	move.l	$28(a7),a2
	move.l	$14(a7),a3
L722
;	cnt /= order;
	divsl.l	d0,d2
;	if((*factors=(GLint *)malloc(sizeof(GLint)*cnt))
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L724
L723
	move.l	#$18A26,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts
L724
;	u_steps = nobj->u_step;
	move.l	a3,a0
	move.l	$B0(a0),d1
;	for(i=0;
	moveq	#0,d0
	bra.b	L726
L725
;		(*factors)[i] = u_steps;
	move.l	(a2),a0
	move.l	d1,0(a0,d0.l*4)
	addq.l	#1,d0
L726
	cmp.l	d2,d0
	blt.b	L725
L727
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts

	SECTION "_glu_do_sampling_param_2D:0",CODE


;GLenum
	XDEF	_glu_do_sampling_param_2D
_glu_do_sampling_param_2D
	movem.l	d2-d5/a2-a4,-(a7)
	fmovem.x fp2,-(a7)
	movem.l	$3C(a7),d3/a2
	movem.l	$34(a7),d4/d5
	move.l	$30(a7),a3
	move.l	$2C(a7),a4
L728
;	set_sampling_and_culling(nobj);
	move.l	a4,-(a7)
	jsr	_set_sampling_and_culling
	addq.w	#4,a7
;	tolerance = nobj->parametric_tolerance;
	move.l	a4,a0
	fmove.s	$AC(a0),fp2
;	cnt /= order;
	divsl.l	d5,d4
;	if((*factors=(GLint *)malloc(sizeof(GLint)*cnt))
	move.l	d4,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L730
L729
;		revert_sampling_and_culling(nobj);
	move.l	a4,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d5/a2-a4
	rts
L730
;	u_steps = nobj->u_step;
;	for(i=0;
	moveq	#0,d2
	bra.b	L732
L731
;		(*factors)[i] = calc_parametric_factor(ctrl,order,0,
	move.l	d3,-(a7)
	fmove.s	fp2,-(a7)
	move.l	d3,-(a7)
	clr.l	-(a7)
	move.l	d5,-(a7)
	move.l	a3,-(a7)
	jsr	_calc_parametric_factor
	add.w	#$18,a7
	move.l	(a2),a0
	move.l	d0,0(a0,d2.l*4)
	addq.l	#1,d2
L732
	cmp.l	d4,d2
	blt.b	L731
L733
;	revert_sampling_and_culling(nobj);
	move.l	a4,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d5/a2-a4
	rts

	SECTION "_glu_do_sampling_crv:0",CODE


;lling_test_3D(GLU
	XDEF	_glu_do_sampling_crv
_glu_do_sampling_crv
	movem.l	d2/d3/a2/a3,-(a7)
	movem.l	$1C(a7),d0-d2/a0
	move.l	$18(a7),a1
	move.l	$14(a7),a2
L734
;	*factors=NULL;
	clr.l	(a0)
;	switch(nobj->sampling_method)
	move.l	$A4(a2),d3
	cmp.l	#$18778,d3
	beq	L741
	bgt.b	L746
	cmp.l	#$18777,d3
	beq.b	L735
	bra	L744
L746
	cmp.l	#$18779,d3
	beq.b	L738
	bra	L744
;		
L735
;			if((err=glu_do_sampling_2D(nobj,ctrl,cnt,order,dim,factors))!=
	move.l	a0,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	a1,-(a7)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_2D
	add.w	#$18,a7
	tst.l	d0
	beq.b	L737
L736
;				call_user_error(nobj,err);
	move.l	d0,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts
L737
;			
	bra.b	L745
L738
;			if((err=glu_do_sampling_u(nobj,ctrl,cnt,order,dim,factors))!=
	move.l	a0,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	a1,-(a7)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_u
	add.w	#$18,a7
	tst.l	d0
	beq.b	L740
L739
;				call_user_error(nobj,err);
	move.l	d0,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts
L740
;			
	bra.b	L745
L741
;			if((err=glu_do_sampling_param_2D(nobj,ctrl,cnt,order,dim,facto
	move.l	a0,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	a1,-(a7)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_param_2D
	add.w	#$18,a7
	tst.l	d0
	beq.b	L743
L742
;				call_user_error(nobj,err);
	move.l	d0,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts
L743
;			
	bra.b	L745
L744
;			abort();
	jsr	_abort
L745
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a2/a3
	rts

	SECTION "_point_in_viewport:0",CODE


;static GLboolean
_point_in_viewport
L756	EQU	-$148
	link	a5,#L756
	movem.l	d2/a2,-(a7)
	fmovem.x fp2/fp3,-(a7)
	move.l	$C(a5),d2
	move.l	$8(a5),a2
L747
;	glGetDoublev(GL_MODELVIEW_MATRIX,model);
	pea	-$80(a5)
	pea	$BA6.w
	jsr	_glGetDoublev
	addq.w	#$8,a7
;	glGetDoublev(GL_PROJECTION_MATRIX,proj);
	pea	-$100(a5)
	pea	$BA7.w
	jsr	_glGetDoublev
	addq.w	#$8,a7
;	glGetIntegerv(GL_VIEWPORT,viewport);
	pea	-$110(a5)
	pea	$BA2.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;	if(dim==3)
	cmp.l	#3,d2
	bne.b	L749
L748
;		x=(GLdouble)pt[0];
	fmove.s	(a2),fp0
	fmove.x	fp0,fp2
;		y=(GLdouble)pt[1];
	fmove.s	4(a2),fp0
	fmove.x	fp0,fp1
;		z=(GLdouble)pt[2];
	fmove.s	$8(a2),fp0
;		gluProject(x,y,z,model,proj,viewport,&winx,&winy,&winz);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp0,-(a7)
	fmove.d	fp1,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
	bra.b	L750
L749
;		w=(GLdouble)pt[3];
	fmove.s	$C(a2),fp0
	fmove.x	fp0,fp3
;		x=(GLdouble)pt[0]/w;
	fmove.s	(a2),fp0
	fmove.x	fp0,fp2
	fdiv.x	fp3,fp2
;		y=(GLdouble)pt[1]/w;
	fmove.s	4(a2),fp0
	fmove.x	fp0,fp1
	fdiv.x	fp3,fp1
;		z=(GLdouble)pt[2]/w;
	fmove.s	$8(a2),fp0
	fdiv.x	fp3,fp0
;		gluProject(x,y,z,model,proj,viewport,&winx,&winy,&winz);
	pea	-$148(a5)
	pea	-$140(a5)
	pea	-$138(a5)
	pea	-$110(a5)
	pea	-$100(a5)
	pea	-$80(a5)
	fmove.d	fp0,-(a7)
	fmove.d	fp1,-(a7)
	fmove.d	fp2,-(a7)
	jsr	_gluProject
	add.w	#$30,a7
L750
;	if((GLint)winx >= viewport[0] && (GLint)winx < viewport[2] &&
	fmove.d	-$138(a5),fp0
	fmove.l	fp0,d1
	cmp.l	-$110(a5),d1
	blt.b	L755
L751
	fmove.d	-$138(a5),fp0
	fmove.l	fp0,d1
	lea	-$110(a5),a0
	cmp.l	$8(a0),d1
	bge.b	L755
L752
	fmove.d	-$140(a5),fp0
	fmove.l	fp0,d1
	lea	-$110(a5),a0
	cmp.l	4(a0),d1
	blt.b	L755
L753
	fmove.d	-$140(a5),fp0
	fmove.l	fp0,d1
	lea	-$110(a5),a0
	cmp.l	$C(a0),d1
	bge.b	L755
L754
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2
	unlk	a5
	rts
L755
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/a2
	unlk	a5
	rts

	SECTION "_fine_culling_test_3D:0",CODE


;GLboolean
	XDEF	_fine_culling_test_3D
_fine_culling_test_3D
L778	EQU	-$8
	link	a5,#L778
	movem.l	d2-d7/a2/a3,-(a7)
	move.l	$20(a5),d4
	move.l	$14(a5),d5
	move.l	$1C(a5),d6
	move.l	$18(a5),d7
	move.l	$8(a5),a2
	move.l	$C(a5),a3
L757
;	if(nobj->culling==GL_FALSE)
	tst.b	(a2)
	bne.b	L759
L758
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L759
;	set_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_set_sampling_and_culling
	addq.w	#4,a7
;	if(dim==3)
	cmp.l	#3,d4
	bne.b	L769
L760
;		for(i=0;
	moveq	#0,d3
	bra.b	L767
L761
;			for(j=0;
	moveq	#0,d2
	bra.b	L765
L762
;				if(point_in_viewport(pts+i*s_stride+j*t_stride,dim))
	move.l	d4,-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	lea	0(a3,d0.l*4),a0
	move.l	d2,d0
	muls.l	d6,d0
	pea	0(a0,d0.l*4)
	jsr	_point_in_viewport
	addq.w	#$8,a7
	tst.b	d0
	beq.b	L764
L763
;					revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L764
	addq.l	#1,d2
L765
	cmp.l	d5,d2
	blt.b	L762
L766
	addq.l	#1,d3
L767
	cmp.l	$10(a5),d3
	blt.b	L761
L768
;					return 
	bra.b	L777
L769
;		for(i=0;
	moveq	#0,d3
	bra.b	L776
L770
;			for(j=0;
	moveq	#0,d2
	bra.b	L774
L771
;				if(point_in_viewport(pts+i*s_stride+j*t_stride,dim))
	move.l	d4,-(a7)
	move.l	d3,d0
	muls.l	d7,d0
	lea	0(a3,d0.l*4),a0
	move.l	d2,d0
	muls.l	d6,d0
	pea	0(a0,d0.l*4)
	jsr	_point_in_viewport
	addq.w	#$8,a7
	tst.b	d0
	beq.b	L773
L772
;					revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L773
	addq.l	#1,d2
L774
	cmp.l	d5,d2
	blt.b	L771
L775
	addq.l	#1,d3
L776
	cmp.l	$10(a5),d3
	blt.b	L770
L777
;	revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

	SECTION "_fine_culling_test_2D:0",CODE


;GLboolean
	XDEF	_fine_culling_test_2D
_fine_culling_test_2D
	movem.l	d2-d5/a2/a3,-(a7)
	move.l	$2C(a7),d3
	move.l	$24(a7),d4
	move.l	$28(a7),d5
	move.l	$1C(a7),a2
	move.l	$20(a7),a3
L779
;	if(nobj->culling==GL_FALSE)
	tst.b	(a2)
	bne.b	L781
L780
	moveq	#0,d0
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L781
;	set_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_set_sampling_and_culling
	addq.w	#4,a7
;	if(dim==3)
	cmp.l	#3,d3
	bne.b	L788
L782
;		for(i=0;
	moveq	#0,d2
	bra.b	L786
L783
;			if(point_in_viewport(pts+i*stride,dim))
	move.l	d3,-(a7)
	move.l	d2,d0
	muls.l	d5,d0
	pea	0(a3,d0.l*4)
	jsr	_point_in_viewport
	addq.w	#$8,a7
	tst.b	d0
	beq.b	L785
L784
;				revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L785
	addq.l	#1,d2
L786
	cmp.l	d4,d2
	blt.b	L783
L787
;				return 
	bra.b	L793
L788
;		for(i=0;
	moveq	#0,d2
	bra.b	L792
L789
;			if(point_in_viewport(pts+i*stride,dim))
	move.l	d3,-(a7)
	move.l	d2,d0
	muls.l	d5,d0
	pea	0(a3,d0.l*4)
	jsr	_point_in_viewport
	addq.w	#$8,a7
	tst.b	d0
	beq.b	L791
L790
;				revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L791
	addq.l	#1,d2
L792
	cmp.l	d4,d2
	blt.b	L789
L793
;	revert_sampling_and_culling(nobj);
	move.l	a2,-(a7)
	jsr	_revert_sampling_and_culling
	addq.w	#4,a7
	moveq	#1,d0
	movem.l	(a7)+,d2-d5/a2/a3
	rts

	END
