
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/nurbs.c
	mc68030
	mc68881
	XREF	_do_nurbs_surface
	XREF	_do_nurbs_curve
	XREF	_gluErrorString
	XREF	_glPopAttrib
	XREF	_glPushAttrib
	XREF	_glGetFloatv
	XREF	_glDisable
	XREF	_malloc
	XREF	_free
	XREF	_fprintf
	XREF	_printf
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err

	SECTION "_call_user_error:0",CODE


;void
	XDEF	_call_user_error
_call_user_error
	move.l	d2,-(a7)
	move.l	$C(a7),d2
	move.l	$8(a7),a0
L90
;    nobj->error=error;
	move.l	d2,2(a0)
;    if(nobj->error_callback != NULL) 
	move.l	6(a0),a1
	cmp.w	#0,a1
	beq.b	L92
L91
;        (*(nobj->error_callback))(error);
	move.l	d2,-(a7)
	move.l	6(a0),a0
	jsr	(a0)
	addq.w	#4,a7
	bra.b	L93
L92
;       printf("NURBS error %d %s\n", error, (char *) gluError
	move.l	d2,-(a7)
	jsr	_gluErrorString
	addq.w	#4,a7
	move.l	d0,-(a7)
	move.l	d2,-(a7)
	move.l	#L89,-(a7)
	jsr	_printf
	add.w	#$C,a7
L93
	move.l	(a7)+,d2
	rts

L89
	dc.b	'NURBS error %d %s',$A,0

	SECTION "_gluNewNurbsRenderer:0",CODE

	rts

;GLUnurbsObj * APIENTRY gluNewNurbsRenderer( void )
	XDEF	_gluNewNurbsRenderer
_gluNewNurbsRenderer
L109	EQU	-$1C
	link	a5,#L109
	movem.l	d2/d3/a2,-(a7)
L94
;   n = (GLUnurbsObj *) malloc( sizeof(GLUnurbsObj) );
	pea	$1DC.w
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
;   if (n) 
	cmp.w	#0,a2
	beq	L108
L95
;      n->culling=GL_FALSE;
	clr.b	(a2)
;      n->nurbs_type=GLU_NURBS_NONE;
	move.l	#5,$E(a2)
;      n->error=GLU_NO_ERROR;
	clr.l	2(a2)
;      n->error_callback=NULL;
	clr.l	6(a2)
;      n->auto_load_matrix=GL_TRUE;
	move.b	#1,$12(a2)
;      n->sampling_tolerance=50.0;
	move.l	#$42480000,$A8(a2)
;      n->parametric_tolerance=0.5;
	move.l	#$3F000000,$AC(a2)
;      n->u_step = n->v_step = 100;
	move.l	#$64,$B4(a2)
	move.l	#$64,$B0(a2)
;      n->sampling_method = GLU_PATH_LENGTH;
	move.l	#$18777,$A4(a2)
;      n->display_mode=GLU_FILL;
	move.l	#$186AC,$A(a2)
;      for(i=0;
	moveq	#0,d1
	bra.b	L103
L96
;          for(j=0;
	moveq	#0,d0
	bra.b	L101
L97
;              if(i==j)
	cmp.l	d0,d1
	bne.b	L99
L98
;                n->sampling_matrices.model[i*4+j]=1.
	move.l	d1,d2
	moveq	#2,d3
	asl.l	d3,d2
	add.l	d0,d2
	lea	$14(a2),a0
	move.l	#$3F800000,0(a0,d2.l*4)
;                n->sampling_matrices.proj[i*4+j]=1.0;
	move.l	d1,d2
	moveq	#2,d3
	asl.l	d3,d2
	add.l	d0,d2
	lea	$54(a2),a0
	move.l	#$3F800000,0(a0,d2.l*4)
	bra.b	L100
L99
;                n->sampling_matrices.model[i*4+j]=0.
	move.l	d1,d2
	moveq	#2,d3
	asl.l	d3,d2
	add.l	d0,d2
	lea	$14(a2),a0
	clr.l	0(a0,d2.l*4)
;                n->sampling_matrices.proj[i*4+j]=0.0;
	move.l	d1,d2
	moveq	#2,d3
	asl.l	d3,d2
	add.l	d0,d2
	lea	$54(a2),a0
	clr.l	0(a0,d2.l*4)
L100
	addq.l	#1,d0
L101
	cmp.l	#4,d0
	blt.b	L97
L102
	addq.l	#1,d1
L103
	cmp.l	#4,d1
	blt.b	L96
L104
;      glGetFloatv(GL_VIEWPORT,tmp_viewport);
	pea	-$14(a5)
	pea	$BA2.w
	jsr	_glGetFloatv
	addq.w	#$8,a7
;      for(i=0;
	moveq	#0,d1
	bra.b	L106
L105
;          n->sampling_matrices.viewport[i]=tmp_viewport[i];
	lea	-$14(a5),a0
	fmove.s	0(a0,d1.l*4),fp0
	lea	$94(a2),a0
	fmove.s	fp0,0(a0,d1.l*4)
	addq.l	#1,d1
L106
	cmp.l	#4,d1
	blt.b	L105
L107
;      n->trim=NULL;
	clr.l	$1D8(a2)
L108
	move.l	a2,d0
	movem.l	(a7)+,d2/d3/a2
	unlk	a5
	rts

	SECTION "_gluDeleteNurbsRenderer:0",CODE


;void APIENTRY gluDeleteNurbsRenderer( GLUnurbsObj *nobj )
	XDEF	_gluDeleteNurbsRenderer
_gluDeleteNurbsRenderer
	move.l	4(a7),a0
L110
;   if (nobj) 
	cmp.w	#0,a0
	beq.b	L112
L111
;      free( nobj );
	move.l	a0,-(a7)
	jsr	_free
	addq.w	#4,a7
L112
	rts

	SECTION "_gluLoadSamplingMatrices:0",CODE


;void APIENTRY gluLoadSamplingMatrices( GLUnurbsObj *nobj,
	XDEF	_gluLoadSamplingMatrices
_gluLoadSamplingMatrices
L120	EQU	-4
	link	a5,#L120
	movem.l	a2-a4,-(a7)
	move.l	$8(a5),a0
	move.l	$14(a5),a2
	move.l	$10(a5),a4
L113
;    for(i=0;
	moveq	#0,d0
	bra.b	L115
L114
;        nobj->sampling_matrices.model[i]=modelMatrix[i];
	move.l	$C(a5),a3
	lea	$14(a0),a1
	move.l	0(a3,d0.l*4),0(a1,d0.l*4)
;        nobj->sampling_matrices.proj[i]=projMatrix[i];
	lea	$54(a0),a1
	move.l	0(a4,d0.l*4),0(a1,d0.l*4)
	addq.l	#1,d0
L115
	cmp.l	#$10,d0
	blt.b	L114
L116
;    for(i=0;
	moveq	#0,d0
	bra.b	L118
L117
;        nobj->sampling_matrices.viewport[i]=viewport[i];
	fmove.l	0(a2,d0.l*4),fp0
	lea	$94(a0),a1
	fmove.s	fp0,0(a1,d0.l*4)
	addq.l	#1,d0
L118
	cmp.l	#4,d0
	blt.b	L117
L119
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_gluNurbsProperty:0",CODE


;void APIENTRY gluNurbsProperty( GLUnurbsObj *nobj, GLenum property, 
	XDEF	_gluNurbsProperty
_gluNurbsProperty
	move.l	$8(a7),d0
	move.l	4(a7),a0
	fmove.s	$C(a7),fp0
L122
;   switch (property)
	sub.l	#$18768,d0
	cmp.l	#7,d0
	bhi	L157
	move.l	L159(pc,d0.l*4),a1
	jmp	(a1)
L159
	dc.l	L153
	dc.l	L149
	dc.l	L126
	dc.l	L123
	dc.l	L140
	dc.l	L135
	dc.l	L129
	dc.l	L132
;      
L123
;           if(value <= 0.0)
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fbogt.b	L125
L124
;               call_user_error(nobj,GLU_INVALID_VALUE)
	move.l	#$18A25,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L125
;         nobj->sampling_tolerance=value;
	fmove.s	fp0,$A8(a0)
;         
	bra	L158
L126
;           if(value <= 0.0)
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fbogt.b	L128
L127
;               call_user_error(nobj,GLU_INVALID_VALUE)
	move.l	#$18A25,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L128
;         nobj->parametric_tolerance=value;
	fmove.s	fp0,$AC(a0)
;         
	bra	L158
L129
;           if(value <= 0.0)
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fbogt.b	L131
L130
;               call_user_error(nobj,GLU_INVALID_VALUE)
	move.l	#$18A25,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L131
;         nobj->u_step=(GLint)value;
	fmove.l	fp0,d0
	move.l	d0,$B0(a0)
;         
	bra	L158
L132
;           if(value <= 0.0)
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fbogt.b	L134
L133
;               call_user_error(nobj,GLU_INVALID_VALUE)
	move.l	#$18A25,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L134
;         nobj->v_step=(GLint)value;
	fmove.l	fp0,d0
	move.l	d0,$B4(a0)
;         
	bra	L158
L135
;		 val = (GLenum)value;
	fmove.l	fp0,d0
;         if(val!=GLU_PATH_LENGTH && val!=GLU_PARAMETRIC_ERR
	cmp.l	#$18777,d0
	beq.b	L139
L136
	cmp.l	#$18778,d0
	beq.b	L139
L137
	cmp.l	#$18779,d0
	beq.b	L139
L138
;             call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L139
;		 nobj->sampling_method=val;
	move.l	d0,$A4(a0)
;         
	bra	L158
L140
;         val=(GLenum)value;
	fmove.l	fp0,d0
;         if(val!=GLU_FILL && val!=GLU_OUTLINE_POLYGON && va
	cmp.l	#$186AC,d0
	beq.b	L144
L141
	cmp.l	#$18790,d0
	beq.b	L144
L142
	cmp.l	#$18791,d0
	beq.b	L144
L143
;             call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L144
;         if(nobj->nurbs_type==GLU_NURBS_CURVE)
	tst.l	$E(a0)
	bne.b	L146
L145
;             call_user_error(nobj,GLU_NURBS_ERROR26);
	move.l	#$187B4,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L146
;         nobj->display_mode=val;
	move.l	d0,$A(a0)
;if(val==GLU_OUTLINE_PATCH)
	cmp.l	#$18791,d0
	bne.b	L148
L147
;    fprintf(stderr,"NURBS, for the moment, can display only in P
	move.l	#L121,-(a7)
	pea	_std__err(a6)
	jsr	_fprintf
	addq.w	#$8,a7
L148
;         
	bra.b	L158
L149
;         val=(GLenum)value;
	fmove.l	fp0,d0
;         if(val!=GL_TRUE && val!=GL_FALSE)
	cmp.l	#1,d0
	beq.b	L152
L150
	tst.l	d0
	beq.b	L152
L151
;             call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L152
;         nobj->culling = (GLboolean) value;
	fmove.l	fp0,d0
	move.b	d0,(a0)
;         
	bra.b	L158
L153
;         val=(GLenum)value;
	fmove.l	fp0,d0
;         if(val!=GL_TRUE && val!=GL_FALSE)
	cmp.l	#1,d0
	beq.b	L156
L154
	tst.l	d0
	beq.b	L156
L155
;             call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L156
;         nobj->auto_load_matrix = (GLboolean) value;
	fmove.l	fp0,d0
	move.b	d0,$12(a0)
;         
	bra.b	L158
L157
;         call_user_error(nobj,GLU_NURBS_ERROR26);
	move.l	#$187B4,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
L158
	rts

L121
	dc.b	'NURBS, for the moment, can display only in POLYGON mode',$A,0

	SECTION "_gluGetNurbsProperty:0",CODE


;void APIENTRY gluGetNurbsProperty( GLUnurbsObj *nobj, GLenum propert
	XDEF	_gluGetNurbsProperty
_gluGetNurbsProperty
	move.l	a2,-(a7)
	movem.l	$C(a7),d0/a1
	move.l	$8(a7),a0
L160
;   switch (property)
	cmp.l	#$1876B,d0
	beq.b	L161
	bgt.b	L173
	cmp.l	#$18768,d0
	beq.b	L167
	cmp.l	#$18769,d0
	beq.b	L163
	bra.b	L171
L173
	cmp.l	#$1876C,d0
	beq.b	L162
	bra.b	L171
;      
L161
;         *value = nobj->sampling_tolerance;
	move.l	$A8(a0),(a1)
;         
	bra.b	L172
L162
;         *value = (GLfloat) (GLint) nobj->display_mode;
	fmove.l	$A(a0),fp0
	fmove.s	fp0,(a1)
;         
	bra.b	L172
L163
;         *value = nobj->culling ? 1.0 : 0.0;
	tst.b	(a0)
	beq.b	L165
L164
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L166
L165
	fmove.d	#$.00000000.00000000,fp0
L166
	fmove.s	fp0,(a1)
;         
	bra.b	L172
L167
;         *value = nobj->auto_load_matrix ? 1.0 : 0.0;
	tst.b	$12(a0)
	beq.b	L169
L168
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L170
L169
	fmove.d	#$.00000000.00000000,fp0
L170
	fmove.s	fp0,(a1)
;         
	bra.b	L172
L171
;         call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
L172
	move.l	(a7)+,a2
	rts

	SECTION "_gluBeginCurve:0",CODE


;void APIENTRY gluBeginCurve( GLUnurbsObj *nobj )
	XDEF	_gluBeginCurve
_gluBeginCurve
	move.l	4(a7),a0
L174
;    if(nobj->nurbs_type==GLU_NURBS_CURVE)
	tst.l	$E(a0)
	bne.b	L176
L175
;        call_user_error(nobj,GLU_NURBS_ERROR6);
	move.l	#$187A0,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L176
;    nobj->nurbs_type=GLU_NURBS_CURVE;
	clr.l	$E(a0)
;    nobj->curve.geom.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$180(a0)
;    nobj->curve.color.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$19C(a0)
;    nobj->curve.texture.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$1B8(a0)
;    nobj->curve.normal.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$1D4(a0)
	rts

	SECTION "_gluEndCurve:0",CODE


;void APIENTRY gluEndCurve( GLUnurbsObj * nobj )
	XDEF	_gluEndCurve
_gluEndCurve
	move.l	a2,-(a7)
	move.l	$8(a7),a2
L177
;    if(nobj->nurbs_type==GLU_NURBS_NONE)
	move.l	$E(a2),d0
	cmp.l	#5,d0
	bne.b	L179
L178
;        call_user_error(nobj,GLU_NURBS_ERROR7);
	move.l	#$187A1,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	move.l	(a7)+,a2
	rts
L179
;    if(nobj->curve.geom.type==GLU_INVALID_ENUM)
	move.l	$180(a2),d0
	cmp.l	#$18A24,d0
	bne.b	L181
L180
;        call_user_error(nobj,GLU_NURBS_ERROR8);
	move.l	#$187A2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
;        nobj->nurbs_type=GLU_NURBS_NONE;
	move.l	#5,$E(a2)
	move.l	(a7)+,a2
	rts
L181
;    glPushAttrib( (GLbitfield) (GL_EVAL_BIT | GL_ENABLE_BIT) );
	move.l	#$12000,-(a7)
	jsr	_glPushAttrib
	addq.w	#4,a7
;    glDisable(GL_MAP1_VERTEX_3);
	pea	$D97.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_VERTEX_4);
	pea	$D98.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_INDEX);
	pea	$D91.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_COLOR_4);
	pea	$D90.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_NORMAL);
	pea	$D92.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_TEXTURE_COORD_1);
	pea	$D93.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_TEXTURE_COORD_2);
	pea	$D94.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_TEXTURE_COORD_3);
	pea	$D95.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP1_TEXTURE_COORD_4);
	pea	$D96.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_VERTEX_3);
	pea	$DB7.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_VERTEX_4);
	pea	$DB8.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_INDEX);
	pea	$DB1.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_COLOR_4);
	pea	$DB0.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_NORMAL);
	pea	$DB2.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_TEXTURE_COORD_1);
	pea	$DB3.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_TEXTURE_COORD_2);
	pea	$DB4.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_TEXTURE_COORD_3);
	pea	$DB5.w
	jsr	_glDisable
	addq.w	#4,a7
