
 Include "equ.h"
 Include "impequ.h"

CR	equ	$d
LF	equ	$a

 SECTION eps,CODE,PUBLIC
*******************************************
***					***
*******************************************
dumbentry:
	clr.l	d0
	rts

	dc.l	"IMPO"
	dc.w	201
	dc.l	0

table:	dc.l	0
	dc.l	name,special,check,eps

*
* Encapsulated PostScript
*
check:	move.l	table,a0
	move.l	buff1(a0),a1
	move.l	(a1),a1
	lea	epsfhdr,a2
chk1:	cmp.b	(a2)+,(a1)+
	bne	never
	tst.b	(a2)
	bne	chk1
	moveq	#2,d0
rrts:	rts

*
*
*
eps:	bsr	geteps
	beq	rrts

	move.b	#teps,object+ob_Type
	clr.b	object+ob_Flag
	clr.w	object+ob_Slant
	clr.w	object+ob_Twist
	move.w	#50,object+ob_LWidth
	clr.b	object+ob_LType
	move.b	#1,object+ob_LColor
	clr.b	object+ob_FType
	move.b	#1,object+ob_FColor
	clr.b	object+ob_LBegin
	clr.b	object+ob_LEnd
	move.w	#900,object+ob_HStandOff
	move.w	#900,object+ob_VStandOff

	clr.l	object+ob_Left
	clr.l	object+ob_Top
	move.l	eright,d0
	sub.l	eleft,d0
	bpl	eps1
	neg.l	d0
eps1:	move.l	etop,d1
	sub.l	ebottom,d1
	bpl	eps2
	neg.l	d1
eps2:	mulu	#100,d0
	mulu	#100,d1
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom

	move.l	table,a0
	move.l	o_open(a0),a0
	jsr	(a0)

	move.l	table,a1
	move.l	o_obj(a1),a1
	lea	object,a0
	jsr	(a1)
	beq	abortobj

	move.l	elength,d0
	add.l	#eps_Sizeof,d0
	add.l	#16,d0
	move.l	table,a0
	move.l	o_malloc(a0),a0
	jsr	(a0)
	beq	abortobj

	move.w	#3,eps_Type(a0)
	move.l	object+ob_Right,eps_Width(a0)
	move.l	object+ob_Bottom,eps_Height(a0)
	clr.l	eps_PicPtr(a0)
	clr.l	eps_PlyPtr(a0)
	move.l	elength,d0
	add.l	#16,d0
	move.l	d0,eps_DataLen(a0)

	lea	eps_Sizeof(a0),a0
	move.l	eleft,(a0)+
	move.l	ebottom,(a0)+
	move.l	eright,(a0)+
	move.l	etop,(a0)+

	move.l	ehandle,a1
	move.l	(a1),a1
	move.l	elength,d0
	move.l	d0,d1
	swap	d1
	bra	ce2
ce1:	move.b	(a1)+,(a0)+
ce2:	dbf	d0,ce1
	dbf	d1,ce1

	move.l	ehandle,a0
	move.l	table,a1
	move.l	m_delete(a1),a1
	jsr	(a1)

	move.l	table,a0
	move.l	o_close(a0),a0
	jmp	(a0)

abortobj:
	move.l	table,a0
	move.l	o_abort(a0),a0
	jmp	(a0)

*******************************************
***					***
*******************************************

rtf0:	move.l	ehandle,a0
	move.l	table,a1
	move.l	m_delete(a1),a1
	jsr	(a1)
	addq.l	#4,sp

rtfail:	moveq	#0,d0
	rts

rtok:	moveq	#1,d0
	rts


