OpenLibrary    =-552
CloseLibrary   =-414
SetFunction    =-420
AllocMem       =-198
FreeMem        =-210
TextRequest    =-174
EasyRequestArgs=-588
Write          =-48
Output         =-60
FindName       =-276
Forbid         =-132
Permit         =-138
Remove         =-252
Addport        =-354

	incdir	"include/"
	include	"exec/types.i"
	include	"exec/execbase.i"
	include	"exec/memory.i"
	include	"intuition/intuition.i"


;         This structure is use with the TextRequester function.



 STRUCTURE TRStructure,0
	APTR	TR_Text			;This is the message text, including printf() style formatting if desired.
	APTR	TR_Controls		;This is the address of the parameter list, if printf() style formatting is used.
	APTR	TR_Window		;This is an optional (zero if not used) pointer to a window on the screen you 
					;would like the requester to show up on.
	APTR	TR_MiddleText		;If non-zero, this is the text for the gadget in the lower middle (returns 2).
	APTR	TR_PositiveText		;If non-zero, this is the text for the gadget in the lower left hand corner (returns 1).
	APTR	TR_NegativeText		;If non-zero, this is the text for the gadget in the lower right (returns 0).
	APTR	TR_Title		;This is the title for the window.
	WORD	TR_KeyMask		;This is the qualifier mask for the keyboard shortcuts.
					;Use $FFFF to allow any qualifiers (or none).
					;Zero means that no keyboard shortcuts are allowed.
	WORD	TR_textcolor		;Color of the text.  Uses Color 1 if no Color specified.
	WORD	TR_detailcolor		;Detail and block color, as in a NewWindow structure.  If
	WORD	TR_blockcolor		;both are left zero, block pen will be set to 1.
	WORD	TR_versionnumber	;Make SURE this is set to the current version of REQVERSION.
	UWORD	TR_Timeout		;The timeout value, in seconds.
	LONG	TR_AbortMask		;
	UWORD	TR_rfu1
	LABEL	TR_SIZEOF



 STRUCTURE	ReqLib,LIB_SIZE
	APTR	rl_SysLib
	APTR	rl_DosLib		;These must be kept in the same order,
	APTR	rl_IntuiLib		;the library expunge code depends on it.
	APTR	rl_GfxLib		;
	APTR	rl_SegList
	APTR	rl_Images		;pointer to the arrow images.
	BYTE	rl_Flags
	BYTE	rl_Pad
	APTR	rl_ConsoleDev		;for RawKeyToAscii
	APTR	rl_ConsoleHandle	;so we can close the device later
	APTR	rl_RexxSysBase		;pointer to rexxsyslib.library
	LABEL	MyLib_Sizeof


STRCOPY: MACRO
STRCOPY_loop\@:
	move.b	(a0)+,(a3)+
	bne.s	STRCOPY_loop\@
	subq.w	#1,a3
	ENDM


	STRUCTURE	MyMsgPort,MP_SIZE
	APTR	mp_MEMORY
	APTR	mp_OLDFUNCTION
	APTR	mp_REQBASE
	LABEL	mp_SIZE




start:
	move.l	4.w,a6
	lea.l	dosname(pc),a1
	moveq	#0,d0
	jsr	OpenLibrary(a6)
	lea.l	dosbase(pc),a0
	move.l	d0,(a0)
	beq.w	ende
	move.l	d0,a6
	jsr	Output(a6)
	move.l	d0,d7
	move.l	4.w,a6
	cmp.w	#36,20(a6)
	blo.w	nokick2
	lea.l	PortList(a6),a0
	lea.l	nt_reqpatchname(pc),a1
	jsr	FindName(a6)
	tst.l	d0
	bne.w	remove
	lea.l	nt_reqpatchport(pc),a2
	move.l	#nt_END-nt_START,d0
	move.l	#MEMF_CLEAR|MEMF_PUBLIC,d1
	jsr	AllocMem(a6)
	move.l	d0,mp_MEMORY(a2)
	beq.s	ende
	move.l	d0,a1
	lea.l	nt_START(pc),a0
	move.w	#nt_END-nt_START-1,d0
