To create a requester, the application first allocates memory for or declares an instance of the requester structure as defined in <intuition/intuition.h>. once the requester structure is set up, it is initialized with the initrequester() function. void InitRequester( struct Requester *requester) This function simply clears the requester structure. the application should do further initialization depending on its needs. See the section on the "requester structure" below for an explanation of all the requester fields and how to set them. A true (modal) requester is attached to its parent window and displayed with the request() function. BOOL Request(struct Requester *requester, struct Window *window) This function returns TRUE if the requester opens successfully or FALSE if the requester cannot be opened. If the requester opens successfully, menu and gadget input in the parent window is blocked as long as the requester is displayed. The application should process input events from the requester, which are sent to the parent window's window.userport, until the requester is satisfied. To remove a requester from its parent window and update the display, use endrequest(). void EndRequest( struct Requester *requester, struct Window *window ); This removes only the one requester specified. It is possible to set up a requester with a special gadget that, if selected, will automatically close the requester. In that case, endrequest() need not be called. if the program needs to cancel the request early, or cancel it only after some specific manipulation of the gadgets, EndRequest() should be used. The application should always provide a safe way for the user to back out of a requester without taking any action that affects the user's work. Providing an escape hatch is important, for instance, a requester with the message "Overwrite File?" should allow the user to cancel the operation without losing the old data.