;    glDisable(GL_MAP2_TEXTURE_COORD_4);
	pea	$DB6.w
	jsr	_glDisable
	addq.w	#4,a7
;    do_nurbs_curve(nobj);
	move.l	a2,-(a7)
	jsr	_do_nurbs_curve
	addq.w	#4,a7
;    glPopAttrib();
	jsr	_glPopAttrib
;    nobj->nurbs_type=GLU_NURBS_NONE;
	move.l	#5,$E(a2)
	move.l	(a7)+,a2
	rts

	SECTION "_gluNurbsCurve:0",CODE


;void APIENTRY gluNurbsCurve( GLUnurbsObj *nobj, GLint nknots, GLfloa
	XDEF	_gluNurbsCurve
_gluNurbsCurve
	movem.l	d2-d5/a2/a3,-(a7)
	move.l	$34(a7),d0
	move.l	$30(a7),d1
	move.l	$28(a7),d2
	move.l	$20(a7),d3
	move.l	$1C(a7),a0
	move.l	$2C(a7),a1
	move.l	$24(a7),a2
L182
;    if(nobj->nurbs_type==GLU_NURBS_TRIM)
	move.l	$E(a0),d4
	cmp.l	#2,d4
	beq	L196
L183
;        if(type==GLU_MAP1_TRIM_2 || type==GLU_MAP1_TRIM_3)
	cmp.l	#$18772,d0
	beq.b	L185
L184
	cmp.l	#$18773,d0
	bne.b	L186
L185
;            call_user_error(nobj,GLU_NURBS_ERROR22);
	move.l	#$187B0,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L186
;        if(nobj->nurbs_type!=GLU_NURBS_CURVE)
	tst.l	$E(a0)
	beq.b	L188
L187
;            call_user_error(nobj,GLU_NURBS_ERROR10);
	move.l	#$187A4,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L188
;        switch(type)
	move.l	d0,d4
	sub.l	#$D90,d4
	cmp.l	#$8,d4
	bhi	L195
	move.l	L197(pc,d4.l*4),a3
	jmp	(a3)
L197
	dc.l	L192
	dc.l	L192
	dc.l	L193
	dc.l	L194
	dc.l	L194
	dc.l	L194
	dc.l	L194
	dc.l	L189
	dc.l	L189
;            
L189
;                if(nobj->curve.geom.type!=GLU_INVALI
	move.l	#$168,d4
	add.l	a0,d4
	move.l	d4,a3
	move.l	$18(a3),d4
	cmp.l	#$18A24,d4
	beq.b	L191
L190
;                    call_user_error(nobj,GLU_NUR
	move.l	#$187A2,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L191
;                nobj->curve.geom.type=type;
	move.l	d0,$180(a0)
;                nobj->curve.geom.knot_count=nknots;
	move.l	d3,$168(a0)
;                nobj->curve.geom.knot=knot;
	move.l	a2,$16C(a0)
;                nobj->curve.geom.stride=stride;
	move.l	d2,$170(a0)
;                nobj->curve.geom.ctrlarray=ctlarray;
	move.l	a1,$174(a0)
;                nobj->curve.geom.order=order;
	move.l	d1,$178(a0)
;                
	bra.b	L196
L192
;                nobj->curve.color.type=type;
	move.l	d0,$19C(a0)
;                nobj->curve.color.knot_count=nknots;
	move.l	d3,$184(a0)
;                nobj->curve.color.knot=knot;
	move.l	a2,$188(a0)
;                nobj->curve.color.stride=stride;
	move.l	d2,$18C(a0)
;                nobj->curve.color.ctrlarray=ctlarray;
	move.l	a1,$190(a0)
;                nobj->curve.color.order=order;
	move.l	d1,$194(a0)
;                
	bra.b	L196
L193
;                nobj->curve.normal.type=type;
	move.l	d0,$1D4(a0)
;                nobj->curve.normal.knot_count=nknots;
	move.l	d3,$1BC(a0)
;                nobj->curve.normal.knot=knot;
	move.l	a2,$1C0(a0)
;                nobj->curve.normal.stride=stride;
	move.l	d2,$1C4(a0)
;                nobj->curve.normal.ctrlarray=ctlarra
	move.l	a1,$1C8(a0)
;                nobj->curve.normal.order=order;
	move.l	d1,$1CC(a0)
;                
	bra.b	L196
L194
;                nobj->curve.texture.type=type;
	move.l	d0,$1B8(a0)
;                nobj->curve.texture.knot_count=nknot
	move.l	d3,$1A0(a0)
;                nobj->curve.texture.knot=knot;
	move.l	a2,$1A4(a0)
;                nobj->curve.texture.stride=stride;
	move.l	d2,$1A8(a0)
;                nobj->curve.texture.ctrlarray=ctlarr
	move.l	a1,$1AC(a0)
;                nobj->curve.texture.order=order;
	move.l	d1,$1B0(a0)
;                
	bra.b	L196
L195
;                 call_user_error(nobj,GLU_INVALID_E
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
L196
	movem.l	(a7)+,d2-d5/a2/a3
	rts

	SECTION "_gluBeginSurface:0",CODE


;void APIENTRY gluBeginSurface( GLUnurbsObj *nobj )
	XDEF	_gluBeginSurface
_gluBeginSurface
	move.l	4(a7),a0
L198
;    switch(nobj->nurbs_type)
	move.l	$E(a0),d0
	cmp.l	#5,d0
	bhi	L203
	move.l	L204(pc,d0.l*4),a1
	jmp	(a1)
L204
	dc.l	L202
	dc.l	L201
	dc.l	L200
	dc.l	L201
	dc.l	L201
	dc.l	L199
;        
L199
;            nobj->nurbs_type=GLU_NURBS_SURFACE;
	move.l	#1,$E(a0)
;            nobj->surface.geom.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$E0(a0)
;            nobj->surface.color.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$10C(a0)
;            nobj->surface.texture.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$138(a0)
;            nobj->surface.normal.type=GLU_INVALID_ENUM;
	move.l	#$18A24,$164(a0)
;            
	bra.b	L203
L200
;            call_user_error(nobj,GLU_NURBS_ERROR16);
	move.l	#$187AA,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
;            
	bra.b	L203
L201
;            call_user_error(nobj,GLU_NURBS_ERROR27);
	move.l	#$187B5,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
;            
	bra.b	L203
L202
;            call_user_error(nobj,GLU_NURBS_ERROR6);
	move.l	#$187A0,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
;            
L203
	rts

	SECTION "_gluEndSurface:0",CODE


;void APIENTRY gluEndSurface( GLUnurbsObj * nobj )
	XDEF	_gluEndSurface
_gluEndSurface
	move.l	a2,-(a7)
	move.l	$8(a7),a2
L205
;    switch(nobj->nurbs_type)
	move.l	$E(a2),d0
	cmp.l	#4,d0
	beq.b	L208
	bgt.b	L211
	cmp.l	#2,d0
	beq.b	L207
	cmp.l	#3,d0
	beq.b	L208
	bra	L209
L211
	cmp.l	#5,d0
	beq.b	L206
	bra	L209
;        
L206
;            call_user_error(nobj,GLU_NURBS_ERROR13);
	move.l	#$187A7,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
;            
	bra	L210
L207
;            call_user_error(nobj,GLU_NURBS_ERROR12);
	move.l	#$187A6,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
;            
	bra	L210
L208
;            glPushAttrib( (GLbitfield)
	move.l	#$12008,-(a7)
	jsr	_glPushAttrib
	addq.w	#4,a7
;            glDisable(GL_MAP2_VERTEX_3);
	pea	$DB7.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_VERTEX_4);
	pea	$DB8.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_INDEX);
	pea	$DB1.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_COLOR_4);
	pea	$DB0.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_NORMAL);
	pea	$DB2.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_TEXTURE_COORD_1);
	pea	$DB3.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_TEXTURE_COORD_2);
	pea	$DB4.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_TEXTURE_COORD_3);
	pea	$DB5.w
	jsr	_glDisable
	addq.w	#4,a7
