
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/nurbscrv.c
	mc68030
	mc68881
	XREF	_free_unified_knots
	XREF	_select_knot_working_range
	XREF	_fine_culling_test_2D
	XREF	_glu_do_sampling_crv
	XREF	_calc_new_ctrl_pts
	XREF	_calc_alphas
	XREF	_explode_knot
	XREF	_test_knot
	XREF	_call_user_error
	XREF	_glEvalMesh1
	XREF	_glMapGrid1f
	XREF	_glMap1f
	XREF	_glGetIntegerv
	XREF	_glEnable
	XREF	_abort
	XREF	_free
	XREF	_fabs__r

	SECTION "_get_curve_dim:0",CODE


;static int
_get_curve_dim
	move.l	4(a7),d0
L87
;	switch(type)
	sub.l	#$D90,d0
	cmp.l	#$8,d0
	bhi.b	L97
	move.l	L98(pc,d0.l*4),a0
	jmp	(a0)
L98
	dc.l	L91
	dc.l	L90
	dc.l	L92
	dc.l	L93
	dc.l	L94
	dc.l	L95
	dc.l	L96
	dc.l	L88
	dc.l	L89
;		
L88
	moveq	#3,d0
	rts
L89
	moveq	#4,d0
	rts
L90
	moveq	#1,d0
	rts
L91
	moveq	#4,d0
	rts
L92
	moveq	#3,d0
	rts
L93
	moveq	#1,d0
	rts
L94
	moveq	#2,d0
	rts
L95
	moveq	#3,d0
	rts
L96
	moveq	#4,d0
	rts
L97
;                default:  abort();
	jsr	_abort
	moveq	#0,d0
	rts

	SECTION "_test_nurbs_curve:0",CODE

	rts

;static GLenum
_test_nurbs_curve
L114	EQU	-$8
	link	a5,#L114
	movem.l	d2/a2/a3,-(a7)
	move.l	$C(a5),a2
	move.l	$8(a5),a3
L99
;	if(attribs->order < 0)
	tst.l	$10(a2)
	bpl.b	L101
L100
;		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
L101
;	glGetIntegerv(GL_MAX_EVAL_ORDER,&tmp_int);
	pea	-$8(a5)
	pea	$D30.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;	if(attribs->order > tmp_int || attribs->order < 2)
	move.l	$10(a2),d0
	cmp.l	-$8(a5),d0
	bgt.b	L103
L102
	move.l	$10(a2),d0
	cmp.l	#2,d0
	bge.b	L104
L103
;		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
L104
;	if(attribs->knot_count < attribs->order +2)
	move.l	$10(a2),d0
	addq.l	#2,d0
	move.l	(a2),d1
	cmp.l	d0,d1
	bge.b	L106
L105
;		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
L106
;	if(attribs->stride < 0)
	tst.l	$8(a2)
	bpl.b	L108
L107
;		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
L108
;	if(attribs->knot==NULL || attribs->ctrlarray==NULL)
	move.l	4(a2),a0
	cmp.w	#0,a0
	beq.b	L110
L109
	move.l	$C(a2),a0
	cmp.w	#0,a0
	bne.b	L111
