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

 SECTION metafile,CODE,PUBLIC
*******************************************
***  object format			***
*******************************************
dumbentry:
	clr.l	d0
	rts

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

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

*
* GEM Metafile
*
check:	move.l	table,a0
	move.l	buff1(a0),a1
	move.l	(a1),a1
	cmp.w	#$ffff,(a1)+
	bne	never
	cmp.w	#$0e00,(a1)
	beq	v101
	cmp.w	#$1800,(a1)		;major version number
	bne	never
v101:	moveq	#2,d0
	rts
*
*
*
metafile:
	move.l	#1200,xpoint
	move.l	#1200,ypoint
	move.w	#0,angle

	clr.b	object+ob_Flag
	clr.w	object+ob_Slant
	clr.w	object+ob_Twist
	move.w	#50,object+ob_LWidth		;1 point line
	move.b	#1,object+ob_LType		;solid line
	move.b	#1,object+ob_LColor		;black line
	move.b	#0,object+ob_FType		;no fill
	move.b	#1,object+ob_FColor		;black fill
	clr.b	object+ob_LBegin
	clr.b	object+ob_LEnd
	move.w	#900,object+ob_HStandOff	;1/8 inch
	move.w	#900,object+ob_VStandOff	;1/8 inch

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

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

	move.l	table,a0
	move.l	o_begingroup(a0),a0
	jsr	(a0)
	beq	meta10

	bsr	objgeti
	bsr	objgeti
	move.w	d0,length

	moveq	#4,d0
	bsr	objskip

	bsr	objgetie
	move.l	d0,objdx
	bsr	objgetie
	move.l	d0,objdy

	bsr	objgetie
	move.l	d0,-(sp)
	bsr	objgetie
	move.l	(sp)+,d1
	sub.l	objdx,d1
	sub.l	objdy,d0
	cmp.l	d1,d0
	bcs	meta0
	move.l	d0,d1
meta0:	move.w	#1600,xyscale
meta1:	cmp.l	#24000,d1
	bcs	meta2
	lsr.l	#1,d1
	lsl.w	xyscale
	bra	meta1

meta2:	moveq	#0,d0
	move.w	length,d0
	lsl.w	#1,d0
	sub.w	#16,d0
	bsr	objskip

meta5:	bsr	objgeti
	beq	meta10

	cmp.w	#$ffff,d0
	beq	meta9
	move.w	d0,opcode
	bsr	objgeti
	beq	meta10
	move.w	d0,vertex
	bsr	objgeti
	beq	meta10
	move.w	d0,integer
	bsr	objgeti
	beq	meta10
	move.w	d0,subopcode

	lea	gemlist,a0
meta6:	move.w	(a0)+,d0
	beq	meta8				;just skip it
	cmp.w	opcode,d0
	beq	meta7				;execute routine
	addq.l	#4,a0
	bra	meta6
*
meta7:	move.l	(a0),a0
	jsr	(a0)			;go do the meta command
	bra	meta5
*
*
meta8:	bsr	opskip
	beq	meta10
	bra	meta5

opskip:	moveq	#0,d0
	move.w	vertex,d0
	lsl.w	#1,d0
	add.w	integer,d0
	lsl.w	#1,d0
	bra	objskip

*
* end of input file.  close and flush buffer
*
meta9:	move.l	table,a0
	move.l	o_endgroup(a0),a0
	jsr	(a0)
	beq	meta10

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

	move.l	table,a0
	move.l	f_closer(a0),a0
	jmp	(a0)
*
*
*
opf0:	addq.l	#4,sp
opfail:	addq.l	#4,sp
meta10:	move.l	table,a0
	move.l	o_abort(a0),a0
	jsr	(a0)

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


***********************************
***********************************
* vsl_type
*
op15:	bsr	objgeti
	move.b	d0,vsltype
	rts
*
* vsl_width
op16:	bsr	objgeti
	mulu	#4,d0
	move.w	d0,vslwidth
	bra	objgeti
*
* vsl_color
op17:	bsr	objgeti
	move.b	d0,vslcolor
	rts