;            glDisable(GL_MAP2_TEXTURE_COORD_4);
	pea	$DB6.w
	jsr	_glDisable
	addq.w	#4,a7
;            do_nurbs_surface(nobj);
	move.l	a2,-(a7)
	jsr	_do_nurbs_surface
	addq.w	#4,a7
;            glPopAttrib();
	jsr	_glPopAttrib
;            
	bra.b	L210
L209
;            call_user_error(nobj,GLU_NURBS_ERROR8);
	move.l	#$187A2,-(a7)
	move.l	a2,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
L210
;    nobj->nurbs_type=GLU_NURBS_NONE;
	move.l	#5,$E(a2)
	move.l	(a7)+,a2
	rts

	SECTION "_gluNurbsSurface:0",CODE


;void APIENTRY gluNurbsSurface( GLUnurbsObj *nobj,
	XDEF	_gluNurbsSurface
_gluNurbsSurface
	movem.l	d2-d7/a2-a4,-(a7)
	move.l	$50(a7),d0
	move.l	$4C(a7),d1
	move.l	$48(a7),d2
	move.l	$40(a7),d3
	move.l	$3C(a7),d4
	move.l	$34(a7),d5
	move.l	$2C(a7),d7
	move.l	$28(a7),a0
	move.l	$44(a7),a1
	move.l	$38(a7),a2
	move.l	$30(a7),a4
L212
;    if(nobj->nurbs_type==GLU_NURBS_NO_TRIM || nobj->nurbs_type==
	move.l	$E(a0),d6
	cmp.l	#3,d6
	beq.b	L215
L213
	move.l	$E(a0),d6
	cmp.l	#2,d6
	beq.b	L215
L214
	move.l	$E(a0),d6
	cmp.l	#4,d6
	bne.b	L219
L215
;        if(type==GL_MAP2_VERTEX_3 || type==GL_MAP2_VERTEX_4)
	cmp.l	#$DB7,d0
	beq.b	L217
L216
	cmp.l	#$DB8,d0
	bne.b	L218
L217
;            call_user_error(nobj,GLU_NURBS_ERROR8);
	move.l	#$187A2,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d7/a2-a4
	rts
L218
;            return;
	bra.b	L221
L219
;    if(nobj->nurbs_type!=GLU_NURBS_SURFACE)
	move.l	$E(a0),d6
	cmp.l	#1,d6
	beq.b	L221
L220
;        call_user_error(nobj,GLU_NURBS_ERROR11);
	move.l	#$187A5,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d7/a2-a4
	rts
L221
;    switch(type)
	move.l	d0,d6
	sub.l	#$DB0,d6
	cmp.l	#$8,d6
	bhi	L226
	move.l	L228(pc,d6.l*4),a3
	jmp	(a3)
L228
	dc.l	L223
	dc.l	L223
	dc.l	L224
	dc.l	L225
	dc.l	L225
	dc.l	L225
	dc.l	L225
	dc.l	L222
	dc.l	L222
;        
L222
;            nobj->surface.geom.sknot_count=sknot_count;
	move.l	d7,$B8(a0)
;            nobj->surface.geom.sknot=sknot;
	move.l	a4,$BC(a0)
;            nobj->surface.geom.tknot_count=tknot_count;
	move.l	d5,$C0(a0)
;            nobj->surface.geom.tknot=tknot;
	move.l	a2,$C4(a0)
;            nobj->surface.geom.s_stride=s_stride;
	move.l	d4,$C8(a0)
;            nobj->surface.geom.t_stride=t_stride;
	move.l	d3,$CC(a0)
;            nobj->surface.geom.ctrlarray=ctrlarray;
	move.l	a1,$D0(a0)
;            nobj->surface.geom.sorder=sorder;
	move.l	d2,$D4(a0)
;            nobj->surface.geom.torder=torder;
	move.l	d1,$D8(a0)
;            nobj->surface.geom.type=type;
	move.l	d0,$E0(a0)
;            nobj->nurbs_type=GLU_NURBS_NO_TRIM;
	move.l	#3,$E(a0)
;            
	bra	L227
L223
;            nobj->surface.color.sknot_count=sknot_count;
	move.l	d7,$E4(a0)
;            nobj->surface.color.sknot=sknot;
	move.l	a4,$E8(a0)
;            nobj->surface.color.tknot_count=tknot_count;
	move.l	d5,$EC(a0)
;            nobj->surface.color.tknot=tknot;
	move.l	a2,$F0(a0)
;            nobj->surface.color.s_stride=s_stride;
	move.l	d4,$F4(a0)
;            nobj->surface.color.t_stride=t_stride;
	move.l	d3,$F8(a0)
;            nobj->surface.color.ctrlarray=ctrlarray;
	move.l	a1,$FC(a0)
;            nobj->surface.color.sorder=sorder;
	move.l	d2,$100(a0)
;            nobj->surface.color.torder=torder;
	move.l	d1,$104(a0)
;            nobj->surface.color.type=type;
	move.l	d0,$10C(a0)
;            
	bra.b	L227
L224
;            nobj->surface.normal.sknot_count=sknot_count;
	move.l	d7,$13C(a0)
;            nobj->surface.normal.sknot=sknot;
	move.l	a4,$140(a0)
;            nobj->surface.normal.tknot_count=tknot_count;
	move.l	d5,$144(a0)
;            nobj->surface.normal.tknot=tknot;
	move.l	a2,$148(a0)
;            nobj->surface.normal.s_stride=s_stride;
	move.l	d4,$14C(a0)
;            nobj->surface.normal.t_stride=t_stride;
	move.l	d3,$150(a0)
;            nobj->surface.normal.ctrlarray=ctrlarray;
	move.l	a1,$154(a0)
;            nobj->surface.normal.sorder=sorder;
	move.l	d2,$158(a0)
;            nobj->surface.normal.torder=torder;
	move.l	d1,$15C(a0)
;            nobj->surface.normal.type=type;
	move.l	d0,$164(a0)
;            
	bra.b	L227
L225
;            nobj->surface.texture.sknot_count=sknot_coun
	move.l	d7,$110(a0)
;            nobj->surface.texture.sknot=sknot;
	move.l	a4,$114(a0)
;            nobj->surface.texture.tknot_count=tknot_coun
	move.l	d5,$118(a0)
;            nobj->surface.texture.tknot=tknot;
	move.l	a2,$11C(a0)
;            nobj->surface.texture.s_stride=s_stride;
	move.l	d4,$120(a0)
;            nobj->surface.texture.t_stride=t_stride;
	move.l	d3,$124(a0)
;            nobj->surface.texture.ctrlarray=ctrlarray;
	move.l	a1,$128(a0)
;            nobj->surface.texture.sorder=sorder;
	move.l	d2,$12C(a0)
;            nobj->surface.texture.torder=torder;
	move.l	d1,$130(a0)
;            nobj->surface.texture.type=type;
	move.l	d0,$138(a0)
;            
	bra.b	L227
L226
;             call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
L227
	movem.l	(a7)+,d2-d7/a2-a4
	rts

	SECTION "_gluNurbsCallback:0",CODE


;void APIENTRY
	XDEF	_gluNurbsCallback
_gluNurbsCallback
	movem.l	$8(a7),d0/a1
	move.l	4(a7),a0
L229
;    nobj->error_callback = (void(CALLBACK*)(GLenum))fn;
	move.l	a1,6(a0)
;    if(which!=GLU_ERROR)
	cmp.l	#$18707,d0
	beq.b	L231
L230
;        call_user_error(nobj,GLU_INVALID_ENUM);
	move.l	#$18A24,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
L231
	rts

	SECTION "_gluBeginTrim:0",CODE


;void APIENTRY
	XDEF	_gluBeginTrim
_gluBeginTrim
	move.l	4(a7),a0
L233
;    if(nobj->nurbs_type!=GLU_NURBS_TRIM_DONE)
	move.l	$E(a0),d0
	cmp.l	#4,d0
	beq.b	L236
L234
;        if(nobj->nurbs_type!=GLU_NURBS_NO_TRIM)
	move.l	$E(a0),d0
	cmp.l	#3,d0
	beq.b	L236
L235
;            call_user_error(nobj,GLU_NURBS_ERROR15);
	move.l	#$187A9,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L236
;    nobj->nurbs_type=GLU_NURBS_TRIM;
	move.l	#2,$E(a0)
;fprintf(stderr,"NURBS - trimming not supported yet\n");
	move.l	#L232,-(a7)
	pea	_std__err(a6)
	jsr	_fprintf
	addq.w	#$8,a7
	rts

L232
	dc.b	'NURBS - trimming not supported yet',$A,0

	SECTION "_gluPwlCurve:0",CODE


;void APIENTRY
	XDEF	_gluPwlCurve
_gluPwlCurve
	move.l	$14(a7),d0
	move.l	4(a7),a0
L237
;    if(nobj->nurbs_type==GLU_NURBS_CURVE)
	tst.l	$E(a0)
	bne.b	L239
L238
;        call_user_error(nobj,GLU_NURBS_ERROR9);
	move.l	#$187A3,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L239
;    if(nobj->nurbs_type==GLU_NURBS_NONE)
	move.l	$E(a0),d1
	cmp.l	#5,d1
	bne.b	L241
L240
;        call_user_error(nobj,GLU_NURBS_ERROR19);
	move.l	#$187AD,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L241
;    if(type!=GLU_MAP1_TRIM_2 && type!=GLU_MAP1_TRIM_3)
	cmp.l	#$18772,d0
	beq.b	L244
L242
	cmp.l	#$18773,d0
	beq.b	L244
L243
;        call_user_error(nobj,GLU_NURBS_ERROR14);
	move.l	#$187A8,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L244
;        return;
	rts

	SECTION "_gluEndTrim:0",CODE


;void APIENTRY
	XDEF	_gluEndTrim
_gluEndTrim
	move.l	4(a7),a0
L245
;    if(nobj->nurbs_type!=GLU_NURBS_TRIM)
	move.l	$E(a0),d0
	cmp.l	#2,d0
	beq.b	L247
L246
;        call_user_error(nobj,GLU_NURBS_ERROR17);
	move.l	#$187AB,-(a7)
	move.l	a0,-(a7)
	jsr	_call_user_error
	addq.w	#$8,a7
	rts
L247
;    nobj->nurbs_type=GLU_NURBS_TRIM_DONE;
	move.l	#4,$E(a0)
	rts

	END
