*/beginfile PROCS9_asm
; --------------------------------------------------------------
; PROCS9_asm - BASIC bits
;	    - last modified 27/08/95
; QDOS-Amiga sources by Rainer Kowallik
;    ...some changes by Mark J Swift
; --------------------------------------------------------------
; get parameter
; entry of variables name
L069AE:
	CMPA.L	A5,A3
	BGE.S	L06994
	MOVE.L	A5,-(A7)
	ADDQ.W	#8,A3
	MOVEA.L	A3,A5
	JSR	L064A2(PC)	;*/undomodify BSR L064A2
	MOVEA.L	(A7)+,A5
	BEQ.S	L0698E
	ADDQ.W	#4,A7
	RTS
L069C4	; open channel for BASIC
	BSR.S	L069AE
	MOVEQ	#IO.OPEN,D0
	MOVEQ	#-1,D1		; Job ID
	MOVE.L	D4,D3
L069CC	MOVEA.L	A1,A0
	MOVE.W	0(A6,A1.L),-(A7)
	TRAP	#4
	TRAP	#2
	MOVEQ	#3,D3
	ADD.W	(A7)+,D3
	BCLR	#0,D3
	ADD.L	D3,BV_RIP(A6)	;arithmetic stack
	TST.L	D0
	RTS
BAS_DELEte:
	BSR.S	L069AE
	MOVEQ	#$04,D0
	BRA.S	L069CC
BAS_DIR:
	JSR	CHNRTOID(PC)	;*/undomodify BSR CHNRTOID
	BNE.S	L0698E
	MOVEA.L	A0,A4
	MOVEQ	#$04,D4
	BSR.S	L069C4
	BNE.S	L0698E
	MOVEA.L	A0,A5
	MOVEQ	#$45,D0
	MOVEA.L	(A6),A1
	MOVEA.L	A5,A0
	BSR.S	TRAP_4_3
	BNE.S	L06986
	MOVE.L	D1,-(A7)
	MOVEA.L	(A6),A1
	MOVEQ	#$0A,D2
	BSR.S	L06A6A
	MOVEQ	#IO.SBYTE,D0	;send a byte
	MOVEQ	#$0A,D1		; Send <LF>
	TRAP	#3
	MOVEM.W	(A7)+,D1-D2
	BSR.S	L06A40
L06A1A	MOVEQ	#$03,D0
	MOVEQ	#$40,D2
	MOVEA.L	(A6),A1
	MOVEA.L	A5,A0
	MOVEQ	#0,D4
	BSR	TRAP_4_3
	BNE	L06988
	SUBA.W	#$0030,A1
	MOVE.W	-$02(A6,A1.L),D2
	BEQ.S	L06A1A
	BSR.S	L06A6A
	MOVEQ	#IO.SBYTE,D0	;send a byte
	MOVEQ	#$A,D1		; send <LF>
	TRAP	#3
	BRA.S	L06A1A
L06A40	; add number of sectors
	MOVE.W	D2,D4
	BSR.S	L06A5A
	MOVEQ	#IO.SBYTE,D0	;send a byte
	MOVE.B	#$2F,D1		; send '/'
	TRAP	#3
	MOVE.W	D4,D1
	BSR.S	L06A5A
	MOVEQ	#-$17,D0
	JSR	UT_ERR(PC)	;*/undomodify BSR UT_ERR
	MOVEQ	#0,D0
	RTS
L06A5A	; add entire number
	MOVEA.L	(A6),A1
	LEA	2(A1),A0
	MOVE.W	D1,0(A6,A1.L)
	JSR	CN_ITOD(PC)	;*/undomodify BSR CN_ITOD
	MOVE.W	D1,D2
L06A6A	MOVEQ	#7,D0
	MOVEA.L	A4,A0
	MOVEQ	#-1,D3
	BRA	TRAP_4_3
BAS_FORMat:
	JSR	CHNRTOID(PC)	;*/undomodify BSR CHNRTOID
	BNE	L0698E
	MOVEA.L	A0,A4
	BSR	L069AE
	MOVEQ	#$03,D0
	BSR	L069CC
	BNE	L0698E
	BRA.S	L06A40
COPY:
	MOVEQ	#0,D5
	BRA.S	L06A94
COPY_N:
	MOVEQ	#-$01,D5
