Agar 1.7 Manual



#include <agar/core.h>
#include <agar/gui.h>


ScreenshotAG_Console displays a scrollable list of messages in a log format. Log entries can be copied to the clipboard or exported to a file. The contents and attributes of existing log entries can be updated dynamically.


AG_Object(3)-> AG_Widget(3)-> AG_Console.


AG_Console * AG_ConsoleNew (AG_Widget *parent, Uint flags)

The AG_ConsoleNew() function allocates, initializes, and attaches a new AG_Console widget. Acceptable flags include:
AG_CONSOLE_NOAUTOSCROLLDon't scroll automatically to make newly inserted lines visible.
AG_CONSOLE_NOPOPUPDisable the right-click contextual popup menu (with Copy, Select All and Export functions).
AG_CONSOLE_HFILLExpand horizontally in parent container.
AG_CONSOLE_VFILLExpand vertically in parent container.


AG_ConsoleLine * AG_ConsoleMsg (AG_Console *cons, const char *format, ...)

AG_ConsoleLine * AG_ConsoleMsgS (AG_Console *cons, const char *s)

AG_ConsoleLine * AG_ConsoleBinary (AG_Console *cons, const void *data, AG_Size data_size, const char *label, const char *format)

void AG_ConsoleMsgEdit (AG_ConsoleLine *line, const char *s)

void AG_ConsoleMsgCatS (AG_ConsoleLine *line, const char *s)

void AG_ConsoleMsgPtr (AG_ConsoleLine *line, void *ptr)

void AG_ConsoleMsgColor (AG_ConsoleLine *line, const AG_Color *c)

void AG_ConsoleClear (AG_Console *cons)

char * AG_ConsoleExportText (AG_Console *cons, enum ag_newline_type newline)

char * AG_ConsoleExportBuffer (AG_Console *cons, enum ag_newline_type newline)

The AG_ConsoleMsg() function appends a new message to the console log. Unless an error occurs, the function returns a pointer to the created AG_ConsoleLine. If the message contains newlines, create a group of lines (which will be displayed in an indented style) and return a pointer to the first line (which will be the parent of the subsequent lines). The returned AG_ConsoleLine remains valid until deleted (or AG_ConsoleClear() is used).

As a special case, if a cons argument of NULL is passed to AG_ConsoleMsg() then the message is passed to AG_Verbose(3) (and the function returns NULL).

AG_ConsoleBinary() displays binary data in canonical hex+ASCII format. If non-NULL, label is prepended to every line. If non-NULL, format specifies an alternate format string (such as "%02d " for decimal). The default format is "%02x ". The format string must generate 3 characters.

AG_ConsoleMsgEdit() replaces an existing log entry's text with the given string.

AG_ConsoleMsgCatS() appends the given string to an existing log entry's text.

AG_ConsoleMsgPtr() sets an optional user pointer for this log entry.

AG_ConsoleMsgColor() sets an alternate, line-specific color for this log entry.

AG_ConsoleClear() clears all messages from the console.

AG_ConsoleExportText() returns a C string containing all currently selected lines, joined by newlines of the given variety. Similarly, AG_ConsoleExportBuffer() joins all lines in the buffer with the specified type of newline.


AG_ConsoleFile * AG_ConsoleOpenFile (AG_Console *cons, const char *label, const char *file, enum ag_newline_type newline, Uint flags)

AG_ConsoleFile * AG_ConsoleOpenFD (AG_Console *cons, const char *label, int fd, enum ag_newline_type newline, Uint flags)

AG_ConsoleFile * AG_ConsoleOpenStream (AG_Console *cons, const char *label, FILE *f, enum ag_newline_type newline, Uint flags)

void AG_ConsoleClose (AG_Console *cons, AG_ConsoleFile *cf)

AG_ConsoleOpenFile() opens a file for reading, displays its contents on the console and then arranges for AG_Console to follow changes made to the file (similar to "tail -f" in Unix). Internally the function uses AG_AddEventSink(3) to set up an event sink of type AG_SINK_READ on the open file descriptor.

The newline argument indicates the style of newline to use:
enum ag_newline_type {
	AG_NEWLINE_LF,    /* Unix, Amiga, BeOS, Multics, RISC OS */
	AG_NEWLINE_CR_LF, /* DOS/Windows, early non-Unix */
	AG_NEWLINE_CR,    /* Commodore 8-bit machines (C64/128) */

Possible flags include:
#define AG_CONSOLE_FILE_BINARY     0x01  /* Binary hex dump */
#define AG_CONSOLE_FILE_LEAVE_OPEN 0x02  /* Don't close fd on detach */

If AG_CONSOLE_FILE_BINARY is used then AG_Console produces a canonical hex+ASCII dump of the file (and any changes to it).

The AG_CONSOLE_FILE_LEAVE_OPEN option causes AG_ConsoleClose() to leave the file descriptor (or FILE * handle) open.

The AG_ConsoleOpenFD() variant accepts an integer file descriptor, and AG_ConsoleOpenFILE() accepts the FILE * handle of an open stream.

AG_ConsoleClose() closes a file being followed.


The AG_Console widget does not generate any event.


For the AG_Console object:
int pos Current cursor position (or -1).
int sel Selection (offset from cursor).
AG_Mutex lock Lock on buffer contents.
AG_ConsoleLine **lines Lines in buffer.
Uint nLines Line count.

For the AG_ConsoleLine structure:
char *text Text string.
AG_Size len Length of string in characters.
int selected Line selection flag.
int icon Icon surface to display.
AG_Color cFg Foreground color.
AG_Color cBg Background color.
void *p User pointer


AG_Color(3), AG_Intro(3), AG_Text(3), AG_Textbox(3), AG_Widget(3), AG_Window(3)


The AG_Console widget first appeared in Agar 1.3.4. In Agar 1.6.0, AG_ConsoleSetPadding() was deprecated by the generic "padding" style attribute. Agar 1.6.0 added support for multi-line entries and introduced AG_ConsoleOpenFile(), AG_ConsoleOpenFD(), AG_ConsoleOpenStream(), AG_ConsoleClose(), AG_ConsoleMsgCatS(), AG_ConsoleBinary() and AG_ConsoleExportBuffer().

ElectronTubeStore is © 2024 Julien Nadeau Carriere <>.
Support LibAgar: