  opt c-
;--------------------------------------------------------
   incdir   "SYS:DEVPAC2/include/"
   include  "exec/exec_lib.i"
   include  "exec/memory.i"
   include  "libraries/dos_lib.i
   include  "libraries/dosextens.i

PRINT   MACRO
        movem.l  a0-a6/d1-d7,-(SP)
        move.l   DOSBase,a6
        move.l   RAWhandle,d1
        move.l   #\1,d2
        move.l   #\2,d3
        JSR _LVOWrite(a6)
        movem.l  (SP)+,a0-a6/d1-d7
        ENDM

READ    MACRO
        movem.l  a0-a6/d1-d7,-(SP)
        move.l   DOSBase,a6
        move.l   RAWhandle,d1
        move.l   #\1,d2
        move.l   #\2,d3
        JSR _LVORead(a6)		;d0.l actual count incl. NULL
        movem.l  (SP)+,a0-a6/d1-d7
        ENDM

;--------------------------------------------------------
start:
	movem.l  d0/a0,-(sp)        ;rette Kommandozeile
	clr.l    WBenchMsg          ;sicherheitshalber

;Teste, von wo wir gestartet wurden
;----------------------------------
	sub.l    a1,a1              ;a1=0 = eigener Task
	CALLEXEC FindTask           ;wo sind wir?
	move.l   d0,a4              ;Adresse retten

	tst.l    pr_CLI(a4)         ;Laufen wir unter WB?
	beq.s      fromWorkbench      ;wenn so

;Wir wurden vom CLI gestartet
;----------------------------
	movem.l  (sp)+,d0/a0        ;Params Kommandozeile holen
	bra.s      run                ;und starten

;Wir wurden von  Workbench gestartet
;-----------------------------------
fromWorkbench
	lea      pr_MsgPort(a4),a0
	CALLEXEC WaitPort           ;Warte auf Start-Message
	lea      pr_MsgPort(a4),a0  ;sie ist da
	CALLEXEC GetMsg             ;hole sie
	move.l   d0,WBenchMsg       ;immer Msg sichern!
	movem.l  (sp)+,d0/a0        ;bringe Stack i.O.

run:	JSR  MAIN                   ;rufe unser Programm auf

	move.l   d0,-(sp)           ;rette seinen Return-Code
	tst.l    WBenchMsg          ;gibt's eine WB-Message
	beq.s    good_bye           ;nein: dann war's CLI

	CALLEXEC Forbid             ;keine Unterbrechung jetzt
	move.l   WBenchMsg(pc),a1   ;hole die Message
	CALLEXEC ReplyMsg           ;und gib sie zurueck
good_bye:
	move.l   (sp)+,d0           ;hole Return-Code
	rts                         ;das war's
;-------------------------------
WBenchMsg    ds.l   1
             cnop   0,2

;********************************************************  D A T A 

dosname		dc.b 	'dos.library',0
		EVEN
DOSBase		dc.l 	0

RAWname:	dc.b	"RAW:0/0/639/255/** APPROACH TRAINER **",0
		cnop	0,2
RAWhandle:	dc.l	0

Datenname1:	dc.b	"README.txt",0
		cnop	0,2
Datenname2:	dc.b	"DF0:README.txt",0
		cnop	0,2
Datenname3:	dc.b	"DF1:README.txt",0
		cnop	0,2
Datenhandle:	dc.l	0

buffercount	dc.w	0
Datenbuffer	ds.b	2000
inbuffer	ds.b	4
linecount	dc.w	0
charbuffer	dc.b	0,0
;---------------------------------------------------------- M A I N
MAIN:
        move.l   #dosname,a1		;Name der DOS-Lib
        clr.l    d0			;Version egal
	CALLEXEC OpenLibrary		;DOS-Lib oeffnen
        tst.l    d0			;Fehler?
        beq      EXIT			;wenn Fehler, Ende
        move.l   d0,a6			;Zeiger merken
        move.l   d0,DOSBase

	move.l	#RAWname,d1
	move.l	#MODE_OLDFILE,d2
	move.l	DOSBase,a6
	JSR	_LVOOpen(a6)
	move.l	d0,RAWhandle

	move.l	#Datenname1,d1
	move.l	#MODE_OLDFILE,d2
	move.l	DOSBase,a6
	JSR	_LVOOpen(a6)
	move.l	d0,Datenhandle
	bne.s	data_ok

	move.l	#Datenname2,d1		;wenn nicht current dir, dann
	move.l	#MODE_OLDFILE,d2	;versuche DF0::
	move.l	DOSBase,a6
	JSR	_LVOOpen(a6)
	move.l	d0,Datenhandle
	bne.s	data_ok

	move.l	#Datenname3,d1		;wenn nicht DF0:, dann versuche DF1:
	move.l	#MODE_OLDFILE,d2
	move.l	DOSBase,a6
	JSR	_LVOOpen(a6)
	move.l	d0,Datenhandle
	beq	exit1			;so, jetzt reichts!
data_ok:
	move.w	#29,d6			;d6=linecount

loop1:
	move.l	Datenhandle,d1
	move.l	#Datenbuffer,d2
	move.l	#1000,d3
	move.l	DOSBase,a6
	JSR	_LVORead(a6)
	move.l	d0,d7			;d7=buffercount
	beq	exit
	lea	Datenbuffer,a0
;-------
loop2:
	move.b	(a0)+,d5
	move.b	d5,charbuffer
	PRINT	charbuffer,1
	cmp.b	#$0a,d5
	bne.s	rm10

	sub.w	#1,d6
	beq.s	WAITforInput
rm10:	
	sub.w	#1,d7
	bne.s	loop2
;-------
	bra	loop1
;-------
WAITforInput:
	READ	inbuffer,1
	move.b	inbuffer,d4
	cmp.b	#$1b,d4		;ESCAPE
	beq.s	exit

	move.w	#1,d6
	bra.s	rm10
;-------
exit:
	READ	inbuffer,1

	move.l	Datenhandle,d1
	move.l	DOSBase,a6
	JSR	_LVOClose(a6)

exit1:	move.l	RAWhandle,d1
	JSR	_LVOClose(a6)

	move.l	a6,a1
        CALLEXEC CloseLibrary
        rts

;===========================================================================
	END

