[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]


   NAME
	AddMemHandler - Add a low memory handler to exec                 (V39)

   SYNOPSIS
	AddMemHandler(memHandler)
	              A1

	VOID AddMemHandler(struct Interrupt *);

   FUNCTION
	This function adds a low memory handler to the system.  The handler
	is described in the Interrupt structure.  Due to multitasking
	issues, the handler must be ready to run the moment this function
	call is made.  (The handler may be called before the call returns)

   NOTE
	Adding a handler from within a handler will cause undefined
	actions.  It is safe to add a handler to the list while within
	a handler but the newly added handler may or may not be called
	for the specific failure currently running.

   EXAMPLE
	struct Interrupt *myInt;  /* Assume it is allocated */

	myInt->is_Node.ln_Pri=50;  /* Relatively early; before RAMLIB */

	/* Please fill in the name field! */
	myInt->is_Node.ln_Name="Example Handler";

	myInt->is_Data=(APTR)mydata_pointer;
	myInt->is_Code=myhandler_code;

	AddMemHandler(myInt);
	... /* and so on */

	_myhandler_code:
			; This is the handler code
			; We are passed a pointer to struct MemHandlerData
			; in a0, the value of is_Data in a1 and
			; ExecBase in a6.
			; We must not break forbid!!!
	;
	; Start off assuming we did nothing
	;
		moveq.l	#MEM_DID_NOTHING,d0
		move.l	memh_RequestFlags(a0),d1
		btst.l	#MEMB_CHIP,d1	; Did the failure happen in CHIP
		beq.s	handler_nop	; If not, we have nothing to do
		bsr	DoMyMagic	; Do the magic...
		; DoMyMagic frees whatever we can and returns d0 set...
	handler_nop:
		rts			; Return with d0 set...

   INPUTS
	memHandler - A pointer to a completely filled in Interrupt structure
	             The priority field determine the position of the handler
	             with respect to other handlers in the system.  The higher
	             the priority, the earlier the handler is called.
	             Positive priorities will have the handler called before
	             any of the library expunge vectors are called.  Negative
	             priority handlers will be called after the library
	             expunge routines are called.
	             (Note:  RAMLIB is a handler at priority 0)

   SEE ALSO
	RemMemHandler(), exec/interrupts.i