LVOCreateIORequest	equ	-$028E 	;(port,size)(A0,D0)
LVODeleteIORequest	equ	-$0294 	;(iorequest)(A0)
LVOCreateMsgPort	equ	-$029A 	;()()
LVODeleteMsgPort	equ	-$02A0 	;(port)(A0)

LVOOpenDevice		equ	-$01BC 	;(devName,unit,ioRequest,flags)(A0,D0/A1,D1)
LVOCloseDevice		equ	-$01C2 	;(ioRequest)(A1)
LVODoIO			equ	-$01C8 	;(ioRequest)(A1)
LVOSendIO		equ	-$01CE 	;(ioRequest)(A1)
LVOCheckIO		equ	-$01D4 	;(ioRequest)(A1)
LVOWaitIO		equ	-$01DA 	;(ioRequest)(A1)
LVOAbortIO		equ	-$01E0 	;(ioRequest)(A1)

LVOAddPort		equ	-$0162	;(port)(A1)
LVORemPort		equ	-$0168	;(port)(A1)
LVOPutMsg		equ	-$016E	;(port,message)(A0/A1)
LVOGetMsg		equ	-$0174	;(port)(A0)
LVOReplyMsg		equ	-$017A 	;(message)(A1)
LVOWaitPort		equ	-$0180 	;(port)(A0)
LVOFindPort		equ	-$0186 	;(name)(A1)
LVOFindTask		equ	-$126
LVOForbid		equ	-$084
LVOPermit		equ	-$08a
LVOOldOpenLibrary	equ	-408
;
;Procedury Biblioteki Dos
;
LVOOpen			equ	-30
LVOClose		equ	-36
LVORead			equ	-42
LVOWrite		equ	-48
LVOSeek			equ	-66
LVODelay		equ	-198
LVOOutput		equ	-60
;
MODE_OLDFILE		equ	1005
MODE_NEWFILE		equ	1006
;

Exec_Base		equ	4
Io_Unit			equ	24
TDU_PUBFLAGS		equ	53
TDPF_NOCLICK		equ	1
ThisTask		equ	276
pr_CLI			equ	$ac
lib_Version		equ	20

Task_Base		equ	0
Port_Base		equ	4
IoRequest_Base		equ	8
Unit			equ	12
;
;odszukanie naszego zadania
;
			movem.l	d1-d7/a0-a6,-(sp)
			lea	Buffor(pc),a5
			suba.l	a1,a1
			movea.l	Exec_Base,a6
			jsr	LVOFindTask(a6)
			movea.l	d0,a4
;
;testowanie czy zadanie uruchomione zostaîo
;z cli czy z workbencha
;
			moveq	#0,d0
			tst.l	pr_Cli(a4)
			bne.s	fromcli
;
;jezeli z workbencha to pobranie wiadomosci
;
			lea	$5c(a4),a0
			jsr	LVOWaitPort(a6)
			lea	$5c(a4),a0
			jsr	LVOGetMsg(a6)

fromcli			move.l	d0,Task_Base(a5)

			cmp.w	#36,lib_Version(a6)
			bhi.s	Loop
			
			lea	DosName(pc),a1
			jsr	LVOOldOpenLibrary(a6)
			tst.l	d0
			beq.L	Exit
			move.l	d0,a6
			jsr	LVOOutPut(a6)
			move.l	d0,d1
			beq.s	ConNoOpen

			bsr.s	WriteText
			bra.L	Exit

ConNoOpen		lea	ConSole(pc),a0
			move.l	a0,d1
			move.l	#MODE_NEWFILE,d2
			jsr	LVOOpen(a6)
			move.l	d0,d1
			beq.L	Exit			
			move.l	d0,-(sp)
			bsr.s	WriteText
			move.l	#50*5,d1
			jsr	LVODelay(a6)
			move.l	(sp)+,d1
			jsr	LVOClose(a6)
			bra.s	Exit	

WriteText		lea	Info(pc),a0
			move.l	a0,d2
			move.l	#52,d3
			jsr	LVOWrite(a6)
			rts

Loop			jsr	LVOCreateMsgPort(a6)
			move.l	d0,Port_Base(a5)
			beq.s	Error_CrPort
			move.l	d0,a1
			jsr	LVOAddPort(a6)
			move.l	Port_Base(a5),a0
			moveq	#56,d0
			jsr	LVOCreateIoRequest(a6)
			move.l	d0,IoRequest_Base(a5)
			beq.s	Error_CrIoRequest
			move.l	d0,a1
			lea	DevName(pc),a0
			move.l	Unit(a5),d0
			moveq	#0,d1
			jsr	LVOOpenDevice(a6)
			tst.l	d0
			bne.s	Error_OpDevice			

			move.l	IoRequest_Base(a5),a1	
			move.l	Io_Unit(a1),a0
			move.b	#TDPF_NOCLICK,TDU_PUBFLAGS(a0)

			jsr	LVOCloseDevice(a6)
Error_OpDevice		move.l	IoRequest_Base(a5),a0
			jsr	LVODeleteIoRequest(a6)
Error_CrIoRequest	move.l	Port_Base(a5),a1
			jsr	LVORemPort(a6)
			move.l	Port_Base(a5),a0
			jsr	LVODeleteMsgPort(a6)						
Error_CrPort		addq.l	#1,Unit(a5)
			cmp.l	#4,Unit(a5)
			blt.s	Loop			
;
;wyjscie z programu
;
Exit			move.l	Exec_base,a6
			move.l	Task_Base(a5),d0
			beq.s	fromcli1
			jsr	LVOForbid(a6)
			movea.l	Task_Base(a5),a1
			jsr	LVOReplymsg(a6)
fromcli1		movem.l	(sp)+,d1-d7/a0-a6
			moveq	#0,d0
			rts

Buffor			blk.l	4,0

DosName			dc.b	'dos.library',0
DevName			dc.b	'trackdisk.device',0
Info			dc.b	10,'NoClick Requires KickStart Version 2.0 or Greater.',10
console			dc.b	'CON:0/0/640/100/NoClick V1.0 by Jaroslaw Paruzel',0
