This example adds an exit routine named "ExitRtn1" to the exit-list sequence. Routines in this sequence must use DosExitList instead of DosExit to end.
#define INCL_DOSPROCESS /* Process and thread values */
#define INCL_DOSERRORS /* DOS error values */
#include <os2.h>
#include <stdio.h>
VOID APIENTRY ExitRtn1(VOID); /* Our exit routine */
int main(VOID) {
APIRET rc = NO_ERROR;
rc = DosExitList(EXLST_ADD /* Add to exit-list sequence */
| 0x00002A00, /* Invocation order is 42 (0x2A) */
(PFNEXITLIST) ExitRtn1); /* Specify added exit routine */
if (rc != NO_ERROR) {
printf("DosExitList error: return code = %u\n", rc);
return 1;
}
printf("Routine main ends...\n");
return NO_ERROR;
}
/* All exit list routines must be declared as VOID APIENTRY.
This ensures the integrity of the stack. */
VOID APIENTRY ExitRtn1(VOID)
{
APIRET erc = NO_ERROR; /* Return code */
printf("... but ExitRtn1 runs last.\n");
/* Might want to save data or close files here */
erc = DosExitList(EXLST_EXIT, /* Exit */
(PFNEXITLIST) NULL);
if (erc != NO_ERROR) {
printf("DosExitList error: return code = %u\n", erc);
}
return;
}