error = ExitHandler(iff, type, id, position, handler, object);
D0 A0 D0 D1 D2 A1 A2
LONG ExitHandler(
struct IFFHandle *, LONG, LONG, LONG,
struct Hook *, APTR object(;
Installs an exit handler vector for a specific type of chunk into the context for the given IFFHandle structure. Type and id are the longword identifiers for the chunk to handle. The handler is a client-supplied standard Hook structure, properly initialized. Position tells where to put the handler in the context. The handler will be called just before the parser exits the given chunk in the "pause" parse state. The IFF stream may not be positioned predictably within the chunk. The handler will execute in the same context as whoever called
ParseIFF(). The handler will be called (through the hook) with the following arguments:
- A0
-
the Hook pointer you passed.
- A2
-
the 'object' pointer you passed.
- A1
-
pointer to a LONG containing the value IFFCMD_EXIT.
The error code your call-back routine returns will affect the parser in three different ways:
- 0
-
Normal success; ParseIFF() will continue through the file.
- IFF_RETURN2CLIENT
-
ParseIFF() will stop and return the value 0. (StopChunk() is internally implemented using this return value.)
Any other value -
ParseIFF() will stop and return the value
you supplied. This is how errors should be returned.
Returning the values IFFERR_EOF or IFFERR_EOC from the call-back routine *may* confuse the parser.
There is no way to explicitly remove a handler once installed. However, by installing a do-nothing handler using IFFSLI_TOP, previous handlers will be overridden until the context expires.