Additional Topics > External Development Guide > Callable IDL > Diverting IDL Output

# Diverting IDL Output

When using a tty-based interface (available only on UNIX platforms), IDL sends its output to the screen for the user to see. When using a GUI-based interface (any platform), the output goes to the IDL log window. The default output function is automatically installed by IDL at startup. To divert IDL output to a function of your own design, use IDL_ToutPush() and IDL_ToutPop() to change the output function called by IDL.

Internally, IDL maintains a stack of output functions and provides two functions (IDL_ToutPush() and IDL_ToutPop()) to manage them. The most recently pushed output function is called to output each line of text. Output functions of your own design should have the following type definition:

typedef void (* IDL_TOUT_OUTF)(int flags, char *buf, int n);

The arguments to an output function are:

## flags

A bitmask of flag values that specify how the text should be output. The allowed bit values are:

### IDL_TOUT_F_STDERR

Send the text to stderr rather than stdout, if that distinction means anything to your output device.

### IDL_TOUT_F_NLPOST

After outputting the text, start a new output line. On a tty this is equivalent to sending a newline ('\n') character.

## buf

The text to be output. There may or may not be a NULL termination, so the character count provided by n must be used to move only the specified number of characters.

## n

The number of characters in buf to be output.

## IDL_ToutPush()

Use IDL_ToutPush() to push a new output function onto the stack. The most recently pushed function is the one used by IDL for output.

void IDL_ToutPush(IDL_TOUT_OUTF outf);

## IDL_ToutPop()

IDL_ToutPop() removes the most recently pushed output function. The removed function pointer is returned.

IDL_TOUT_OUTF IDL_ToutPop(void);

Note: Do not pop an output function you did not push. It is an error to attempt to remove the last remaining function.