*******************************************
***					***
*******************************************
geteps:
	move.l	table,a1
	move.l	flen(a1),a0
	move.l	(a0),elength

	move.l	m_alloc(a1),a1
	move.l	elength,d0
	clr.l	d1
	clr.l	d2
	jsr	(a1)
	beq	rtfail

	move.l	a0,ehandle

	move.l	table,a0
	move.l	f_openr(a0),a0
	jsr	(a0)
	beq	rtf0

	move.l	table,a1
	move.l	f_getr(a1),a1
	move.l	ehandle,a0
	move.l	(a0),a0
	move.l	elength,d0
	jsr	(a1)

	move.l	table,a0
	move.l	f_closer(a0),a0
	jsr	(a0)

	move.l	ehandle,a0
	move.l	(a0),a0
	move.l	elength,d0

	move.l	#0,eleft
	move.l	#0,etop
	move.l	#72,eright
	move.l	#72,ebottom
	bra	geps9
geps6:	lea	bbstr,a1
geps7:	cmp.b	(a0)+,(a1)+
	bne	geps9
	subq.l	#1,d0
	tst.b	(a1)
	bne	geps7
	bra	geps10

geps9:	subq.l	#1,d0
	bcc	geps6
	bra	geps11
*
* got a match
*
geps10:	bsr	getnum
	move.l	d0,eleft
	bsr	getnum
	move.l	d0,ebottom
	bsr	getnum
	move.l	d0,eright
	bsr	getnum
	move.l	d0,etop

geps11:	bsr	putzero
	beq	rrts

	move.l	elength,d0
	btst	#0,d0
	beq	even
	bsr	putzero
	beq	rrts

even:
;	rts

*
*
*
	move.l	ehandle,a0
	move.l	(a0),a0
	move.l	elength,d0
	bra	gclr3
gclr1:	lea	ccstr,a1
gclr2:	cmp.b	(a0)+,(a1)+
	bne	gclr3
	subq.l	#1,d0
	tst.b	(a1)
	bne	gclr2
	bra	gclr4

gclr3:	subq.l	#1,d0
	bcc	gclr1
	bra	rtok
*
* got a match
*
gclr4:	bsr	getclr
	move.w	d0,color+cl_Cyan
	bsr	getclr
	move.w	d0,color+cl_Magenta
	bsr	getclr
	move.w	d0,color+cl_Yellow
	bsr	getclr
	move.w	d0,color+cl_Black
	clr.w	color+cl_Map
	clr.w	color+cl_Type
gclr5:	move.b	(a0)+,d0
	cmp.b	#"(",d0
	beq	gclr6
	cmp.b	#" ",d0
	beq	gclr5
	bra	rtok

gclr6:	lea	color+cl_Name,a1
	lea	color+cl_Name+23,a2
gclr7:	move.b	(a0)+,d0
	beq	rtok
	cmp.b	#")",d0
	beq	gclr8
	cmp.b	#CR,d0
	beq	rtok
	cmp.b	#LF,d0
	beq	rtok
	move.b	d0,(a1)+
	cmp.l	a2,a1
	bcs	gclr7
	subq.l	#1,a1
	bra	gclr7

gclr8:	clr.b	(a1)

	move.l	ehandle,a1
	sub.l	(a1),a0
	move.l	a0,-(sp)

	lea	color,a0
	move.l	table,a1
	move.l	newcolor(a1),a1
	jsr	(a1)

	move.l	ehandle,a0
	move.l	(a0),a0
	add.l	(sp)+,a0

gclr9:	move.b	(a0)+,d0
	beq	rtok
	cmp.b	#CR,d0
	beq	gclr9
	cmp.b	#LF,d0
	beq	gclr9
	cmp.b	#" ",d0
	beq	gclr9
	cmp.b	#"%",d0
	bne	rtok
	cmp.b	#"%",(a0)+
	bne	rtok
	cmp.b	#"+",(a0)+
	beq	gclr4
	rts
*
*
*


putzero:
	move.l	#1,d0
	move.l	ehandle,a0
	move.l	table,a1
	move.l	m_grow(a1),a1
	jsr	(a1)
	beq	rtf0

	move.l	ehandle,a0
	move.l	(a0),a0
	add.l	elength,a0
	clr.b	(a0)
	addq.l	#1,elength
	moveq	#1,d0
	rts


getnum:	move.b	(a0),d1
	moveq	#0,d0
	moveq	#1,d2
	cmp.b	#"-",d1
	beq	gtnm2
	cmp.b	#"0",d1
	bcs	gtnm0
	cmp.b	#"9",d1
	bls	gtnm1
gtnm0:	addq.l	#1,a0
	bra	getnum
gtnm1:	moveq	#0,d0
	moveq	#0,d2
gtnm2:	move.b	(a0)+,d1
	beq	gtnm9
	cmp.b	#"-",d1
	bne	gtnm3
	moveq	#1,d2
	bra	gtnm2
gtnm3:	cmp.b	#" ",d1
	beq	gtnm9
	cmp.b	#CR,d1
	beq	gtnm9
	cmp.b	#LF,d1
	beq	gtnm9
	cmp.b	#".",d1
	beq	gtnm10
	sub.b	#"0",d1
	bcs	gtnm9
	cmp.b	#9,d1
	bhi	gtnm9
	move.l	d0,-(sp)
	lsl.l	#2,d0
	add.l	(sp)+,d0
	lsl.l	#1,d0
	and.l	#$ff,d1
	add.l	d1,d0
	bra	gtnm2
gtnm9:	tst.w	d2
	beq	rrts
	neg.l	d0
	rts

gtnm10:	move.b	(a0)+,d1
	beq	gtnm9
	sub.b	#"0",d1
	bcs	gtnm9
	cmp.w	#9,d1
	bhi	gtnm9
	bra	gtnm10



getclr:	moveq	#0,d0
	move.w	#10000,d1
gtcl1:	move.b	(a0)+,d2
	cmp.b	#" ",d2
	beq	gtcl1
	bra	gtcl3

gtcl2:	move.b	(a0)+,d2
gtcl3:	cmp.b	#".",d2
	beq	gtcl5
	cmp.b	#" ",d2
	beq	gtcl10
	sub.b	#"0",d2
	bcs	gtcl10
	cmp.b	#9,d2
	bhi	gtcl10
	and.w	#$ff,d2
	cmp.w	#10000,d1
	beq	gtcl4
*
* decimal portion
*
	mulu	d1,d2
	add.w	d2,d0
	and.l	#$ffff,d1
	divu	#10,d1
	bra	gtcl2
*
* integer portion (should ONLY be a 0 or a 1)
*
gtcl4:	cmp.b	#2,d2
	bcc	gtcl10
	mulu	d1,d2
	move.w	d2,d0
	bra	gtcl2
*
* decimal point
*
gtcl5:	cmp.w	#10000,d1
	bne	gtcl10
	move.w	#1000,d1
	bra	gtcl2
*
* return number 0-10000
*
gtcl10:	cmp.w	#10000,d0
	bcs	rrts
	move.w	#10000,d0
	rts


*******************************************************************
***	called when the import routine choosen finds something	***
***	wrong with the file loaded.				***
*******************************************************************
notcorrect:
	rts

never:	moveq	#0,d0
	rts

maybe:	moveq	#1,d0
	rts

correct:
	moveq	#2,d0
	rts


*******************************************
***					***
*******************************************
 SECTION eps,DATA,PUBLIC
*
special:
	dc.w	1
	dc.l	spcl1
*
*
name:	dc.b	"Ascii EPSF v2.1.1",0
*
spcl1:	dc.b	"EPSF 1.2",0

bbstr:		dc.b	"%%BoundingBox:",0
ccstr:		dc.b	"%%CMYKCustomColor:",0
epsfhdr:	dc.b	"%!PS-Adobe",0

 SECTION eps,BSS,PUBLIC

data:		ds.w	1
object:		ds.w	ob_SizeOf/2
array:		ds.w	3

eleft:		ds.l	1
etop:		ds.l	1
eright:		ds.l	1
ebottom:	ds.l	1

ehandle:	ds.l	1
elength:	ds.l	1
color:		ds.w	cl_Sizeof/2
