	opt c+,d+
	
; this program will open and close a simple window, display text
; and input text from the keyboard

openlib	= -30-378
closelib	= -414
execbase	= 4

; calls to amiga dos

open	= -30
close	= -30-6
read	= -42
write 	= -48
ioerr	= -132
mode_old	= 1005
alloc_abs	= $cc


run:
	bsr init	; initialisation
	bsr test	; system-test
	nop
	bra qu	; quit and exit
	
test:
	move.l #mytext,d0
	bsr pmsg
	bsr pcrlf
	bsr pcrlf
	move.l #80,d3	; 80 characters to read
	bsr getchr	; get character
	bsr pmsg	; pmsg
	
	rts
	
init:		; system init and open
	move.l execbase,a6 ; number of execute library
	lea dosname(pc),a1 
	moveq #0,d0
	jsr openlib(a6)
	move.l d0,dosbase
	beq error
	
	lea consolname(pc),a1
	move.l #mode_old,d0
	bsr openfile	; console open
	beq error
	move.l d0,conhandle
	
	rts
	
pmsg:		; print message(d0)
	movem.l d0-d7/a0-a6,-(sp)
	move.l d0,a0
	move.l a0,d2
	clr.l d3
ploop:
	tst.b (a0)+
	beq pmsg2
	addq.l #1,d3
	bra ploop	; check length
pmsg2:
	move.l conhandle,d1
	move.l dosbase,a6
	jsr write(a6)
	movem.l (sp)+,d0-d7/a0-a6
	rts
	
pcrlf:	move #10,d0
	bsr pchar
	move #13,d0
pchar:		; character in d0 output
	movem.l d0-d7/a0-a6,-(sp) ; save all
	move.l conhandle,d1
pch1:
	lea outline,a1
	move.b d0,(a1)
	move.l a1,d2
	move.l #1,d3
	move.l dosbase,a6
	jsr write(a6)
	movem.l (sp)+,d0-d7/a0-a6
	rts
	
getchr:		; get character from keyboard
	move.l #1,d3	; 1 character
	move.l conhandle,d1
	lea inbuff,a1	; buffer address
	move.l a1,d2
	move.l dosbase,a6
	jsr read(a6)
	clr.l d0
	move.b inbuff,d0
	rts
	
error:
	move.l dosbase,a6
	jsr ioerr(a6)
	move.l d0,d5
	move.l #-1,d7
	
qu:
	move.l conhandle,d1 ; window close
	move.l dosbase,a6
	jsr close(a6)
	
	move.l dosbase,a1 ; dos.lib close
	move.l execbase,a6
	jsr closelib(a6)
	rts
	
openfile:		; open file
	move.l a1,d1	; pointer to i/o definition-text
	move.l d0,d2
	move.l dosbase,a6
	jsr open(a6)
	tst.l d0
	rts
	
dosname:	dc.b 'dos.library',0,0
	even
dosbase:	dc.l 0

consolname:	dc.b 'CON:0/100/640/100/** CLI TEST **',0
	even
conhandle:	dc.l 0

mytext:	dc.b '** HELLO THERE -BAZ- **',0
	even
	
outline:	dc.w 0	; output buffer for pchar
inbuff:	ds.b 8	; input buffer

	
	
	
	
