
* VDI Library Copyright (C) HiSoft 1988

* 31.5.88	vqt_extent fixed
* 25.10.89	v_rfbox fixed
* 30.3.93	Speedo/FontGDOS functions added

* macro to jump to a given VDI routine
govdi	macro	vdi_number
	IFNE	(\1)<128
	moveq	#\1,d0
	ELSEIF
	move.w	#\1,d0
	ENDC
	bra	CALL_VDI
	endm

DEFV	macro	name
	MODULE	\1
	SECTION	TEXT
	XREF	CALL_VDI,LOW_VDI
	XREF	contrl,contrl1,contrl3,contrl6
	XREF	intin,ptsin,intout,ptsout
	XREF	vdi_params,current_handle
	endm

EXPORT	macro	name
\1	XDEF	\1
	endm

docont	macro	contrl1,contrl3
	IFEQ	\1
	clr.w	contrl1
	ELSEIF
	move.w	#\1,contrl1
	ENDC
	IFEQ	\2
	clr.w	contrl3
	ELSEIF
	move.w	#\2,contrl3
	ENDC
	endm

	DEFV	Workstations

	EXPORT	v_opnwk
	moveq	#1,d0
v_opall	docont	0,11
	bsr	LOW_VDI
	move.w	contrl6,current_handle
	rts

	EXPORT	v_clswk
	docont	0,0
	govdi	2

	EXPORT	v_opnvwk
	moveq	#100,d0
	move.w	current_handle,contrl6
	bra.s	v_opall

	EXPORT	v_clsvwk
	docont	0,0
	govdi	101

	EXPORT	v_clrwk
	moveq	#3,d0
v_zeroz	docont	0,0
	bra	CALL_VDI

	EXPORT	v_updwk
	moveq	#4,d0
	bra.s	v_zeroz

	EXPORT	vst_load_fonts
	moveq	#119,d0
vfont_all
	docont	0,1
	clr.w	intin
	bsr	CALL_VDI
	move.w	intout,d0
	rts

	EXPORT	vst_unload_fonts
	moveq	#120,d0
	bra.s	vfont_all

	EXPORT	vs_clip
	docont	2,1
	govdi	129

	DEFV	OutputFunctions

	EXPORT	v_pline
	moveq	#6,d0
v_pall	clr.w	contrl3
	bra	CALL_VDI

	EXPORT	v_pmarker
	moveq	#7,d0
	bra.s	v_pall

	EXPORT	v_fillarea
	moveq	#9,d0
	bra.s	v_pall

	EXPORT	v_gtext
	moveq	#0,d0
	moveq	#0,d1
	lea	intin,a1
.copy	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d0
	bpl.s	.copy
.end	move.w	d0,contrl3
	move.w	#1,contrl1
	govdi	8

	EXPORT	v_contourfill
	docont	1,1
	govdi	103

	EXPORT	vr_recfl
	docont	2,0
	govdi	114

	EXPORT	v_pieslice
	moveq	#3,d0
	bra.s	gdp_arcpie

	EXPORT	v_arc
	moveq	#2,d0
gdp_arcpie
	docont	4,2
	clr.l	ptsin+4
	clr.l	ptsin+8
	clr.w	ptsin+14
	bra	gdp_all

	EXPORT	v_bar
	docont	2,0
	moveq	#1,d0
	bra.s	gdp_all	

	EXPORT	v_circle
	docont	3,0
	moveq	#4,d0
	clr.l	ptsin+4
	clr.w	ptsin+10
	bra.s	gdp_all

	EXPORT	v_ellarc
	docont	2,2
	moveq	#6,d0
	bra.s	gdp_all

	EXPORT	v_ellpie
	docont	2,2
	moveq	#7,d0
	bra.s	gdp_all

	EXPORT	v_ellipse
	docont	2,0
	moveq	#5,d0
	bra.s	gdp_all

	EXPORT	v_rbox
	moveq	#8,d0
gdp_box	docont	2,0
gdp_all	move.w	d0,contrl+10
	govdi	11

	EXPORT	v_rfbox
	moveq	#9,d0
	bra.s	gdp_box

	EXPORT	v_justified
	moveq	#2,d0
	moveq	#0,d1
	lea	intin+4,a1
.copy	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d0
	bpl.s	.copy
.end	move.w	d0,contrl3
	move.w	#2,contrl1
	moveq	#10,d0
	bra.s	gdp_all


	DEFV	AttributeFunctions

	EXPORT	vswr_mode
	docont	0,1
	govdi	32

	EXPORT	vs_color
	docont	0,4
	govdi	14

	EXPORT	vsl_type
	docont	0,1
	govdi	15

	EXPORT	vsl_udsty
	docont	0,1
	govdi	113

	EXPORT	vsl_width
	docont	1,0
	clr.w	ptsin+2
	govdi	16

	EXPORT	vsl_color
	docont	0,1
	govdi	17

	EXPORT	vsl_ends
	docont	0,2
	govdi	108

	EXPORT	vsm_type
	docont	0,1
	govdi	18

	EXPORT	vsm_height
	docont	1,0
	clr.w	ptsin
	govdi	19

	EXPORT	vsm_color
	docont	0,1
	govdi	20

	EXPORT	vst_height
	docont	1,0
	clr.w	ptsin
	govdi	12

	EXPORT	vst_point
	docont	0,1
	govdi	107

	EXPORT	vst_rotation
	docont	0,1
	govdi	13

	EXPORT	vst_font
	docont	0,1
	govdi	21

	EXPORT	vst_color
	docont	0,1
	govdi	22

	EXPORT	vst_effects
	docont	0,1
	govdi	106

	EXPORT	vst_alignment
	docont	0,2
	govdi	39

	EXPORT	vsf_interior
	docont	0,1
	govdi	23

	EXPORT	vsf_style
	docont	0,1
	govdi	24

	EXPORT	vsf_color
	docont	0,1
	govdi	25

	EXPORT	vsf_perimeter
	docont	0,1
	govdi	104

	EXPORT	vsf_updat
	clr.w	contrl1
	govdi	112

	DEFV	RastorOps

	EXPORT	vro_cpyfm
	docont	4,1
	govdi	109

	EXPORT	vrt_cpyfm
	docont	4,3
	govdi	121

	EXPORT	vr_trnfm
	docont	0,0
	govdi	110

	EXPORT	v_get_pixel
	docont	1,0
	govdi	105


	DEFV	InputFunctions

	EXPORT	vex_timv
	docont	0,0
	govdi	118

	EXPORT	v_show_c
	docont	0,1
	govdi	122

	EXPORT	v_hide_c
	docont	0,0
	govdi	123

	EXPORT	vq_mouse
	docont	0,0
	govdi	124

	EXPORT	vex_butv
	docont	0,0
	govdi	125

	EXPORT	vex_motv
	docont	0,0
	govdi	126

	EXPORT	vex_curv
	docont	0,0
	govdi	127

	EXPORT	vq_key_s
	docont	0,0
	govdi	128

	DEFV	InquireFunctions

	EXPORT	vq_extnd
	docont	0,1
	govdi	102

	EXPORT	vq_color
	docont	0,2
	govdi	26

	EXPORT	vql_attributes
	docont	0,0
	govdi	35

	EXPORT	vqm_attributes
	docont	0,0
	govdi	36

	EXPORT	vqf_attributes
	docont	0,0
	govdi	37

	EXPORT	vqt_attributes
	docont	0,0
	govdi	38

	EXPORT	vqt_extent
	moveq	#0,d0
	moveq	#0,d1
	lea	intin,a1
.copy	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d0
	bpl.s	.copy
.end	move.w	d0,contrl3
	clr.w	contrl1
	govdi	116

	EXPORT	vqt_width
	docont	0,1
	govdi	117

	EXPORT	vqt_name
	docont	0,1
	govdi	130

	EXPORT	vqt_fontinfo
	docont	0,0
	govdi	131

	DEFV	Bezier

	EXPORT	v_bez_on
	docont	1,0
dov_bez	move.w	#13,contrl+10
	govdi	11
	
	EXPORT	v_bez_off
	docont	0,0
	bra.s	dov_bez
	
	EXPORT	v_set_app_buff
	docont	0,3
	govdi	$FFFF
	
	EXPORT	v_bez
	move.w	d0,contrl+2
	addq.w	#1,d0
	lsr.w	#1,d0
	move.w	d0,contrl+6
	move.w	#13,contrl+10
	govdi	6

	EXPORT	v_bez_fill
	move.w	d0,contrl+2
	addq.w	#1,d0
	lsr.w	#1,d0
	move.w	d0,contrl+6
	move.w	#13,contrl+10
	govdi	9

	EXPORT	v_bez_qual
	docont	0,3
	move.w	#99,contrl+10
	govdi	5
	


	DEFV	SpeedoOutput

	EXPORT	v_ftext
	moveq	#0,d1
	moveq	#0,d0
	lea	intin,a1
.copy	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d0
	bpl.s	.copy
.end	move.w	d0,contrl3
	move.w	#1,contrl1
	govdi	241

	EXPORT	v_ftext_offset
	moveq	#0,d1
	moveq	#0,d0
	lea	intin,a1
.copy	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d0
	bpl.s	.copy
.end	move.w	d0,contrl3
	addq.w	#1,d0
	move.w	d0,contrl1
	govdi	242

	DEFV	SpeedoInquire

	EXPORT	vqt_fontheader
	docont	0,1
	govdi	232
	
	EXPORT	vqt_trackkern
	docont	0,0
	govdi	234
	
	EXPORT	vqt_pairkern
	docont	0,2
	govdi	235
	
	EXPORT	vqt_f_extent
	moveq	#0,d0
	moveq	#0,d1
	lea	intin,a1
.copy	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d0
	bpl.s	.copy
.end	move.w	d0,contrl3
	clr.w	contrl1
	govdi	240

	EXPORT	vqt_get_table
	docont	0,0
	govdi	254
	
	EXPORT	vqt_cachesize
	docont	0,1
	govdi	255

	EXPORT	vqt_advance
	docont	0,1
	govdi	247

	EXPORT	vqt_devinfo
	docont	0,1
	govdi	248


	DEFV	SpeedoAttributes
	EXPORT	vst_charmap
	docont	0,1
	govdi	236

	EXPORT	vst_kern
	docont	0,2
	govdi	237

	EXPORT	vst_error
	docont	0,3
	govdi	245
	
	EXPORT	vst_arbpt
	move.w	#0,contrl+2
	govdi	246

	EXPORT	vst_scratch
	docont	0,1
	govdi	244
	
	EXPORT	vst_setsize
	move.w	#0,contrl+2
	govdi	252

	EXPORT	vst_skew
	docont	0,1
	govdi	253
	
	
	DEFV	SpeedoControl	
	
	EXPORT	v_getbitmap_info
	docont	0,1
	govdi	239

	EXPORT	v_getoutline
	docont	0,6
	govdi	243

	EXPORT	v_savecache
	moveq	#249,d0
	moveq	#0,d2
	lea	intin,a1
v_dostrcopy
	moveq	#0,d1
	move.b	(a0)+,d1		convert C string into words
	beq.s	.end
	move.w	d1,(a1)+
	addq.b	#1,d2
	bpl.s	.copy
.end	move.w	d2,contrl3
	move.w	#0,contrl1
	bra	CALL_VDI

	EXPORT	v_loadcache
	move.w	#250,d0
	moveq	#1,d2
	lea	intin+2,a1
	bra	v_dostrcopy

	EXPORT	v_flushcache
	docont	0,0
	govdi	251
	
	
* the actual calling of the VDI
	MODULE	LowLevelVDI
	XDEF	CALL_VDI,LOW_VDI
	XDEF	contrl,contrl1,contrl3,contrl6
	XDEF	intin,intout,ptsin,ptsout
	XDEF	current_handle,vdi_params

	SECTION	TEXT
* call a VDI routine
* in:	d0.w=VDI function number
* out	none
* uses	d0-d2/a0-a2
* uses the current handle
CALL_VDI
	move.w	current_handle,contrl6
LOW_VDI	move.w	d0,contrl			store the op code
	move.l	#vdi_params,d1
	move.w	#115,d0			function number
	trap	#2
	rts

	SECTION	DATA
* this is a table of pointers to all the VDI arrays
vdi_params	dc.l	contrl,intin,ptsin,intout,ptsout

	SECTION	BSS
* these don't need initialising so can go in the BSS section

current_handle	ds.w	1		used by all VDI calls

contrl	ds.w	1
contrl1	ds.w	1
contrl2	ds.w	1
contrl3	ds.w	1
contrl4	ds.w	1
contrl5	ds.w	1
contrl6	ds.w	1
contrl7	ds.w	1
contrl8	ds.w	1
contrl9	ds.w	1
contrl10	ds.w	1
contrl11	ds.w	1

intin	ds.w	128		min 30
intout	ds.w	128		min 45
ptsin	ds.w	128		min 30
ptsout	ds.w	128		min 12


*********** END OF VDI *****************
