OpenLibrary	= -552
CloseLibrary	= -414
Forbid		= -132
Permit		= -138
SetFunction	= -420
Wait		= -318

GetVar	= -906
Output	= -60
Write	= -48

OpenScreen		= -198		
OpenScreenTagList	= -612
OpenWindow		= -204		
OpenWindowTagList	= -606

SIGBREAKF_CTRL_C	= (1<<12)


	move.l	4.w,a6
	lea	IntuiName(pc),a1
	move.l	#37,d0
	jsr	OpenLibrary(a6)
	move.l	d0,IntuiBase
	beq.w	NoIntui

	lea	DosName(pc),a1
	move.l	#36,d0
	jsr	OpenLibrary(a6)
	move.l	d0,DosBase
	beq.w	NoDos

	move.l	4.w,a6
	jsr	Forbid(a6)

	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenScreen,a0
	lea	NewOpenScreen(pc),a2
	move.l	a2,d0
	jsr	SetFunction(a6)
	move.l	d0,OldOpenScreen

	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenScreenTagList,a0
	lea	NewOpenScreenTagList(pc),a2
	move.l	a2,d0
	jsr	SetFunction(a6)
	move.l	d0,OldOpenScreenTagList

	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenWindow,a0
	lea	NewOpenWindow(pc),a2
	move.l	a2,d0
	jsr	SetFunction(a6)
	move.l	d0,OldOpenWindow

	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenWindowTagList,a0
	lea	NewOpenWindowTagList(pc),a2
	move.l	a2,d0
	jsr	SetFunction(a6)
	move.l	d0,OldOpenWindowTagList

	jsr	Permit(a6)

	bsr.w	PrintC
	jsr	Output(a6)
	move.l	d0,d1
	lea	Installed_Msg(pc),a0
	move.l	a0,d2
	moveq	#Installed_Len,d3
	jsr	Write(a6)
	
	move.l	4.w,a6
	move.l	#SIGBREAKF_CTRL_C,d0
	jsr	Wait(a6)
;Ctrl-C received
	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenScreenTagList,a0
	move.l	OldOpenScreenTagList(pc),d0
	jsr	SetFunction(a6)

	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenScreen,a0
	move.l	OldOpenScreen(pc),d0
	jsr	SetFunction(a6)

	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenWindowTagList,a0
	move.l	OldOpenWindowTagList(pc),d0
	jsr	SetFunction(a6)
	
	move.l	IntuiBase(pc),a1
	lea	0,a0
	move.w	#OpenWindow,a0
	move.l	OldOpenWindow(pc),d0
	jsr	SetFunction(a6)

	bsr.w	PrintC
	jsr	Output(a6)
	move.l	d0,d1
	lea	Removed_Msg(pc),a0
	move.l	a0,d2
	moveq	#Removed_Len,d3
	jsr	Write(a6)

	move.l	DosBase(pc),a1
	jsr	CloseLibrary(a6)	
NoDos:
	move.l	IntuiBase(pc),a1
	jsr	CloseLibrary(a6)
NoIntui:
	moveq	#0,d0
	rts


NewOpenScreen:
	movem.l	d0-d7/a0-a6,-(sp)
	jsr	CheckVar
	bne.s	OpenScreen_OK
	movem.l	(sp)+,d0-d7/a0-a6
	moveq	#0,d0
	rts
OpenScreen_OK:
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	OldOpenScreen(pc),-(sp)
	rts

NewOpenScreenTaglist:
	movem.l	d0-d7/a0-a6,-(sp)
	jsr	CheckVar
	bne.s	OpenScreenTaglist_OK
	movem.l	(sp)+,d0-d7/a0-a6
	moveq	#0,d0
	rts
OpenScreenTaglist_OK:
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	OldOpenScreenTaglist(pc),-(sp)
	rts

NewOpenWindow:
	movem.l	d0-d7/a0-a6,-(sp)
	jsr	CheckVar
	bne.s	OpenWindow_OK
	movem.l	(sp)+,d0-d7/a0-a6
	moveq	#0,d0
	rts
OpenWindow_OK:
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	OldOpenWindow(pc),-(sp)
	rts

NewOpenWindowTaglist:
	movem.l	d0-d7/a0-a6,-(sp)
	jsr	CheckVar
	bne.s	OpenWindowTaglist_OK
	movem.l	(sp)+,d0-d7/a0-a6
	moveq	#0,d0
	rts
OpenWindowTaglist_OK:
	movem.l	(sp)+,d0-d7/a0-a6
	move.l	OldOpenWindowTaglist(pc),-(sp)
	rts

CheckVar:
	move.l	DosBase(pc),a6
	lea	VarName(pc),a0
	move.l	a0,d1
	lea	VarBuf(pc),a0
	move.l	a0,d2
	moveq	#1,d3
	move.l	#$200,d4		;GVF_LOCAL_ONLY
	jsr	GetVar(a6)
	cmpi.l	#-1,d0
	bne.s	CV_IOSer
	moveq	#1,d0
	rts
CV_IOSer:
	move.l	DosBase(pc),a6
	jsr	Output(a6)
	move.l	d0,d1
	lea	ErrorNoDisplay_Msg(pc),a0
	move.l	a0,d2
	move.l	#ErrorNoDisplay_Len,d3
	jsr	Write(a6)
	moveq	#0,d0
	rts

PrintC:	
	move.l	DosBase(pc),a6
	jsr	Output(a6)
	move.l	d0,d1
	lea	Copyright_Msg(pc),a0
	move.l	a0,d2
	move.l	#Copyright_Len,d3
	jsr	Write(a6)
	rts

OldOpenscreen:		dc.l	0
OldOpenscreentaglist:	dc.l	0
OldOpenwindow:		dc.l	0
OldOpenwindowtaglist:	dc.l	0
IntuiBase:		dc.l	0
DosBase:		dc.l	0
OutputHandle:		dc.l	0
ShellTask:		dc.l	0
VarBuf:			dc.w	0
VarName:		dc.b	"RSHELL-PROTECTOR",0
IntuiName:		dc.b	"intuition.library",0
DosName:		dc.b	"dos.library",0
ErrorNoDisplay_Msg:	dc.b	$7,"You are using an ASCII-only terminal.",$a
			dc.b	"Could not open intuition GUI!",$a
ErrorNoDisplay_Len:	EQU	*-ErrorNoDisplay_Msg
Copyright_Msg:		dc.b	$1b,"[32mRemoteShell-Protector V37.1",$a
			dc.b	"(L) 1994 by Lunkwill & Skywalker",$a
			dc.b	$1b,"[0mPatches "
Copyright_Len:		EQU	*-Copyright_Msg
Installed_Msg:		dc.b	"installed!",$a
Installed_Len:		EQU	*-Installed_Msg
Removed_Msg:		dc.b	"removed!",$a
Removed_Len:		EQU	*-Removed_Msg