*
* vsl_ends
op108:	bsr	objgeti
	move.b	d0,vslbgn
	bsr	objgeti
	move.b	d0,vslend
	rts
*
* vsf_interior
op23:	bsr	objgeti
	move.b	d0,vsfinterior
	rts
*
* vsf_style
op24:	bsr	objgeti
	move.b	d0,vsfstyle
	rts
*
* vsf_color
op25:	bsr	objgeti
	move.b	d0,vsfcolor
	rts
*
* vsf_perimeter
op104:	bsr	objgeti
	move.b	d0,vsfperimeter
	rts

*
* v_pline
op6:	move.w	vertex,d0
	cmp.w	#2,d0
	bne	op6a
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom
	move.b	#tdln,object+ob_Type
	bsr	putlstyle
	bra	putobj
*
op6a:	move.l	#$7fffffff,object+ob_Left
	move.l	#$7fffffff,object+ob_Top
	move.l	#$80000000,object+ob_Right
	move.l	#$80000000,object+ob_Bottom

	move.w	vertex,d0
	mulu	#10,d0		;* bytes per line
	add.l	#22,d0		;length,width,height,xscl,yscl,cnt
*				;newpath,strokepath
	clr.w	d1
	clr.w	d2
	move.l	table,a0
	move.l	m_alloc(a0),a0
	jsr	(a0)
	beq	opfail

	move.l	a0,mptr
	move.l	(a0),a4
	lea	20(a4),a4
	move.l	a4,pptr

	move.w	vertex,subopcode
	bra	vpln5
vpln1:	bsr	objgetxy
	move.l	pptr,a0
	move.w	#LINETO,(a0)+		;the first one will be changed
	move.l	d0,(a0)+		;to a MOVETO
	move.l	d1,(a0)+
	move.l	a0,pptr

	cmp.l	object+ob_Left,d0
	bge	vpln2
	move.l	d0,object+ob_Left
vpln2:	cmp.l	object+ob_Top,d1
	bge	vpln3
	move.l	d1,object+ob_Top
vpln3:	cmp.l	object+ob_Right,d0
	ble	vpln4
	move.l	d0,object+ob_Right
vpln4:	cmp.l	object+ob_Bottom,d1
	ble	vpln5
	move.l	d1,object+ob_Bottom
vpln5:	subq.w	#1,subopcode
	bcc	vpln1


	move.l	mptr,a0
	move.l	(a0),a0
	move.w	vertex,d0
	mulu	#10,d0		;* bytes per line
	add.l	#22,d0		;length,width,height,xscl,yscl,cnt
*				;newpath,strokepath
	move.l	d0,(a0)+
	move.l	object+ob_Right,d0
	sub.l	object+ob_Left,d0
	move.l	d0,(a0)+
	move.l	object+ob_Bottom,d0
	sub.l	object+ob_Top,d0
	move.l	d0,(a0)+
	move.w	#100,(a0)+
	move.w	#100,(a0)+
	move.w	vertex,d0
	addq.w	#2,d0			;newpath,strokepath
	move.w	d0,(a0)+
	move.w	#NEWPATH,(a0)+
	move.w	#MOVETO,(a0)

	move.l	object+ob_Left,d0
	move.l	object+ob_Top,d1
	move.w	vertex,d7
	bra	vpln8
vpln7:	addq.l	#2,a0
	sub.l	d0,(a0)+
	sub.l	d1,(a0)+
vpln8:	dbf	d7,vpln7
*
	move.w	#STROKEPATH,(a0)
*
	move.b	#tpoly,object+ob_Type
	bsr	putlstyle
	bsr	putobj

	move.l	mptr,a0
	move.l	(a0),a0
	move.l	(a0),d0
	move.l	table,a0
	move.l	o_malloc(a0),a0
	jsr	(a0)
	beq	opfail

	move.l	mptr,a1
	move.l	(a1),a1
	move.l	(a1),d0
	lsr.w	#1,d0
	bra	vpln11
