; SCRPAR_S
; V1.01 01/09/95
; (c) 1995 Bruno Coativy
; This software is PUBLIC DOMAIN
; This software is to be provided FREE OF CHARGE and MUST NOT be modified
sd_scrb	.equ	$32
mt_dmode	.equ	$10
io_open	.equ	$01
io_close	.equ	$02
sd_extop	.equ	$09
err_nc	.equ	-1
err_or	.equ	-4
x	.equ	6
y	.equ	11
maxsize	.equ	8192
	.sect	.text
	.sect	.rom
	.sect	.data
	.sect	.bss
	.sect	.text
	.even
WINDOW:
	.dc.w	17
	.dc.b	"scr_0002x0001a0x0"
	.even
GRAPHMODE:
	.dc.b	0,2
	.dc.w	0
	.dc.b	1,4
	.dc.w	8
	.dc.l	0
EXTOP:
	lea	GETBASE,a2
	moveq	#0,d3
	moveq	#sd_extop,d0
	trap	#3
	tst.l	d0
	rts
GETBASE:
	move.l	sd_scrb(a0),d1
	moveq	#0,d0
	rts
_scrb:
	link	a6,#0
	movem.l	d2-d7/a2-a5,-(a7)
	move.l	8(a6),d1
	cmp.l	#-1,d1
	beq	DEFAULT
	move.l	d1,a0
	bsr	EXTOP
	bne	ERROR
	move.l	d1,d0
	bra	ERROR
DEFAULT:
	moveq	#0,d3
	lea	WINDOW,a0
	moveq	#io_open,d0
	trap	#2
	tst.l	d0
	bne	ERROR
	bsr	EXTOP
	bne	ERROR
	move.l	d1,d7
	moveq	#io_close,d0
	trap	#2
	move.l	d7,d0
ERROR:
	movem.l	(a7)+,d2-d7/a2-a5
	unlk	a6
	rts
COMPUTEX:
	swap	d6
	bclr.l	#8,d6
	beq	NORATIO
	lsr.w	#1,d7
NORATIO:
	swap	d6
	rts
_scrs:
	link	a6,#-20
	movem.l	d2-d7/a2-a5,-(a7)
	bsr	START
	moveq	#x,d4
	bsr	FINDSIZE
	bsr	COMPUTEX
	swap	d7
	moveq	#y,d4
	bsr	FINDSIZE
	move.w	d7,d6
	swap	d7
	mulu	d6,d7
	swap	d6
	lsr.l	#3,d7
	move.w	d7,d5
	swap	d7
	mulu	d6,d5
	mulu	d6,d7
	swap	d7
	add.l	d5,d7
	move.l	d7,d0
	movem.l	(a7)+,d2-d7/a2-a5
	unlk	a6
	rts
_scrx:
	link	a6,#-20
	movem.l	d2-d7/a2-a5,-(a7)
	bsr	START
	moveq	#x,d4
	bsr	FINDSIZE
	bsr	COMPUTEX
SCRXEND:
	ext.l	d7
	move.l	d7,d0
	movem.l	(a7)+,d2-d7/a2-a5
	unlk	a6
	rts
_scry:
	link	a6,#-20
	movem.l	d2-d7/a2-a5,-(a7)
	bsr	START
	moveq	#y,d4
	bsr	FINDSIZE
	bra	SCRXEND
START:
	moveq	#-1,d1
	moveq	#-1,d2
	moveq	#mt_dmode,d0
	trap	#1
	lea	GRAPHMODE,a5
NEXTMODE:
	move.l	(a5)+,d6
	beq	ERROR_NC
	cmp.b	d1,d6
	bne	NEXTMODE
	lea	-20(a6),a5
	rts
ERROR_NC:
	moveq	#err_nc,d0
ERROR1:
	add.w	#4,a7
	bra	ERROR
FINDSIZE:
	move.l	a5,a0
	lea	WINDOW,a1
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1)+,(a0)+
	move.l	(a1),(a0)
	clr.w	d6
	move.w	#maxsize,d7
AGAIN:
	move.w	d7,d5
	add.w	d6,d5
	lsr.w	#1,d5
	move.w	d5,d1
	lea	0(a5,d4.w),a1
	move.l	#1000,d2
	bsr	WTOASCII
	moveq	#-1,d1
	moveq	#0,d3
	move.l	a5,a0
	moveq	#io_open,d0
	trap	#2
	cmp.b	#err_or,d0
	beq	TOOMUCH
	tst.l	d0
	bne	ERROR1
	moveq	#io_close,d0
	trap	#2
	bclr.l	d0,d5
	cmp.w	d5,d6
	beq	RIGHTVAL
	move.w	d5,d6
	bra	AGAIN
TOOMUCH:
	move.w	d5,d7
	bra	AGAIN
RIGHTVAL:
	move.w	d6,d7
	rts
WTOASCII:
	ext.l	d1
	divu	d2,d1
	add.b	#$30,d1
	move.b	d1,(a1)+
	swap	d1
	divu	#10,d2
	bne	WTOASCII
	rts
	.extern	_scrb
	.extern	_scrs
	.extern	_scrx
	.extern	_scry