L06A94	MOVEQ	#$01,D4
	BSR	L069C4
	BNE	L0698E
	MOVEA.L	A0,A4
	MOVEQ	#2,D4
	BSR	L069C4
	BNE.S	L06B20
	TST.B	D5
	BNE.S	L06ACA
	MOVEQ	#-1,D5
	MOVEA.L	(A6),A1
	MOVEQ	#$47,D0
	MOVEQ	#$0E,D2
	EXG	A0,A4
	BSR	TRAP_4_3
	EXG	A0,A4
	BNE.S	L06ACA
	MOVEA.L	(A6),A1
	MOVE.L	0(A6,A1.L),D5
	MOVEQ	#$46,D0
	BSR	TRAP_4_3
L06ACA	MOVEA.L	(A6),A1
	MOVE.L	BV_TKBAS(A6),D2	;token list
	SUB.L	A1,D2
	MOVEQ	#0,D3
	EXG	A0,A4
	TST.L	D5
	BLE.S	L06AE0
	CMP.L	D5,D2
	BLE.S	L06AE0
	MOVE.L	D5,D2
; --------------------------------------------------------------
*/beginoverlay
	ifd	NoTas
L06AE0:
	BSET	#7,BV_BRK(A6)	;*/mend TAS $8F(A6)
				; There has been a
				; break (0) or not ($80)
	BEQ.S	L06B1E
	MOVEQ	#IO.FSTRG,D0	;Fetch string of bytes
	TRAP	#4
	TRAP	#3
	ADDQ.L	#1,D0		;*/insert
	SUBQ.L	#1,D0		;*/modify CMPI.L #-1,D0
	BCC.S	L06AFA		;*/modify BNE.S L06AFA
				; not complete error?
	TST.W	D1
	BEQ.S	L06AE0
	BRA.S	L06B0C
	endc
	ifnd	NoTas
L06AE0:
	TAS	$8F(A6)
	BEQ.S	L06B1E
	MOVEQ	#IO.FSTRG,D0
	TRAP	#4
	TRAP	#3
	CMPI.L	#-1,D0
	BNE.S	L06AFA
	TST.W	D1
	BEQ.S	L06AE0
	BRA.S	L06B0C
	endc
*/endoverlay
; --------------------------------------------------------------
L06AFA:
	CMPI.L	#-10,D0		; end of file error
	BNE.S	L06B08
	MOVEQ	#0,D0
	TST.W	D1
	BEQ.S	L06B1E
L06B08	TST.L	D0
	BNE.S	L06B1E
L06B0C	MOVEQ	#7,D0
	MOVE.W	D1,D2
	EXG	A0,A4
	SUBA.W	D1,A1
	BSR	TRAP_4_3
	BNE.S	L06B1E
	SUB.L	D2,D5
	BNE.S	L06ACA
L06B1E	BSR.S	L06B22
L06B20	EXG	A0,A4
L06B22	BRA	L06986
BAS_CLOSe:
	CMPA.L	A3,A5
	BLE.S	L06B44
	TST.B	$01(A6,A3.L)
	BPL.S	L06B44
	JSR	CHNRTOID(PC)	;*/undomodify BSR CHNRTOID
	BNE.S	L06B42
	MOVE.L	#$FFFFFFFF,0(A6,A2.L)
	MOVEQ	#IO.CLOSE,D0
	TRAP	#2
L06B42	RTS
L06B44	MOVEQ	#-15,D0		; signal bad parameter error
	BRA.S	L06B42
BAS_OPEN:
	MOVEQ	#0,D4
	BRA.S	L06B52
OPEN_IN:
	MOVEQ	#1,D4
	BRA.S	L06B52
OPEN_NEW:
	MOVEQ	#2,D4
L06B52	BSR.S	BAS_CLOSe
	TST.L	D0
	BEQ.S	L06B5E
	MOVEQ	#-6,D2
	CMP.L	D0,D2
	BNE.S	L06B42
L06B5E	EXG	D1,D6
	BSR	L069C4
	EXG	D6,D1
	BNE.S	L06B42
	JMP	STO_CHID(PC)	;*/undomodify BRA STO_CHID
				; store channel ID
BAS_SAVE:
	MOVE.L	A3,$00B4(A6)	; Temporary pointer for
				; GO_PROC
	MOVEQ	#$02,D4
	BSR	L069C4
	BNE.S	L06B42
	JSR	L07484(PC)	;*/undomodify BSR L07484
	BEQ.S	L06B22
	MOVE.L	D0,D4
	BSR	L0699A
	BRA	L0698C
BAS_FILL:
	JSR	CHNRTOID(PC)	;*/undomodify BSR CHNRTOID
	BNE.S	L06BA4
	JSR	GET_INT4(PC)	;*/undomodify BSR GET_INT4
	BNE.S	L06BA4
	MOVE.L	0(A6,A1.L),D1
	ADDQ.L	#4,A1
	MOVE.L	A1,BV_RIP(A6)	;arithmetic stack
	MOVEQ	#SD.FLOOD,D0	;turns area flood on & off
	MOVEQ	#-1,D3		; timeout
	TRAP	#3
L06BA4	RTS
BAS_UNDEr:
	MOVE.B	#$2B,D4
	BRA.S	L06BB0
BAS_FLASh:
	MOVE.B	#$2A,D4
L06BB0	JSR	L08038(PC)	;*/undomodify BSR L08038
	BNE.S	L06BC0
	JSR	L08028(PC)	;*/undomodify BSR L08028
	BNE.S	L06BC0
L06BBC	JMP	L07FC4(PC)	;*/undomodify BRA L07FC4
L06BC0	RTS
BAS_OVER:
	JSR	L08038(PC)	;*/undomodify BSR L08038
	BNE.S	L06BC0
	MOVE.B	#$2C,D4
	MOVE.W	0(A6,A1.L),D1
	CMPI.W	#$0001,D1
	BGT.S	L06BDC
	CMPI.W	#$FFFF,D1
	BGE.S	L06BBC
L06BDC	MOVEQ	#-15,D0		; bad parameter
	RTS
L06BE0	BSR	L06CB6
	JSR	CA_GTFP(PC)	;*/undomodify BSR CA_GTFP
	BNE.S	L06BF2
	MOVEQ	#$36,D0		; SD.GCUR sets the graphics
				; cursor position
	MOVEQ	#-1,D3
	TRAP	#4
	TRAP	#3
L06BF2	BRA	L06CAE
BAS_SCALe:
	MOVEQ	#$34,D4
	BSR	L06CB6
	BSR	L06D42
	BSR	L06D46
	BRA	L06C96
POINT:
	MOVEQ	#$30,D4
	BRA.S	L06C10
POINT_R:
	MOVE.W	#$00B0,D4
L06C10	BSR	L06CB6
	BSR	L06D1C
	BRA.S	L06C96
BAS_LINE:
	MOVEQ	#$31,D4
	BRA.S	L06C22
LINE_R:
	MOVE.W	#$00B1,D4
L06C22	BSR	L06CB6
	BSR	L06D0A
	BNE.S	L06CA4
	BSR	L06D1C
	BRA.S	L06C96
CIRCLE:
ELLIPSE:
	MOVEQ	#$33,D4
	BRA.S	L06C3A
CIRCLE_R:
ELLIPSE_R:
	MOVE.W	#$00B3,D4
L06C3A	BSR.S	L06CB6
	BSR	L06D1C
	BSR	L06D46
	CMPI.B	#$01,D5
	BNE.S	L06C50
	BSR	L06D42
	BRA.S	L06C68
L06C50	SUBQ.L	#8,A1
	SUBQ.L	#4,A1
	CLR.L	0(A6,A1.L)
	MOVE.L	#$00000801,$04(A6,A1.L) ; floating point 0.5
	MOVE.L	#$40000000,$08(A6,A1.L)
L06C68	MOVEM.W	$06(A6,A1.L),D0-D2
	MOVE.W	$0C(A6,A1.L),$06(A6,A1.L)
	MOVE.L	$0E(A6,A1.L),$08(A6,A1.L)
	MOVEM.W	D0-D2,$0C(A6,A1.L)
	BRA.S	L06C96
BAS_ARC:
	MOVEQ	#$32,D4		; SD.ARC plots an arc
	BRA.S	L06C8A
BAS_ARC_r:
	MOVE.W	#$B2,D4		; SD.ARC || 128
L06C8A	BSR.S	L06CB6
	BSR.S	L06D0A
	BSR	L06D1C
	BSR	L06D46
L06C96	MOVE.L	D4,D0
	SWAP	D0
	BCLR	#7,D0
	MOVEQ	#-1,D3
	TRAP	#4
	TRAP	#3
L06CA4	CMPA.L	D6,A3
	BGE.S	L06CAC
	MOVE.L	A4,-(A7)
	MOVE.W	D5,D4
L06CAC	MOVEQ	#0,D0
L06CAE	MOVE.L	D7,BV_RIP(A6)	;arith stack
	MOVEA.L	D7,A1
	RTS
L06CB6	; execution of graphic commands
	SWAP	D4
	CLR.W	D4
	CLR.W	D5
	MOVE.L	BV_RIP(A6),D7	;arith stack
	MOVE.L	A5,D6
	CMPA.L	D6,A3
	BLT.S	L06CCA
	MOVEQ	#-$0F,D0
	BRA.S	L06D06
L06CCA	MOVE.B	1(A6,A3.L),D0
	ANDI.B	#$0F,D0
	BNE.S	L06CDC
	JSR	L07452(PC)	;*/undomodify BSR L07452
	MOVE.W	D5,D4
	BRA.S	L06CEE
L06CDC	BTST	#$07,$01(A6,A3.L)
	BEQ.S	L06CEE
	MOVE.B	$01(A6,A3.L),D4
	BCLR	#$07,D4
	LSR.B	#4,D4
L06CEE	JSR	CHNRTOID(PC)	;*/undomodify BSR CHNRTOID
	BNE.S	L06D06
	MOVE.W	#$0100,D1
	JSR	BV_CHRIX(PC)	;*/undomodify BSR BV_CHRIX
	MOVE.L	BV_RIP(A6),D7	;arith stack
	MOVEA.L	D7,A1
	MOVEA.L	(A7),A4
	RTS
L06D06	ADDQ.L	#4,A7
	BRA.S	L06CAE
L06D0A	CMPI.B	#$05,D4
	BNE.S	L06D1C
	BSR.S	L06D6E
	BSR.S	L06D7E
	MOVE.L	A1,BV_RIP(A6)	;arith stack
	MOVEQ	#0,D0
	RTS
L06D1C	BSR.S	L06D4C
	BNE.S	L06D06
	BTST	#$17,D4
	BEQ.S	L06D2C
	BSR.S	L06D6E
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
L06D2C	BSR.S	L06D4C
	BNE.S	L06D06
	BTST	#$17,D4
	BEQ.S	L06D3C
	BSR.S	L06D7E
	JSR	RI_ADD(PC)	;*/undomodify BSR RI_ADD
L06D3C	BSR.S	L06D8E
	MOVEQ	#1,D0
	RTS
L06D42	BSR.S	L06D4C
	BNE.S	L06D06
L06D46	BSR.S	L06D4C
	BNE.S	L06D06
	RTS
L06D4C	MOVE.L	A4,-(A7)
	CMPA.L	D6,A3
	BLT.S	L06D56
	MOVEQ	#-15,D0		; Bad parameter
	BRA.S	L06D6A
L06D56	MOVE.W	D5,D4
	JSR	L07452(PC)	;*/undomodify BSR L07452
	MOVEA.L	A3,A5
	JSR	L05EC8(PC)	;*/undomodify BSR L05EC8
	BNE.S	L06D6A
	MOVEQ	#$02,D0
	JSR	L05996(PC)	;*/undomodify BSR L05996
L06D6A	MOVEA.L	(A7)+,A4
	RTS
L06D6E	SUBQ.W	#6,A1
	MOVE.L	$0A(A6,A2.L),0(A6,A1.L)
	MOVE.W	$0E(A6,A2.L),$04(A6,A1.L)
	RTS
L06D7E	SUBQ.W	#6,A1
	MOVE.L	$04(A6,A2.L),0(A6,A1.L)
	MOVE.W	$08(A6,A2.L),$04(A6,A1.L)
	RTS
L06D8E	MOVE.L	0(A6,A1.L),$04(A6,A2.L)
	MOVE.L	$04(A6,A1.L),$08(A6,A2.L)
	MOVE.L	$08(A6,A1.L),$0C(A6,A2.L)
	RTS
; --------------------------------------------------------------
;*/endfile