vpln10:	move.w	(a1)+,(a0)+
vpln11:	dbf	d0,vpln10

	move.l	mptr,a0
	move.l	table,a1
	move.l	m_delete(a1),a1
	jsr	(a1)
	rts

*
* v_gtext
*
op8:	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Bottom
	move.l	xpoint,d2
	mulu	integer,d2
	add.l	d2,d0
	sub.l	ypoint,d1
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Top

	move.w	angle,object+ob_Slant
	move.w	angle,object+ob_Twist
	clr.b	object+ob_LType
	move.w	#25,object+ob_LWidth
	clr.b	object+ob_FType
	move.b	#ttxt,object+ob_Type
	bsr	putobj
	clr.w	object+ob_Slant
	clr.w	object+ob_Twist

	lea	column,a0
	move.b	#1,cm_LCalc(a0)
	move.b	#1,cm_QCalc(a0)
	move.l	object+ob_Left,cm_Left(a0)
	move.l	object+ob_Top,cm_Top(a0)
	move.l	#$7fffff,cm_Right(a0)
	move.l	#$7fffff,cm_Bottom(a0)
	clr.w	cm_Flag(a0)

	move.l	#1000,cm_Font(a0)
	clr.l	cm_Attrb(a0)
	move.l	xpoint,cm_XPoint(a0)
	move.l	ypoint,cm_YPoint(a0)
	clr.w	cm_Spacing(a0)
	move.w	#$8000,cm_Lead(a0)
	clr.w	cm_BMod(a0)
	clr.w	cm_PIndent(a0)
	clr.w	cm_LIndent(a0)
	clr.w	cm_RIndent(a0)
	clr.b	cm_Tag(a0)
	clr.b	cm_Justify(a0)		;block left
	move.b	#9,cm_CFStyle(a0)
	move.b	#1,cm_CFColor(a0)
	move.b	#0,cm_CLStyle(a0)
	move.b	#1,cm_CLColor(a0)
	move.w	#100,cm_CLWidth(a0)
	clr.l	cm_Tabs(a0)

	move.l	#cm_Sizeof+4,d0
	add.w	integer,d0
	addq.l	#1,d0
	bclr	#0,d0			;round up

	move.l	table,a0
	move.l	o_malloc(a0),a0
	jsr	(a0)
	beq	opfail

	lea	column,a1
	move.w	#cm_Sizeof,d0
	bra	txt2
txt1:	move.b	(a1)+,(a0)+
txt2:	dbf	d0,txt1

	clr.w	(a0)+
	move.w	integer,(a0)+

	bra	txt4
txt3:	move.l	a0,-(sp)
	bsr	objgeti
	move.l	(sp)+,a0
	beq	opfail
	move.b	d0,(a0)+
txt4:	subq.w	#1,integer
	bcc	txt3

	rts

*
*
* v_fillarea
*
op9:	move.l	#$7fffffff,object+ob_Left
	move.l	#$7fffffff,object+ob_Top
	move.l	#$80000000,object+ob_Right
	move.l	#$80000000,object+ob_Bottom

	move.w	vertex,d0
	mulu	#10,d0		;* bytes per line
	add.l	#24,d0		;length,width,height,xscl,yscl,cnt
*				;newpath,closepath,fillpath
	clr.w	d1
	clr.w	d2
	move.l	table,a0
	move.l	m_alloc(a0),a0
	jsr	(a0)
	beq	opfail

	move.l	a0,mptr
	move.l	(a0),a4
	lea	20(a4),a4
	move.l	a4,pptr

	move.w	vertex,subopcode
	bra	vfil5
vfil1:	bsr	objgetxy
	move.l	pptr,a0
	move.w	#LINETO,(a0)+		;the first one will be changed
	move.l	d0,(a0)+		;to a MOVETO
	move.l	d1,(a0)+
	move.l	a0,pptr

	cmp.l	object+ob_Left,d0
	bge	vfil2
	move.l	d0,object+ob_Left