copy_loop:
	move.b	(a0)+,(a1)+
	dbra	d0,copy_loop
	lea.l	reqname(pc),a1
	moveq	#0,d0
	jsr	OpenLibrary(a6)
	move.l	d0,mp_REQBASE(a2)
	beq.s	error
	move.l	d0,a1
	jsr	Forbid(a6)
	move.l	mp_MEMORY(a2),d0
	move.w	#TextRequest,a0
	jsr	SetFunction(a6)
	move.l	d0,mp_OLDFUNCTION(a2)
	move.b	#NT_MSGPORT,LN_TYPE(a2)
	move.l	mp_MEMORY(a2),a0
	move.l	a0,a1
	add.w	#nt_reqpatchport-nt_START,a1
	add.w	#nt_reqpatchname-nt_START,a0
	move.l	a0,LN_NAME(a1)
	jsr	Addport(a6)
	jsr	Permit(a6)
	move.l	dosbase(pc),a6
	move.l	d7,d1
	lea.l	message(pc),a0
	move.l	a0,d2
	move.l	#message_end-message,d3
	jsr	Write(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	CloseLibrary(a6)
ende:
	moveq	#0,d0
	rts

error:
	move.l	mp_MEMORY(a2),a1
	move.l	#nt_END-nt_START,d0
	jsr	FreeMem(a6)
	move.l	dosbase(pc),a6
	move.l	d7,d1
	lea.l	message_2(pc),a0
	move.l	a0,d2
	move.l	#message_2_end-message_2,d3
	jsr	Write(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	CloseLibrary(a6)
	moveq	#0,d0
	rts

nokick2:
	move.l	dosbase(pc),a6
	move.l	d7,d1
	lea.l	message_1(pc),a0
	move.l	a0,d2
	move.l	#message_1_end-message_1,d3
	jsr	Write(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	CloseLibrary(a6)
	moveq	#0,d0
	rts


remove:
	jsr	SetFunction(a6)
	move.l	dosbase(pc),a6
	move.l	d7,d1
	lea.l	message_0(pc),a0
	move.l	a0,d2
	move.l	#message_0_end-message_0,d3
	jsr	Write(a6)
	move.l	a6,a1
	move.l	4.w,a6
	jsr	CloseLibrary(a6)
	moveq	#0,d0
	rts

dosbase:
	dc.l	0
dosname:
	dc.b	"dos.library",0
reqname:
	dc.b	"req.library",0

message:
	dc.b	$9b,"0;33;40mREQ2PATCH V1.01",$9b,"0;31;40m"
	dc.b	" by Ralph Schmidt",$a
	dc.b	"EMail: laire@uni-paderborn.de",$a
message_end:

message_0:
	dc.b	$9b,"0;33;40mREQ2PATCH V1.0",$9b,"0;31;40m is already installed...",$a
message_0_end:
message_1:
	dc.b	"This program needs Kick V36 or higher",$a
message_1_end:
message_2:
	dc.b	"Can't open req.library",$a
message_2_end:
	cnop	0,2

******************************* newtextrequest*****************************

nt_START:
;a0=TextRequest
	move.l	TR_AbortMask(a0),d0
	or.l	TR_Timeout(a0),d0
	beq.s	nt_start_0

	move.l	nt_reqpatchport+mp_OLDFUNCTION(pc),a1
	jmp	(a1)

nt_start_0:
	movem.l	d2-d7/a2-a6,-(a7)
	move.l	a0,a5
	moveq	#0,d2
	move.l	TR_MiddleText(a5),a0
	bsr.w	nt_strlength
	add.l	d0,d2
	move.l	TR_PositiveText(a5),a0
	bsr.w	nt_strlength
	add.l	d0,d2
	move.l	TR_NegativeText(a5),a0
	bsr.w	nt_strlength
	add.l	d0,d2
	moveq	#es_SIZEOF+2+1,d1		;2*"|"+END-Mark
	add.l	d1,d2
	move.l	d2,-(a7)
	move.l	d2,d0
	move.l	#MEMF_CLEAR|MEMF_PUBLIC,d1
	move.l	4.w,a6
	jsr	AllocMem(a6)
	tst.l	d0
	beq.w	nt_memerror
	move.l	d0,a4
	lea.l	es_SIZEOF(a4),a3
	move.l	a3,es_GadgetFormat(a4)
	move.l	TR_PositiveText(a5),a0
	move.l	a0,d0
	beq.s	nt_0
	STRCOPY
	move.b	#"|",(a3)+
nt_0:
	move.l	TR_MiddleText(a5),a0
	move.l	a0,d0
	beq.s	nt_1
	STRCOPY
	move.b	#"|",(a3)+
nt_1:
	move.l	TR_NegativeText(a5),a0
	move.l	a0,d0
	beq.s	nt_2
	STRCOPY
	move.b	#"|",(a3)+
nt_2:
	clr.b	-(a3)
	moveq	#es_SIZEOF,d0
	move.l	d0,es_StructSize(a4)
	clr.l	es_Flags(a4)
	move.l	TR_Text(a5),es_TextFormat(a4)
	move.l	TR_Title(a5),es_Title(a4)
	move.l	TR_Window(a5),a0
	move.l	a4,a1
	move.l	TR_Controls(a5),a3

	move.l	TR_KeyMask(a5),a2		;?
	sub.l	a2,a2				;no idcmp
	move.l	4+6*4+4*4(a7),a6		;a6=Reqbase
	move.l	rl_IntuiLib(a6),a6
	jsr	EasyRequestArgs(a6)
	exg	d0,d1
	move.l	(a7),d0				;Length
	move.l	d1,(a7)				;Ret abspeichern
	move.l	a4,a1
	move.l	4.w,a6
	jsr	FreeMem(a6)
	move.l	(a7)+,d0			;Ret
	movem.l	(a7)+,d2-d7/a2-a6
	rts

nt_memerror:
	addq.w	#4,a7
	movem.l	(a7)+,d2-d7/a2-a6
	rts



nt_strlength:
;a0=String
;=>d0=Length
	move.l	a0,a1
	move.l	a0,d0
	beq.s	nt_strlength_end
nt_strlength_loop:
	tst.b	(a1)+
	bne.s	nt_strlength_loop
	subq.w	#1,a1
	sub.l	a0,a1
nt_strlength_end:
	move.l	a1,d0
	rts


nt_reqpatchport:
	ds.b	mp_SIZE


nt_reqpatchname:
	dc.b	"REQ2PATCH Port",0

nt_END:



