
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/nurbssrf.c
	mc68030
	mc68881
	XREF	_free_unified_knots
	XREF	_select_knot_working_range
	XREF	_fine_culling_test_3D
	XREF	_glu_do_sampling_param_3D
	XREF	_glu_do_sampling_uv
	XREF	_glu_do_sampling_3D
	XREF	_calc_new_ctrl_pts
	XREF	_calc_alphas
	XREF	_explode_knot
	XREF	_test_knot
	XREF	_call_user_error
	XREF	_glEvalMesh2
	XREF	_glEvalPoint2
	XREF	_glMapGrid2f
	XREF	_glEvalCoord2f
	XREF	_glMap2f
	XREF	_glEnd
	XREF	_glBegin
	XREF	_glGetIntegerv
	XREF	_glEnable
	XREF	_glFrontFace
	XREF	_memcpy
	XREF	_abort
	XREF	_malloc
	XREF	_free
	XREF	_abs
	XREF	_fabs__r

	SECTION "_get_surface_dim:0",CODE


;static int
_get_surface_dim
	move.l	4(a7),d0
L272
;	switch(type)
	sub.l	#$DB0,d0
	cmp.l	#$8,d0
	bhi.b	L282
	move.l	L283(pc,d0.l*4),a0
	jmp	(a0)
L283
	dc.l	L276
	dc.l	L275
	dc.l	L277
	dc.l	L278
	dc.l	L279
	dc.l	L280
	dc.l	L281
	dc.l	L273
	dc.l	L274
;		
L273
	moveq	#3,d0
	rts
L274
	moveq	#4,d0
	rts
L275
	moveq	#1,d0
	rts
L276
	moveq	#4,d0
	rts
L277
	moveq	#3,d0
	rts
L278
	moveq	#1,d0
	rts
L279
	moveq	#2,d0
	rts
L280
	moveq	#3,d0
	rts
L281
	moveq	#4,d0
	rts
L282
;                default:  abort();
	jsr	_abort
	moveq	#0,d0
	rts

	SECTION "_test_nurbs_surface:0",CODE

	rts

;static GLenum
_test_nurbs_surface
L309	EQU	-$8
	link	a5,#L309
	movem.l	d2/a2/a3,-(a7)
	move.l	$C(a5),a2
	move.l	$8(a5),a3
L284
;	if(attrib->sorder < 0 || attrib->torder < 0)
	tst.l	$1C(a2)
	bmi.b	L286
L285
	tst.l	$20(a2)
	bpl.b	L287
L286
;		call_user_error(nobj,GLU_INVALID_VALUE);
	move.l	#$18A25,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L287
;	glGetIntegerv(GL_MAX_EVAL_ORDER,&tmp_int);
	pea	-$8(a5)
	pea	$D30.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;	if(attrib->sorder > tmp_int || attrib->sorder < 2)
	move.l	$1C(a2),d0
	cmp.l	-$8(a5),d0
	bgt.b	L289
L288
	move.l	$1C(a2),d0
	cmp.l	#2,d0
	bge.b	L290
L289
;		call_user_error(nobj,GLU_NURBS_ERROR1);
	move.l	#$1879B,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L290
;	if(attrib->torder > tmp_int || attrib->torder < 2)
	move.l	$20(a2),d0
	cmp.l	-$8(a5),d0
	bgt.b	L292
L291
	move.l	$20(a2),d0
	cmp.l	#2,d0
	bge.b	L293
L292
;		call_user_error(nobj,GLU_NURBS_ERROR1);
	move.l	#$1879B,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L293
;	if(attrib->sknot_count < attrib->sorder +2)
	move.l	$1C(a2),d0
	addq.l	#2,d0
	move.l	(a2),d1
	cmp.l	d0,d1
	bge.b	L295
L294
;		call_user_error(nobj,GLU_NURBS_ERROR2);
	move.l	#$1879C,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L295
;	if(attrib->tknot_count < attrib->torder +2)
	move.l	$20(a2),d0
	addq.l	#2,d0
	move.l	$8(a2),d1
	cmp.l	d0,d1
	bge.b	L297
L296
;		call_user_error(nobj,GLU_NURBS_ERROR2);
	move.l	#$1879C,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L297
;	if(attrib->s_stride < 0 || attrib->t_stride < 0)
	tst.l	$10(a2)
	bmi.b	L299
L298
	tst.l	$14(a2)
	bpl.b	L300
L299
;		call_user_error(nobj,GLU_NURBS_ERROR34);
	move.l	#$187BC,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L300