vfil2:	cmp.l	object+ob_Top,d1
	bge	vfil3
	move.l	d1,object+ob_Top
vfil3:	cmp.l	object+ob_Right,d0
	ble	vfil4
	move.l	d0,object+ob_Right
vfil4:	cmp.l	object+ob_Bottom,d1
	ble	vfil5
	move.l	d1,object+ob_Bottom
vfil5:	subq.w	#1,subopcode
	bcc	vfil1


	move.l	mptr,a0
	move.l	(a0),a0
	move.w	vertex,d0
	mulu	#10,d0		;* bytes per line
	add.l	#24,d0		;length,width,height,xscl,yscl,cnt
*				;newpath,closepath,fillpath
	move.l	d0,(a0)+
	move.l	object+ob_Right,d0
	sub.l	object+ob_Left,d0
	move.l	d0,(a0)+
	move.l	object+ob_Bottom,d0
	sub.l	object+ob_Top,d0
	move.l	d0,(a0)+
	move.w	#100,(a0)+
	move.w	#100,(a0)+
	move.w	vertex,d0
	addq.w	#3,d0			;newpath,closepath,fillpath
	move.w	d0,(a0)+
	move.w	#NEWPATH,(a0)+
	move.w	#MOVETO,(a0)

	move.l	object+ob_Left,d0
	move.l	object+ob_Top,d1
	move.w	vertex,d7
	bra	vfil8
vfil7:	addq.l	#2,a0
	sub.l	d0,(a0)+
	sub.l	d1,(a0)+
vfil8:	dbf	d7,vfil7
*
	move.w	#CLOSEPATH,(a0)+
	move.w	#FILLPATH,(a0)
*
	move.b	#tpoly,object+ob_Type
	bsr	putfstyle
	bsr	putobj

	move.l	mptr,a0
	move.l	(a0),a0
	move.l	(a0),d0
	move.l	table,a0
	move.l	o_malloc(a0),a0
	jsr	(a0)
	beq	opfail

	move.l	mptr,a1
	move.l	(a1),a1
	move.l	(a1),d0
	lsr.w	#1,d0
	bra	vfil11
vfil10:	move.w	(a1)+,(a0)+
vfil11:	dbf	d0,vfil10

	move.l	mptr,a0
	move.l	table,a1
	move.l	m_delete(a1),a1
	jsr	(a1)
	rts

*
* output primitives
op11:	move.w	subopcode,d0
	cmp.w	#1,d0
	beq	vbar
	cmp.w	#2,d0
	beq	arc
	cmp.w	#3,d0
	beq	pie
	cmp.w	#4,d0
	beq	circle
	cmp.w	#5,d0
	beq	ellipse
	cmp.w	#6,d0
	beq	elparc
	cmp.w	#7,d0
	beq	elppie
	cmp.w	#8,d0
	beq	rndrect
	cmp.w	#9,d0
	beq	frndrect
	cmp.w	#10,d0
	beq	jgtext
*
* unknown sub-opcode, skip it
*
	moveq	#0,d0
	move.w	vertex,d0
	lsl.w	#1,d0
	add.w	integer,d0
	lsl.w	#1,d0
	bra	objskip
*
* v_bar
*
vbar:	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom

	move.b	#tbox,object+ob_Type
	bsr	putfstyle
	bsr	putobj
	moveq	#0,d0
	bsr	objputw
	moveq	#0,d0
	bra	objputw
*
* arc drawing primitive
*
arc:	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	moveq	#8,d0
	bsr	objskip
	bsr	objgetdxy
	move.l	d0,object+ob_Right
	move.l	d0,object+ob_Bottom
	bsr	objgeti
	move.w	d0,object+ob_BAngle
	bsr	objgeti
	move.w	d0,object+ob_EAngle

	move.b	#tcir,object+ob_Type
	bsr	putlstyle
	bra	putcir
*
* pie drawing primitive
*
pie:	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	moveq	#8,d0
	bsr	objskip
	bsr	objgetdxy
	move.l	d0,object+ob_Right
	move.l	d0,object+ob_Bottom
	bsr	objgeti
	move.w	d0,object+ob_BAngle
	bsr	objgeti
	move.w	d0,object+ob_EAngle
	move.b	#tcir,object+ob_Type
	bsr	putfstyle
	bra	putcir

*
* circle drawing primitive
*
circle:
	move.w	#0,object+ob_BAngle
	move.w	#3600,object+ob_EAngle
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	moveq	#4,d0
	bsr	objskip
	bsr	objgetdxy
	move.l	d0,object+ob_Right
	move.l	d0,object+ob_Bottom
	move.b	#tcir,object+ob_Type
	bsr	putfstyle
	bra	putcir
*
* ellipse drawing primitive
*
ellipse:
	move.w	#0,object+ob_BAngle
	move.w	#3600,object+ob_EAngle
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetdxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom
	move.b	#telp,object+ob_Type
	bsr	putfstyle
	bra	putcir
*
* elliptical arc drawing primitive
*
elparc:
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetdxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom
	bsr	objgeti
	move.w	d0,object+ob_BAngle
	bsr	objgeti
	move.w	d0,object+ob_EAngle
	move.b	#telp,object+ob_Type
	bsr	putlstyle
	bra	putcir

*
* elliptical pie drawing primitive
*
elppie:
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetdxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom
	bsr	objgeti
	move.w	d0,object+ob_BAngle
	bsr	objgeti
	move.w	d0,object+ob_EAngle
	move.b	#telp,object+ob_Type
	bsr	putfstyle
	bra	putcir

*
putcir:	move.l	object+ob_Left,d0
	move.l	object+ob_Top,d1
	move.l	object+ob_Right,d2
	move.l	object+ob_Bottom,d3
	sub.l	d2,object+ob_Left
	sub.l	d3,object+ob_Top
	add.l	d2,d0
	add.l	d3,d1
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom

	bsr	putobj
	move.w	object+ob_BAngle,d0
	mulu	#10,d0
	bsr	objputw
	move.w	object+ob_EAngle,d0
	mulu	#10,d0
	bra	objputw

*
* rounded rectangle drawing primitive
*
rndrect:
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom

	move.b	#tbox,object+ob_Type
	bsr	putlstyle
	bsr	putobj
	move.w	#900,d0
	bsr	objputw
	move.w	#900,d0
	bra	objputw

*
* filled rounded rectangle drawing primitive
*
frndrect:
	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom

	move.b	#tbox,object+ob_Type
	bsr	putfstyle
	move.w	vslwidth,object+ob_LWidth
	move.b	vslcolor,object+ob_LColor
	bsr	putobj
	move.w	#900,d0
	bsr	objputw
	move.w	#900,d0
	bra	objputw


*
* justified graphics text
*
jgtext:	subq.w	#2,integer		;null terminated& justify mode

	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Bottom
	sub.l	ypoint,d1
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Top
	bsr	objgetdxy
	add.l	d0,object+ob_Right

	bsr	objgeti
	beq	opfail
	bsr	objgeti
	beq	opfail

	move.w	angle,object+ob_Slant
	move.w	angle,object+ob_Twist

	clr.b	object+ob_LType
	move.w	#25,object+ob_LWidth
	clr.b	object+ob_FType
	move.b	#ttxt,object+ob_Type
	bsr	putobj

	clr.w	object+ob_Slant
	clr.w	object+ob_Twist

	lea	column,a0
	move.b	#1,cm_LCalc(a0)
	move.b	#1,cm_QCalc(a0)
	move.l	object+ob_Left,cm_Left(a0)
	move.l	object+ob_Top,cm_Top(a0)
	move.l	#$7fffff,cm_Right(a0)
	move.l	#$7fffff,cm_Bottom(a0)
	clr.w	cm_Flag(a0)

	move.l	#1000,cm_Font(a0)
	clr.l	cm_Attrb(a0)
	move.l	xpoint,cm_XPoint(a0)
	move.l	ypoint,cm_YPoint(a0)
	clr.w	cm_Spacing(a0)
	move.w	#$8000,cm_Lead(a0)
	clr.w	cm_BMod(a0)
	clr.w	cm_PIndent(a0)
	clr.w	cm_LIndent(a0)
	clr.w	cm_RIndent(a0)
	clr.b	cm_Tag(a0)
	clr.b	cm_Justify(a0)		;block left
	move.b	#9,cm_CFStyle(a0)
	move.b	#1,cm_CFColor(a0)
	move.b	#0,cm_CLStyle(a0)
	move.b	#1,cm_CLColor(a0)
	move.w	#100,cm_CLWidth(a0)
	clr.l	cm_Tabs(a0)

	move.l	#cm_Sizeof+4,d0
	add.w	integer,d0
	addq.l	#1,d0
	bclr	#0,d0			;round up

	move.l	table,a0
	move.l	o_malloc(a0),a0
	jsr	(a0)
	beq	opfail

	lea	column,a1
	move.w	#cm_Sizeof,d0
	bra	jtxt2
jtxt1:	move.b	(a1)+,(a0)+
jtxt2:	dbf	d0,jtxt1

	clr.w	(a0)+
	move.w	integer,(a0)+

	bra	jtxt4
jtxt3:	move.l	a0,-(sp)
	bsr	objgeti
	move.l	(sp)+,a0
	beq	opfail
	move.b	d0,(a0)+
jtxt4:	subq.w	#1,integer
	bcc	jtxt3

	rts

*
* vst_height
*
op12:	bsr	objgetdxy
	move.l	d1,xpoint
	move.l	d1,ypoint
	rts

*
* vst_rotation
*
op13:	bsr	objgeti
	mulu	#10,d0
	move.w	d0,angle
	rts

*
* vst_point
*
op107:	bsr	objgeti
	mulu	#100,d0
	move.l	d0,xpoint
	move.l	d0,ypoint
	rts

*
* vr_recfl
op114:	bsr	objgetxy
	move.l	d0,object+ob_Left
	move.l	d1,object+ob_Top
	bsr	objgetxy
	move.l	d0,object+ob_Right
	move.l	d1,object+ob_Bottom

	move.b	#tbox,object+ob_Type
	bsr	putfstyle
	bsr	nolstyle
	bsr	putobj
	moveq	#0,d0
	bsr	objputw
	moveq	#0,d0
	bra	objputw

*******************************************
***					***
*******************************************
putlstyle:
	move.b	vsltype,object+ob_LType
	move.w	vslwidth,object+ob_LWidth
	move.b	vslbgn,object+ob_LBegin
	move.b	vslend,object+ob_LEnd
	move.b	vslcolor,object+ob_LColor
	bra	nofstyle

nolstyle:
	clr.b	object+ob_LType
	clr.w	object+ob_LWidth
	clr.b	object+ob_LBegin
	clr.b	object+ob_LEnd
	clr.b	object+ob_LColor
	rts

putfstyle:
	moveq	#0,d0			;finterior=0 or > 3 is hollow
	cmp.b	#1,vsfinterior
	bne	putfs1
	moveq	#9,d0
putfs1:	cmp.b	#2,vsfinterior
	bne	putfs2
	move.b	vsfstyle,d0
	addq.b	#1,d0
putfs2:	cmp.b	#3,vsfinterior
	bne	putfs3
	move.b	vsfstyle,d0
	add.b	#25,d0
putfs3:	move.b	d0,object+ob_FType	;fill type
	move.b	vsfcolor,object+ob_FColor
	bsr	nolstyle
	tst.b	vsfperimeter
	beq	rrts
	move.b	#1,object+ob_LType
	move.w	#25,object+ob_LWidth
	move.b	vsfcolor,object+ob_LColor
rrts:	rts

nofstyle:
	clr.b	object+ob_FType
	clr.b	object+ob_FColor
	rts


putobj:	move.l	table,a1
	move.l	o_obj(a1),a1
	lea	object,a0
	jsr	(a1)
	beq	opf0
	rts

