; File name:	URAn_GEM.S	Revised:	1992.02.07
; Creator:	U.R.Andersson	Created:	1991.02.02
; (c)1991 by:	U.R.Andersson	All rights reserved
; Released as:	PD FREEWARE	(NB: commercial sales forbidden!)
;
;
;	VDI FUNCTION DEFINITIONS
;
v_opnwk		= $000B7f01
v_clswk		= $00007f02
v_clrwk		= $00007f03
v_updwk		= $00007f04
;Op $05 has subop's given below
v_pline		= $ff007f06
v_pmarker	= $ff007f07
v_gtext		= $00ff7f08
v_fillarea	= $ff007f09
v_cellarray	= $02ff7f0a
;Op $0b has subop's given below
vst_height	= $01007f0c
vst_rotation	= $00017f0d
vs_color	= $00047f0e
vsl_type	= $00017f0f
vsl_width	= $01007f10
vsl_color	= $00017f11
vsm_type	= $00017f12
vsm_height	= $01007f13
vsm_color	= $00017f14
vst_font	= $00017f15
vst_color	= $00017f16
vsf_interior	= $00017f17
vsf_style	= $00017f18
vsf_color	= $00017f19
vq_color	= $00027f1a
;$1b
vrq_locator	= $01007f1c
vsm_locator	= vrq_locator
vrq_valuator	= $00017f1d
vsm_valuator	= vrq_valuator
vrq_choice	= $00017f1e
vsm_choice	= vrq_choice
vrq_string	= $01027f1f
vsm_string	= vrq_string
vswr_mode	= $00017f20
vsin_mode	= $00027f21
;$22
vql_attributes	= $00007f23
vqm_attributes	= $00007f24
vqf_attributes	= $00007f25
vqt_attributes	= $00007f26
vst_alignment	= $00027f27
v_opnvwk	= $000b7f64
v_clsvwk	= $00007f65
vq_extnd	= $00017f66
v_contour	= $01017f67
v_contourfill	= v_contour
vsf_perimeter	= $00017f68
v_get_pixel	= $01007f69
vst_effects	= $00017f6a
vst_point	= $00017f6b
vsl_ends	= $00027f6c
vro_cpyfm	= $04037f6d
vr_trnfm	= $00007f6e
vsc_form	= $00257f6f
vsf_udpat	= $00ff7f70
vsl_udsty	= $00017f71
vr_recfl	= $02007f72
vqin_mode	= $00017f73
vqt_extent	= $00ff7f74
vqt_width	= $00017f75
vex_timv	= $00007f76
vex_time	= vex_timv
vst_load_fonts	= $00017f77
vst_unload_fonts= $00017f78
vrt_cpyfm	= $04017f79
v_show_c	= $00017f7a
v_hide_c	= $00007f7b
vq_mouse	= $00007f7c
vex_butv	= $00007f7d
vex_motv	= $00007f7e
vex_curv	= $00007f7f
vq_key_s	= $00007f80
vs_clip		= $02017f81
;;;vqt_name	= $xxxx7f82
;;;vqt_fontinfo	= $xxxx7f83
;
;
; VDI subfunction definitions
;
vq_chcells	= $00000105
v_exit_cur	= $00000205
v_enter_cur	= $00000305
v_curup		= $00000405
v_curdown	= $00000505
v_curright	= $00000605
v_curleft	= $00000705
v_curhome	= $00000805
v_eeol		= $00000905
v_eeos		= $00000a05
vs_curaddress	= $00020b05
v_curtext	= $00ff0c05
v_rvon		= $00000d05
v_rvoff		= $00000e05
vq_curaddress	= $00000f05
vq_tabstatus	= $00001005
v_hardcopy	= $00001105
v_dspcur	= $01001205
v_rmcur		= $00001305
v_form_adv	= $00001405
v_output_window	= $02001505
v_clear_disp_list=$00001605
;;;v_bit_image	= $xxxx1705
;
vs_palette	= $00013c05
;
vqp_films	= $00005b05
vqp_state	= $00005c05
vsp_state	= $00155d05
vsp_save	= $00005e05
vsp_message	= $00009500
vqp_error	= $00006005
v_meta_extents	= $02006205
;;;v_write_meta	= $xxxx6305
vm_filename	= $00ff6405
;
v_bar		= $0200010b
v_arc		= $0402020b
v_pieslice	= $0402030b
v_circle	= $0300040b
v_ellipse	= $0200050b
v_ellarc	= $0202060b
v_ellpie	= $0202070b
v_rbox		= $0200080b
v_rfbox		= $0200090b
v_justified	= $02ff0a0b
;
;
; AES FUNCTION DEFINITIONS
;
appl_init	= $01000a
appl_read	= $21100b
appl_write	= $21100c
appl_find	= $01100d
appl_tplay	= $21100e
appl_trecord	= $11100f
appl_exit	= $010013
;
evnt_keybd	= $010014
evnt_button	= $350015
evnt_mouse	= $550016
evnt_mesag	= $011017
evnt_timer	= $210018
evnt_multi	=$1071019
evnt_dclick	= $21001a
;
menu_bar	= $11101e
menu_icheck	= $21101f
menu_ienable	= $211020
menu_tnormal	= $211021
menu_text	= $112022
menu_register	= $111023
;
objc_add	= $211028
objc_delete	= $111029
objc_draw	= $61102a
objc_find	= $41102b
objc_offset	= $13102c
objc_order	= $21102d
objc_edit	= $42102e
objc_change	= $81102f
;
form_do		= $111032
form_dial	= $911033
form_alert	= $111034
form_error	= $110035
form_center	= $051036
;;;form_button
;;;form_keybd
;
graf_rubberbox	= $430046
graf_dragbox	= $830047
graf_movebox	= $610048
graf_mbox	= $610048
graf_growbox	= $810049
graf_shrinkbox	= $81004a
graf_watchbox	= $41104b
graf_slidebox	= $31104c
graf_handle	= $05004d
graf_mouse	= $11104e
graf_mkstate	= $05004f
;
scrp_read	= $011050
scrp_write	= $011051
;
fsel_input	= $02205a
fsel_exinput	= $02305b
;
wind_create	= $510064
wind_open	= $510065
wind_close	= $110066
wind_delete	= $110067
wind_get	= $250068
wind_set	= $610069
wind_find	= $21006a
wind_update	= $11006b
wind_calc	= $65006c
wind_new	= $00006d
;
rsrc_load	= $01106e
rsrc_free	= $01006f
rsrc_gaddr	= $210170
rsrc_saddr	= $211071
rsrc_obfix	= $111072
;
shel_read	= $012078
shel_write	= $312079
shel_get	= $11107a
shel_put	= $11107b
shel_find	= $01107c
shel_envrn	= $01207d
;
;
; AES DATA DEFINITIONS
;
; Function flags for evnt_multi
;
MU_KEYBD	= $01
MU_BUTTON	= $02
MU_M1		= $04
MU_M2		= $08
MU_MESAG	= $10
MU_TIMER	= $20
;
;
; Message event codes
;
MN_SELECTED	= $10
WM_REDRAW	= $14
WM_TOPPED	= $15
WM_CLOSED	= $16
WM_FULLED	= $17
WM_ARROWED	= $18
WM_HSLID	= $19
WM_VSLID	= $1A
WM_SIZED	= $1B
WM_MOVED	= $1C
WM_NEWTOP	= $1D
AC_OPEN		= $28
AC_CLOSE	= $29
;
;
; Function codes for form_dial
;
FMD_START	= 0
FMD_GROW	= 1
FMD_SHRINK	= 2
FMD_FINISH	= 3
;
;
; Object type codes
;
G_BOX		= $14
G_TEXT		= $15
G_BOXTEXT	= $16
G_IMAGE		= $17
G_PROGDEF	= $18
G_IBOX		= $19
G_BUTTON	= $1A
G_BOXCHAR	= $1B
G_STRING	= $1C
G_FTEXT		= $1D
G_FBOXTEXT	= $1E
G_ICON		= $1F
G_TITLE		= $20
;
;
; Object flags
;
NONE		= $00
SELECTABLE	= $01
DEFAULT		= $02
EXIT		= $04
EDITABLE	= $08
RBUTTON		= $10
LASTOB		= $20
TOUCHEXIT	= $40
HIDETREE	= $80
INDIRECT	= $100
;
;
; Object states
;
NORMAL		= $00
SELECTED	= $01
CROSSED		= $02
CHECKED		= $04
DISABLED	= $08
OUTLINED	= $10
SHADOWED	= $20
;
;
; Function codes for wind_set/wind_get
;
WF_KIND		= $01
WF_NAME		= $02
WF_INFO		= $03
WF_WORKXYWH	= $04
WF_CURRXYWH	= $05
WF_PREVXYWH	= $06
WF_FULLXYWH	= $07
WF_HSLIDE	= $08
WF_VSLIDE	= $09
WF_TOP		= $0A
WF_FIRSTXYWH	= $0B
WF_NEXTXYWH	= $0C
WF_RESVD	= $0D
WF_NEWDESK	= $0E
WF_HSLSIZE	= $0F
WF_VSLSIZE	= $10
WF_SCREEN	= $11
;
;
; Shape codes for graf_mouse
;
ARROW		= $00
TEXT_CRSR	= $01
HOURGLASS	= $02
BEE		= $02
POINT_HAND	= $03
FLAT_HAND	= $04
THIN_CROSS	= $05
THICK_CROSS	= $06
OUTLN_CROSS	= $07
USER_DEF	= $FF
M_OFF		= $100
M_ON		= $101
;
;
; MACRO DEFINITIONS
;
_uni_test	MACRO	symbol
.check\@:
	IFND	\1
\1:
_uni_flag	set	1
	ELSEIF
	IFNE	\1=.check\@
\1:
_uni_flag	set	1
	ELSEIF
_uni_flag	set	0
	ENDC
	ENDC
	ENDM	;_uni_test
;
;
vdi_init_ref	macro
	_uni_test	_vdiref_loc
	IFEQ	0=_uni_flag
	bsr	vdidef_loc
	ENDC
	ENDM	;vdi_init_ref
;
vdi_init_def	macro
	_uni_test	_vdidef_loc
	IFEQ	0=_uni_flag
	bra	vdidef_end
vdidef_loc:
	MOVE.L	SP,D0
	LEA	VDI_INITLIMIT,SP
	PEA	PTSOUT
	PEA	INTOUT
	PEA	PTSIN
	PEA	INTIN
	PEA	CONTRL
	PEA	VDIPB
	MOVE.L	D0,SP
	RTS
VDIPTR:	DS.L	1	;->VDIPB
VDIPB:	DS.L	5	;->CONTRL,INTIN,PTSIN,INTOUT,PTSOUT
VDI_INITLIMIT:
vdidef_end:
	ENDC
	ENDM	;vdi_init_def
;
;
sub_vdi	macro	symbol
	vdi_init_ref
	move.l	\1,d0
	BSR	sub_vdicode
	_uni_test	_sub_vdi_loc
	IFEQ	0=_uni_flag
	bra.s	sub_vdiend
sub_vdicode:
	move.l	a0,d1
	lea	contrl,a0
	clr.b	(a0)
	move.b	d0,1(a0)
	clr.b	d0
	rol.l	#8,d0
	cmp.b	#$ff,d0
	beq.s	.noptsin
	move	d0,2(a0)
.noptsin:
	clr	d0
	rol.l	#8,d0
	cmp.b	#$ff,d0
	beq.s	.nointin
	move	d0,6(a0)
.nointin:
	clr	d0
	rol.l	#8,d0
	bclr	#7,d0
	bne.s	.nohandle
	move	\2,12(a0)
.nohandle:
	cmp.b	#$7f,d0
	beq.s	.nosubop
	move	d0,10(a0)
.nosubop:
	move.l	d1,a0
	move.l	vdiptr,d1
	move	#$73,d0
	trap	#2
	move.l	intout,d0
	swap	d0
	move.l	ptsout,d1
	rts
sub_vdiend:
	ENDC
	vdi_init_def
	ENDM	;sub_vdi
;
;
aes_init_ref	macro
	_uni_test	_aesref_loc
	IFEQ	0=_uni_flag
	bsr	aesdef_loc
	ENDC
	ENDM	;aes_init_ref
;
;
aes_init_def	macro
	_uni_test	_aesdef_loc
	IFEQ	0=_uni_flag
	bra	aesdef_end
aesdef_loc:
	MOVE.L	SP,D0
	LEA	AES_INITLIMIT,SP
	PEA	ADDROUT
	PEA	ADDRIN
	PEA	INTOUT
	PEA	INTIN
	PEA	GLOBAL
	PEA	CONTRL
	PEA	AESPB
	MOVE.L	D0,SP
	RTS
