	opt c+,d+
	
; this program will open and close a simple window and output a text 
; message

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

; calls to amiga dos

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


run:
	bsr init	; initialization
	bsr test	; system-test
	nop
	bra qu	; quit and exit
	
test:
	move.l #title,d0
	bsr pmsg
	bsr pcrlf
	bsr pcrlf
	
	rts
	
init:
	move.l execbase,a6
	lea dosname(pc),a1
	moveq #0,d0
	jsr openlib(a6) ; open dos library
	move.l d0,dosbase
	beq error
	
	lea consolname(pc),a1 ; console definition
	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	; length calculate
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:		; output char in d1
	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	; 1 letter
	move.l dosbase,a6
	jsr write(a6)
	movem (sp)+,d0-d7/a0-a6
	rts
	

error:
	move.l dosbase,a6
	jsr ioerr(a6)
	move.l d0,d5
	
	move.l #-1,d7	; flag
qu:
	move.l conhandle,d1 ; window close
	move.l dosbase,a6
	jsr close(a6)
	
	move.l dosbase,a1 ; dos.library close
	move.l execbase,a6
	jsr closelib(a6)
	
openfile:
	move.l a1,d1	; open file  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 2  -BAZ- **',0
	even
conhandle:	dc.l 0

title:	dc.b '** Welcome to this program ---- -BAZ-'
titleend:
	even
outline:	dc.w 0	; output buffer for pchar
	