***
***
***
objgetdxy:
	bsr	objgetie
	move.l	d0,temp
	bsr	objgetie
	move.l	d0,d1
	move.l	temp,d0
	bra	objd1
*
objgetxy:
	bsr	objgetie
	move.l	d0,temp
	bsr	objgetie
	move.l	d0,d1
	move.l	temp,d0
	sub.l	objdx,d0
	sub.l	objdy,d1
objd1:	move.l	d1,-(sp)

	move.w	#7200,d1
	move.l	table,a0
	move.l	muls1632(a0),a0
	jsr	(a0)
	move.w	xyscale,d2
	move.l	table,a0
	move.l	divs1648(a0),a0
	jsr	(a0)

	move.l	d0,d1
	move.l	(sp)+,d0
	move.l	d1,-(sp)

	move.w	#7200,d1
	move.l	table,a0
	move.l	muls1632(a0),a0
	jsr	(a0)
	move.w	xyscale,d2
	move.l	table,a0
	move.l	divs1648(a0),a0
	jsr	(a0)
	move.l	d0,d1
	move.l	(sp)+,d0
	rts
*
objgetie:
	move.l	table,a0
	move.l	f_geti(a0),a0
	jsr	(a0)
	beq	rrts
	ext.l	d0
	moveq	#1,d1
	rts

objgeti:
	move.l	table,a0
	move.l	f_geti(a0),a0
	jmp	(a0)
*
objskip:
	move.l	table,a0
	move.l	f_skip(a0),a0
	jmp	(a0)
*
objputw:
	move.l	table,a0
	move.l	o_putw(a0),a0
	jsr	(a0)
	beq	opf0
	rts

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

never:	moveq	#0,d0
	rts

maybe:	moveq	#1,d0
	rts

right:	moveq	#2,d0
	rts

*************************************************************
*************************************************************
 SECTION metafile,DATA,PUBLIC

gemlist:
	dc.w	6
	dc.l	op6
	dc.w	8
	dc.l	op8
	dc.w	9
	dc.l	op9
	dc.w	11
	dc.l	op11
	dc.w	12
	dc.l	op12
	dc.w	13
	dc.l	op13
	dc.w	15
	dc.l	op15
	dc.w	16
	dc.l	op16
	dc.w	17
	dc.l	op17
	dc.w	23
	dc.l	op23
	dc.w	24
	dc.l	op24
	dc.w	25
	dc.l	op25

	dc.w	107
	dc.l	op107
	dc.w	108
	dc.l	op108
	dc.w	104
	dc.l	op104
	dc.w	114
	dc.l	op114

	dc.w	1
	dc.l	opskip
	dc.w	5
	dc.l	opskip
	dc.w	22
	dc.l	opskip
	dc.w	32
	dc.l	opskip
	dc.w	39
	dc.l	opskip
	dc.w	106
	dc.l	opskip
	dc.w	107
	dc.l	opskip

	dc.w	0			;end of list

*
special:
	dc.w	1
	dc.l	spcl1

name:	dc.b	"GEM Metafile v2.1.2",0
spcl1:	dc.b	"Object",0


 SECTION metafile,BSS,PUBLIC
xyscale:	ds.w	1

opcode:		ds.w	1
vertex:		ds.w	1
integer:	ds.w	1
subopcode:	ds.w	1

vsltype:	ds.b	1
vslcolor:	ds.b	1
vslend:		ds.b	1
vslbgn:		ds.b	1
vslwidth:	ds.w	1

vsfinterior:	ds.b	1
vsfstyle:	ds.b	1
vsfcolor:	ds.b	1
vsfperimeter:	ds.b	1

object:		ds.w	ob_SizeOf/2
column:		ds.w	cm_Sizeof/2
xpoint:		ds.l	1
ypoint:		ds.l	1
angle:		ds.w	1

objdx:		ds.l	1
objdy:		ds.l	1
objxs:		ds.l	1
objys:		ds.l	1

temp:		ds.l	1

mptr:		ds.l	1
pptr:		ds.l	1
length:		ds.w	1