;	if(attrib->sknot==NULL || attrib->tknot==NULL || attrib->ctrlarray
	move.l	4(a2),a0
	cmp.w	#0,a0
	beq.b	L303
L301
	move.l	$C(a2),a0
	cmp.w	#0,a0
	beq.b	L303
L302
	move.l	$18(a2),a0
	cmp.w	#0,a0
	bne.b	L304
L303
;		call_user_error(nobj,GLU_NURBS_ERROR36);
	move.l	#$187BE,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L304
;	if((err=test_knot(attrib->tknot_count,attrib->tknot,attrib->torder)
	move.l	$20(a2),-(a7)
	move.l	$C(a2),-(a7)
	move.l	$8(a2),-(a7)
	jsr	_test_knot
	add.w	#$C,a7
	tst.l	d0
	beq.b	L306
L305
;		call_user_error(nobj,err);
	move.l	d0,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L306
;	if((err=test_knot(attrib->sknot_count,attrib->sknot,attrib->sorder)
	move.l	$1C(a2),-(a7)
	move.l	4(a2),-(a7)
	move.l	(a2),-(a7)
	jsr	_test_knot
	add.w	#$C,a7
	tst.l	d0
	beq.b	L308
L307
;		call_user_error(nobj,err);
	move.l	d0,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L308
	moveq	#0,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts

	SECTION "_test_nurbs_surfaces:0",CODE


;static GLenum
_test_nurbs_surfaces
	move.l	a2,-(a7)
	move.l	$8(a7),a2
L310
;	if(test_nurbs_surface(nobj,&(nobj->surface.geom))!=GLU_NO_ERROR)
	pea	$B8(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_surface
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L312
L311
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L312
;	if(nobj->surface.color.type!=GLU_INVALID_ENUM)
	move.l	$10C(a2),d0
	cmp.l	#$18A24,d0
	beq.b	L315
L313
;		if(test_nurbs_surface(nobj,&(nobj->surface.color))!=GLU_NO_ERROR)
	pea	$E4(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_surface
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L315
L314
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L315
;	if(nobj->surface.normal.type!=GLU_INVALID_ENUM)
	move.l	$164(a2),d0
	cmp.l	#$18A24,d0
	beq.b	L318
L316
;		if(test_nurbs_surface(nobj,&(nobj->surface.normal))!=GLU_NO_ERRO
	pea	$13C(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_surface
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L318
L317
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L318
;	if(nobj->surface.texture.type!=GLU_INVALID_ENUM)
	move.l	$138(a2),d0
	cmp.l	#$18A24,d0
	beq.b	L321
L319
;		if(test_nurbs_surface(nobj,&(nobj->surface.texture))!=GLU_NO_ERR
	pea	$110(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_surface
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L321
L320
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L321
	moveq	#0,d0
	move.l	(a7)+,a2
	rts

	SECTION "_convert_surf:0",CODE


;static GLenum
_convert_surf
L390	EQU	-$A8
	link	a5,#L390
	movem.l	d2-d5/a2-a4,-(a7)
	move.l	$14(a5),a4
L322
;	if((s_knot->unified_knot !=NULL && s_knot->unified_nknots==0) || 
	move.l	$8(a5),a1
	move.l	$8(a1),a0
	cmp.w	#0,a0
	beq.b	L324
L323
	move.l	$8(a5),a0
	tst.l	$C(a0)
	beq.b	L326
L324
	move.l	$C(a5),a1
	move.l	$8(a1),a0
	cmp.w	#0,a0
	beq.b	L331
L325
	move.l	$C(a5),a0
	tst.l	$C(a0)
	bne.b	L331
L326
;		if(s_knot->unified_knot)
	move.l	$8(a5),a1
	tst.l	$8(a1)
	beq.b	L328
L327
;			free(s_knot->unified_knot);
	move.l	$8(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;			s_knot->unified_knot=NULL;
	move.l	$8(a5),a1
	clr.l	$8(a1)
L328
;		if(t_knot->unified_knot)
	move.l	$C(a5),a1
	tst.l	$8(a1)
	beq.b	L330
L329
;			free(t_knot->unified_knot);
	move.l	$C(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;			t_knot->unified_knot=NULL;
	move.l	$C(a5),a1
	clr.l	$8(a1)
L330
;		*s_n_ctrl=0;
	move.l	$18(a5),a0
	clr.l	(a0)
;		*t_n_ctrl=0;
	move.l	$1C(a5),a0
	clr.l	(a0)
	moveq	#0,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L331
;	t_cnt=attrib->tknot_count-attrib->torder;
	move.l	$10(a5),a0
	move.l	$8(a0),d5
	move.l	$10(a5),a0
	sub.l	$20(a0),d5
;	s_cnt=attrib->sknot_count-attrib->sorder;
;	if((tmp_ctrl=(GLfloat **)malloc(sizeof(GLfloat *)*t_cnt))==NULL)
	move.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
	cmp.w	#0,a2
	bne.b	L333
L332
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L333
;	if((err=explode_knot(s_knot))!=GLU_NO_ERROR)
	move.l	$8(a5),-(a7)
	jsr	_explode_knot
	addq.w	#4,a7
	move.l	d0,d3
	beq.b	L337
L334
;		free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;		if(s_knot->unified_knot)
	move.l	$8(a5),a1
	tst.l	$8(a1)
	beq.b	L336
L335
;			free(s_knot->unified_knot);
	move.l	$8(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;			s_knot->unified_knot=NULL;
	move.l	$8(a5),a1
	clr.l	$8(a1)
L336
	move.l	d3,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L337
;	if(s_knot->unified_knot)
	move.l	$8(a5),a1
	tst.l	$8(a1)
	beq.b	L339
L338
;		free(s_knot->unified_knot);
	move.l	$8(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;		s_knot->unified_knot=NULL;
	move.l	$8(a5),a1
	clr.l	$8(a1)
L339
;	if((err=calc_alphas(s_knot))!=GLU_NO_ERROR)
	move.l	$8(a5),-(a7)
	jsr	_calc_alphas
	addq.w	#4,a7
	move.l	d0,d3
	beq.b	L341
L340
;		free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;		free(s_knot->new_knot);
	move.l	$8(a5),a1
	move.l	$22(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	d3,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L341
;	free(s_knot->new_knot);
	move.l	$8(a5),a1
	move.l	$22(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;	ctrl_offset=attrib->ctrlarray;
	move.l	$10(a5),a0
	move.l	$18(a0),a3
;	dim=attrib->dim;
	move.l	$10(a5),a0
	move.l	$24(a0),d4
;	for(i=0;
	moveq	#0,d2
	bra.b	L348
L342
;		if((err=calc_new_ctrl_pts(ctrl_offset,attrib->s_stride,s_knot,
	pea	-$C(a5)
	pea	0(a2,d2.l*4)
	move.l	d4,-(a7)
	move.l	$8(a5),-(a7)
	move.l	$10(a5),a0
	move.l	$10(a0),-(a7)
	move.l	a3,-(a7)
	jsr	_calc_new_ctrl_pts
	add.w	#$18,a7
	move.l	d0,d3
	beq.b	L347
L343
;			for(--i;
	subq.l	#1,d2
	bra.b	L345
L344
;				free(tmp_ctrl[i]);
	move.l	0(a2,d2.l*4),-(a7)
	jsr	_free
	addq.w	#4,a7
	subq.l	#1,d2
L345
	cmp.l	#0,d2
	ble.b	L344
L346
;			free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;			free(s_knot->alpha);
	move.l	$8(a5),a1
	move.l	$26(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	d3,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L347
;		ctrl_offset+=attrib->t_stride;
	move.l	$10(a5),a0
	move.l	$14(a0),d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
	addq.l	#1,d2
L348
	cmp.l	d5,d2
	blt.b	L342
L349
;	free(s_knot->alpha);
	move.l	$8(a5),a1
	move.l	$26(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;	tmp_stride=dim*tmp_n_control;
	move.l	d4,d3
	muls.l	-$C(a5),d3
;	if((*new_ctrl=(GLfloat *)malloc(sizeof(GLfloat)*tmp_stride*t_cnt))
	move.l	d3,d0
	moveq	#2,d3
	asl.l	d3,d0
	mulu.l	d5,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	L354
L350
;		for(i=0;
	moveq	#0,d2
	bra.b	L352
L351
;			free(tmp_ctrl[i]);
	move.l	0(a2,d2.l*4),-(a7)
	jsr	_free
	addq.w	#4,a7
	addq.l	#1,d2
L352
	cmp.l	d5,d2
	blt.b	L351
L353
;		free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L354
;	for(i=0;
	moveq	#0,d2
	bra.b	L359
L355
;		for(j=0;
	moveq	#0,d3
	bra.b	L357
L356
;				sizeof(GLfloat)*dim);
	move.l	d4,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	move.l	d4,d0
	muls.l	d2,d0
	move.l	0(a2,d3.l*4),a0
	pea	0(a0,d0.l*4)
	move.l	a4,a1
	move.l	d3,d0
	muls.l	d4,d0
	move.l	(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	d2,d0
	muls.l	d4,d0
	muls.l	d5,d0
	pea	0(a0,d0.l*4)
	jsr	_memcpy
	add.w	#$C,a7
	addq.l	#1,d3
L357
	cmp.l	d5,d3
	blt.b	L356
L358
	addq.l	#1,d2
L359
	cmp.l	-$C(a5),d2
	blt.b	L355
L360
;	for(i=0;
	moveq	#0,d2
	bra.b	L362
L361
;		free(tmp_ctrl[i]);
	move.l	0(a2,d2.l*4),-(a7)
	jsr	_free
	addq.w	#4,a7
	addq.l	#1,d2
L362
	cmp.l	d5,d2
	blt.b	L361
L363
;	free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;	*s_n_ctrl=tmp_n_control;
	move.l	$18(a5),a0
	move.l	-$C(a5),(a0)
;	if((tmp_ctrl=(GLfloat **)malloc(sizeof(GLfloat *)*(*s_n_ctrl)))==N
	move.l	$18(a5),a0
	move.l	(a0),d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
	cmp.w	#0,a2
	bne.b	L365
L364
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L365
;	if((err=explode_knot(t_knot))!=GLU_NO_ERROR)
	move.l	$C(a5),-(a7)
	jsr	_explode_knot
	addq.w	#4,a7
	move.l	d0,d3
	beq.b	L369
L366
;		free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;		if(t_knot->unified_knot)
	move.l	$C(a5),a1
	tst.l	$8(a1)
	beq.b	L368
L367
;			free(t_knot->unified_knot);
	move.l	$C(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;			t_knot->unified_knot=NULL;
	move.l	$C(a5),a1
	clr.l	$8(a1)
L368
	move.l	d3,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L369
;	if(t_knot->unified_knot)
	move.l	$C(a5),a1
	tst.l	$8(a1)
	beq.b	L371
L370
;		free(t_knot->unified_knot);
	move.l	$C(a5),a1
	move.l	$8(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;		t_knot->unified_knot=NULL;
	move.l	$C(a5),a1
	clr.l	$8(a1)
L371
;	if((err=calc_alphas(t_knot))!=GLU_NO_ERROR)
	move.l	$C(a5),-(a7)
	jsr	_calc_alphas
	addq.w	#4,a7
	move.l	d0,d3
	beq.b	L373
L372
;		free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;		free(t_knot->new_knot);
	move.l	$C(a5),a1
	move.l	$22(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	d3,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L373
;	free(t_knot->new_knot);
	move.l	$C(a5),a1
	move.l	$22(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;	ctrl_offset=*new_ctrl;
	move.l	a4,a0
	move.l	(a0),a3
;	for(i=0;
	moveq	#0,d2
	bra.b	L380
L374
;		if((err=calc_new_ctrl_pts(ctrl_offset,dim,t_knot,
	pea	-$C(a5)
	pea	0(a2,d2.l*4)
	move.l	d4,-(a7)
	move.l	$C(a5),-(a7)
	move.l	d4,-(a7)
	move.l	a3,-(a7)
	jsr	_calc_new_ctrl_pts
	add.w	#$18,a7
	move.l	d0,d3
	beq.b	L379
L375
;			for(--i;
	subq.l	#1,d2
	bra.b	L377
L376
;				free(tmp_ctrl[i]);
	move.l	0(a2,d2.l*4),-(a7)
	jsr	_free
	addq.w	#4,a7
	subq.l	#1,d2
L377
	cmp.l	#0,d2
	ble.b	L376
L378
;			free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;			free(t_knot->alpha);
	move.l	$C(a5),a1
	move.l	$26(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	d3,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L379
;		ctrl_offset+=dim*t_cnt;
	move.l	d4,d0
	muls.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
	addq.l	#1,d2
L380
	move.l	$18(a5),a0
	cmp.l	(a0),d2
	blt.b	L374
L381
;	free(t_knot->alpha);
	move.l	$C(a5),a1
	move.l	$26(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;	free(*new_ctrl);
	move.l	a4,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;	tmp_stride=dim*tmp_n_control;
	move.l	d4,d3
	muls.l	-$C(a5),d3
;	if((*new_ctrl=(GLfloat *)malloc(sizeof(GLfloat)*tmp_stride*(*s_n_c
	move.l	d3,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	$18(a5),a0
	mulu.l	(a0),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	L386
L382
;		for(i=0;
	moveq	#0,d2
	bra.b	L384
L383
;			free(tmp_ctrl[i]);
	move.l	0(a2,d2.l*4),-(a7)
	jsr	_free
	addq.w	#4,a7
	addq.l	#1,d2
L384
	move.l	$18(a5),a0
	cmp.l	(a0),d2
	blt.b	L383
L385
;		free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts
L386
;	for(i=0;
	moveq	#0,d2
	bra.b	L388
L387
;i*tmp_stride,tmp_
	move.l	d3,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	move.l	0(a2,d2.l*4),-(a7)
	move.l	a4,a1
	move.l	d2,d0
	muls.l	d3,d0
	move.l	(a1),a0
	pea	0(a0,d0.l*4)
	jsr	_memcpy
	add.w	#$C,a7
;		free(tmp_ctrl[i]);
	move.l	0(a2,d2.l*4),-(a7)
	jsr	_free
	addq.w	#4,a7
	addq.l	#1,d2
L388
	move.l	$18(a5),a0
	cmp.l	(a0),d2
	blt.b	L387
L389
;	free(tmp_ctrl);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;	*t_n_ctrl=tmp_n_control;
	move.l	$1C(a5),a0
	move.l	-$C(a5),(a0)
	moveq	#0,d0
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_fill_knot_structures:0",CODE


;static GLenum
_fill_knot_structures
L465	EQU	-$14
	link	a5,#L465
	movem.l	d2-d4/a2-a4,-(a7)
	move.l	$8(a5),a3
	move.l	$28(a5),a4
L391
;	geom_s_knot->unified_knot=NULL;
	move.l	$C(a5),a1
	clr.l	$8(a1)
;	knot=geom_s_knot->knot=nobj->surface.geom.sknot;
	move.l	$BC(a3),a2
	move.l	$C(a5),a0
	move.l	a2,(a0)
;	nknots=geom_s_knot->nknots=nobj->surface.geom.sknot_count;
	move.l	$B8(a3),d4
	move.l	$C(a5),a0
	move.l	d4,4(a0)
;	order=geom_s_knot->order=nobj->surface.geom.sorder;
	move.l	$D4(a3),d0
	move.l	$C(a5),a0
	move.l	d0,$10(a0)
;	geom_s_knot->delta_nknots=0;
	move.l	$C(a5),a0
	clr.l	$1C(a0)
;	t_min=geom_s_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$C(a5),a0
	move.l	d3,$14(a0)
;	t_max=geom_s_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$C(a5),a0
	move.l	d2,$18(a0)
;	if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L393
L392
;		call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L393
;	if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L395
L394
;		geom_s_knot->open_at_begin=GL_TRUE;
	move.l	$C(a5),a0
	move.b	#1,$20(a0)
	bra.b	L396
L395
;		geom_s_knot->open_at_begin=GL_FALSE;
	move.l	$C(a5),a0
	clr.b	$20(a0)
L396
;	if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L398
L397
;		geom_s_knot->open_at_end=GL_TRUE;
	move.l	$C(a5),a0
	move.b	#1,$21(a0)
	bra.b	L399
L398
;		geom_s_knot->open_at_end=GL_FALSE;
	move.l	$C(a5),a0
	clr.b	$21(a0)
L399
;	geom_t_knot->unified_knot=NULL;
	move.l	$10(a5),a1
	clr.l	$8(a1)
;	knot=geom_t_knot->knot=nobj->surface.geom.tknot;
	move.l	$C4(a3),a2
	move.l	$10(a5),a0
	move.l	a2,(a0)
;	nknots=geom_t_knot->nknots=nobj->surface.geom.tknot_count;
	move.l	$C0(a3),d4
	move.l	$10(a5),a0
	move.l	d4,4(a0)
;	order=geom_t_knot->order=nobj->surface.geom.torder;
	move.l	$D8(a3),d0
	move.l	$10(a5),a0
	move.l	d0,$10(a0)
;	geom_t_knot->delta_nknots=0;
	move.l	$10(a5),a0
	clr.l	$1C(a0)
;	t_min=geom_t_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$10(a5),a0
	move.l	d3,$14(a0)
;	t_max=geom_t_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$10(a5),a0
	move.l	d2,$18(a0)
;	if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L401
L400
;		call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L401
;	if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L403
L402
;		geom_t_knot->open_at_begin=GL_TRUE;
	move.l	$10(a5),a0
	move.b	#1,$20(a0)
	bra.b	L404
L403
;		geom_t_knot->open_at_begin=GL_FALSE;
	move.l	$10(a5),a0
	clr.b	$20(a0)
L404
;	if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L406
L405
;		geom_t_knot->open_at_end=GL_TRUE;
	move.l	$10(a5),a0
	move.b	#1,$21(a0)
	bra.b	L407
L406
;		geom_t_knot->open_at_end=GL_FALSE;
	move.l	$10(a5),a0
	clr.b	$21(a0)
L407
;	if(nobj->surface.color.type!=GLU_INVALID_ENUM)
	move.l	$10C(a3),d0
	cmp.l	#$18A24,d0
	beq	L425
L408
;		color_s_knot->unified_knot=(GLfloat *)1;
	move.l	$14(a5),a1
	move.l	#1,$8(a1)
;		knot=color_s_knot->knot=nobj->surface.color.sknot;
	move.l	$E8(a3),a2
	move.l	$14(a5),a0
	move.l	a2,(a0)
;		nknots=color_s_knot->nknots=nobj->surface.color.sknot_count;
	move.l	$E4(a3),d4
	move.l	$14(a5),a0
	move.l	d4,4(a0)
;		order=color_s_knot->order=nobj->surface.color.sorder;
	move.l	$100(a3),d0
	move.l	$14(a5),a0
	move.l	d0,$10(a0)
;		color_s_knot->delta_nknots=0;
	move.l	$14(a5),a0
	clr.l	$1C(a0)
;		t_min=color_s_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$14(a5),a0
	move.l	d3,$14(a0)
;		t_max=color_s_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$14(a5),a0
	move.l	d2,$18(a0)
;		if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L410
L409
;			call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L410
;		if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L412
L411
;			color_s_knot->open_at_begin=GL_TRUE;
	move.l	$14(a5),a0
	move.b	#1,$20(a0)
	bra.b	L413
L412
;			color_s_knot->open_at_begin=GL_FALSE;
	move.l	$14(a5),a0
	clr.b	$20(a0)
L413
;		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L415
L414
;			color_s_knot->open_at_end=GL_TRUE;
	move.l	$14(a5),a0
	move.b	#1,$21(a0)
	bra.b	L416
L415
;			color_s_knot->open_at_end=GL_FALSE;
	move.l	$14(a5),a0
	clr.b	$21(a0)
L416
;		color_t_knot->unified_knot=(GLfloat *)1;
	move.l	$18(a5),a1
	move.l	#1,$8(a1)
;		knot=color_t_knot->knot=nobj->surface.color.tknot;
	move.l	$F0(a3),a2
	move.l	$18(a5),a0
	move.l	a2,(a0)
;		nknots=color_t_knot->nknots=nobj->surface.color.tknot_count;
	move.l	$EC(a3),d4
	move.l	$18(a5),a0
	move.l	d4,4(a0)
;		order=color_t_knot->order=nobj->surface.color.torder;
	move.l	$104(a3),d0
	move.l	$18(a5),a0
	move.l	d0,$10(a0)
;		color_t_knot->delta_nknots=0;
	move.l	$18(a5),a0
	clr.l	$1C(a0)
;		t_min=color_t_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$18(a5),a0
	move.l	d3,$14(a0)
;		t_max=color_t_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$18(a5),a0
	move.l	d2,$18(a0)
;		if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L418
L417
;			call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L418
;		if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L420
L419
;			color_t_knot->open_at_begin=GL_TRUE;
	move.l	$18(a5),a0
	move.b	#1,$20(a0)
	bra.b	L421
L420
;			color_t_knot->open_at_begin=GL_FALSE;
	move.l	$18(a5),a0
	clr.b	$20(a0)
L421
;		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L423
L422
;			color_t_knot->open_at_end=GL_TRUE;
	move.l	$18(a5),a0
	move.b	#1,$21(a0)
	bra.b	L424
L423
;			color_t_knot->open_at_end=GL_FALSE;
	move.l	$18(a5),a0
	clr.b	$21(a0)
L424
	bra.b	L426
L425
;		color_s_knot->unified_knot=NULL;
	move.l	$14(a5),a1
	clr.l	$8(a1)
;		color_t_knot->unified_knot=NULL;
	move.l	$18(a5),a1
	clr.l	$8(a1)
L426
;	if(nobj->surface.normal.type!=GLU_INVALID_ENUM)
	move.l	$164(a3),d0
	cmp.l	#$18A24,d0
	beq	L444
L427
;		normal_s_knot->unified_knot=(GLfloat *)1;
	move.l	$1C(a5),a1
	move.l	#1,$8(a1)
;		knot=normal_s_knot->knot=nobj->surface.normal.sknot;
	move.l	$140(a3),a2
	move.l	$1C(a5),a0
	move.l	a2,(a0)
;		nknots=normal_s_knot->nknots=nobj->surface.normal.sknot_count;
	move.l	$13C(a3),d4
	move.l	$1C(a5),a0
	move.l	d4,4(a0)
;		order=normal_s_knot->order=nobj->surface.normal.sorder;
	move.l	$158(a3),d0
	move.l	$1C(a5),a0
	move.l	d0,$10(a0)
;		normal_s_knot->delta_nknots=0;
	move.l	$1C(a5),a0
	clr.l	$1C(a0)
;		t_min=normal_s_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$1C(a5),a0
	move.l	d3,$14(a0)
;		t_max=normal_s_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$1C(a5),a0
	move.l	d2,$18(a0)
;		if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L429
L428
;			call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L429
;		if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L431
L430
;			normal_s_knot->open_at_begin=GL_TRUE;
	move.l	$1C(a5),a0
	move.b	#1,$20(a0)
	bra.b	L432
L431
;			normal_s_knot->open_at_begin=GL_FALSE;
	move.l	$1C(a5),a0
	clr.b	$20(a0)
L432
;		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L434
L433
;			normal_s_knot->open_at_end=GL_TRUE;
	move.l	$1C(a5),a0
	move.b	#1,$21(a0)
	bra.b	L435
L434
;			normal_s_knot->open_at_end=GL_FALSE;
	move.l	$1C(a5),a0
	clr.b	$21(a0)
L435
;		normal_t_knot->unified_knot=(GLfloat *)1;
	move.l	$20(a5),a1
	move.l	#1,$8(a1)
;		knot=normal_t_knot->knot=nobj->surface.normal.tknot;
	move.l	$148(a3),a2
	move.l	$20(a5),a0
	move.l	a2,(a0)
;		nknots=normal_t_knot->nknots=nobj->surface.normal.tknot_count;
	move.l	$144(a3),d4
	move.l	$20(a5),a0
	move.l	d4,4(a0)
;		order=normal_t_knot->order=nobj->surface.normal.torder;
	move.l	$15C(a3),d0
	move.l	$20(a5),a0
	move.l	d0,$10(a0)
;		normal_t_knot->delta_nknots=0;
	move.l	$20(a5),a0
	clr.l	$1C(a0)
;		t_min=normal_t_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$20(a5),a0
	move.l	d3,$14(a0)
;		t_max=normal_t_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$20(a5),a0
	move.l	d2,$18(a0)
;		if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L437
L436
;			call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L437
;		if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L439
L438
;			normal_t_knot->open_at_begin=GL_TRUE;
	move.l	$20(a5),a0
	move.b	#1,$20(a0)
	bra.b	L440
L439
;			normal_t_knot->open_at_begin=GL_FALSE;
	move.l	$20(a5),a0
	clr.b	$20(a0)
L440
;		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L442
L441
;			normal_t_knot->open_at_end=GL_TRUE;
	move.l	$20(a5),a0
	move.b	#1,$21(a0)
	bra.b	L443
L442
;			normal_t_knot->open_at_end=GL_FALSE;
	move.l	$20(a5),a0
	clr.b	$21(a0)
L443
	bra.b	L445
L444
;		normal_s_knot->unified_knot=NULL;
	move.l	$1C(a5),a1
	clr.l	$8(a1)
;		normal_t_knot->unified_knot=NULL;
	move.l	$20(a5),a1
	clr.l	$8(a1)
L445
;	if(nobj->surface.texture.type!=GLU_INVALID_ENUM)
	move.l	$138(a3),d0
	cmp.l	#$18A24,d0
	beq	L463
L446
;		texture_s_knot->unified_knot=(GLfloat *)1;
	move.l	$24(a5),a1
	move.l	#1,$8(a1)
;		knot=texture_s_knot->knot=nobj->surface.texture.sknot;
	move.l	$114(a3),a2
	move.l	$24(a5),a0
	move.l	a2,(a0)
;		nknots=texture_s_knot->nknots=nobj->surface.texture.sknot_count;
	move.l	$110(a3),d4
	move.l	$24(a5),a0
	move.l	d4,4(a0)
;		order=texture_s_knot->order=nobj->surface.texture.sorder;
	move.l	$12C(a3),d0
	move.l	$24(a5),a0
	move.l	d0,$10(a0)
;		texture_s_knot->delta_nknots=0;
	move.l	$24(a5),a0
	clr.l	$1C(a0)
;		t_min=texture_s_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	$24(a5),a0
	move.l	d3,$14(a0)
;		t_max=texture_s_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	$24(a5),a0
	move.l	d2,$18(a0)
;		if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L448
L447
;			call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L448
;		if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L450
L449
;			texture_s_knot->open_at_begin=GL_TRUE;
	move.l	$24(a5),a0
	move.b	#1,$20(a0)
	bra.b	L451
L450
;			texture_s_knot->open_at_begin=GL_FALSE;
	move.l	$24(a5),a0
	clr.b	$20(a0)
L451
;		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L453
L452
;			texture_s_knot->open_at_end=GL_TRUE;
	move.l	$24(a5),a0
	move.b	#1,$21(a0)
	bra.b	L454
L453
;			texture_s_knot->open_at_end=GL_FALSE;
	move.l	$24(a5),a0
	clr.b	$21(a0)
L454
;		texture_t_knot->unified_knot=(GLfloat *)1;
	move.l	a4,a1
	move.l	#1,$8(a1)
;		knot=texture_t_knot->knot=nobj->surface.texture.tknot;
	move.l	$11C(a3),a2
	move.l	a4,a0
	move.l	a2,(a0)
;		nknots=texture_t_knot->nknots=nobj->surface.texture.tknot_count;
	move.l	$118(a3),d4
	move.l	a4,a0
	move.l	d4,4(a0)
;		order=texture_t_knot->order=nobj->surface.texture.torder;
	move.l	$130(a3),d0
	move.l	a4,a0
	move.l	d0,$10(a0)
;		texture_t_knot->delta_nknots=0;
	move.l	a4,a0
	clr.l	$1C(a0)
;		t_min=texture_t_knot->t_min=order-1;
	move.l	d0,d3
	subq.l	#1,d3
	move.l	a4,a0
	move.l	d3,$14(a0)
;		t_max=texture_t_knot->t_max=nknots-order;
	move.l	d4,d2
	sub.l	d0,d2
	move.l	a4,a0
	move.l	d2,$18(a0)
;		if(fabs(knot[t_min]-knot[t_max])<EPSILON)
	fmove.s	0(a2,d3.l*4),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
	fboge.b	L456
L455
;			call_user_error(nobj,GLU_NURBS_ERROR3);
	move.l	#$1879D,-(a7)
	move.l	a3,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts
L456
;		if(fabs(knot[0]-knot[t_min])<EPSILON)
	fmove.s	(a2),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	L458
L457
;			texture_t_knot->open_at_begin=GL_TRUE;
	move.l	a4,a0
	move.b	#1,$20(a0)
	bra.b	L459
L458
;			texture_t_knot->open_at_begin=GL_FALSE;
	move.l	a4,a0
	clr.b	$20(a0)
L459
;		if(fabs(knot[t_max]-knot[nknots-1])<EPSILON)
	lea	-4(a2),a0
	fmove.s	0(a2,d2.l*4),fp0
	fsub.s	0(a0,d4.l*4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L461
L460
;			texture_t_knot->open_at_end=GL_TRUE;
	move.l	a4,a0
	move.b	#1,$21(a0)
	bra.b	L462
L461
;			texture_t_knot->open_at_end=GL_FALSE;
	move.l	a4,a0
	clr.b	$21(a0)
L462
	bra.b	L464
L463
;		texture_s_knot->unified_knot=NULL;
	move.l	$24(a5),a1
	clr.l	$8(a1)
;		texture_t_knot->unified_knot=NULL;
	move.l	a4,a1
	clr.l	$8(a1)
L464
	moveq	#0,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts

	SECTION "_free_new_ctrl:0",CODE


;void
	XDEF	_free_new_ctrl
_free_new_ctrl
	move.l	a2,-(a7)
	move.l	$8(a7),a2
L466
;	if(p->geom_ctrl)
	tst.l	(a2)
	beq.b	L468
L467
;		free(p->geom_ctrl);
	move.l	(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
L468
;	if(p->geom_offsets)
	tst.l	$C(a2)
	beq.b	L470
L469
;		free(p->geom_offsets);
	move.l	$C(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
L470
;	if(p->color_ctrl)
	tst.l	$18(a2)
	beq.b	L473
L471
;		free(p->color_ctrl);
	move.l	$18(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;		if(p->color_offsets)
	tst.l	$24(a2)
	beq.b	L473
L472
;			free(p->color_offsets);
	move.l	$24(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
L473
;	if(p->normal_ctrl)
	tst.l	$30(a2)
	beq.b	L476
L474
;		free(p->normal_ctrl);
	move.l	$30(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;		if(p->normal_offsets)
	tst.l	$3C(a2)
	beq.b	L476
L475
;			free(p->normal_offsets);
	move.l	$3C(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
L476
;	if(p->texture_ctrl)
	tst.l	$48(a2)
	beq.b	L479
L477
;		free(p->texture_ctrl);
	move.l	$48(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;		if(p->texture_offsets)
	tst.l	$54(a2)
	beq.b	L479
L478
;			free(p->texture_offsets);
	move.l	$54(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
L479
	move.l	(a7)+,a2
	rts

	SECTION "_convert_surfs:0",CODE


;static GLenum
_convert_surfs
L498	EQU	-$154
	link	a5,#L498
	movem.l	d2/a2/a3,-(a7)
	movem.l	$8(a5),a2/a3
L480
;	if((err=fill_knot_structures(nobj,&geom_s_knot,&geom_t_knot,
	pea	-$150(a5)
	pea	-$A8(a5)
	pea	-$126(a5)
	pea	-$7E(a5)
	pea	-$FC(a5)
	pea	-$54(a5)
	pea	-$D2(a5)
	pea	-$2A(a5)
	move.l	a2,-(a7)
	jsr	_fill_knot_structures
	add.w	#$24,a7
	move.l	d0,d2
	beq.b	L482
L481
	move.l	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L482
;	if((err=select_knot_working_range(nobj,&geom_s_knot,&color_s_knot,
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	move.l	a2,-(a7)
	jsr	_select_knot_working_range
	add.w	#$14,a7
	move.l	d0,d2
	beq.b	L484
L483
;		call_user_error(nobj,err);
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L484
;	if((err=select_knot_working_range(nobj,&geom_t_knot,&color_t_knot,
	pea	-$150(a5)
	pea	-$126(a5)
	pea	-$FC(a5)
	pea	-$D2(a5)
	move.l	a2,-(a7)
	jsr	_select_knot_working_range
	add.w	#$14,a7
	move.l	d0,d2
	beq.b	L486
L485
;		free_unified_knots(&geom_s_knot,&color_s_knot,&normal_s_knot,
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;		call_user_error(nobj,err);
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L486
;	nobj->surface.geom.dim=get_surface_dim(nobj->surface.geom.type);
	move.l	$E0(a2),-(a7)
	jsr	_get_surface_dim
	addq.w	#4,a7
	move.l	d0,$DC(a2)
;	if((err=convert_surf(&geom_s_knot,&geom_t_knot,&(nobj->surface.geo
	pea	$14(a3)
	pea	$10(a3)
	move.l	a3,-(a7)
	pea	$B8(a2)
	pea	-$D2(a5)
	pea	-$2A(a5)
	jsr	_convert_surf
	add.w	#$18,a7
	move.l	d0,d2
	beq.b	L488
L487
;		free_unified_knots(&geom_s_knot,&color_s_knot,&normal_s_knot,
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;		free_unified_knots(&geom_t_knot,&color_t_knot,&normal_t_knot,
	pea	-$150(a5)
	pea	-$126(a5)
	pea	-$FC(a5)
	pea	-$D2(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;		call_user_error(nobj,err);
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L488
;	if(color_s_knot.unified_knot)
	tst.l	-$4C(a5)
	beq	L491
L489
;		nobj->surface.color.dim=get_surface_dim(nobj->surface.color.type)
	move.l	$10C(a2),-(a7)
	jsr	_get_surface_dim
	addq.w	#4,a7
	move.l	d0,$108(a2)
;		if((err=convert_surf(&color_s_knot,&color_t_knot,&(nobj->surface
	pea	$2C(a3)
	pea	$28(a3)
	pea	$18(a3)
	pea	$E4(a2)
	pea	-$FC(a5)
	pea	-$54(a5)
	jsr	_convert_surf
	add.w	#$18,a7
	move.l	d0,d2
	beq.b	L491
L490
;			free_unified_knots(&color_s_knot,&color_s_knot,&normal_s_knot,
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$54(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free_unified_knots(&color_t_knot,&color_t_knot,&normal_t_knot,
	pea	-$150(a5)
	pea	-$126(a5)
	pea	-$FC(a5)
	pea	-$FC(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free_new_ctrl(new_ctrl);
	move.l	a3,-(a7)
	jsr	_free_new_ctrl
	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	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L491
;	if(normal_s_knot.unified_knot)
	tst.l	-$76(a5)
	beq	L494
L492
;		nobj->surface.normal.dim=get_surface_dim(nobj->surface.normal.ty
	move.l	$164(a2),-(a7)
	jsr	_get_surface_dim
	addq.w	#4,a7
	move.l	d0,$160(a2)
;		if((err=convert_surf(&normal_s_knot,&normal_t_knot,
	pea	$44(a3)
	pea	$40(a3)
	pea	$30(a3)
	pea	$13C(a2)
	pea	-$126(a5)
	pea	-$7E(a5)
	jsr	_convert_surf
	add.w	#$18,a7
	move.l	d0,d2
	beq.b	L494
L493
;			free_unified_knots(&normal_s_knot,&normal_s_knot,&normal_s_kno
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$7E(a5)
	pea	-$7E(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free_unified_knots(&normal_t_knot,&normal_t_knot,&normal_t_kno
	pea	-$150(a5)
	pea	-$126(a5)
	pea	-$126(a5)
	pea	-$126(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free_new_ctrl(new_ctrl);
	move.l	a3,-(a7)
	jsr	_free_new_ctrl
	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	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L494
;	if(texture_s_knot.unified_knot)
	tst.l	-$A0(a5)
	beq	L497
L495
;		nobj->surface.texture.dim=get_surface_dim(nobj->surface.texture.
	move.l	$138(a2),-(a7)
	jsr	_get_surface_dim
	addq.w	#4,a7
	move.l	d0,$134(a2)
;		if((err=convert_surf(&texture_s_knot,&texture_t_knot,
	pea	$5C(a3)
	pea	$58(a3)
	pea	$48(a3)
	pea	$110(a2)
	pea	-$150(a5)
	pea	-$A8(a5)
	jsr	_convert_surf
	add.w	#$18,a7
	move.l	d0,d2
	beq.b	L497
L496
;			free_unified_knots(&texture_s_knot,&texture_s_knot,&texture_s_
	pea	-$A8(a5)
	pea	-$A8(a5)
	pea	-$A8(a5)
	pea	-$A8(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free_unified_knots(&texture_t_knot,&texture_t_knot,&texture_t_
	pea	-$150(a5)
	pea	-$150(a5)
	pea	-$150(a5)
	pea	-$150(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free_new_ctrl(new_ctrl);
	move.l	a3,-(a7)
	jsr	_free_new_ctrl
	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	d2,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L497
	moveq	#0,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts

	SECTION "_tesselate_strip_t_line:0",CODE


;void
	XDEF	_tesselate_strip_t_line
_tesselate_strip_t_line
L514	EQU	-$20
	link	a5,#L514
	movem.l	d2-d7,-(a7)
	movem.l	$18(a5),d0/d7
	move.l	$C(a5),d1
	move.l	$8(a5),d2
	move.l	$20(a5),d3
	move.l	$14(a5),d5
L499
;	top_cnt=top_end-top_start;
	sub.l	d2,d1
	move.l	d1,-4(a5)
;	direction= (top_cnt>=0 ? 1: -1);
	tst.l	-4(a5)
	bmi.b	L501
L500
	moveq	#1,d6
	bra.b	L502
L501
	moveq	#-1,d6
L502
;	bottom_cnt=bottom_end-bottom_start;
	sub.l	d5,d0
	move.l	d0,-$8(a5)
;	glBegin(GL_LINES);
	pea	1.w
	jsr	_glBegin
	addq.w	#4,a7
;	while(top_cnt)
	bra	L512
L503
;		if(bottom_cnt)
	tst.l	-$8(a5)
	beq.b	L505
L504
;			tri_cnt=top_cnt/bottom_cnt;
	move.l	-4(a5),d0
	divsl.l	-$8(a5),d0
	move.l	d0,-$C(a5)
	bra.b	L506
L505
;			tri_cnt=abs(top_cnt);
	move.l	-4(a5),-(a7)
	jsr	_abs
	addq.w	#4,a7
	move.l	d0,-$C(a5)
L506
;		for(k=0;
	moveq	#0,d4
	bra.b	L508
L507
;			glEvalCoord2f((GLfloat)bottom_z/bottom_domain,
	fmove.l	d5,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d7,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			glEvalPoint2(top_z,top_start);
	move.l	d2,-(a7)
	move.l	$10(a5),-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
	addq.l	#1,d4
	add.l	d6,d2
L508
	cmp.l	-$C(a5),d4
	ble.b	L507
L509
;		if(bottom_cnt)
	tst.l	-$8(a5)
	beq	L511
L510
;			glEvalCoord2f((GLfloat)bottom_z/bottom_domain,
	fmove.l	d5,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d7,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			bottom_start+=direction;
	add.l	d6,d5
;			top_start-=direction;
	sub.l	d6,d2
;			glEvalCoord2f((GLfloat)bottom_z/bottom_domain,
	fmove.l	d5,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d7,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			glEvalCoord2f((GLfloat)bottom_z/bottom_domain,
	fmove.l	d5,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d7,fp0
	fmove.l	d3,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			glEvalPoint2(top_z,top_start);
	move.l	d2,-(a7)
	move.l	$10(a5),-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
L511
;		top_cnt-=direction*tri_cnt;
	move.l	d6,d0
	muls.l	-$C(a5),d0
	sub.l	d0,-4(a5)
;		bottom_cnt-=direction;
	sub.l	d6,-$8(a5)
L512
	tst.l	-4(a5)
	bne	L503
L513
;	glEnd();
	jsr	_glEnd
	movem.l	(a7)+,d2-d7
	unlk	a5
	rts

	SECTION "_tesselate_strip_t_fill:0",CODE


;void
	XDEF	_tesselate_strip_t_fill
_tesselate_strip_t_fill
L530	EQU	-$14
	link	a5,#L530
	movem.l	d2-d7,-(a7)
	move.l	$18(a5),d0
	move.l	$C(a5),d1
	move.l	$8(a5),d2
L515
;	top_cnt=top_end-top_start;
	sub.l	d2,d1
	move.l	d1,d6
;	direction= (top_cnt>=0 ? 1: -1);
	bmi.b	L517
L516
	moveq	#1,d4
	bra.b	L518
L517
	moveq	#-1,d4
L518
;	bottom_cnt=bottom_end-bottom_start;
	sub.l	$14(a5),d0
	move.l	d0,d7
;	while(top_cnt)
	bra	L528
L519
;		if(bottom_cnt)
	tst.l	d7
	beq.b	L521
L520
;			tri_cnt=top_cnt/bottom_cnt;
	move.l	d6,d5
	divsl.l	d7,d5
	bra.b	L522
L521
;			tri_cnt=abs(top_cnt);
	move.l	d6,-(a7)
	jsr	_abs
	addq.w	#4,a7
	move.l	d0,d5
L522
;		glBegin(GL_TRIANGLE_FAN);
	pea	6.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalCoord2f((GLfloat)bottom_z/bottom_domain,
	fmove.l	$14(a5),fp0
	fmove.l	$20(a5),fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	$1C(a5),fp0
	fmove.l	$20(a5),fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		for(k=0;
	moveq	#0,d3
	bra.b	L524
L523
;			glEvalPoint2(top_z,top_start);
	move.l	d2,-(a7)
	move.l	$10(a5),-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
	addq.l	#1,d3
	add.l	d4,d2
L524
	cmp.l	d5,d3
	ble.b	L523
L525
;		if(bottom_cnt)
	tst.l	d7
	beq.b	L527
L526
;			bottom_start+=direction;
	add.l	d4,$14(a5)
;			top_start-=direction;
	sub.l	d4,d2
;			glEvalCoord2f((GLfloat)bottom_z/bottom_domain,
	fmove.l	$14(a5),fp0
	fmove.l	$20(a5),fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	$1C(a5),fp0
	fmove.l	$20(a5),fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L527
;		glEnd();
	jsr	_glEnd
;		top_cnt-=direction*tri_cnt;
	move.l	d4,d0
	muls.l	d5,d0
	move.l	d6,d1
	sub.l	d0,d1
	move.l	d1,d6
;		bottom_cnt-=direction;
	move.l	d7,d0
	sub.l	d4,d0
	move.l	d0,d7
L528
	tst.l	d6
	bne	L519
L529
	movem.l	(a7)+,d2-d7
	unlk	a5
	rts

	SECTION "_tesselate_strip_t:0",CODE


;void
	XDEF	_tesselate_strip_t
_tesselate_strip_t
	movem.l	d2-d7,-(a7)
	movem.l	$20(a7),d0-d5/d7
	move.l	$1C(a7),d6
L531
;	if(display_mode==GL_FILL)
	cmp.l	#$1B02,d6
	bne.b	L533
L532
;		tesselate_strip_t_fill(top_start,top_end,top_z,bottom_start,
	move.l	d7,-(a7)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	jsr	_tesselate_strip_t_fill
	add.w	#$1C,a7
	bra.b	L534
L533
;		tesselate_strip_t_line(top_start,top_end,top_z,bottom_start,
	move.l	d7,-(a7)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	jsr	_tesselate_strip_t_line
	add.w	#$1C,a7
L534
	movem.l	(a7)+,d2-d7
	rts

	SECTION "_tesselate_strip_s_fill:0",CODE


;void
	XDEF	_tesselate_strip_s_fill
_tesselate_strip_s_fill
L550	EQU	-$14
	link	a5,#L550
	movem.l	d2-d7,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$18(a5),d0
	move.l	$C(a5),d1
	move.l	$8(a5),d2
	fmove.s	$20(a5),fp2
L535
;	top_cnt=top_end-top_start;
	sub.l	d2,d1
	move.l	d1,d6
;	direction= (top_cnt>=0 ? 1: -1);
	bmi.b	L537
L536
	moveq	#1,d4
	bra.b	L538
L537
	moveq	#-1,d4
L538
;	bottom_cnt=bottom_end-bottom_start;
	sub.l	$14(a5),d0
	move.l	d0,d7
;	while(top_cnt)
	bra	L548
L539
;		if(bottom_cnt)
	tst.l	d7
	beq.b	L541
L540
;			tri_cnt=top_cnt/bottom_cnt;
	move.l	d6,d5
	divsl.l	d7,d5
	bra.b	L542
L541
;			tri_cnt=abs(top_cnt);
	move.l	d6,-(a7)
	jsr	_abs
	addq.w	#4,a7
	move.l	d0,d5
L542
;		glBegin(GL_TRIANGLE_FAN);
	pea	6.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalCoord2f((GLfloat)bottom_start/bottom_domain,
	fmove.l	$1C(a5),fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.l	$14(a5),fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		for(k=0;
	moveq	#0,d3
	bra.b	L544
L543
;			glEvalPoint2(top_start,top_z);
	move.l	$10(a5),-(a7)
	move.l	d2,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
	addq.l	#1,d3
	add.l	d4,d2
L544
	cmp.l	d5,d3
	ble.b	L543
L545
;		if(bottom_cnt)
	tst.l	d7
	beq.b	L547
L546
;			bottom_start+=direction;
	add.l	d4,$14(a5)
;			top_start-=direction;
	sub.l	d4,d2
;			glEvalCoord2f((GLfloat)bottom_start/bottom_domain,
	fmove.l	$1C(a5),fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.l	$14(a5),fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L547
;		glEnd();
	jsr	_glEnd
;		top_cnt-=direction*tri_cnt;
	move.l	d4,d0
	muls.l	d5,d0
	move.l	d6,d1
	sub.l	d0,d1
	move.l	d1,d6
;		bottom_cnt-=direction;
	move.l	d7,d0
	sub.l	d4,d0
	move.l	d0,d7
L548
	tst.l	d6
	bne	L539
L549
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7
	unlk	a5
	rts

	SECTION "_tesselate_strip_s_line:0",CODE


;void
	XDEF	_tesselate_strip_s_line
_tesselate_strip_s_line
L566	EQU	-$1C
	link	a5,#L566
	movem.l	d2-d7,-(a7)
	fmovem.x fp2,-(a7)
	movem.l	$18(a5),d0/d6
	move.l	$C(a5),d1
	move.l	$8(a5),d2
	move.l	$14(a5),d4
	fmove.s	$20(a5),fp2
L551
;	top_cnt=top_end-top_start;
	sub.l	d2,d1
	move.l	d1,-4(a5)
;	direction= (top_cnt>=0 ? 1: -1);
	tst.l	-4(a5)
	bmi.b	L553
L552
	moveq	#1,d5
	bra.b	L554
L553
	moveq	#-1,d5
L554
;	bottom_cnt=bottom_end-bottom_start;
	sub.l	d4,d0
	move.l	d0,-$8(a5)
;	glBegin(GL_LINES);
	pea	1.w
	jsr	_glBegin
	addq.w	#4,a7
;	while(top_cnt)
	bra	L564
L555
;		if(bottom_cnt)
	tst.l	-$8(a5)
	beq.b	L557
L556
;			tri_cnt=top_cnt/bottom_cnt;
	move.l	-4(a5),d0
	divsl.l	-$8(a5),d0
	move.l	d0,d7
	bra.b	L558
L557
;			tri_cnt=abs(top_cnt);
	move.l	-4(a5),-(a7)
	jsr	_abs
	addq.w	#4,a7
	move.l	d0,d7
L558
;		for(k=0;
	moveq	#0,d3
	bra.b	L560
L559
;			glEvalCoord2f((GLfloat)bottom_start/bottom_domain,
	fmove.l	d6,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d4,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			glEvalPoint2(top_start,top_z);
	move.l	$10(a5),-(a7)
	move.l	d2,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
	addq.l	#1,d3
	add.l	d5,d2
L560
	cmp.l	d7,d3
	ble.b	L559
L561
;		if(bottom_cnt)
	tst.l	-$8(a5)
	beq.b	L563
L562
;tesselate_top_right_c
	fmove.l	d6,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d4,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			bottom_start+=direction;
	add.l	d5,d4
;			top_start-=direction;
	sub.l	d5,d2
;			glEvalCoord2f((GLfloat)bottom_start/bottom_domain,
	fmove.l	d6,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d4,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;			glEvalPoint2(top_start,top_z);
	move.l	$10(a5),-(a7)
	move.l	d2,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;			glEvalCoord2f((GLfloat)bottom_start/bottom_domain,
	fmove.l	d6,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d4,fp0
	fdiv.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L563
;		top_cnt-=direction*tri_cnt;
	move.l	d5,d0
	muls.l	d7,d0
	sub.l	d0,-4(a5)
;		bottom_cnt-=direction;
	sub.l	d5,-$8(a5)
L564
	tst.l	-4(a5)
	bne	L555
L565
;	glEnd();
	jsr	_glEnd
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7
	unlk	a5
	rts

	SECTION "_tesselate_strip_s:0",CODE


;void
	XDEF	_tesselate_strip_s
_tesselate_strip_s
	movem.l	d2-d6,-(a7)
	movem.l	$1C(a7),d0-d5
	move.l	$18(a7),d6
	fmove.s	$34(a7),fp0
L567
;	if(display_mode==GL_FILL)
	cmp.l	#$1B02,d6
	bne.b	L569
L568
;		tesselate_strip_s_fill(top_start,top_end,top_z,bottom_start,
	fmove.s	fp0,-(a7)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	jsr	_tesselate_strip_s_fill
	add.w	#$1C,a7
	bra.b	L570
L569
;		tesselate_strip_s_line(top_start,top_end,top_z,bottom_start,
	fmove.s	fp0,-(a7)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	jsr	_tesselate_strip_s_line
	add.w	#$1C,a7
L570
	movem.l	(a7)+,d2-d6
	rts

	SECTION "_tesselate_bottom_left_corner:0",CODE


;void
	XDEF	_tesselate_bottom_left_corner
_tesselate_bottom_left_corner
	fmovem.x fp2/fp3,-(a7)
	move.l	$1C(a7),d0
	fmove.s	$24(a7),fp2
	fmove.s	$20(a7),fp3
L571
;	if(display_mode==GL_FILL)
	cmp.l	#$1B02,d0
	bne.b	L573
L572
;		glBegin(GL_TRIANGLE_FAN);
	pea	6.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalPoint2(1,1);
	pea	1.w
	pea	1.w
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f(s_1,0.0);
	clr.l	-(a7)
	fmove.s	fp3,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,0.0);
	clr.l	-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,t_1);
	fmove.s	fp2,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
	bra.b	L574
L573
;		glBegin(GL_LINES);
	pea	1.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalCoord2f(0.0,0.0);
	clr.l	-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,t_1);
	fmove.s	fp2,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,0.0);
	clr.l	-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalPoint2(1,1);
	pea	1.w
	pea	1.w
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,0.0);
	clr.l	-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(s_1,0.0);
	clr.l	-(a7)
	fmove.s	fp3,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L574
;	glEnd();
	jsr	_glEnd
	fmovem.x (a7)+,fp2/fp3
	rts

	SECTION "_tesselate_bottom_right_corner:0",CODE


;void
	XDEF	_tesselate_bottom_right_corner
_tesselate_bottom_right_corner
	movem.l	d2/d3,-(a7)
	fmovem.x fp2/fp3,-(a7)
	movem.l	$24(a7),d0/d3
	move.l	$2C(a7),d2
	fmove.s	$34(a7),fp2
	fmove.s	$30(a7),fp3
L575
;	if(display_mode==GL_FILL)
	cmp.l	#$1B02,d0
	bne.b	L577
L576
;		glBegin(GL_TRIANGLE_FAN);
	pea	6.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalPoint2(1,v_top);
	move.l	d3,-(a7)
	pea	1.w
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,v_bottom*t_1);
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,(v_bottom+1)*t_1);
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(s_1,(v_bottom+1)*t_1);
	addq.l	#1,d2
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.s	fp3,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
	bra	L578
L577
;		glBegin(GL_LINES);
	pea	1.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalCoord2f(0.0,(v_bottom+1)*t_1);
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalPoint2(1,v_top);
	move.l	d3,-(a7)
	pea	1.w
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,(v_bottom+1)*t_1);
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,v_bottom*t_1);
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(0.0,(v_bottom+1)*t_1);
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(s_1,(v_bottom+1)*t_1);
	addq.l	#1,d2
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	fmove.s	fp3,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L578
;	glEnd();
	jsr	_glEnd
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/d3
	rts

	SECTION "_tesselate_top_left_corner:0",CODE


;void
	XDEF	_tesselate_top_left_corner
_tesselate_top_left_corner
	movem.l	d2/d3,-(a7)
	fmovem.x fp2/fp3,-(a7)
	movem.l	$24(a7),d0/d3
	move.l	$2C(a7),d2
	fmove.s	$30(a7),fp2
	fmove.s	$34(a7),fp3
L579
;	if(display_mode==GL_FILL)
	cmp.l	#$1B02,d0
	bne.b	L581
L580
;		glBegin(GL_TRIANGLE_FAN);
	pea	6.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalPoint2(u_right,1);
	pea	1.w
	move.l	d3,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f((u_left+1)*s_1,t_1);
	fmove.s	fp3,-(a7)
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f((u_left+1)*s_1,0.0);
	clr.l	-(a7)
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(u_left*s_1,0.0);
	clr.l	-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
	bra	L582
L581
;		glBegin(GL_LINES);
	pea	1.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalCoord2f((u_left+1)*s_1,0.0);
	clr.l	-(a7)
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalPoint2(u_right,1);
	pea	1.w
	move.l	d3,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f((u_left+1)*s_1,0.0);
	clr.l	-(a7)
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(u_left*s_1,0.0);
	clr.l	-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f((u_left+1)*s_1,0.0);
	clr.l	-(a7)
	move.l	d2,d0
	addq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f((u_left+1)*s_1,t_1);
	fmove.s	fp3,-(a7)
	addq.l	#1,d2
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L582
;	glEnd();
	jsr	_glEnd
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2/d3
	rts

	SECTION "_tesselate_top_right_corner:0",CODE


;			tesselate_strip_s(display_mode,left,1,top-1,right,
	XDEF	_tesselate_top_right_corner
_tesselate_top_right_corner
	movem.l	d2-d5,-(a7)
	fmovem.x fp2/fp3,-(a7)
	movem.l	$2C(a7),d0/d4/d5
	movem.l	$38(a7),d2/d3
	fmove.s	$40(a7),fp2
	fmove.s	$44(a7),fp3
L583
;	if(display_mode==GL_FILL)
	cmp.l	#$1B02,d0
	bne	L585
L584
;		glBegin(GL_TRIANGLE_FAN);
	pea	6.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalPoint2(u_left,v_bottom);
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f((u_right-1)*s_1,v_top*t_1);
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	move.l	d2,d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(u_right*s_1,v_top*t_1);
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(u_right*s_1,(v_top-1)*t_1);
	subq.l	#1,d3
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
	bra	L586
L585
;		glBegin(GL_LINES);
	pea	1.w
	jsr	_glBegin
	addq.w	#4,a7
;		glEvalCoord2f(u_right*s_1,v_top*t_1);
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalPoint2(u_left,v_bottom);
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	jsr	_glEvalPoint2
	addq.w	#$8,a7
;		glEvalCoord2f(u_right*s_1,v_top*t_1);
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(u_right*s_1,(v_top-1)*t_1);
	move.l	d3,d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f(u_right*s_1,v_top*t_1);
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
;		glEvalCoord2f((u_right-1)*s_1,v_top*t_1);
	fmove.l	d3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-(a7)
	subq.l	#1,d2
	fmove.l	d2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-(a7)
	jsr	_glEvalCoord2f
	addq.w	#$8,a7
L586
;	glEnd();
	jsr	_glEnd
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,d2-d5
	rts

	SECTION "_nurbs_map_bezier:0",CODE


;static void
_nurbs_map_bezier
	movem.l	d2-d6/a2,-(a7)
	movem.l	$30(a7),d0/d1
	move.l	$2C(a7),d2
	move.l	$28(a7),d3
	move.l	$1C(a7),d6
	move.l	$20(a7),a0
	move.l	$24(a7),a1
L587
;	if(s==0)
	tst.l	d0
	bne.b	L589
L588
;		top=*(tfactors+t*3);
	move.l	d1,d3
	muls.l	#3,d3
	move.l	0(a1,d3.l*4),d3
;		bottom=*(tfactors+t*3+1);
	move.l	d1,d4
	muls.l	#3,d4
	lea	0(a1,d4.l*4),a1
	move.l	4(a1),d5
	bra.b	L592
L589
;	if(s==s_bezier_cnt-1)
	subq.l	#1,d3
	cmp.l	d3,d0
	bne.b	L591
L590
;		top=*(tfactors+t*3+2);
	move.l	d1,d3
	muls.l	#3,d3
	lea	0(a1,d3.l*4),a2
	move.l	$8(a2),d3
;		bottom=*(tfactors+t*3);
	move.l	d1,d4
	muls.l	#3,d4
	move.l	0(a1,d4.l*4),d5
	bra.b	L592
L591
;		top=bottom=*(tfactors+t*3);
	move.l	d1,d3
	muls.l	#3,d3
	move.l	0(a1,d3.l*4),d5
	move.l	d5,d3
L592
;	if(t==0)
	tst.l	d1
	bne.b	L594
L593
;		left=*(sfactors+s*3+1);
	move.l	d0,d1
	muls.l	#3,d1
	lea	0(a0,d1.l*4),a1
	move.l	4(a1),d4
;		right=*(sfactors+s*3);
	muls.l	#3,d0
	move.l	0(a0,d0.l*4),d2
	bra.b	L597
L594
;	if(t==t_bezier_cnt-1)
	subq.l	#1,d2
	cmp.l	d2,d1
	bne.b	L596
L595
;		left=*(sfactors+s*3);
	move.l	d0,d1
	muls.l	#3,d1
	move.l	0(a0,d1.l*4),d4
;		right=*(sfactors+s*3+2);
	muls.l	#3,d0
	lea	0(a0,d0.l*4),a0
	move.l	$8(a0),d2
	bra.b	L597
L596
;		left=right=*(sfactors+s*3);
	muls.l	#3,d0
	move.l	0(a0,d0.l*4),d2
	move.l	d2,d4
L597
;	if(top>bottom)
	cmp.l	d5,d3
	ble	L604
L598
;		if(left<right)
	cmp.l	d2,d4
	bge	L600
L599
;			glMapGrid2f(right, 0.0, 1.0, top, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,1,right, 1, top);
	move.l	d3,-(a7)
	pea	1.w
	move.l	d2,-(a7)
	pea	1.w
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_s(display_mode,1,right,1,1,left,0,(GLfloat)lef
	fmove.l	d4,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	pea	1.w
	pea	1.w
	move.l	d2,-(a7)
	pea	1.w
	move.l	d6,-(a7)
	jsr	_tesselate_strip_s
	add.w	#$20,a7
;			tesselate_bottom_left_corner(display_mode,(GLfloat)(1.0/left),
	fmove.l	d5,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d4,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_bottom_left_corner
	add.w	#$C,a7
;			tesselate_strip_t(display_mode,top,1,1,bottom,1,0,(GLfloat)bot
	fmove.l	d5,fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	pea	1.w
	move.l	d5,-(a7)
	pea	1.w
	pea	1.w
	move.l	d3,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_t
	add.w	#$20,a7
	bra	L603
L600
;		if(left==right)
	cmp.l	d2,d4
	bne.b	L602
L601
;			glMapGrid2f(right, 0.0, 1.0, top, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,1,right, 0, top);
	move.l	d3,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	pea	1.w
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_t(display_mode,top,0,1,bottom,0,0,(GLfloat)bot
	fmove.l	d5,fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	clr.l	-(a7)
	move.l	d5,-(a7)
	pea	1.w
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_t
	add.w	#$20,a7
	bra	L603
L602
;			glMapGrid2f(left, 0.0, 1.0, top, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,1,left, 0, top-1);
	move.l	d3,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	pea	1.w
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_t(display_mode,top-1,0,1,bottom-1,0,0,
	fmove.l	d5,fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	clr.l	-(a7)
	move.l	d5,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	pea	1.w
	clr.l	-(a7)
	move.l	d3,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_t
	add.w	#$20,a7
;			tesselate_bottom_right_corner(display_mode,top-1,bottom-1,
	fmove.l	d5,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	subq.l	#1,d5
	move.l	d5,-(a7)
	move.l	d3,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_bottom_right_corner
	add.w	#$14,a7
;			tesselate_strip_s(display_mode,left,1,top-1,right,1,right,
	fmove.l	d2,fp0
	fmove.s	fp0,-(a7)
	move.l	d2,-(a7)
	pea	1.w
	move.l	d2,-(a7)
	subq.l	#1,d3
	move.l	d3,-(a7)
	pea	1.w
	move.l	d4,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_s
	add.w	#$20,a7
L603
	bra	L616
L604
;	if(top==bottom)
	cmp.l	d5,d3
	bne	L611
L605
;		if(left<right)
	cmp.l	d2,d4
	bge.b	L607
L606
;			glMapGrid2f(right, 0.0, 1.0, top, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,0,right, 1, top);
	move.l	d3,-(a7)
	pea	1.w
	move.l	d2,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_s(display_mode,0,right,1,0,left,0,(GLfloat)lef
	fmove.l	d4,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	clr.l	-(a7)
	pea	1.w
	move.l	d2,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_s
	add.w	#$20,a7
	bra	L610
L607
;		if(left==right)
	cmp.l	d2,d4
	bne.b	L609
L608
;			glMapGrid2f(right, 0.0, 1.0, top, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,0,right, 0, top);
	move.l	d3,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
	bra.b	L610
L609
;			glMapGrid2f(left, 0.0, 1.0, top, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,0,left, 0, top-1);
	move.l	d3,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_s(display_mode,left,0,top-1,right,0,right,
	fmove.l	d2,fp0
	fmove.s	fp0,-(a7)
	move.l	d2,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	subq.l	#1,d3
	move.l	d3,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_s
	add.w	#$20,a7
L610
	bra	L616
L611
;		if(left<right)
	cmp.l	d2,d4
	bge	L613
L612
;			glMapGrid2f(right, 0.0, 1.0, bottom, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d5,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,0,right-1, 1, bottom);
	move.l	d5,-(a7)
	pea	1.w
	move.l	d2,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_s(display_mode,0,right-1,1,0,left-1,0,
	fmove.l	d4,fp0
	fmove.s	fp0,-(a7)
	clr.l	-(a7)
	move.l	d4,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	pea	1.w
	move.l	d2,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_s
	add.w	#$20,a7
;			tesselate_top_left_corner(display_mode,right-1,left-1,
	fmove.l	d3,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d4,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	subq.l	#1,d4
	move.l	d4,-(a7)
	move.l	d2,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_top_left_corner
	add.w	#$14,a7
;			tesselate_strip_t(display_mode,1,bottom,right-1,1,top,top,
	fmove.l	d3,fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	move.l	d3,-(a7)
	move.l	d3,-(a7)
	pea	1.w
	subq.l	#1,d2
	move.l	d2,-(a7)
	move.l	d5,-(a7)
	pea	1.w
	move.l	d6,-(a7)
	jsr	_tesselate_strip_t
	add.w	#$20,a7
	bra	L616
L613
;		if(left==right)
	cmp.l	d2,d4
	bne.b	L615
L614
;			glMapGrid2f(right, 0.0, 1.0, bottom, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d5,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,0,right-1, 0, bottom);
	move.l	d5,-(a7)
	clr.l	-(a7)
	move.l	d2,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_t(display_mode,0,bottom,right-1,0,top,top,
	fmove.l	d3,fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	move.l	d3,-(a7)
	move.l	d3,-(a7)
	clr.l	-(a7)
	subq.l	#1,d2
	move.l	d2,-(a7)
	move.l	d5,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_t
	add.w	#$20,a7
	bra	L616
L615
;			glMapGrid2f(left, 0.0, 1.0, bottom, 0.0, 1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d5,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	d4,-(a7)
	jsr	_glMapGrid2f
	add.w	#$18,a7
;			glEvalMesh2(display_mode,0,left-1, 0, bottom-1);
	move.l	d5,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d4,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_glEvalMesh2
	add.w	#$14,a7
;			tesselate_strip_t(display_mode,0,bottom-1,left-1,0,top-1,top,
	fmove.l	d3,fp0
	fmove.l	fp0,d0
	move.l	d0,-(a7)
	move.l	d3,-(a7)
	move.l	d3,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d4,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	move.l	d5,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	clr.l	-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_t
	add.w	#$20,a7
;			tesselate_top_right_corner(display_mode,left-1,bottom-1,right,
	fmove.l	d3,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	fmove.l	d2,fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.s	fp0,-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	d5,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	move.l	d4,d0
	subq.l	#1,d0
	move.l	d0,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_top_right_corner
	add.w	#$1C,a7
;			tesselate_strip_s(display_mode,left-1,0,bottom-1,right-1,0,rig
	fmove.l	d2,fp0
	fmove.s	fp0,-(a7)
	move.l	d2,-(a7)
	clr.l	-(a7)
	subq.l	#1,d2
	move.l	d2,-(a7)
	subq.l	#1,d5
	move.l	d5,-(a7)
	clr.l	-(a7)
	subq.l	#1,d4
	move.l	d4,-(a7)
	move.l	d6,-(a7)
	jsr	_tesselate_strip_s
	add.w	#$20,a7
L616
	movem.l	(a7)+,d2-d6/a2
	rts

	SECTION "_draw_polygon_mode:0",CODE


;static void
_draw_polygon_mode
L642	EQU	-$18
	link	a5,#L642
	movem.l	d2-d7/a2-a4,-(a7)
	movem.l	$C(a5),a2-a4
L617
;	t_bezier_cnt=new_ctrl->t_bezier_cnt;
	move.l	a3,a0
	move.l	$64(a0),d4
;	s_bezier_cnt=new_ctrl->s_bezier_cnt;
	move.l	a3,a0
	move.l	$60(a0),d6
;	glEnable(nobj->surface.geom.type);
	move.l	$E0(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;	if(new_ctrl->color_ctrl)
	move.l	a3,a1
	tst.l	$18(a1)
	beq.b	L619
L618
;		glEnable(nobj->surface.color.type);
	move.l	$10C(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;		do_color=GL_TRUE;
	move.b	#1,-$D(a5)
	bra.b	L620
L619
;		do_color=GL_FALSE;
	clr.b	-$D(a5)
L620
;	if(new_ctrl->normal_ctrl)
	move.l	a3,a1
	tst.l	$30(a1)
	beq.b	L622
L621
;		glEnable(nobj->surface.normal.type);
	move.l	$164(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;		do_normal=GL_TRUE;
	move.b	#1,-$E(a5)
	bra.b	L623
L622
;		do_normal=GL_FALSE;
	clr.b	-$E(a5)
L623
;	if(new_ctrl->texture_ctrl)
	move.l	a3,a1
	tst.l	$48(a1)
	beq.b	L625
L624
;		glEnable(nobj->surface.texture.type);
	move.l	$138(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;		do_texture=GL_TRUE;
	moveq	#1,d7
	bra.b	L626
L625
;		do_texture=GL_FALSE;
	moveq	#0,d7
L626
;	for(j=0;
	moveq	#0,d5
	bra	L640
L627
;		for(i=0;
	moveq	#0,d3
	bra	L638
L628
;			offset=j*t_bezier_cnt + i;
	move.l	d5,d2
	muls.l	d4,d2
	add.l	d3,d2
;			if(fine_culling_test_3D(nobj,*(new_ctrl->geom_offsets + offset)
	move.l	$DC(a2),-(a7)
	move.l	a3,a0
	move.l	$8(a0),-(a7)
	move.l	a3,a0
	move.l	4(a0),-(a7)
	move.l	$D8(a2),-(a7)
	move.l	$D4(a2),-(a7)
	move.l	a3,a1
	move.l	$C(a1),a0
	move.l	0(a0,d2.l*4),-(a7)
	move.l	a2,-(a7)
	jsr	_fine_culling_test_3D
	add.w	#$1C,a7
	tst.b	d0
	beq.b	L630
L629
;				
	bra	L637
L630
;			glMap2f(nobj->surface.geom.type,0.0,1.0,new_ctrl->geom_s_strid
	move.l	a3,a1
	move.l	$C(a1),a0
	move.l	0(a0,d2.l*4),-(a7)
	move.l	$D8(a2),-(a7)
	move.l	a3,a0
	move.l	$8(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$D4(a2),-(a7)
	move.l	a3,a0
	move.l	4(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$E0(a2),-(a7)
	jsr	_glMap2f
	add.w	#$28,a7
;			if(do_color)
	tst.b	-$D(a5)
	beq.b	L632
L631
;				glMap2f(nobj->surface.color.type,0.0,1.0,
	move.l	a3,a1
	move.l	$24(a1),a0
	move.l	0(a0,d2.l*4),-(a7)
	move.l	$104(a2),-(a7)
	move.l	a3,a0
	move.l	$20(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$100(a2),-(a7)
	move.l	a3,a0
	move.l	$1C(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$10C(a2),-(a7)
	jsr	_glMap2f
	add.w	#$28,a7
L632
;			if(do_normal)
	tst.b	-$E(a5)
	beq.b	L634
L633
;				glMap2f(nobj->surface.normal.type,0.0,1.0,
	move.l	a3,a1
	move.l	$3C(a1),a0
	move.l	0(a0,d2.l*4),-(a7)
	move.l	$15C(a2),-(a7)
	move.l	a3,a0
	move.l	$38(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$158(a2),-(a7)
	move.l	a3,a0
	move.l	$34(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$164(a2),-(a7)
	jsr	_glMap2f
	add.w	#$28,a7
L634
;			if(do_texture)
	tst.b	d7
	beq.b	L636
L635
;				glMap2f(nobj->surface.texture.type,0.0,1.0,
	move.l	a3,a1
	move.l	$54(a1),a0
	move.l	0(a0,d2.l*4),-(a7)
	move.l	$130(a2),-(a7)
	move.l	a3,a0
	move.l	$50(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$12C(a2),-(a7)
	move.l	a3,a0
	move.l	$4C(a0),-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$138(a2),-(a7)
	jsr	_glMap2f
	add.w	#$28,a7
L636
;			nurbs_map_bezier(display_mode,sfactors,tfactors,s_bezier_cnt,
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d6,-(a7)
	move.l	$18(a5),-(a7)
	move.l	a4,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_nurbs_map_bezier
	add.w	#$1C,a7
L637
	addq.l	#1,d3
L638
	cmp.l	d4,d3
	blt	L628
L639
	addq.l	#1,d5
L640
	cmp.l	d6,d5
	blt	L627
L641
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_init_new_ctrl:0",CODE


;void
	XDEF	_init_new_ctrl
_init_new_ctrl
	move.l	4(a7),a0
L643
;	p->geom_ctrl=p->color_ctrl=p->normal_ctrl=p->texture_ctrl=NULL;
	clr.l	$48(a0)
	clr.l	$30(a0)
	clr.l	$18(a0)
	clr.l	(a0)
;	p->geom_offsets=p->color_offsets=p->normal_offsets=p->texture_offs
	clr.l	$54(a0)
	clr.l	$3C(a0)
	clr.l	$24(a0)
	clr.l	$C(a0)
;	p->s_bezier_cnt=p->t_bezier_cnt=0;
	clr.l	$64(a0)
	clr.l	$60(a0)
	rts

	SECTION "_augment_new_ctrl:0",CODE


;GLenum
	XDEF	_augment_new_ctrl
_augment_new_ctrl
	movem.l	d2/d3/a2-a4,-(a7)
	move.l	$1C(a7),a2
	move.l	$18(a7),a4
L644
;	p->s_bezier_cnt=(p->geom_s_pt_cnt)/(nobj->surface.geom.sorder);
	move.l	$10(a2),d0
	divsl.l	$D4(a4),d0
	move.l	d0,$60(a2)
;	p->t_bezier_cnt=(p->geom_t_pt_cnt)/(nobj->surface.geom.torder);
	move.l	$14(a2),d0
	divsl.l	$D8(a4),d0
	move.l	d0,$64(a2)
;	offset_size=(p->s_bezier_cnt)*(p->t_bezier_cnt);
	move.l	$60(a2),d2
	muls.l	$64(a2),d2
;	p->geom_t_stride=nobj->surface.geom.dim;
	move.l	$DC(a4),$8(a2)
;	p->geom_s_stride=(p->geom_t_pt_cnt)*(nobj->surface.geom.dim);
	move.l	$14(a2),d0
	muls.l	$DC(a4),d0
	move.l	d0,4(a2)
;	p->color_t_stride=nobj->surface.color.dim;
	move.l	$108(a4),$20(a2)
;	p->color_s_stride=(p->color_t_pt_cnt)*(nobj->surface.color.dim);
	move.l	$2C(a2),d0
	muls.l	$108(a4),d0
	move.l	d0,$1C(a2)
;	p->normal_t_stride=nobj->surface.normal.dim;
	move.l	$160(a4),$38(a2)
;	p->normal_s_stride=(p->normal_t_pt_cnt)*(nobj->surface.normal.dim);
	move.l	$44(a2),d0
	muls.l	$160(a4),d0
	move.l	d0,$34(a2)
;	p->texture_t_stride=nobj->surface.texture.dim;
	move.l	$134(a4),$50(a2)
;	p->texture_s_stride=(p->texture_t_pt_cnt)*(nobj->surface.texture.d
	move.l	$5C(a2),d0
	muls.l	$134(a4),d0
	move.l	d0,$4C(a2)
;	if((p->geom_offsets=(GLfloat **)malloc(sizeof(GLfloat *)*offset_si
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,$C(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L646
L645
;		call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2-a4
	rts
L646
;			if(glu_do_sampling_uv(nobj,&new_ctrl,&sfactors,&tfactors)
	tst.l	$18(a2)
	beq.b	L649
L647
;		if((p->color_offsets=(GLfloat **)malloc(sizeof(GLfloat *)*offset
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,$24(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L649
L648
;			free_new_ctrl(p);
	move.l	a2,-(a7)
	jsr	_free_new_ctrl
	addq.w	#4,a7
;			call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2-a4
	rts
L649
;	if(p->normal_ctrl)
	tst.l	$30(a2)
	beq.b	L652
L650
;		if((p->normal_offsets=(GLfloat **)malloc(sizeof(GLfloat *)*offse
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,$3C(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L652
L651
;			free_new_ctrl(p);
	move.l	a2,-(a7)
	jsr	_free_new_ctrl
	addq.w	#4,a7
;			call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2-a4
	rts
L652
;	if(p->texture_ctrl)
	tst.l	$48(a2)
	beq.b	L655
L653
;		if((p->texture_offsets=(GLfloat **)malloc(sizeof(GLfloat *)*offs
	move.l	d2,d0
	moveq	#2,d2
	asl.l	d2,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,$54(a2)
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L655
L654
;			free_new_ctrl(p);
	move.l	a2,-(a7)
	jsr	_free_new_ctrl
	addq.w	#4,a7
;			call_user_error(nobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/d3/a2-a4
	rts
L655
;	for(i=0;
	moveq	#0,d1
	bra.b	L660
L656
;		for(j=0;
	moveq	#0,d0
	bra.b	L658
L657
;			*(p->geom_offsets + i*(p->t_bezier_cnt) + j) =
	move.l	$D4(a4),d2
	muls.l	d1,d2
	muls.l	$DC(a4),d2
	muls.l	$14(a2),d2
	move.l	(a2),a1
	lea	0(a1,d2.l*4),a1
	move.l	$DC(a4),d2
	muls.l	d0,d2
	muls.l	$D8(a4),d2
	lea	0(a1,d2.l*4),a1
	move.l	$64(a2),d2
	muls.l	d1,d2
	move.l	$C(a2),a0
	lea	0(a0,d2.l*4),a0
	move.l	a1,0(a0,d0.l*4)
	addq.l	#1,d0
L658
	cmp.l	$64(a2),d0
	blt.b	L657
L659
	addq.l	#1,d1
L660
	cmp.l	$60(a2),d1
	blt.b	L656
L661
;	if(p->color_ctrl)
	tst.l	$18(a2)
	beq.b	L668
L662
;		for(i=0;
	moveq	#0,d1
	bra.b	L667
L663
;			for(j=0;
	moveq	#0,d0
	bra.b	L665
L664
;				*(p->color_offsets + i*(p->t_bezier_cnt) + j) =
	move.l	$100(a4),d2
	muls.l	d1,d2
	muls.l	$108(a4),d2
	muls.l	$2C(a2),d2
	move.l	$18(a2),a1
	lea	0(a1,d2.l*4),a1
	move.l	$108(a4),d2
	muls.l	d0,d2
	muls.l	$104(a4),d2
	lea	0(a1,d2.l*4),a1
	move.l	$64(a2),d2
	muls.l	d1,d2
	move.l	$24(a2),a0
	lea	0(a0,d2.l*4),a0
	move.l	a1,0(a0,d0.l*4)
	addq.l	#1,d0
L665
	cmp.l	$64(a2),d0
	blt.b	L664
L666
	addq.l	#1,d1
L667
	cmp.l	$60(a2),d1
	blt.b	L663
L668
;	if(p->normal_ctrl)
	tst.l	$30(a2)
	beq.b	L675
L669
;		for(i=0;
	moveq	#0,d1
	bra.b	L674
L670
;			for(j=0;
	moveq	#0,d0
	bra.b	L672
L671
;				*(p->normal_offsets + i*(p->t_bezier_cnt) + j) =
	move.l	$158(a4),d2
	muls.l	d1,d2
	muls.l	$160(a4),d2
	muls.l	$44(a2),d2
	move.l	$30(a2),a1
	lea	0(a1,d2.l*4),a1
	move.l	$160(a4),d2
	muls.l	d0,d2
	muls.l	$15C(a4),d2
	lea	0(a1,d2.l*4),a1
	move.l	$64(a2),d2
	muls.l	d1,d2
	move.l	$3C(a2),a0
	lea	0(a0,d2.l*4),a0
	move.l	a1,0(a0,d0.l*4)
	addq.l	#1,d0
L672
	cmp.l	$64(a2),d0
	blt.b	L671
L673
	addq.l	#1,d1
L674
	cmp.l	$60(a2),d1
	blt.b	L670
L675
;	if(p->texture_ctrl)
	tst.l	$48(a2)
	beq.b	L682
L676
;		for(i=0;
	moveq	#0,d1
	bra.b	L681
L677
;			for(j=0;
	moveq	#0,d0
	bra.b	L679
L678
;				*(p->texture_offsets + i*(p->t_bezier_cnt) + j) =
	move.l	$12C(a4),d2
	muls.l	d1,d2
	muls.l	$134(a4),d2
	muls.l	$5C(a2),d2
	move.l	$48(a2),a1
	lea	0(a1,d2.l*4),a1
	move.l	$134(a4),d2
	muls.l	d0,d2
	muls.l	$130(a4),d2
	lea	0(a1,d2.l*4),a1
	move.l	$64(a2),d2
	muls.l	d1,d2
	move.l	$54(a2),a0
	lea	0(a0,d2.l*4),a0
	move.l	a1,0(a0,d0.l*4)
	addq.l	#1,d0
L679
	cmp.l	$64(a2),d0
	blt.b	L678
L680
	addq.l	#1,d1
L681
	cmp.l	$60(a2),d1
	blt.b	L677
L682
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a2-a4
	rts

	SECTION "_do_nurbs_surface:0",CODE


;void
	XDEF	_do_nurbs_surface
_do_nurbs_surface
L705	EQU	-$70
	link	a5,#L705
	move.l	a2,-(a7)
	move.l	$8(a5),a2
L683
;	if(test_nurbs_surfaces(nobj)!=GLU_NO_ERROR)
	move.l	a2,-(a7)
	jsr	_test_nurbs_surfaces
	addq.w	#4,a7
	tst.l	d0
	beq.b	L685
L684
	move.l	(a7)+,a2
	unlk	a5
	rts
L685
;	init_new_ctrl(&new_ctrl);
	pea	-$70(a5)
	jsr	_init_new_ctrl
	addq.w	#4,a7
;	if(convert_surfs(nobj,&new_ctrl)!=GLU_NO_ERROR)
	pea	-$70(a5)
	move.l	a2,-(a7)
	jsr	_convert_surfs
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L687
L686
	move.l	(a7)+,a2
	unlk	a5
	rts
L687
;	if(augment_new_ctrl(nobj,&new_ctrl)!=GLU_NO_ERROR)
	pea	-$70(a5)
	move.l	a2,-(a7)
	jsr	_augment_new_ctrl
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L689
L688
	move.l	(a7)+,a2
	unlk	a5
	rts
L689
;	switch(nobj->sampling_method)
	move.l	$A4(a2),d0
	cmp.l	#$18778,d0
	beq	L696
	bgt.b	L706
	cmp.l	#$18777,d0
	beq.b	L690
	bra	L699
L706
	cmp.l	#$18779,d0
	beq.b	L693
	bra	L699
;		
L690
;			if(glu_do_sampling_3D(nobj,&new_ctrl,&sfactors,&tfactors)!=
	pea	-$8(a5)
	pea	-4(a5)
	pea	-$70(a5)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_3D
	add.w	#$10,a7
	tst.l	d0
	beq.b	L692
L691
;				free_new_ctrl(&new_ctrl);
	pea	-$70(a5)
	jsr	_free_new_ctrl
	addq.w	#4,a7
	move.l	(a7)+,a2
	unlk	a5
	rts
L692
;			
	bra.b	L700
L693
;			if(glu_do_sampling_uv(nobj,&new_ctrl,&sfactors,&tfactors)!=
	pea	-$8(a5)
	pea	-4(a5)
	pea	-$70(a5)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_uv
	add.w	#$10,a7
	tst.l	d0
	beq.b	L695
L694
;				free_new_ctrl(&new_ctrl);
	pea	-$70(a5)
	jsr	_free_new_ctrl
	addq.w	#4,a7
	move.l	(a7)+,a2
	unlk	a5
	rts
L695
;			
	bra.b	L700
L696
;			if(glu_do_sampling_param_3D(nobj,&new_ctrl,&sfactors,&tfactors)
	pea	-$8(a5)
	pea	-4(a5)
	pea	-$70(a5)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_param_3D
	add.w	#$10,a7
	tst.l	d0
	beq.b	L698
L697
;				free_new_ctrl(&new_ctrl);
	pea	-$70(a5)
	jsr	_free_new_ctrl
	addq.w	#4,a7
	move.l	(a7)+,a2
	unlk	a5
	rts
L698
;			
	bra.b	L700
L699
;			abort();
	jsr	_abort
L700
;	glFrontFace(GL_CW);
	pea	$900.w
	jsr	_glFrontFace
	addq.w	#4,a7
;	switch(nobj->display_mode)
	move.l	$A(a2),d0
	cmp.l	#$18790,d0
	beq.b	L702
	bgt.b	L707
	cmp.l	#$186AC,d0
	beq.b	L701
	bra.b	L703
L707
	cmp.l	#$18791,d0
	beq.b	L702
	bra.b	L703
;		
L701
;				draw_polygon_mode(GL_FILL,nobj,&new_ctrl,sfactors,tfactors);
	move.l	-$8(a5),-(a7)
	move.l	-4(a5),-(a7)
	pea	-$70(a5)
	move.l	a2,-(a7)
	pea	$1B02.w
	jsr	_draw_polygon_mode
	add.w	#$14,a7
;			
	bra.b	L704
L702
;				draw_polygon_mode(GL_LINE,nobj,&new_ctrl,sfactors,tfactors);
	move.l	-$8(a5),-(a7)
	move.l	-4(a5),-(a7)
	pea	-$70(a5)
	move.l	a2,-(a7)
	pea	$1B01.w
	jsr	_draw_polygon_mode
	add.w	#$14,a7
;			
	bra.b	L704
L703
;			abort();
	jsr	_abort
L704
;	free(sfactors);
	move.l	-4(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
;	free(tfactors);
	move.l	-$8(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
;	free_new_ctrl(&new_ctrl);
	pea	-$70(a5)
	jsr	_free_new_ctrl
	addq.w	#4,a7
	move.l	(a7)+,a2
	unlk	a5
	rts

	END