;
AESPTR:	DS.L	1	;->AESPB
AESPB:	DS.L	6	;->CONTRL,GLOBAL,INTIN,INTOUT,ADDRIN,ADDROUT
AES_INITLIMIT:
;
GLOBAL:
APVERSION:	DS.W	1
APCOUNT:	DS.W	1
AP_ID:		DS.W	1
APPRIVATE:	DS.L	1
APPTREE:	DS.L	1
AP1RESV:	DS.L	1
AP2RESV:	DS.L	1
AP3RESV:	DS.L	1
AP4RESV:	DS.L	1
;
ADDRIN:		DS.L	3
ADDROUT:	DS.L	1
;
aesdef_end:
	ENDC
	ENDM	;aes_init_def
;
;
sub_aes	macro	v1
	aes_init_ref
	move.l	\1,d0
	BSR	sub_aescode
	_uni_test	_sub_aes_loc
	IFEQ	0=_uni_flag
	bra.s	sub_aesend
sub_aescode:
	move.l	a0,d1
	lea	contrl,a0
	lsl.l	#8,d0
	roxl.l	#1,d1
	ror	#8,d0
	move	d0,(a0)+
	clr	d0
	roxr.l	#1,d1
	roxl	#1,d0
	rol.l	#4,d0
	move	d0,(a0)+
	clr	d0
	rol.l	#4,d0
	move	d0,(a0)+
	clr	d0
	rol.l	#4,d0
	move	d0,(a0)+
	clr	d0
	rol.l	#4,d0
	move	d0,(a0)+
	move.l	d1,a0
	move.l	aesptr,d1
	move	#$c8,d0
	trap	#2
	move.l	intout,d0
	swap	d0
	move.l	addrout,d1
	rts
sub_aesend:
	ENDC
	aes_init_def
	ENDM	;sub_aes
;
;
gem_aes	macro	op,v1,v2,v3,v4,v5,v6,v7,v8,v9,va
	aes_init_ref
__AESII	set	(\1)>>20&255
__AESIO	set	(\1)>>16&15
__AESAI	set	(\1)>>12&15
__AESAO	set	(\1)>>08&15
__AESOP	set	(\1)&255
	MOVE.L	A0,D0
	IFNE	0<__AESII
	LEA	INTIN,A0
	MOVE.L	\2,(A0)+
	IFEQ	$19=__AESOP
	IFNE	1<__AESII
	MOVE.L	\3,(A0)+
	IFEQ	$69=__AESOP
	IFNE	2<__AESII
	MOVE.L	\4,(A0)+
	IFNE	3<__AESII
	MOVE.L	\5,(A0)+
	IFNE	4<__AESII
	MOVE.L	\6,(A0)+
	IFNE	5<__AESII
	MOVE.L	\7,(A0)+
	IFNE	6<__AESII
	MOVE.L	\8,(A0)+
	IFNE	7<__AESII
	MOVE.L	\9,(A0)+
	IFNE	8<__AESII
	MOVE.L	\a,(A0)+
	ELSEIF
	GEMADDRIN	\a
	ENDC	;9II
	ELSEIF
	GEMADDRIN	\9
	ENDC	;8II
	ELSEIF
	GEMADDRIN	\8
	ENDC	;7II
	ELSEIF
	GEMADDRIN	\7
	ENDC	;6II
	ELSEIF
	GEMADDRIN	\6
	ENDC	;5II
	ELSEIF
	GEMADDRIN	\5,\6
	ENDC	;4II
	ELSEIF
	GEMADDRIN	\4,\5
	ENDC	;3II
	ENDC	;<>wind_set
	ELSEIF
	GEMADDRIN	\3,\4
	ENDC	;2II
	ENDC	;<>evnt_multi
	ELSEIF
	GEMADDRIN	\2,\3,\4
	ENDC	;1II
	LEA	CONTRL,A0
	MOVE	#__AESOP,(A0)+
	MOVE	#__AESII,(A0)+
	MOVE	#__AESIO,(A0)+
	MOVE	#__AESAI,(A0)+
	MOVE	#__AESAO,(A0)+
	MOVE.L	D0,A0
	MOVE.L	AESPTR,D1
	MOVE	#$C8,D0
	TRAP	#2
	aes_init_def
	ENDM	;gem_aes
;
GEMADDRIN	MACRO	v1,v2,v3
	IFNE	0<__AESAI
	LEA	ADDRIN,A0
	MOVE.L	\1,(A0)+
	IFNE	1<__AESAI
	MOVE.L	\2,(A0)+
	IFNE	2<__AESAI
	MOVE.L	\3,(A0)+
	ENDC	;3AI
	ENDC	;2AI
	ENDC	;1AI
	ENDM	;gemaddrin
;
;	End of file:	URAn_GEM.S
