	subroutine dprod(error)
#
# D-Produktionen 
# 	DP1:	D	->	a
#	DP2:	D	->	C
# Bei Nichtanwendbarkeit bzw. Stack-Ueberlauf ist error=true, sonst =false.
#
# Externe Routinen:
# Name		File, Bibliothek
# mstuck	SUBS		testet auf Markscheidenstueck
# winkr		SUBS		Steigung nach Winkelinkrement
# push		SUBS		bringt Element in den Stack
#
# Version 0.1	15.05.85
#
include defsym.rat
#
logical	error		# Error Flag
logical	show		# mit/ohne Bildschirm-Ausgabe
logical	mstuck		# function, entscheidet ueber Markscheidenstueck
#
integer	prod		# Produktionsnummer
integer	bog,minbog	# Bogenlaenge, minimale B.
integer	dx,dy		# Koord'inkremente
integer	px,py,		# Durchtrittspunkt
	tx,ty,ux,uy,	# Anf. und Endpunkt des Kurvensegments
	vx,vy		# Strahl ab v
integer	bb		# Bandbreite
#
common	/punkte/tx,ty,ux,uy,vx,vy,bb
common	/para/bog,minbog
common	/flags/show
#
#	Segmentierung
#
if (show) write(1,10) 
10 format(' DPROD')
#
error=.false.
call winkr(minbog,dx,dy)		# Steigung nach min.Winkelinkrement
if (dx==0 && dy==0 && mstuck(tx,ty,ux,uy)) prod=DP1
else prod=DP2
#
#	Anwendung der Produktion
#
if (prod==DP1)
[	if (show) write(1,20)
	20 format(' (D1) D->a')
	call push(XAT,tx,ty,ux,uy,vx,vy,bb,error)
]
else if (prod==DP2)
[	if (show) write(1,30)
	30 format(' (D2) D->C')
	call push(XC,tx,ty,ux,uy,vx,vy,bb,error)
]
else
[	error=.true.
	write(1,90) 
	90 format(' *** DPROD - nicht anwendbar ***')
]
return
end