L110
;		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
L111
;	if((err=test_knot(attribs->knot_count,attribs->knot,attribs->order)
	move.l	$10(a2),-(a7)
	move.l	4(a2),-(a7)
	move.l	(a2),-(a7)
	jsr	_test_knot
	add.w	#$C,a7
	tst.l	d0
	beq.b	L113
L112
;		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
L113
	moveq	#0,d0
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts

	SECTION "_test_nurbs_curves:0",CODE


;static GLenum
_test_nurbs_curves
	move.l	a2,-(a7)
	move.l	$8(a7),a2
L115
;	if(test_nurbs_curve(nobj,&(nobj->curve.geom))!=GLU_NO_ERROR)
	pea	$168(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_curve
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L117
L116
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L117
;	if(nobj->curve.color.type!=GLU_INVALID_ENUM)
	move.l	$19C(a2),d0
	cmp.l	#$18A24,d0
	beq.b	L120
L118
;		if(test_nurbs_curve(nobj,&(nobj->curve.color))!=GLU_NO_ERROR)
	pea	$184(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_curve
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L120
L119
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L120
;	if(nobj->curve.normal.type!=GLU_INVALID_ENUM)
	move.l	$1D4(a2),d0
	cmp.l	#$18A24,d0
	beq.b	L123
L121
;		if(test_nurbs_curve(nobj,&(nobj->curve.normal))!=GLU_NO_ERROR)
	pea	$1BC(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_curve
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L123
L122
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L123
;	if(nobj->curve.texture.type!=GLU_INVALID_ENUM)
	move.l	$1B8(a2),d0
	cmp.l	#$18A24,d0
	beq.b	L126
L124
;		if(test_nurbs_curve(nobj,&(nobj->curve.texture))!=GLU_NO_ERROR)
	pea	$1A0(a2)
	move.l	a2,-(a7)
	jsr	_test_nurbs_curve
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L126
L125
	move.l	#$18707,d0
	move.l	(a7)+,a2
	rts
L126
	moveq	#0,d0
	move.l	(a7)+,a2
	rts

	SECTION "_fill_knot_structures:0",CODE


;static GLenum
_fill_knot_structures
L169	EQU	-$14
	link	a5,#L169
	movem.l	d2-d4/a2-a4,-(a7)
	move.l	$8(a5),a3
	move.l	$18(a5),a4
L127
;	geom_knot->unified_knot=NULL;
	move.l	$C(a5),a1
	clr.l	$8(a1)
;	knot=geom_knot->knot=nobj->curve.geom.knot;
	move.l	$16C(a3),a2
	move.l	$C(a5),a0
	move.l	a2,(a0)
;	nknots=geom_knot->nknots=nobj->curve.geom.knot_count;
	move.l	$168(a3),d4
	move.l	$C(a5),a0
	move.l	d4,4(a0)
;	order=geom_knot->order=nobj->curve.geom.order;
	move.l	$178(a3),d0
	move.l	$C(a5),a0
	move.l	d0,$10(a0)
;	geom_knot->delta_nknots=0;
	move.l	$C(a5),a0
	clr.l	$1C(a0)
;	t_min=geom_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_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	L129
L128
;		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
L129
;	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	L131
L130
;		geom_knot->open_at_begin=GL_TRUE;
	move.l	$C(a5),a0
	move.b	#1,$20(a0)
	bra.b	L132
L131
;		geom_knot->open_at_begin=GL_FALSE;
	move.l	$C(a5),a0
	clr.b	$20(a0)
L132
;	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	L134
L133
;		geom_knot->open_at_end=GL_TRUE;
	move.l	$C(a5),a0
	move.b	#1,$21(a0)
	bra.b	L135
L134
;		geom_knot->open_at_end=GL_FALSE;
	move.l	$C(a5),a0
	clr.b	$21(a0)
L135
;	if(nobj->curve.color.type!=GLU_INVALID_ENUM)
	move.l	$19C(a3),d0
	cmp.l	#$18A24,d0
	beq	L145
L136
;		color_knot->unified_knot=(GLfloat *)1;
	move.l	$10(a5),a1
	move.l	#1,$8(a1)
;		knot=color_knot->knot=nobj->curve.color.knot;
	move.l	$188(a3),a2
	move.l	$10(a5),a0
	move.l	a2,(a0)
;		nknots=color_knot->nknots=nobj->curve.color.knot_count;
	move.l	$184(a3),d4
	move.l	$10(a5),a0
	move.l	d4,4(a0)
;		order=color_knot->order=nobj->curve.color.order;
	move.l	$194(a3),d0
	move.l	$10(a5),a0
	move.l	d0,$10(a0)
;		color_knot->delta_nknots=0;
	move.l	$10(a5),a0
	clr.l	$1C(a0)
;		t_min=color_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=color_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	L138
L137
;			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
L138
;		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	L140
L139
;			color_knot->open_at_begin=GL_TRUE;
	move.l	$10(a5),a0
	move.b	#1,$20(a0)
	bra.b	L141
L140
;			color_knot->open_at_begin=GL_FALSE;
	move.l	$10(a5),a0
	clr.b	$20(a0)
L141
;		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	L143
L142
;			color_knot->open_at_end=GL_TRUE;
	move.l	$10(a5),a0
	move.b	#1,$21(a0)
	bra.b	L144
L143
;			color_knot->open_at_end=GL_FALSE;
	move.l	$10(a5),a0
	clr.b	$21(a0)
L144
	bra.b	L146
L145
;		color_knot->unified_knot=NULL;
	move.l	$10(a5),a1
	clr.l	$8(a1)
L146
;	if(nobj->curve.normal.type!=GLU_INVALID_ENUM)
	move.l	$1D4(a3),d0
	cmp.l	#$18A24,d0
	beq	L156
L147
;		normal_knot->unified_knot=(GLfloat *)1;
	move.l	$14(a5),a1
	move.l	#1,$8(a1)
;		knot=normal_knot->knot=nobj->curve.normal.knot;
	move.l	$1C0(a3),a2
	move.l	$14(a5),a0
	move.l	a2,(a0)
;		nknots=normal_knot->nknots=nobj->curve.normal.knot_count;
	move.l	$1BC(a3),d4
	move.l	$14(a5),a0
	move.l	d4,4(a0)
;		order=normal_knot->order=nobj->curve.normal.order;
	move.l	$1CC(a3),d0
	move.l	$14(a5),a0
	move.l	d0,$10(a0)
;		normal_knot->delta_nknots=0;
	move.l	$14(a5),a0
	clr.l	$1C(a0)
;		t_min=normal_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=normal_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	L149
L148
;			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
L149
;		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	L151
L150
;			normal_knot->open_at_begin=GL_TRUE;
	move.l	$14(a5),a0
	move.b	#1,$20(a0)
	bra.b	L152
L151
;			normal_knot->open_at_begin=GL_FALSE;
	move.l	$14(a5),a0
	clr.b	$20(a0)
L152
;		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	L154
L153
;			normal_knot->open_at_end=GL_TRUE;
	move.l	$14(a5),a0
	move.b	#1,$21(a0)
	bra.b	L155
L154
;			normal_knot->open_at_end=GL_FALSE;
	move.l	$14(a5),a0
	clr.b	$21(a0)
L155
	bra.b	L157
L156
;		normal_knot->unified_knot=NULL;
	move.l	$14(a5),a1
	clr.l	$8(a1)
L157
;	if(nobj->curve.texture.type!=GLU_INVALID_ENUM)
	move.l	$1B8(a3),d0
	cmp.l	#$18A24,d0
	beq	L167
L158
;		texture_knot->unified_knot=(GLfloat *)1;
	move.l	a4,a1
	move.l	#1,$8(a1)
;		knot=texture_knot->knot=nobj->curve.texture.knot;
	move.l	$1A4(a3),a2
	move.l	a4,a0
	move.l	a2,(a0)
;		nknots=texture_knot->nknots=nobj->curve.texture.knot_count;
	move.l	$1A0(a3),d4
	move.l	a4,a0
	move.l	d4,4(a0)
;		order=texture_knot->order=nobj->curve.texture.order;
	move.l	$1B0(a3),d0
	move.l	a4,a0
	move.l	d0,$10(a0)
;		texture_knot->delta_nknots=0;
	move.l	a4,a0
	clr.l	$1C(a0)
;		t_min=texture_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_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	L160
L159
;			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
L160
;		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	L162
L161
;			texture_knot->open_at_begin=GL_TRUE;
	move.l	a4,a0
	move.b	#1,$20(a0)
	bra.b	L163
L162
;			texture_knot->open_at_begin=GL_FALSE;
	move.l	a4,a0
	clr.b	$20(a0)
L163
;		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	L165
L164
;			texture_knot->open_at_end=GL_TRUE;
	move.l	a4,a0
	move.b	#1,$21(a0)
	bra.b	L166
L165
;			texture_knot->open_at_end=GL_FALSE;
	move.l	a4,a0
	clr.b	$21(a0)
L166
	bra.b	L168
L167
;		texture_knot->unified_knot=NULL;
	move.l	a4,a1
	clr.l	$8(a1)
L168
	moveq	#0,d0
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts

	SECTION "_convert_curve:0",CODE


;			free_unified_knots(&geom_knot,&color_knot,&normal_k
_convert_curve
L181	EQU	-4
	link	a5,#L181
	movem.l	d2/a2-a4,-(a7)
	movem.l	$8(a5),a2-a4
L170
;	if((err=explode_knot(the_knot))!=GLU_NO_ERROR)
	move.l	a2,-(a7)
	jsr	_explode_knot
	addq.w	#4,a7
	move.l	d0,d2
	beq.b	L174
L171
;		if(the_knot->unified_knot)
	tst.l	$8(a2)
	beq.b	L173
L172
;			free(the_knot->unified_knot);
	move.l	$8(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;			the_knot->unified_knot=NULL;
	clr.l	$8(a2)
L173
	move.l	d2,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L174
;	if(the_knot->unified_knot)
	tst.l	$8(a2)
	beq.b	L176
L175
;		free(the_knot->unified_knot);
	move.l	$8(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;		the_knot->unified_knot=NULL;
	clr.l	$8(a2)
L176
;	if((err=calc_alphas(the_knot))!=GLU_NO_ERROR)
	move.l	a2,-(a7)
	jsr	_calc_alphas
	addq.w	#4,a7
	move.l	d0,d2
	beq.b	L178
L177
;		free(the_knot->new_knot);
	move.l	$22(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	d2,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L178
;	free(the_knot->new_knot);
	move.l	$22(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
;	if((err=calc_new_ctrl_pts(attrib->ctrlarray,attrib->stride,the_kno
	move.l	$14(a5),-(a7)
	move.l	a4,-(a7)
	move.l	a3,a0
	move.l	$14(a0),-(a7)
	move.l	a2,-(a7)
	move.l	a3,a0
	move.l	$8(a0),-(a7)
	move.l	a3,a1
	move.l	$C(a1),-(a7)
	jsr	_calc_new_ctrl_pts
	add.w	#$18,a7
	move.l	d0,d2
	beq.b	L180
L179
;		free(the_knot->alpha);
	move.l	$26(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	d2,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L180
;	free(the_knot->alpha);
	move.l	$26(a2),-(a7)
	jsr	_free
	addq.w	#4,a7
	moveq	#0,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts

	SECTION "_convert_curves:0",CODE


;static GLenum
_convert_curves
L204	EQU	-$B0
	link	a5,#L204
	movem.l	d2/a2-a4,-(a7)
	movem.l	$8(a5),a2/a4
	move.l	$14(a5),a3
L182
;	*new_color_ctrl=*new_normal_ctrl=*new_texture_ctrl=NULL;
	move.l	$1C(a5),a1
	clr.l	(a1)
	move.l	$18(a5),a1
	clr.l	(a1)
	move.l	a3,a1
	clr.l	(a1)
;	if(fill_knot_structures(nobj,&geom_knot,&color_knot,&normal_knot,
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	move.l	a2,-(a7)
	jsr	_fill_knot_structures
	add.w	#$14,a7
	tst.l	d0
	beq.b	L184
L183
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L184
;	if((err=select_knot_working_range(nobj,&geom_knot,&color_knot,&nor
	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	L186
L185
	move.l	d2,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts
L186
;	nobj->curve.geom.dim=get_curve_dim(nobj->curve.geom.type);
	move.l	$180(a2),-(a7)
	jsr	_get_curve_dim
	addq.w	#4,a7
	move.l	d0,$17C(a2)
;	if((err=convert_curve(&geom_knot,&(nobj->curve.geom),new_geom_ctrl
	move.l	$10(a5),-(a7)
	move.l	a4,-(a7)
	pea	$168(a2)
	pea	-$2A(a5)
	jsr	_convert_curve
	add.w	#$10,a7
	move.l	d0,d2
	beq.b	L188
L187
;		free_unified_knots(&geom_knot,&color_knot,&normal_knot,&texture_
	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-a4
	unlk	a5
	rts
L188
;	if(color_knot.unified_knot)
	tst.l	-$4C(a5)
	beq.b	L191
L189
;		nobj->curve.color.dim=get_curve_dim(nobj->curve.color.type);
	move.l	$19C(a2),-(a7)
	jsr	_get_curve_dim
	addq.w	#4,a7
	move.l	d0,$198(a2)
;		if((err=convert_curve(&color_knot,&(nobj->curve.color),
	pea	-$AC(a5)
	move.l	a3,-(a7)
	pea	$184(a2)
	pea	-$54(a5)
	jsr	_convert_curve
	add.w	#$10,a7
	move.l	d0,d2
	beq.b	L191
L190
;			free_unified_knots(&geom_knot,&color_knot,&normal_knot,&textur
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free(*new_geom_ctrl);
	move.l	a4,a1
	move.l	(a1),-(a7)
	jsr	_free
	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-a4
	unlk	a5
	rts
L191
;	if(normal_knot.unified_knot)
	tst.l	-$76(a5)
	beq	L196
L192
;		nobj->curve.normal.dim=get_curve_dim(nobj->curve.normal.type);
	move.l	$1D4(a2),-(a7)
	jsr	_get_curve_dim
	addq.w	#4,a7
	move.l	d0,$1D0(a2)
;		if((err=convert_curve(&normal_knot,&(nobj->curve.normal),
	pea	-$AC(a5)
	move.l	$18(a5),-(a7)
	pea	$1BC(a2)
	pea	-$7E(a5)
	jsr	_convert_curve
	add.w	#$10,a7
	move.l	d0,d2
	beq.b	L196
L193
;			free_unified_knots(&geom_knot,&color_knot,&normal_knot,&textur
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free(*new_geom_ctrl);
	move.l	a4,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;			if(*new_color_ctrl)
	move.l	a3,a0
	tst.l	(a0)
	beq.b	L195
L194
;				free(*new_color_ctrl);
	move.l	a3,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
L195
;			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-a4
	unlk	a5
	rts
L196
;	if(texture_knot.unified_knot)
	tst.l	-$A0(a5)
	beq	L203
L197
;		nobj->curve.texture.dim=get_curve_dim(nobj->curve.texture.type);
	move.l	$1B8(a2),-(a7)
	jsr	_get_curve_dim
	addq.w	#4,a7
	move.l	d0,$1B4(a2)
;		if((err=convert_curve(&texture_knot,&(nobj->curve.texture),
	pea	-$AC(a5)
	move.l	$1C(a5),-(a7)
	pea	$1A0(a2)
	pea	-$A8(a5)
	jsr	_convert_curve
	add.w	#$10,a7
	move.l	d0,d2
	beq.b	L203
L198
;			free_unified_knots(&geom_knot,&color_knot,&normal_knot,&textur
	pea	-$A8(a5)
	pea	-$7E(a5)
	pea	-$54(a5)
	pea	-$2A(a5)
	jsr	_free_unified_knots
	add.w	#$10,a7
;			free(*new_geom_ctrl);
	move.l	a4,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
;			if(*new_color_ctrl)
	move.l	a3,a0
	tst.l	(a0)
	beq.b	L200
L199
;				free(*new_color_ctrl);
	move.l	a3,a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
L200
;			if(*new_normal_ctrl)
	move.l	$18(a5),a0
	tst.l	(a0)
	beq.b	L202
L201
;				free(*new_normal_ctrl);
	move.l	$18(a5),a1
	move.l	(a1),-(a7)
	jsr	_free
	addq.w	#4,a7
L202
;			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-a4
	unlk	a5
	rts
L203
	moveq	#0,d0
	movem.l	(a7)+,d2/a2-a4
	unlk	a5
	rts

	SECTION "_do_nurbs_curve:0",CODE


;void do_nurbs_curve( GLUnurbsObj *nobj)
	XDEF	_do_nurbs_curve
_do_nurbs_curve
L242	EQU	-$64
	link	a5,#L242
	movem.l	d2-d7/a2-a4,-(a7)
	move.l	$8(a5),a2
L205
;	GLint geom_order,color_order=0
	clr.l	-$8(a5)
;	GLint geom_order,color_order=0,norm
	clr.l	-$C(a5)
;	GLint geom_order,col
	clr.l	-$10(a5)
;	GLint geom_dim,color_dim=0
	moveq	#0,d7
;	GLint geom_dim,color_dim=0,normal_dim=0
	moveq	#0,d6
;	GLint geom_dim,color_dim=0
	moveq	#0,d5
;	if(test_nurbs_curves(nobj)!=GLU_NO_ERROR)
	move.l	a2,-(a7)
	jsr	_test_nurbs_curves
	addq.w	#4,a7
	tst.l	d0
	beq.b	L207
L206
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L207
;	if(convert_curves(nobj,&new_geom_ctrl,&n_ctrl,&new_color_ctrl,
	pea	-$28(a5)
	pea	-$24(a5)
	pea	-$20(a5)
	pea	-$18(a5)
	pea	-$1C(a5)
	move.l	a2,-(a7)
	jsr	_convert_curves
	add.w	#$18,a7
	tst.l	d0
	beq.b	L209
L208
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L209
;	geom_order=nobj->curve.geom.order;
	move.l	$178(a2),d3
;	geom_type=nobj->curve.geom.type;
	move.l	$180(a2),-$14(a5)
;	geom_dim=nobj->curve.geom.dim;
	move.l	$17C(a2),d2
;	if(glu_do_sampling_crv(nobj,new_geom_ctrl,n_ctrl,geom_order,geom_d
	pea	-$3C(a5)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	-$18(a5),-(a7)
	move.l	-$1C(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_glu_do_sampling_crv
	add.w	#$18,a7
	tst.l	d0
	beq.b	L217
L210
;		free(new_geom_ctrl);
	move.l	-$1C(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
;		if(new_color_ctrl)
	tst.l	-$20(a5)
	beq.b	L212
L211
;			free(new_color_ctrl);
	move.l	-$20(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
L212
;		if(new_normal_ctrl)
	tst.l	-$24(a5)
	beq.b	L214
L213
;			free(new_normal_ctrl);
	move.l	-$24(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
L214
;		if(new_texture_ctrl)
	tst.l	-$28(a5)
	beq.b	L216
L215
;			free(new_texture_ctrl);
	move.l	-$28(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
L216
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L217
;	glEnable(geom_type);
	move.l	-$14(a5),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;	if(new_color_ctrl)
	tst.l	-$20(a5)
	beq.b	L219
L218
;		glEnable(nobj->curve.color.type);
	move.l	$19C(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;		color_dim=nobj->curve.color.dim;
	move.l	$198(a2),d7
;		color_ctrl=new_color_ctrl;
	move.l	-$20(a5),-$30(a5)
;		color_order=nobj->curve.color.order;
	move.l	$194(a2),-$8(a5)
L219
;	if(new_normal_ctrl)
	tst.l	-$24(a5)
	beq.b	L221
L220
;		glEnable(nobj->curve.normal.type);
	move.l	$1D4(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;		normal_dim=nobj->curve.normal.dim;
	move.l	$1D0(a2),d6
;		normal_ctrl=new_normal_ctrl;
	move.l	-$24(a5),a4
;		normal_order=nobj->curve.normal.order;
	move.l	$1CC(a2),-$C(a5)
L221
;	if(new_texture_ctrl)
	tst.l	-$28(a5)
	beq.b	L223
L222
;		glEnable(nobj->curve.texture.type);
	move.l	$1B8(a2),-(a7)
	jsr	_glEnable
	addq.w	#4,a7
;		texture_dim=nobj->curve.texture.dim;
	move.l	$1B4(a2),d5
;		texture_ctrl=new_texture_ctrl;
	move.l	-$28(a5),a3
;		texture_order=nobj->curve.texture.order;
	move.l	$1B0(a2),-$10(a5)
L223
;	for(i=0 , j=0, geom_ctrl=new_geom_ctrl;
	clr.l	-$40(a5)
	moveq	#0,d4
	move.l	-$1C(a5),-$2C(a5)
	bra	L234
L224
;		if(fine_culling_test_2D(nobj,geom_ctrl,geom_order,geom_dim,geom_
	move.l	d2,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	-$2C(a5),-(a7)
	move.l	a2,-(a7)
	jsr	_fine_culling_test_2D
	add.w	#$14,a7
	tst.b	d0
	beq.b	L226
L225
;			color_ctrl+=color_order*color_dim;
	move.l	-$8(a5),d0
	muls.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	-$30(a5),d0
	move.l	d0,-$30(a5)
;			normal_ctrl+=normal_order*normal_dim;
	move.l	-$C(a5),d0
	muls.l	d6,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a4,d0
	move.l	d0,a4
;			texture_ctrl+=texture_order*texture_dim;
	move.l	-$10(a5),d0
	muls.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
;			
	bra	L233
L226
;		glMap1f(geom_type, 0.0, 1.0, geom_dim, geom_order, geom_ctrl);
	move.l	-$2C(a5),-(a7)
	move.l	d3,-(a7)
	move.l	d2,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	-$14(a5),-(a7)
	jsr	_glMap1f
	add.w	#$18,a7
;		if(new_color_ctrl)
	tst.l	-$20(a5)
	beq.b	L228
L227
;			glMap1f(nobj->curve.color.type, 0.0, 1.0, color_dim,
	move.l	-$30(a5),-(a7)
	move.l	-$8(a5),-(a7)
	move.l	d7,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$19C(a2),-(a7)
	jsr	_glMap1f
	add.w	#$18,a7
;			color_ctrl+=color_order*color_dim;
	move.l	-$8(a5),d0
	muls.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	-$30(a5),d0
	move.l	d0,-$30(a5)
L228
;		if(new_normal_ctrl)
	tst.l	-$24(a5)
	beq.b	L230
L229
;			glMap1f(nobj->curve.normal.type, 0.0, 1.0, normal_dim,
	move.l	a4,-(a7)
	move.l	-$C(a5),-(a7)
	move.l	d6,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$1D4(a2),-(a7)
	jsr	_glMap1f
	add.w	#$18,a7
;			normal_ctrl+=normal_order*normal_dim;
	move.l	-$C(a5),d0
	muls.l	d6,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a4,d0
	move.l	d0,a4
L230
;		if(new_texture_ctrl)
	tst.l	-$28(a5)
	beq.b	L232
L231
;			glMap1f(nobj->curve.texture.type, 0.0, 1.0, texture_dim,
	move.l	a3,-(a7)
	move.l	-$10(a5),-(a7)
	move.l	d5,-(a7)
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	$1B8(a2),-(a7)
	jsr	_glMap1f
	add.w	#$18,a7
;			texture_ctrl+=texture_order*texture_dim;
	move.l	-$10(a5),d0
	muls.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
L232
;		glMapGrid1f(factors[j],0.0,1.0);
	move.l	#$3F800000,-(a7)
	clr.l	-(a7)
	move.l	-$3C(a5),a1
	move.l	0(a1,d4.l*4),-(a7)
	jsr	_glMapGrid1f
	add.w	#$C,a7
;		glEvalMesh1(GL_LINE,0,factors[j]);
	move.l	-$3C(a5),a1
	move.l	0(a1,d4.l*4),-(a7)
	clr.l	-(a7)
	pea	$1B01.w
	jsr	_glEvalMesh1
	add.w	#$C,a7
L233
	add.l	d3,-$40(a5)
	addq.l	#1,d4
	move.l	d3,d0
	muls.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	-$2C(a5),d0
	move.l	d0,-$2C(a5)
L234
	move.l	-$40(a5),d0
	cmp.l	-$18(a5),d0
	blt	L224
L235
;	free(new_geom_ctrl);
	move.l	-$1C(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
;	free(factors);
	move.l	-$3C(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
;	if(new_color_ctrl)
	tst.l	-$20(a5)
	beq.b	L237
L236
;		free(new_color_ctrl);
	move.l	-$20(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
L237
;	if(new_normal_ctrl)
	tst.l	-$24(a5)
	beq.b	L239
L238
;		free(new_normal_ctrl);
	move.l	-$24(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
L239
;	if(new_texture_ctrl)
	tst.l	-$28(a5)
	beq.b	L241
L240
;		free(new_texture_ctrl);
	move.l	-$28(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
L241
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	END
