
  *======================================================================*
  *          CheckLastProc -- Check the last process cleaned up          *
  *======================================================================*
  *                  Copyright (c) 1990 Martin Taillefer                 *
  *                          All Rights Reserved                         *
  *======================================================================*
  *      Version: 1.0    16-Aug-90    Martin Taillefer                   *
  *      Changes: Original                                               *
  *======================================================================*

		include "exec/types.i"
		include "exec/tasks.i"
		include "exec/execbase.i"

		xref _LVOFindTask
		xref _LVOOldOpenLibrary
		xref _LVOCloseLibrary
		xref _LVOPermit
		xref _LVOOutput
		xref _LVOEnable
		xref _LVOFreeSignal
                xref _LVOWrite


CALL	MACRO	<Function_Name>
	jsr	_LVO\1(A6)
	ENDM


SysBase     EQUR A5
DOSBase     EQUR A4
CurrentTask EQUR A3
ReturnCode  EQUR D7


Main:			MOVEA.L 4,A6
			MOVE.L	A6,SysBase
			MOVE.L	ThisTask(A6),CurrentTask
			MOVEQ	#0,ReturnCode

			LEA     DOSName(PC),A1
			CALL    OldOpenLibrary
			MOVE.L  D0,DOSBase


CheckForbid:		MOVEQ   #0,D2
			MOVE.B	TC_TDNESTCNT(CurrentTask),D2
			CMP.B   #-1,D2
			BEQ.S   CheckDisable

ForbidLoop:		CALL	Permit
			DBRA    D2,ForbidLoop

			LEA	ErrorStr1(PC),A0
			MOVE.L	#55,D0
			BSR.S	PutError


CheckDisable:		MOVEQ   #0,D2
			MOVE.B	TC_IDNESTCNT(CurrentTask),D2
			CMP.B   #-1,D2
			BEQ.S   CheckSignals

DisableLoop:		CALL	Enable
			DBRA    D2,DisableLoop

			LEA	ErrorStr2(PC),A0
			MOVE.L	#56,D0
			BSR.S	PutError


CheckSignals:           CMP.L	#$0000FFFF,TC_SIGALLOC(CurrentTask)
			BEQ.S	ExitPrg
			MOVEQ	#16,D2

SignalLoop:		BTST	D2,TC_SIGALLOC(CurrentTask)
			BEQ.S	NoSig
			MOVE.L	D2,D0
			CALL	FreeSignal
NoSig:			ADDQ.W	#1,D2
			CMP.B	#32,D2
			BNE.S	SignalLoop

			LEA	ErrorStr3(PC),A0
			MOVE.L	#61,D0
			BSR.S	PutError


ExitPrg:		MOVE.L	DOSBase,A1
			CALL	CloseLibrary

			MOVE.L	ReturnCode,D0
			RTS


; A0 message, D0 length
PutError:               MOVE.L	#5,ReturnCode
			MOVE.L	A0,D2
			MOVE.L	D0,D3
			MOVE.L	DOSBase,A6
			CALL    Output
			MOVE.L  D0,D1
			CALL    Write
			MOVE.L	SysBase,A6
			RTS


Version   DC.B 0,'$VER: CheckLastProc 1.0 (16.8.90)',0
DOSName   DC.B 'dos.library',0
ErrorStr1 DC.B 155,'33mLast process left a hanging Forbid',155,'31m, fixed it.',10
ErrorStr2 DC.B 155,'33mLast process left a hanging Disable',155,'31m, fixed it.',10
ErrorStr3 DC.B 155,'33mLast process left some signals allocated',155,'31m, fixed it.',10

			END
