
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/polytest.c
	mc68030
	mc68881
	XREF	_tess_call_user_error
	XREF	_qsort
	XREF	_abort
	XREF	_malloc
	XREF	_free
	XREF	_fabs__r

	SECTION "_find_normal:0",CODE


;static GLenum
_find_normal
L212	EQU	-$6C
	link	a5,#L212
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
L204
;	tess_polygon *polygon=tobj->current_polygon;
	move.l	$8(a5),a0
	move.l	$20(a0),a4
;	va=polygon->vertices;
	move.l	a4,a0
	move.l	$30(a0),a2
;	vb=va->next;
	move.l	$32(a2),a0
;	A0=vb->location[0]-va->location[0];
	move.l	4(a0),-$30(a5)
	move.l	$8(a0),-$2C(a5)
	fmove.d	-$30(a5),fp0
	fsub.d	4(a2),fp0
	fmove.d	fp0,-$30(a5)
;	A1=vb->location[1]-va->location[1];
	lea	4(a0),a1
	fmove.d	$8(a1),fp7
	lea	4(a2),a1
	fmove.x	fp7,fp0
	fsub.d	$8(a1),fp0
	fmove.d	fp0,fp7
;	A2=vb->location[2]-va->location[2];
	lea	4(a0),a1
	fmove.d	$10(a1),fp6
	lea	4(a2),a1
	fmove.x	fp6,fp0
	fsub.d	$10(a1),fp0
	fmove.x	fp0,fp6
;	for(vc=vb->next;
	move.l	$32(a0),a3
	bra	L210
L205
;		B0=vc->location[0]-va->location[0];
	fmove.d	4(a3),fp5
	fsub.d	4(a2),fp5
;		B1=vc->location[1]-va->location[1];
	lea	4(a3),a0
	fmove.d	$8(a0),fp1
	lea	4(a2),a0
	fsub.d	$8(a0),fp1
;		B2=vc->location[2]-va->location[2];
	lea	4(a3),a0
	fmove.d	$10(a0),fp0
	lea	4(a2),a0
	fsub.d	$10(a0),fp0
;		A=A1*B2-A2*B1;
	fmove.x	fp7,fp2
	fmul.x	fp0,fp2
	fmove.x	fp6,fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
;		B=A2*B0-A0*B2;
	fmove.x	fp6,fp4
	fmul.x	fp5,fp4
	fmul.d	-$30(a5),fp0
	fsub.x	fp0,fp4
;		C=A0*B1-A1*B0;
	fmove.d	-$30(a5),fp3
	fmul.x	fp1,fp3
	fmove.x	fp7,fp0
	fmul.x	fp5,fp0
	fsub.x	fp0,fp3
;		if(fabs(A)>EPSILON || fabs(B)>EPSILON || fabs(C)>EPSILON)
	fmove.d	fp2,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbogt.b	L208
L206
	fmove.d	fp4,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbogt.b	L208
L207
	fmove.d	fp3,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L209
L208
;			polygon->A=A;
	move.l	a4,a0
	fmove.d	fp2,4(a0)
;			polygon->B=B;
	move.l	a4,a0
	fmove.d	fp4,$C(a0)
;			polygon->C=C;
	move.l	a4,a0
	fmove.d	fp3,$14(a0)
;			polygon->D= -A*va->location[0]-B*va->location[1]-C*va->locatio
	fneg.d	fp2
	fmul.d	4(a2),fp2
	lea	4(a2),a0
	fmul.d	$8(a0),fp4
	fsub.x	fp4,fp2
	lea	4(a2),a0
	fmul.d	$10(a0),fp3
	fsub.x	fp3,fp2
	move.l	a4,a0
	fmove.d	fp2,$1C(a0)
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L209
	move.l	a3,a0
	move.l	$32(a0),a3
L210
	move.l	a3,a0
	cmp.l	a2,a0
	bne	L205
L211
;			return 
;	tess_call_user_error(tobj,GLU_TESS_ERROR7);
	move.l	#$1873D,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_tess_test_polygon:0",CODE

	rts

;void
	XDEF	_tess_test_polygon
_tess_test_polygon
L240	EQU	-$38
	link	a5,#L240
	movem.l	a2-a4,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$8(a5),a2
L213
;	tess_polygon *polygon=tobj->current_polygon;
	move.l	$20(a2),a4
;	if(polygon->vertex_cnt<3)
	move.l	a4,a0
	move.l	(a0),d0
	cmp.l	#3,d0
	bhs.b	L215
L214
;		free_current_polygon(polygon);
	move.l	a4,-(a7)
	jsr	_free_current_polygon
	addq.w	#4,a7
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L215
;	polygon->last_vertex->next=polygon->vertices;
	move.l	a4,a0
	move.l	$30(a0),a1
	move.l	a4,a3
	move.l	$34(a3),a0
	move.l	a1,$32(a0)
;	polygon->vertices->previous=polygon->last_vertex;
	move.l	a4,a0
	move.l	$34(a0),a1
	move.l	a4,a3
	move.l	$30(a3),a0
	move.l	a1,$36(a0)
;	if(find_normal(tobj)==GLU_ERROR)
	move.l	a2,-(a7)
	jsr	_find_normal
	addq.w	#4,a7
	cmp.l	#$18707,d0
	bne.b	L217
L216
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L217
;	if(tobj->contours==NULL)
	move.l	(a2),a0
	cmp.w	#0,a0
	bne	L227
L218
;		tobj->A=polygon->A;
	move.l	a4,a0
	move.l	4(a0),$28(a2)
	move.l	$8(a0),$2C(a2)
;		tobj->B=polygon->B;
	move.l	a4,a0
	move.l	$C(a0),$30(a2)
	move.l	$10(a0),$34(a2)
;		tobj->C=polygon->C;
	move.l	a4,a0
	move.l	$14(a0),$38(a2)
	move.l	$18(a0),$3C(a2)
;		tobj->D=polygon->D;
	move.l	a4,a0
	move.l	$1C(a0),$40(a2)
	move.l	$20(a0),$44(a2)
;		if(fabs(polygon->A) > fabs(polygon->B))
	move.l	a4,a0
	move.l	$8(a0),-(a7)
	move.l	4(a0),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	a4,a0
	move.l	$10(a0),-(a7)
	move.l	$C(a0),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L223
L219
;			if(fabs(polygon->A) > fabs(polygon->C))
	move.l	a4,a0
	move.l	$8(a0),-(a7)
	move.l	4(a0),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	a4,a0
	move.l	$18(a0),-(a7)
	move.l	$14(a0),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L221
L220
;				tobj->projection=OYZ;
	move.l	#1,$48(a2)
	bra.b	L222
L221
;				tobj->projection=OXY;
	clr.l	$48(a2)
L222
	bra.b	L226
L223
;			if(fabs(polygon->B) > fabs(polygon->C))
	move.l	a4,a0
	move.l	$10(a0),-(a7)
	move.l	$C(a0),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	a4,a0
	move.l	$18(a0),-(a7)
	move.l	$14(a0),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L225
L224
;				tobj->projection=OXZ;
	move.l	#2,$48(a2)
	bra.b	L226
L225
;				tobj->projection=OXY;
	clr.l	$48(a2)
L226
	bra	L233
L227
;		tess_vertex *vertex=polygon->vertices;
	move.l	a4,a0
	move.l	$30(a0),a3
;		a[0]=tobj->A;
	move.l	$28(a2),-$1C(a5)
	move.l	$2C(a2),-$18(a5)
;		a[1]=tobj->B;
	lea	-$1C(a5),a0
	move.l	$30(a2),$8(a0)
	move.l	$34(a2),$C(a0)
;		a[2]=tobj->C;
	lea	-$1C(a5),a0
	move.l	$38(a2),$10(a0)
	move.l	$3C(a2),$14(a0)
;		b[0]=polygon->A;
	move.l	a4,a0
	fmove.d	4(a0),fp0
	fmove.d	fp0,-$34(a5)
;		b[1]=polygon->B;
	move.l	a4,a0
	fmove.d	$C(a0),fp0
	lea	-$34(a5),a0
	fmove.d	fp0,$8(a0)
;		b[2]=polygon->C;
	move.l	a4,a0
	fmove.d	$14(a0),fp0
	lea	-$34(a5),a0
	fmove.d	fp0,$10(a0)
;		if( fabs(a[1]*b[2]-a[2]*b[1]) > EPSILON ||
	lea	-$1C(a5),a0
	fmove.d	$8(a0),fp0
	lea	-$34(a5),a0
	fmul.d	$10(a0),fp0
	lea	-$1C(a5),a0
	fmove.d	$10(a0),fp1
	lea	-$34(a5),a0
	fmul.d	$8(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbogt.b	L230
L228
	lea	-$1C(a5),a0
	fmove.d	$10(a0),fp0
	fmul.d	-$34(a5),fp0
	lea	-$34(a5),a0
	fmove.d	-$1C(a5),fp1
	fmul.d	$10(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbogt.b	L230
L229
	lea	-$34(a5),a0
	fmove.d	-$1C(a5),fp0
	fmul.d	$8(a0),fp0
	lea	-$1C(a5),a0
	fmove.d	$8(a0),fp1
	fmul.d	-$34(a5),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L231
L230
;			tess_call_user_error(tobj,GLU_TESS_ERROR9);
	move.l	#$1873F,-(a7)
	move.l	a2,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L231
;		if(fabs(a[0]*vertex->location[0]+a[1]*vertex->location[1]+
	fmove.d	-$1C(a5),fp0
	fmul.d	4(a3),fp0
	lea	-$1C(a5),a0
	fmove.d	$8(a0),fp1
	lea	4(a3),a0
	fmul.d	$8(a0),fp1
	fadd.x	fp1,fp0
	lea	-$1C(a5),a0
	fmove.d	$10(a0),fp1
	lea	4(a3),a0
	fmul.d	$10(a0),fp1
	fadd.x	fp1,fp0
	fadd.d	$40(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L233
L232
;			tess_call_user_error(tobj,GLU_TESS_ERROR9);
	move.l	#$1873F,-(a7)
	move.l	a2,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L233
;	prepare_projection_info(tobj);
	move.l	a2,-(a7)
	jsr	_prepare_projection_info
	addq.w	#4,a7
;	if(verify_edge_vertex_intersections(tobj)==GLU_ERROR)
	move.l	a2,-(a7)
	jsr	_verify_edge_vertex_intersections
	addq.w	#4,a7
	cmp.l	#$18707,d0
	bne.b	L235
L234
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L235
;	if(test_for_overlapping_contours(tobj)==GLU_ERROR)
	move.l	a2,-(a7)
	jsr	_test_for_overlapping_contours
	addq.w	#4,a7
	cmp.l	#$18707,d0
	bne.b	L237
L236
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L237
;	if(store_polygon_as_contour(tobj)==GLU_ERROR)
	move.l	a2,-(a7)
	jsr	_store_polygon_as_contour
	addq.w	#4,a7
	cmp.l	#$18707,d0
	bne.b	L239
L238
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L239
;		return;
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_test_for_overlapping_contours:0",CODE


;static GLenum test_for_overlapping_contours(GLUtriangulatorObj *tobj)
_test_for_overlapping_contours
	movem.l	a2-a4,-(a7)
	move.l	$10(a7),a3
L241
;	polygon=tobj->current_polygon;
	move.l	a3,a0
	move.l	$20(a0),a4
;	for(contour=tobj->contours;
	move.l	a3,a0
	move.l	(a0),a2
	bra.b	L245
L242
;		if(contours_overlap(contour,polygon)!=GLU_NO_ERROR)
	move.l	a4,-(a7)
	move.l	a2,-(a7)
	jsr	_contours_overlap
	addq.w	#$8,a7
	tst.l	d0
	beq.b	L244
L243
;			tess_call_user_error(tobj,GLU_TESS_ERROR5);
	move.l	#$1873B,-(a7)
	move.l	a3,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,a2-a4
	rts
L244
	move.l	$1C(a2),a2
L245
	cmp.w	#0,a2
	bne.b	L242
L246
;			return 
	moveq	#0,d0
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_store_polygon_as_contour:0",CODE


;static GLenum store_polygon_as_contour(GLUtriangulatorObj *tobj)
_store_polygon_as_contour
	movem.l	d2/a2-a4,-(a7)
	move.l	$14(a7),a4
L247
;	tess_polygon *polygon=tobj->current_polygon;
	move.l	a4,a0
	move.l	$20(a0),a2
;	tess_contour *contour=tobj->contours;
	move.l	a4,a1
;	if(contour==NULL)
	move.l	(a1),a0
	cmp.w	#0,a0
	bne.b	L251
L248
;		if((contour=(tess_contour *)malloc(
	pea	$24.w
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L250
L249
;			tess_call_user_error(tobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
;			free_current_polygon(polygon);
	move.l	a2,-(a7)
	jsr	_free_current_polygon
	addq.w	#4,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2-a4
	rts
L250
;		tobj->contours=tobj->last_contour=contour;
	move.l	a4,a1
	move.l	a0,4(a1)
	move.l	a4,a1
	move.l	a0,(a1)
;		contour->next=contour->previous=NULL;
	clr.l	$20(a0)
	clr.l	$1C(a0)
	bra.b	L254
L251
;		if((contour=(tess_contour *)malloc(
	pea	$24.w
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L253
L252
;			tess_call_user_error(tobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
;			free_current_polygon(polygon);
	move.l	a2,-(a7)
	jsr	_free_current_polygon
	addq.w	#4,a7
	move.l	#$18707,d0
	movem.l	(a7)+,d2/a2-a4
	rts
L253
;		contour->previous=tobj->last_contour;
	move.l	a4,a3
	move.l	4(a3),$20(a0)
;		tobj->last_contour->next=contour;
	move.l	a4,a3
	move.l	4(a3),a1
	move.l	a0,$1C(a1)
;		tobj->last_contour=contour;
	move.l	a4,a1
	move.l	a0,4(a1)
;		contour->next=NULL;
	clr.l	$1C(a0)
L254
;		for(vertex=polygon->vertices , i=0 , vertex_cnt=polygon->ver
	move.l	$30(a2),a1
	moveq	#0,d0
	move.l	(a2),d1
	bra.b	L256
L255
;			vertex->shadow_vertex=NULL;
	clr.l	$2E(a1)
;			vertex->edge_flag=GL_TRUE;
	move.b	#1,$2C(a1)
	move.l	$32(a1),a1
	addq.l	#1,d0
L256
	cmp.l	d1,d0
	blo.b	L255
L257
;	contour->vertex_cnt=polygon->vertex_cnt;
	move.l	(a2),4(a0)
;	contour->area=polygon->area;
	move.l	$24(a2),$8(a0)
	move.l	$28(a2),$C(a0)
;	contour->orientation=polygon->orientation;
	move.l	$2C(a2),$10(a0)
;	contour->type=GLU_UNKNOWN;
	move.l	#$1871C,(a0)
;	contour->vertices=polygon->vertices;
	move.l	$30(a2),$14(a0)
;	contour->last_vertex=polygon->last_vertex;
	move.l	$34(a2),$18(a0)
;	polygon->vertices=polygon->last_vertex=NULL;
	clr.l	$34(a2)
	clr.l	$30(a2)
;	polygon->vertex_cnt=0;
	clr.l	(a2)
;	++(tobj->contour_cnt);
	move.l	a4,a0
	move.l	$8(a0),d0
	addq.l	#1,d0
	move.l	a4,a0
	move.l	d0,$8(a0)
	moveq	#0,d0
	movem.l	(a7)+,d2/a2-a4
	rts

	SECTION "_free_current_polygon:0",CODE


;static void free_current_polygon(tess_polygon *polygon)
_free_current_polygon
	movem.l	d2/a2/a3,-(a7)
	move.l	$10(a7),a3
L258
;	for(vertex=polygon->vertices,i=0;
	move.l	a3,a1
	move.l	$30(a1),a0
	moveq	#0,d2
	bra.b	L260
L259
;		vertex_tmp=vertex->next;
	move.l	$32(a0),a2
;		free(vertex);
	move.l	a0,-(a7)
	jsr	_free
	addq.w	#4,a7
;		vertex=vertex_tmp;
	move.l	a2,a0
	addq.l	#1,d2
L260
	move.l	a3,a1
	cmp.l	(a1),d2
	blo.b	L259
L261
;	polygon->vertices=polygon->last_vertex=NULL;
	move.l	a3,a1
	clr.l	$34(a1)
	move.l	a3,a1
	clr.l	$30(a1)
;	polygon->vertex_cnt=0;
	move.l	a3,a0
	clr.l	(a0)
	movem.l	(a7)+,d2/a2/a3
	rts

	SECTION "_prepare_projection_info:0",CODE


;static void prepare_projection_info(GLUtriangulatorObj *tobj)
_prepare_projection_info
	movem.l	a2/a3,-(a7)
	move.l	$C(a7),a0
L262
;	tess_polygon *polygon=tobj->current_polygon;
	move.l	$20(a0),a2
;	last_vertex_ptr=polygon->last_vertex;
	move.l	$34(a2),a1
;	switch(tobj->projection)
	move.l	$48(a0),d0
	cmp.l	#1,d0
	beq	L271
	bgt.b	L279
	cmp.l	#0,d0
	beq.b	L263
	bra	L275
L279
	cmp.l	#2,d0
	beq.b	L267
	bra	L275
;		
L263
;			for(vertex=polygon->vertices;
	move.l	$30(a2),a0
	bra.b	L265
L264
;				vertex->x=vertex->location[0];
	moveq	#4,d0
	add.l	a0,d0
	move.l	d0,a3
	move.l	(a3),$1C(a0)
	move.l	4(a3),$20(a0)
;				vertex->y=vertex->location[1];
	moveq	#4,d0
	add.l	a0,d0
	moveq	#$8,d1
	add.l	d0,d1
	move.l	d1,a3
	move.l	(a3),$24(a0)
	move.l	4(a3),$28(a0)
	move.l	$32(a0),a0
L265
	cmp.l	a1,a0
	bne.b	L264
L266
;			last_vertex_ptr->x=last_vertex_ptr->location[0];
	fmove.d	4(a1),fp0
	fmove.d	fp0,$1C(a1)
;			last_vertex_ptr->y=last_vertex_ptr->location[1];
	lea	4(a1),a0
	move.l	$8(a0),$24(a1)
	move.l	$C(a0),$28(a1)
;			
	bra	L275
L267
;			for(vertex=polygon->vertices;
	move.l	$30(a2),a0
	bra.b	L269
L268
;				vertex->x=vertex->location[0];
	moveq	#4,d0
	add.l	a0,d0
	move.l	d0,a3
	move.l	(a3),$1C(a0)
	move.l	4(a3),$20(a0)
;				vertex->y=vertex->location[2];
	moveq	#4,d0
	add.l	a0,d0
	moveq	#$10,d1
	add.l	d0,d1
	move.l	d1,a3
	move.l	(a3),$24(a0)
	move.l	4(a3),$28(a0)
	move.l	$32(a0),a0
L269
	cmp.l	a1,a0
	bne.b	L268
L270
;			last_vertex_ptr->x=last_vertex_ptr->location[0];
	fmove.d	4(a1),fp0
	fmove.d	fp0,$1C(a1)
;			last_vertex_ptr->y=last_vertex_ptr->location[2];
	lea	4(a1),a0
	move.l	$10(a0),$24(a1)
	move.l	$14(a0),$28(a1)
;			
	bra.b	L275
L271
;			for(vertex=polygon->vertices;
	move.l	$30(a2),a0
	bra.b	L273
L272
;				vertex->x=vertex->location[1];
	moveq	#4,d0
	add.l	a0,d0
	moveq	#$8,d1
	add.l	d0,d1
	move.l	d1,a3
	move.l	(a3),$1C(a0)
	move.l	4(a3),$20(a0)
;				vertex->y=vertex->location[2];
	moveq	#4,d0
	add.l	a0,d0
	moveq	#$10,d1
	add.l	d0,d1
	move.l	d1,a3
	move.l	(a3),$24(a0)
	move.l	4(a3),$28(a0)
	move.l	$32(a0),a0
L273
	cmp.l	a1,a0
	bne.b	L272
L274
;			last_vertex_ptr->x=last_vertex_ptr->location[1];
	lea	4(a1),a0
	move.l	$8(a0),$1C(a1)
	move.l	$C(a0),$20(a1)
;			last_vertex_ptr->y=last_vertex_ptr->location[2];
	lea	4(a1),a0
	move.l	$10(a0),$24(a1)
	move.l	$14(a0),$28(a1)
;			
L275
;	area=twice_the_polygon_area(polygon->vertices,polygon->last_vertex)
	move.l	$34(a2),-(a7)
	move.l	$30(a2),-(a7)
	jsr	_twice_the_polygon_area__r
	addq.w	#$8,a7
;	if(area >= 0.0)
	fcmp.d	#$.00000000.00000000,fp0
	fbolt.b	L277
L276
;		polygon->orientation=GLU_CCW;
	move.l	#$18719,$2C(a2)
;		polygon->area=area;
	fmove.d	fp0,$24(a2)
	bra.b	L278
L277
;		polygon->orientation=GLU_CW;
	move.l	#$18718,$2C(a2)
;		polygon->area= -area;
	fneg.d	fp0
	fmove.d	fp0,$24(a2)
L278
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_twice_the_polygon_area__r:0",CODE


;static GLdouble twice_the_polygon_area(tess_vertex *vertex,
_twice_the_polygon_area__r
	move.l	a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6,-(a7)
	movem.l	$44(a7),a0/a2
L280
;	area=0.0;
	fmove.d	#$.00000000.00000000,fp0
;	x=vertex->x;
	fmove.d	$1C(a0),fp5
;	y=vertex->y;
	fmove.d	$24(a0),fp4
;	vertex=vertex->next;
	move.l	$32(a0),a0
;	for(; vertex!=last_vertex;
	bra.b	L282
L281
;		next=vertex->next;
	move.l	$32(a0),a1
;		area+=(vertex->x - x)*(next->y - y) - (vertex->y - y)*(next->x -
	fmove.d	$1C(a0),fp1
	fsub.x	fp5,fp1
	fmove.d	$24(a1),fp2
	fsub.x	fp4,fp2
	fmul.x	fp2,fp1
	fmove.d	$24(a0),fp2
	fsub.x	fp4,fp2
	fmove.d	$1C(a1),fp3
	fsub.x	fp5,fp3
	fmul.x	fp3,fp2
	fsub.x	fp2,fp1
	fadd.x	fp1,fp0
	move.l	$32(a0),a0
L282
	cmp.l	a2,a0
	bne.b	L281
L283
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
	move.l	(a7)+,a2
	rts

	SECTION "_edge_edge_intersect:0",CODE


;static GLenum edge_edge_intersect(
_edge_edge_intersect
L330	EQU	-$80
	link	a5,#L330
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$10(a5),a2/a4
	move.l	$8(a5),a3
L284
;	xba=b->x - a->x;
	move.l	$C(a5),a0
	fmove.d	$1C(a0),fp3
	move.l	a3,a0
	fsub.d	$1C(a0),fp3
;	yba=b->y - a->y;
	move.l	$C(a5),a0
	fmove.d	$24(a0),fp7
	move.l	a3,a0
	fmove.x	fp7,fp0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,fp7
;	xdc=d->x - c->x;
	move.l	a4,a0
	fmove.d	$1C(a0),fp1
	fsub.d	$1C(a2),fp1
;	ydc=d->y - c->y;
	move.l	a4,a0
	fmove.d	$24(a0),fp0
	fsub.d	$24(a2),fp0
;	xac=a->x - c->x;
	move.l	a3,a0
	fmove.d	$1C(a0),fp4
	fsub.d	$1C(a2),fp4
;	yac=a->y - c->y;
	move.l	a3,a0
	move.l	$24(a0),-$40(a5)
	move.l	$28(a0),-$3C(a5)
	fmove.d	-$40(a5),fp2
	fsub.d	$24(a2),fp2
	fmove.d	fp2,-$40(a5)
;	denom= xba*ydc - yba*xdc;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	fmove.x	fp7,fp2
	fmul.x	fp1,fp2
	fsub.x	fp2,fp5
;	r = yac*xdc - xac*ydc;
	fmove.d	-$40(a5),fp2
	fmul.x	fp1,fp2
	fmul.x	fp4,fp0
	fsub.x	fp0,fp2
;	if(fabs(denom) < EPSILON)
	fmove.d	fp5,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L313
L285
;		if(fabs(r) < EPSILON)
	fmove.d	fp2,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L312
L286
;			if(fabs(xba) < EPSILON)
	fmove.d	fp3,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L300
L287
;				if(yba > 0.0)
	fmove.x	fp7,fp0
	fcmp.d	#$.00000000.00000000,fp0
	fbole.b	L294
L288
;					if((fabs(a->y - c->y)<EPSILON && fabs(c->y - b->y)<EPSILON)
	move.l	a3,a0
	fmove.d	$24(a0),fp0
	fsub.d	$24(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L290
L289
	move.l	$C(a5),a0
	fmove.d	$24(a2),fp0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbolt.b	L292
L290
	move.l	a3,a0
	fmove.d	$24(a0),fp0
	move.l	a4,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L293
L291
	move.l	a4,a0
	fmove.d	$24(a0),fp0
	move.l	$C(a5),a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L293
L292
	move.l	#$1873A,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L293
;					return 
	bra	L299
L294
;					if((fabs(b->y - c->y)<EPSILON && fabs(c->y - a->y)<EPSILON)
	move.l	$C(a5),a0
	fmove.d	$24(a0),fp0
	fsub.d	$24(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L296
L295
	move.l	a3,a0
	fmove.d	$24(a2),fp0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbolt.b	L298
L296
	move.l	$C(a5),a0
	fmove.d	$24(a0),fp0
	move.l	a4,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L299
L297
	move.l	a4,a0
	fmove.d	$24(a0),fp0
	move.l	a3,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L299
L298
	move.l	#$1873A,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L299
;					return 
	bra	L312
L300
;				if(xba > 0.0)
	fcmp.d	#$.00000000.00000000,fp3
	fbole.b	L307
L301
;					if((fabs(a->x - c->x)<EPSILON && fabs(c->x - b->x)<EPSILON)
	move.l	a3,a0
	fmove.d	$1C(a0),fp0
	fsub.d	$1C(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L303
L302
	move.l	$C(a5),a0
	fmove.d	$1C(a2),fp0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbolt.b	L305
L303
	move.l	a3,a0
	fmove.d	$1C(a0),fp0
	move.l	a4,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L306
L304
	move.l	a4,a0
	fmove.d	$1C(a0),fp0
	move.l	$C(a5),a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L306
L305
	move.l	#$1873A,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L306
;					return 
	bra	L312
L307
;					if((fabs(b->x - c->x)<EPSILON && fabs(c->x - a->x)<EPSILON)
	move.l	$C(a5),a0
	fmove.d	$1C(a0),fp0
	fsub.d	$1C(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L309
L308
	move.l	a3,a0
	fmove.d	$1C(a2),fp0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbolt.b	L311
L309
	move.l	$C(a5),a0
	fmove.d	$1C(a0),fp0
	move.l	a4,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L312
L310
	move.l	a4,a0
	fmove.d	$1C(a0),fp0
	move.l	a3,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L312
L311
	move.l	#$1873A,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L312
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L313
;	r /= denom;
	fdiv.x	fp5,fp2
;	s = (yac*xba - xac*yba) / denom;
	fmul.d	-$40(a5),fp3
	fmul.x	fp7,fp4
	fsub.x	fp4,fp3
	fdiv.x	fp5,fp3
;	if(((fabs(r) < EPSILON || (r < 1.0+EPSILON && r > 1.0-EPSILON)) &&
	fmove.d	fp2,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbolt.b	L316
L314
	fcmp.d	#$.3FF00001.0C6F7A0B,fp2
	fboge.b	L318
L315
	fcmp.d	#$.3FEFFFFD.E7210BE9,fp2
	fbole.b	L318
L316
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp3
	fbole.b	L318
L317
	fcmp.d	#$.3FF00001.0C6F7A0B,fp3
	fbolt.b	L323
L318
	fmove.d	fp3,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbolt.b	L321
L319
	fcmp.d	#$.3FF00001.0C6F7A0B,fp3
	fboge.b	L324
L320
	fcmp.d	#$.3FEFFFFD.E7210BE9,fp3
	fbole.b	L324
L321
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp2
	fbole.b	L324
L322
	fcmp.d	#$.3FF00001.0C6F7A0B,fp2
	fboge.b	L324
L323
	move.l	#$1873A,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L324
;	if(r > -EPSILON && r < 1.0+EPSILON &&
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp2
	fbole.b	L329
L325
	fcmp.d	#$.3FF00001.0C6F7A0B,fp2
	fboge.b	L329
L326
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp3
	fbole.b	L329
L327
	fcmp.d	#$.3FF00001.0C6F7A0B,fp3
	fboge.b	L329
L328
	move.l	#$1873E,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L329
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_verify_edge_vertex_intersections:0",CODE


;static GLenum verify_edge_vertex_intersections(GLUtriangulatorObj *t
_verify_edge_vertex_intersections
L345	EQU	-$24
	link	a5,#L345
	movem.l	a2-a4,-(a7)
L331
;	tess_polygon *polygon=tobj->current_polygon;
	move.l	$8(a5),a0
	move.l	$20(a0),-4(a5)
;	last_vertex=polygon->last_vertex;
	move.l	-4(a5),a0
	move.l	$34(a0),a4
;	vertex1=last_vertex;
	move.l	a4,a3
;	for(vertex2=vertex1->next->next;
	move.l	a3,a1
	move.l	$32(a1),a0
	move.l	$32(a0),a2
	bra.b	L335
L332
;		test=edge_edge_intersect(vertex1,vertex1->next,vertex2,
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	a3,a1
	move.l	$32(a1),-(a7)
	move.l	a3,-(a7)
	jsr	_edge_edge_intersect
	add.w	#$10,a7
;		if(test!=GLU_NO_ERROR)
	tst.l	d0
	beq.b	L334
L333
;			tess_call_user_error(tobj,test);
	move.l	d0,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L334
	move.l	$32(a2),a2
L335
	move.l	$32(a2),a0
	cmp.l	a4,a0
	bne.b	L332
L336
;			return 
;	for(vertex1=polygon->vertices;
	move.l	-4(a5),a0
	move.l	$30(a0),a3
	bra.b	L343
L337
;		for(vertex2=vertex1->next->next;
	move.l	a3,a1
	move.l	$32(a1),a0
	move.l	$32(a0),a2
	bra.b	L341
L338
;			test=edge_edge_intersect(vertex1,vertex1->next,vertex2,
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	a3,a1
	move.l	$32(a1),-(a7)
	move.l	a3,-(a7)
	jsr	_edge_edge_intersect
	add.w	#$10,a7
;			if(test!=GLU_NO_ERROR)
	tst.l	d0
	beq.b	L340
L339
;				tess_call_user_error(tobj,test);
	move.l	d0,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L340
	move.l	$32(a2),a2
L341
	cmp.l	a4,a2
	bne.b	L338
L342
	move.l	a3,a0
	move.l	$32(a0),a3
L343
	move.l	a3,a1
	move.l	$32(a1),a0
	move.l	$32(a0),a0
	cmp.l	a4,a0
	bne.b	L337
L344
;				return 
	moveq	#0,d0
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_area_compare:0",CODE


;static int
_area_compare
	movem.l	4(a7),a0/a1
L346
;	area1=(*((tess_contour **)a))->area;
	move.l	(a0),a0
	fmove.d	$8(a0),fp1
;	area2=(*((tess_contour **)b))->area;
	move.l	(a1),a0
	fmove.d	$8(a0),fp0
;	if(area1 < area2)
	fcmp.x	fp0,fp1
	fboge.b	L348
L347
	moveq	#1,d0
	rts
L348
;	if(area1 > area2)
	fcmp.x	fp0,fp1
	fbole.b	L350
L349
	moveq	#-1,d0
	rts
L350
	moveq	#0,d0
	rts

	SECTION "_tess_find_contour_hierarchies:0",CODE


;void tess_find_contour_hierarchies(GLUtriangulatorObj *tobj)
	XDEF	_tess_find_contour_hierarchies
_tess_find_contour_hierarchies
	movem.l	d2-d4/a2-a4,-(a7)
	move.l	$1C(a7),a4
L351
;	tess_contour *tmp_contour_ptr=tobj->contours;
;	if(tobj->contour_cnt < 2)
	move.l	a4,a0
	move.l	$8(a0),d0
	cmp.l	#2,d0
	bhs.b	L353
L352
;		tobj->contours->type=GLU_EXTERIOR;
	move.l	a4,a1
	move.l	(a1),a0
	move.l	#$1871B,(a0)
	movem.l	(a7)+,d2-d4/a2-a4
	rts
L353
;	if((contours=(tess_contour **)
	move.l	a4,a0
	move.l	$8(a0),d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a3
	move.l	a3,a0
	cmp.w	#0,a0
	bne.b	L355
L354
;		tess_call_user_error(tobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	a4,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d4/a2-a4
	rts
L355
;	for(tmp_contour_ptr=tobj->contours , cnt=0;
	move.l	a4,a0
	move.l	(a0),a2
	moveq	#0,d4
	bra.b	L357
L356
;		contours[cnt++]=tmp_contour_ptr;
	move.l	d4,d0
	addq.l	#1,d4
	move.l	a2,0(a3,d0.l*4)
	move.l	$1C(a2),a2
L357
	cmp.w	#0,a2
	bne.b	L356
L358
;	qsort((void *)contours,(size_t)cnt,(size_t)sizeof(tess_contour *),
	move.l	#_area_compare,-(a7)
	pea	4.w
	move.l	d4,-(a7)
	move.l	a3,-(a7)
	jsr	_qsort
	add.w	#$10,a7
;	tobj->contours=contours[0];
	move.l	a3,a1
	move.l	(a1),a0
	move.l	a4,a1
	move.l	a0,(a1)
;	tobj->contours->next=tobj->contours->previous=NULL;
	move.l	a4,a1
	move.l	(a1),a0
	clr.l	$20(a0)
	move.l	a4,a1
	move.l	(a1),a0
	clr.l	$1C(a0)
;	tobj->last_contour=tobj->contours;
	move.l	a4,a1
	move.l	(a1),a0
	move.l	a4,a1
	move.l	a0,4(a1)
;	tobj->contour_cnt=1;
	move.l	a4,a0
	move.l	#1,$8(a0)
;	tobj->contours->type=GLU_EXTERIOR;
	move.l	a4,a1
	move.l	(a1),a0
	move.l	#$1871B,(a0)
;	tmp_contour_ptr=tobj->contours;
;	for(i=1;
	moveq	#1,d2
	bra	L377
L359
;		hierarchy_changed=GL_FALSE;
	moveq	#0,d3
;		for(tmp_contour_ptr=tobj->contours;
	move.l	a4,a0
	move.l	(a0),a2
	bra	L373
L360
;			if(tmp_contour_ptr->type==GLU_EXTERIOR)
	move.l	(a2),d0
	cmp.l	#$1871B,d0
	bne	L370
L361
;				result=is_contour_contained_in(tmp_contour_ptr,contours[i]);
	move.l	0(a3,d2.l*4),-(a7)
	move.l	a2,-(a7)
	jsr	_is_contour_contained_in
	addq.w	#$8,a7
;				switch(result)
	cmp.l	#$1871A,d0
	beq.b	L362
	bgt.b	L379
	cmp.l	#0,d0
	beq.b	L368
	bra.b	L369
L379
	cmp.l	#$1871B,d0
	beq.b	L367
	bra.b	L369
;					
L362
;						if(tmp_contour_ptr->next!=NULL &&
	move.l	$1C(a2),a0
	cmp.w	#0,a0
	beq.b	L365
L363
	move.l	$1C(a2),a0
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	bne.b	L365
L364
;							add_interior_with_hierarchy_check(tobj,
	move.l	0(a3,d2.l*4),-(a7)
	move.l	a2,-(a7)
	move.l	a4,-(a7)
	jsr	_add_interior_with_hierarchy_check
	add.w	#$C,a7
	bra.b	L366
L365
;							add_new_interior(tobj,tmp_contour_ptr,contours[i]);
	move.l	0(a3,d2.l*4),-(a7)
	move.l	a2,-(a7)
	move.l	a4,-(a7)
	jsr	_add_new_interior
	add.w	#$C,a7
L366
;						hierarchy_changed=GL_TRUE;
	moveq	#1,d3
;						
	bra.b	L370
L367
;						reverse_hierarchy_and_add_exterior(tobj,tmp_contour_ptr,
	move.l	0(a3,d2.l*4),-(a7)
	move.l	a2,-(a7)
	move.l	a4,-(a7)
	jsr	_reverse_hierarchy_and_add_exterior
	add.w	#$C,a7
;						hierarchy_changed=GL_TRUE;
	moveq	#1,d3
;						
	bra.b	L370
L368
;						
	bra.b	L370
L369
;						abort();
	jsr	_abort
L370
;			if(hierarchy_changed)
	tst.b	d3
	beq.b	L372
L371
;				
	bra.b	L374
L372
	move.l	$1C(a2),a2
L373
	cmp.w	#0,a2
	bne	L360
L374
;		if(hierarchy_changed==GL_FALSE)
	tst.b	d3
	bne.b	L376
L375
;			add_new_exterior(tobj,contours[i]);
	move.l	0(a3,d2.l*4),-(a7)
	move.l	a4,-(a7)
	jsr	_add_new_exterior
	addq.w	#$8,a7
L376
	addq.l	#1,d2
L377
	cmp.l	d4,d2
	blo	L359
L378
;	free(contours);
	move.l	a3,-(a7)
	jsr	_free
	addq.w	#4,a7
	movem.l	(a7)+,d2-d4/a2-a4
	rts

	SECTION "_is_contour_contained_in:0",CODE


;static GLenum is_contour_contained_in(
_is_contour_contained_in
	movem.l	a2/a3,-(a7)
	movem.l	$C(a7),a2/a3
L380
;	if(point_in_polygon(outer,inner->vertices->x,inner->vertices->y))
	move.l	a3,a1
	move.l	$14(a1),a0
	move.l	$28(a0),-(a7)
	move.l	$24(a0),-(a7)
	move.l	a3,a1
	move.l	$14(a1),a0
	move.l	$20(a0),-(a7)
	move.l	$1C(a0),-(a7)
	move.l	a2,-(a7)
	jsr	_point_in_polygon
	add.w	#$14,a7
	tst.b	d0
	beq.b	L382
L381
;		relation_flag=GLU_INTERIOR;
	move.l	#$1871A,d0
	bra.b	L383
L382
;		relation_flag=GLU_EXTERIOR;
	move.l	#$1871B,d0
L383
;	if(relation_flag==GLU_INTERIOR)
	cmp.l	#$1871A,d0
	bne.b	L385
L384
	move.l	#$1871A,d0
	movem.l	(a7)+,a2/a3
	rts
L385
;	if(point_in_polygon(inner,outer->vertices->x,outer->vertices->y))
	move.l	$14(a2),a0
	move.l	$28(a0),-(a7)
	move.l	$24(a0),-(a7)
	move.l	$14(a2),a0
	move.l	$20(a0),-(a7)
	move.l	$1C(a0),-(a7)
	move.l	a3,-(a7)
	jsr	_point_in_polygon
	add.w	#$14,a7
	tst.b	d0
	beq.b	L387
L386
	move.l	#$1871B,d0
	movem.l	(a7)+,a2/a3
	rts
L387
	moveq	#0,d0
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_point_in_polygon:0",CODE


;static GLboolean point_in_polygon(
_point_in_polygon
	movem.l	d2/d3/a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	move.l	$58(a7),a2
	fmove.d	$64(a7),fp2
	fmove.d	$5C(a7),fp7
L388
;	tst=GL_FALSE;
	moveq	#0,d0
;	v1=contour->vertices;
	move.l	$14(a2),a0
;	v2=contour->vertices->previous;
	move.l	$14(a2),a1
	move.l	$36(a1),a1
;	for(i=0 , vertex_cnt=contour->vertex_cnt;
	moveq	#0,d1
	move.l	4(a2),d2
	bra.b	L399
L389
;		xp1=v1->x;
	fmove.d	$1C(a0),fp4
;		yp1=v1->y;
	fmove.d	$24(a0),fp3
;		xp2=v2->x;
	fmove.d	$1C(a1),fp0
;		yp2=v2->y;
	fmove.d	$24(a1),fp1
;		if ((((yp1<=y) && (y<yp2)) || ((yp2<=y)  && (y<yp1))) &&
	fcmp.x	fp2,fp3
	fbogt.b	L391
L390
	fcmp.x	fp1,fp2
	fbolt.b	L393
L391
	fcmp.x	fp2,fp1
	fbogt.b	L398
L392
	fcmp.x	fp3,fp2
	fboge.b	L398
L393
	fsub.x	fp4,fp0
	fmove.x	fp2,fp5
	fsub.x	fp3,fp5
	fmul.x	fp5,fp0
	fsub.x	fp3,fp1
	fdiv.x	fp1,fp0
	fadd.x	fp4,fp0
	fmove.x	fp7,fp1
	fcmp.x	fp0,fp1
	fboge.b	L398
L394
;				tst = (tst==GL_FALSE ? GL_TRUE : GL_FALSE);
	tst.b	d0
	bne.b	L396
L395
	moveq	#1,d0
	bra.b	L397
L396
	moveq	#0,d0
L397
L398
;		v2=v1;
	move.l	a0,a1
;		v1=v1->next;
	move.l	$32(a0),a0
	addq.l	#1,d1
L399
	cmp.l	d2,d1
	blo.b	L389
L400
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2
	rts

	SECTION "_contours_overlap:0",CODE


;static GLenum contours_overlap(
_contours_overlap
	movem.l	d2-d5/a2/a3,-(a7)
	move.l	$20(a7),a0
	move.l	$1C(a7),a1
L401
;	vertex1=contour->vertices;
	move.l	$14(a1),a3
;	vertex2=polygon->vertices;
	move.l	$30(a0),a2
;	vertex1_cnt=contour->vertex_cnt;
	move.l	4(a1),d5
;	vertex2_cnt=polygon->vertex_cnt;
	move.l	(a0),d3
;	for(i=0;
	moveq	#0,d4
	bra.b	L408
L402
;		for(j=0;
	moveq	#0,d2
	bra.b	L406
L403
;			if((test=edge_edge_intersect(vertex1,vertex1->next,vertex2,
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	a3,a1
	move.l	$32(a1),-(a7)
	move.l	a3,-(a7)
	jsr	_edge_edge_intersect
	add.w	#$10,a7
	tst.l	d0
	beq.b	L405
L404
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L405
	move.l	$32(a2),a2
	addq.l	#1,d2
L406
	cmp.l	d3,d2
	blo.b	L403
L407
	move.l	a3,a0
	move.l	$32(a0),a3
	addq.l	#1,d4
L408
	cmp.l	d5,d4
	blo.b	L402
L409
;				return 
	moveq	#0,d0
	movem.l	(a7)+,d2-d5/a2/a3
	rts

	SECTION "_add_new_exterior:0",CODE


;static void add_new_exterior(
_add_new_exterior
	move.l	a2,-(a7)
	move.l	$C(a7),a0
	move.l	$8(a7),a1
L410
;	contour->type=GLU_EXTERIOR;
	move.l	#$1871B,(a0)
;	contour->next=NULL;
	clr.l	$1C(a0)
;	contour->previous=tobj->last_contour;
	move.l	4(a1),$20(a0)
;	tobj->last_contour->next=contour;
	move.l	4(a1),a2
	move.l	a0,$1C(a2)
;	tobj->last_contour=contour;
	move.l	a0,4(a1)
	move.l	(a7)+,a2
	rts

	SECTION "_add_new_interior:0",CODE


;static void add_new_interior(
_add_new_interior
	movem.l	a2-a4,-(a7)
	movem.l	$14(a7),a0/a1
	move.l	$10(a7),a4
L411
;	contour->type=GLU_INTERIOR;
	move.l	#$1871A,(a1)
;	contour->next=outer->next;
	move.l	$1C(a0),$1C(a1)
;	contour->previous=outer;
	move.l	a0,$20(a1)
;	if(outer->next!=NULL)
	move.l	$1C(a0),a2
	cmp.w	#0,a2
	beq.b	L413
L412
;		outer->next->previous=contour;
	move.l	$1C(a0),a2
	move.l	a1,$20(a2)
L413
;	outer->next=contour;
	move.l	a1,$1C(a0)
;	if(tobj->last_contour==outer)
	move.l	a4,a3
	move.l	4(a3),a2
	cmp.l	a0,a2
	bne.b	L415
L414
;		tobj->last_contour=contour;
	move.l	a4,a0
	move.l	a1,4(a0)
L415
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_add_interior_with_hierarchy_check:0",CODE


;static void add_interior_with_hierarchy_check(
_add_interior_with_hierarchy_check
L435	EQU	-$14
	link	a5,#L435
	movem.l	a2-a4,-(a7)
	move.l	$8(a5),a3
	move.l	$10(a5),a4
L416
;	if(outer->next!=NULL && outer->next->type==GLU_INTERIOR)
	move.l	$C(a5),a1
	move.l	$1C(a1),a0
	cmp.w	#0,a0
	beq	L434
L417
	move.l	$C(a5),a1
	move.l	$1C(a1),a0
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	bne	L434
L418
;		for(ptr=outer->next;
	move.l	$C(a5),a0
	move.l	$1C(a0),a2
	bra	L432
L419
;			test=is_contour_contained_in(ptr,contour);
	move.l	a4,-(a7)
	move.l	a2,-(a7)
	jsr	_is_contour_contained_in
	addq.w	#$8,a7
;			switch(test)
	cmp.l	#$1871A,d0
	beq.b	L420
	bgt.b	L436
	cmp.l	#0,d0
	beq.b	L429
	bra.b	L430
L436
	cmp.l	#$1871B,d0
	beq.b	L428
	bra.b	L430
;				
L420
;					for(;ptr!=NULL && ptr->type==GLU_INTERIOR;
	bra.b	L422
L421
	move.l	$1C(a2),a2
L422
	cmp.w	#0,a2
	beq.b	L424
L423
	move.l	(a2),d0
	cmp.l	#$1871A,d0
	beq.b	L421
L424
;					if(ptr==NULL)
	cmp.w	#0,a2
	bne.b	L426
L425
;						add_new_exterior(tobj,contour);
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	jsr	_add_new_exterior
	addq.w	#$8,a7
	bra.b	L427
L426
;						add_exterior_with_check(tobj,ptr,contour);
	move.l	a4,-(a7)
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_add_exterior_with_check
	add.w	#$C,a7
L427
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L428
;					shift_interior_to_exterior(tobj,ptr);
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_shift_interior_to_exterior
	addq.w	#$8,a7
;					
	bra.b	L431
L429
;					
	bra.b	L431
L430
;					abort();
	jsr	_abort
L431
	move.l	$1C(a2),a2
L432
	cmp.w	#0,a2
	beq.b	L434
L433
	move.l	(a2),d0
	cmp.l	#$1871A,d0
	beq	L419
L434
;	add_new_interior(tobj,outer,contour);
	move.l	a4,-(a7)
	move.l	$C(a5),-(a7)
	move.l	a3,-(a7)
	jsr	_add_new_interior
	add.w	#$C,a7
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_reverse_hierarchy_and_add_exterior:0",CODE


;static void reverse_hierarchy_and_add_exterior(
_reverse_hierarchy_and_add_exterior
	movem.l	a2-a4,-(a7)
	movem.l	$14(a7),a1/a2
	move.l	$10(a7),a4
L437
;	if(outer->next!=NULL && outer->next->type==GLU_INTERIOR)
	move.l	$1C(a1),a0
	cmp.w	#0,a0
	beq.b	L443
L438
	move.l	$1C(a1),a0
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	bne.b	L443
L439
;		for(ptr=outer->next;
	move.l	$1C(a1),a0
	bra.b	L441
L440
;			ptr->type=GLU_EXTERIOR;
	move.l	#$1871B,(a0)
	move.l	$1C(a0),a0
L441
	cmp.w	#0,a0
	beq.b	L443
L442
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	beq.b	L440
L443
;	outer->type=GLU_INTERIOR;
	move.l	#$1871A,(a1)
;	contour->next=outer;
	move.l	a1,$1C(a2)
;	if(tobj->contours==outer)
	move.l	a4,a3
	move.l	(a3),a0
	cmp.l	a1,a0
	bne.b	L445
L444
;		contour->previous=NULL;
	clr.l	$20(a2)
;		tobj->contours=contour;
	move.l	a4,a0
	move.l	a2,(a0)
	bra.b	L446
L445
;		outer->previous->next=contour;
	move.l	$20(a1),a0
	move.l	a2,$1C(a0)
;		contour->previous=outer->previous;
	move.l	$20(a1),$20(a2)
L446
;	outer->previous=contour;
	move.l	a2,$20(a1)
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_shift_interior_to_exterior:0",CODE


;static void shift_interior_to_exterior(
_shift_interior_to_exterior
	movem.l	a2/a3,-(a7)
	move.l	$10(a7),a0
	move.l	$C(a7),a3
L447
;	contour->previous->next=contour->next;
	move.l	$20(a0),a1
	move.l	$1C(a0),$1C(a1)
;	if(contour->next!=NULL)
	move.l	$1C(a0),a1
	cmp.w	#0,a1
	beq.b	L449
L448
;		contour->next->previous=contour->previous;
	move.l	$20(a0),a1
	move.l	$1C(a0),a0
	move.l	a1,$20(a0)
	bra.b	L450
L449
;		tobj->last_contour=contour->previous;
	move.l	a3,a1
	move.l	$20(a0),4(a1)
L450
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_add_exterior_with_check:0",CODE


;static void add_exterior_with_check(
_add_exterior_with_check
	movem.l	a2-a4,-(a7)
	movem.l	$14(a7),a2/a3
	move.l	$10(a7),a4
L451
;	for(;outer!=NULL && outer->type==GLU_EXTERIOR;
	bra.b	L461
L452
;		test=is_contour_contained_in(outer,contour);
	move.l	a3,-(a7)
	move.l	a2,-(a7)
	jsr	_is_contour_contained_in
	addq.w	#$8,a7
;		switch(test)
	cmp.l	#0,d0
	beq.b	L458
	cmp.l	#$1871A,d0
	beq.b	L453
	bra.b	L459
;			
L453
;				if(outer->next!=NULL && outer->next->type==GLU_INTERIOR)
	move.l	$1C(a2),a0
	cmp.w	#0,a0
	beq.b	L456
L454
	move.l	$1C(a2),a0
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	bne.b	L456
L455
;					add_interior_with_hierarchy_check(tobj,
	move.l	a3,-(a7)
	move.l	a2,-(a7)
	move.l	a4,-(a7)
	jsr	_add_interior_with_hierarchy_check
	add.w	#$C,a7
	bra.b	L457
L456
;					add_new_interior(tobj,outer,contour);
	move.l	a3,-(a7)
	move.l	a2,-(a7)
	move.l	a4,-(a7)
	jsr	_add_new_interior
	add.w	#$C,a7
L457
	movem.l	(a7)+,a2-a4
	rts
L458
;				
	bra.b	L460
L459
;				abort();
	jsr	_abort
L460
	move.l	$1C(a2),a2
L461
	cmp.w	#0,a2
	beq.b	L463
L462
	move.l	(a2),d0
	cmp.l	#$1871B,d0
	beq.b	L452
L463
;	add_new_exterior(tobj,contour);
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	jsr	_add_new_exterior
	addq.w	#$8,a7
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_tess_handle_holes:0",CODE


;void tess_handle_holes(GLUtriangulatorObj *tobj)
	XDEF	_tess_handle_holes
_tess_handle_holes
	movem.l	a2/a3,-(a7)
	move.l	$C(a7),a3
L464
;	for(contour=tobj->contours;
	move.l	a3,a0
	move.l	(a0),a2
	bra.b	L471
L465
;		exterior_orientation=contour->orientation;
	move.l	$10(a2),d1
;		for(contour=contour->next;
	move.l	$1C(a2),a2
	bra.b	L469
L466
;			if(contour->orientation==exterior_orientation)
	move.l	$10(a2),d0
	cmp.l	d1,d0
	bne.b	L468
L467
;				tess_call_user_error(tobj,GLU_TESS_ERROR5);
	move.l	#$1873B,-(a7)
	move.l	a3,-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	movem.l	(a7)+,a2/a3
	rts
L468
	move.l	$1C(a2),a2
L469
	cmp.w	#0,a2
	beq.b	L471
L470
	move.l	(a2),d0
	cmp.l	#$1871A,d0
	beq.b	L466
L471
	cmp.w	#0,a2
	bne.b	L465
L472
;				return;
;	for(contour=tobj->contours;
	move.l	a3,a0
	move.l	(a0),a2
	bra.b	L480
L473
;		hole=contour->next;
	move.l	$1C(a2),a0
;		while(hole!=NULL && hole->type==GLU_INTERIOR)
	bra.b	L477
L474
;			if(cut_out_hole(tobj,contour,hole)==GLU_ERROR)
	move.l	a0,-(a7)
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_cut_out_hole
	add.w	#$C,a7
	cmp.l	#$18707,d0
	bne.b	L476
L475
	movem.l	(a7)+,a2/a3
	rts
L476
;			hole=contour->next;
	move.l	$1C(a2),a0
L477
	cmp.w	#0,a0
	beq.b	L479
L478
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	beq.b	L474
L479
;		contour=contour->next;
	move.l	$1C(a2),a2
L480
	cmp.w	#0,a2
	bne.b	L473
L481
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_cut_out_hole:0",CODE


;	/* with contour,
_cut_out_hole
L529	EQU	-$94
	link	a5,#L529
	movem.l	d2-d7/a2-a4,-(a7)
L482
;	for(v1=contour->vertices , vertex1_cnt=contour->vertex_cnt , i
	move.l	$C(a5),a0
	move.l	$14(a0),a4
	move.l	$C(a5),a0
	move.l	4(a0),d7
	moveq	#0,d6
	bra	L520
L483
;		for(v2=hole->vertices , vertex2_cnt=hole->vertex_cnt , j=0;
	move.l	$10(a5),a0
	move.l	$14(a0),a3
	move.l	$10(a5),a0
	move.l	4(a0),d5
	moveq	#0,d4
	bra	L518
L484
;			for(tmp_vertex=contour->vertices , tmp_vertex_cnt=contour-
	move.l	$C(a5),a0
	move.l	$14(a0),a2
	move.l	$C(a5),a0
	move.l	4(a0),d3
	moveq	#0,d2
	bra.b	L491
L485
;				if(v1==tmp_vertex || v1==tmp_vertex->next)
	move.l	a4,a0
	cmp.l	a2,a0
	beq.b	L487
L486
	move.l	a4,a1
	cmp.l	$32(a2),a1
	bne.b	L488
L487
;					
	bra.b	L490
L488
;				test=edge_edge_intersect(v1,v2,tmp_vertex,tmp_vertex->next);
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	jsr	_edge_edge_intersect
	add.w	#$10,a7
;				if(test!=GLU_NO_ERROR)
	tst.l	d0
	beq.b	L490
L489
;					
	bra.b	L492
L490
	move.l	$32(a2),a2
	addq.l	#1,d2
L491
	cmp.l	d3,d2
	blo.b	L485
L492
;			if(test==GLU_NO_ERROR)
	tst.l	d0
	bne	L513
L493
;				for(tmp_vertex=hole->vertices ,
	move.l	$10(a5),a0
	move.l	$14(a0),a2
	move.l	$10(a5),a0
	move.l	4(a0),d3
	moveq	#0,d2
	bra.b	L500
L494
;					if(v2==tmp_vertex || v2==tmp_vertex->next)
	move.l	a3,a0
	cmp.l	a2,a0
	beq.b	L496
L495
	move.l	a3,a1
	cmp.l	$32(a2),a1
	bne.b	L497
L496
;						
	bra.b	L499
L497
;					test=edge_edge_intersect(v1,v2,tmp_vertex,tmp_vertex->next)
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	jsr	_edge_edge_intersect
	add.w	#$10,a7
;					if(test!=GLU_NO_ERROR)
	tst.l	d0
	beq.b	L499
L498
;						
	bra.b	L501
L499
	move.l	$32(a2),a2
	addq.l	#1,d2
L500
	cmp.l	d3,d2
	blo.b	L494
L501
;				if(test==GLU_NO_ERROR)
	tst.l	d0
	bne.b	L513
L502
;					for(tmp_hole=hole->next;
	move.l	$10(a5),a0
	move.l	$1C(a0),-4(a5)
	bra.b	L511
L503
;						for(tmp_vertex=tmp_hole->vertices ,
	move.l	-4(a5),a0
	move.l	$14(a0),a2
	move.l	-4(a5),a0
	move.l	4(a0),d3
	moveq	#0,d2
	bra.b	L507
L504
;							test=edge_edge_intersect(v1,v2,tmp_vertex,
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	jsr	_edge_edge_intersect
	add.w	#$10,a7
;							if(test!=GLU_NO_ERROR)
	tst.l	d0
	beq.b	L506
L505
;								
	bra.b	L508
L506
	move.l	$32(a2),a2
	addq.l	#1,d2
L507
	cmp.l	d3,d2
	blo.b	L504
L508
;						if(test!=GLU_NO_ERROR)
	tst.l	d0
	beq.b	L510
L509
;							
	bra.b	L513
L510
	move.l	-4(a5),a0
	move.l	$1C(a0),-4(a5)
L511
	move.l	-4(a5),a0
	cmp.w	#0,a0
	beq.b	L513
L512
	move.l	-4(a5),a0
	move.l	(a0),d1
	cmp.l	#$1871A,d1
	beq.b	L503
L513
;			if(test==GLU_NO_ERROR)
	tst.l	d0
	bne.b	L517
L514
;				if(merge_hole_with_contour(tobj,contour,hole,v1,v2)
	move.l	a3,-(a7)
	move.l	a4,-(a7)
	move.l	$10(a5),-(a7)
	move.l	$C(a5),-(a7)
	move.l	$8(a5),-(a7)
	jsr	_merge_hole_with_contour
	add.w	#$14,a7
	tst.l	d0
	bne.b	L516
L515
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L516
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L517
	addq.l	#1,d4
	move.l	a3,a0
	move.l	$32(a0),a3
L518
	cmp.l	d5,d4
	blo	L484
L519
	move.l	d6,d1
	addq.l	#1,d1
	move.l	d1,d6
	move.l	a4,a0
	move.l	$32(a0),a4
L520
	move.l	d6,d1
	cmp.l	d7,d1
	blo	L483
L521
;					return 
;	for(tmp_hole=hole;
	move.l	$10(a5),-4(a5)
	bra.b	L523
L522
	move.l	-4(a5),a0
	move.l	$1C(a0),-4(a5)
L523
	move.l	-4(a5),a0
	cmp.w	#0,a0
	beq.b	L525
L524
	move.l	-4(a5),a0
	move.l	(a0),d0
	cmp.l	#$1871A,d0
	beq.b	L522
L525
;	contour->next=hole->next;
	move.l	$10(a5),a1
	move.l	$1C(a1),a0
	move.l	$C(a5),a1
	move.l	a0,$1C(a1)
;	hole->next->previous=contour;
	move.l	$10(a5),a1
	move.l	$1C(a1),a0
	move.l	$C(a5),$20(a0)
;	if(tmp_hole==NULL)
	move.l	-4(a5),a0
	cmp.w	#0,a0
	bne.b	L527
L526
;		hole->next=NULL;
	move.l	$10(a5),a1
	clr.l	$1C(a1)
;		hole->previous=tobj->last_contour;
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.l	$10(a5),a1
	move.l	a0,$20(a1)
;		tobj->last_contour->next=hole;
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.l	$10(a5),$1C(a0)
;		tobj->last_contour=hole;
	move.l	$8(a5),a1
	move.l	$10(a5),4(a1)
	bra.b	L528
L527
;		tmp_hole->previous->next=hole;
	move.l	-4(a5),a1
	move.l	$20(a1),a0
	move.l	$10(a5),$1C(a0)
;		hole->previous=tmp_hole->previous;
	move.l	-4(a5),a1
	move.l	$20(a1),a0
	move.l	$10(a5),a1
	move.l	a0,$20(a1)
;		tmp_hole->previous=hole;
	move.l	-4(a5),a1
	move.l	$10(a5),$20(a1)
;		hole->next=tmp_hole;
	move.l	$10(a5),a1
	move.l	-4(a5),$1C(a1)
L528
;	hole=contour->next;
	move.l	$C(a5),a0
	move.l	$1C(a0),$10(a5)
	move.l	$10(a5),-(a7)
	move.l	$C(a5),-(a7)
	move.l	$8(a5),-(a7)
	jsr	_cut_out_hole
	add.w	#$C,a7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_merge_hole_with_contour:0",CODE


;static GLenum merge_hole_with_contour(
_merge_hole_with_contour
L539	EQU	-$30
	link	a5,#L539
	movem.l	a2-a4,-(a7)
	move.l	$14(a5),a4
L530
;	if((v1_new=(tess_vertex *)malloc(sizeof(tess_vertex)))==NULL)
	pea	$3A.w
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
	cmp.w	#0,a2
	bne.b	L532
L531
;		tess_call_user_error(tobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L532
;	if((v2_new=(tess_vertex *)malloc(sizeof(tess_vertex)))==NULL)
	pea	$3A.w
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L534
L533
;		tess_call_user_error(tobj,GLU_OUT_OF_MEMORY);
	move.l	#$18A26,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_tess_call_user_error
	addq.w	#$8,a7
	move.l	#$18707,d0
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L534
;	v1_new->edge_flag=GL_TRUE;
	move.b	#1,$2C(a2)
;	v1_new->data=v1->data;
	move.l	a4,a3
	move.l	(a3),(a2)
;	v1_new->location[0]=v1->location[0];
	move.l	4(a4),4(a2)
	move.l	$8(a4),$8(a2)
;	v1_new->location[1]=v1->location[1];
	lea	4(a4),a1
	fmove.d	$8(a1),fp0
	lea	4(a2),a1
	fmove.d	fp0,$8(a1)
;	v1_new->location[2]=v1->location[2];
	lea	4(a4),a1
	fmove.d	$10(a1),fp0
	lea	4(a2),a1
	fmove.d	fp0,$10(a1)
;	v1_new->x=v1->x;
	move.l	a4,a1
	move.l	$1C(a1),$1C(a2)
	move.l	$20(a1),$20(a2)
;	v1_new->y=v1->y;
	move.l	a4,a1
	move.l	$24(a1),$24(a2)
	move.l	$28(a1),$28(a2)
;	v1_new->shadow_vertex=v1;
	move.l	a4,$2E(a2)
;	v1->shadow_vertex=v1_new;
	move.l	a4,a1
	move.l	a2,$2E(a1)
;	v1_new->next=v1->next;
	move.l	a4,a3
	move.l	$32(a3),$32(a2)
;	v1_new->previous=v1;
	move.l	a4,$36(a2)
;	v1->next->previous=v1_new;
	move.l	a4,a3
	move.l	$32(a3),a1
	move.l	a2,$36(a1)
;	v1->next=v1_new;
	move.l	a4,a1
	move.l	a2,$32(a1)
;	v2_new->edge_flag=GL_TRUE;
	move.b	#1,$2C(a0)
;	v2_new->data=v2->data;
	move.l	$18(a5),a3
	move.l	(a3),(a0)
;	v2_new->location[0]=v2->location[0];
	move.l	$18(a5),a3
	move.l	4(a3),4(a0)
	move.l	$8(a3),$8(a0)
;	v2_new->location[1]=v2->location[1];
	move.l	$18(a5),a3
	lea	4(a3),a1
	fmove.d	$8(a1),fp0
	lea	4(a0),a1
	fmove.d	fp0,$8(a1)
;	v2_new->location[2]=v2->location[2];
	move.l	$18(a5),a3
	lea	4(a3),a1
	fmove.d	$10(a1),fp0
	lea	4(a0),a1
	fmove.d	fp0,$10(a1)
;	v2_new->x=v2->x;
	move.l	$18(a5),a1
	move.l	$1C(a1),$1C(a0)
	move.l	$20(a1),$20(a0)
;	v2_new->y=v2->y;
	move.l	$18(a5),a1
	move.l	$24(a1),$24(a0)
	move.l	$28(a1),$28(a0)
;	v2_new->shadow_vertex=v2;
	move.l	$18(a5),$2E(a0)
;	v2->shadow_vertex=v2_new;
	move.l	$18(a5),a1
	move.l	a0,$2E(a1)
;	v2_new->next=v2->next;
	move.l	$18(a5),a3
	move.l	$32(a3),$32(a0)
;	v2_new->previous=v2;
	move.l	$18(a5),$36(a0)
;	v2->next->previous=v2_new;
	move.l	$18(a5),a3
	move.l	$32(a3),a1
	move.l	a0,$36(a1)
;	v2->next=v2_new;
	move.l	$18(a5),a1
	move.l	a0,$32(a1)
;	v1->next=v2_new;
	move.l	a4,a1
	move.l	a0,$32(a1)
;	v2_new->previous=v1;
	move.l	a4,$36(a0)
;	v2->next=v1_new;
	move.l	$18(a5),a0
	move.l	a2,$32(a0)
;	v1_new->previous=v2;
	move.l	$18(a5),$36(a2)
;	contour->vertex_cnt += hole->vertex_cnt+2;
	move.l	$10(a5),a0
	move.l	4(a0),d1
	addq.l	#2,d1
	move.l	$C(a5),a0
	move.l	4(a0),d0
	add.l	d1,d0
	move.l	$C(a5),a0
	move.l	d0,4(a0)
;	contour->next=hole->next;
	move.l	$10(a5),a1
	move.l	$1C(a1),a0
	move.l	$C(a5),a1
	move.l	a0,$1C(a1)
;	if(hole->next!=NULL)
	move.l	$10(a5),a1
	move.l	$1C(a1),a0
	cmp.w	#0,a0
	beq.b	L536
L535
;		hole->next->previous=contour;
	move.l	$10(a5),a1
	move.l	$1C(a1),a0
	move.l	$C(a5),$20(a0)
L536
;	free(hole);
	move.l	$10(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
;	--(tobj->contour_cnt);
	move.l	$8(a5),a0
	move.l	$8(a0),d0
	subq.l	#1,d0
	move.l	$8(a5),a0
	move.l	d0,$8(a0)
;	if(contour->last_vertex==v1)
	move.l	$C(a5),a1
	move.l	$18(a1),a0
	cmp.l	a4,a0
	bne.b	L538
L537
;		contour->last_vertex=v1_new;
	move.l	$C(a5),a0
	move.l	a2,$18(a0)
L538
;	v2->edge_flag=GL_FALSE;
	move.l	$18(a5),a0
	clr.b	$2C(a0)
;	v1->edge_flag=GL_FALSE;
	move.l	a4,a0
	clr.b	$2C(a0)
	moveq	#0,d0
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	END
