Top |
Most libgretl functions that print output call for a pointer-to-PRN as one of their arguments. The PRN type is an opaque structure, constructed and manipulated by the functions listed here. It is used as a means of generalizing the printing operation, which may be to a regular file, a temporary file or a buffer.
To get hold of a PRN use gretl_print_new()
or one of the more
specific constructors, and to free it use gretl_print_destroy()
.
If you want to use a PRN dirctly for printing in your own code, use
the functions pprintf()
, pputs()
and pputc()
. These are
counterparts to the standard C functions fprintf, fputs and
fputc, but note that with pputs and pputc the PRN argument
must be given first (unlike fputs and fputc in which the
FILE argument goes last).
Note that whenever a PRN appears as a function parameter
in libgretl it is OK to give a NULL argument: in that case
pprintf()
, pputs()
and pputc()
are no-ops.
PRN * gretl_print_new (PrnType ptype
,int *err
);
Create and initialize a gretl printing struct. If ptype
is GRETL_PRINT_BUFFER
, output will go to an automatically
resized buffer; if ptype
is GRETL_PRINT_STDOUT
or
GRETL_PRINT_STDERR
output goes to stdout
or stderr
respectively.
If you want a named file associated with the struct, use gretl_print_new_with_filename instead; if you want to attach a fixed, pre-allocated text buffer, use gretl_print_new_with_buffer.
void
gretl_print_destroy (PRN *prn
);
Close a gretl printing struct and free any associated resources.
PRN * gretl_print_new_with_filename (const char *fname
,int *err
);
Create and initialize a gretl printing struct, with output directed to the named file.
PRN * gretl_gzip_print_new (const char *fname
,int comp_level
,int *err
);
Create and initialize a gretl printing struct, with output directed to the named compressed file.
PRN *
gretl_print_new_with_tempfile (int *err
);
Create and initialize a gretl printing struct, with output directed to a temporary file, which is deleted when the printing struct is destroyed.
PRN *
gretl_print_new_with_buffer (char *buf
);
Creates and initializes a gretl printing struct, with
fixed text buffer buf
. Fails if buf
is NULL. This is a
convenience function: you can't use pprintf, pputs or
pputc with a printing struct obtained in this way.
Note that buf
will be freed if and when gretl_print_destroy
is called on the PRN pointer obtained.
PRN *
gretl_print_new_with_gchar_buffer (gchar *buf
);
Just as gretl_print_new_with_buffer()
except that the buffer is
of pointer-to-gchar type, as obtained from one or other GLib
function. This means that when the PRN is detroyed the
buffer will be freed using GLib's g_free function rather than
the standard C library's free function.
PRN *
gretl_print_new_with_stream (FILE *fp
);
Creates and initializes a gretl printing struct, with
printing to fp
.
Note that fp
will be closed if and when gretl_print_destroy
is called on the PRN pointer obtained.
void
gretl_print_detach_stream (PRN *prn
);
Sets the stream member of prn
to NULL so that prn
can
be destroyed without closing the associated stream. May be
used in conjunction with gretl_print_new_with_stream()
.
int
gretl_print_reset_buffer (PRN *prn
);
If prn
has an attached buffer, write a NUL byte to
the start of the buffer and reset the count of bytes
printed to zero. The next call to pprintf
or
similar will then overwite rather than cumulating
the printed content.
int gretl_print_rename_file (PRN *prn
,const char *oldpath
,const char *newpath
);
If prn
is printing to a FILE
pointer, rename the
file to which it is printing and switch the stream
to the new file.
prn |
printing struct to operate on. |
|
oldpath |
name of current file (or NULL if |
|
newpath |
new name for file. |
const char *
gretl_print_get_buffer (PRN *prn
);
Obtain a pointer to the buffer associated
with prn
, if any. This pointer must not be
modified in any way.
const char *
gretl_print_get_trimmed_buffer (PRN *prn
);
Obtain a pointer to the buffer associated
with prn
, if any. This pointer must not be
modified in any way. An opening newline
is skipped and any trailing white space is
substituted by NULs.
char *
gretl_print_steal_buffer (PRN *prn
);
Obtain a pointer to the buffer associated with prn
,
if any. The pointer on prn
itself is set to NULL
and the caller takes responsibility for freeing the
buffer.
int gretl_print_replace_buffer (PRN *prn
,char *buf
);
If prn
currently has a printing buffer in place,
destroy the original and replace it with buf
. Note
prn
"takes ownership" of buf
, which will be freed
when prn
is destroyed.
void gretl_print_get_size (PRN *prn
,int *width
,int *height
);
If prn
has a non-null buffer attached, provides
the width and/or height of the buffer, the width in
characters and the height in lines. This function is
intended for use with text designed for printing in
a GUI window, and with "reasonable" line lengths for
that context; if the lines are too long (more than
120 UTF-8 characters) the values written to width
and/or height
will be zero.
int
gretl_print_set_save_position (PRN *prn
);
Sets the current buffer offset as the position from
which a chunk of the current buffer may be saved,
using gretl_print_get_chunk()
.
void
gretl_print_unset_save_position (PRN *prn
);
Erases the "save position" offset as set by
gretl_print_set_save_position()
.
char *
gretl_print_get_chunk (PRN *prn
);
Retrieves a copy of the buffer associated with prn
,
starting at the offset from the start of the buffer
as set by gretl_print_set_save_position()
.
char * gretl_print_get_chunk_at (PRN *prn
,int pos
);
Retrieves a copy of the buffer associated with prn
,
starting at the offset from the start of the buffer
specified by pos
.
void gretl_print_set_format (PRN *prn
,PrnFormat format
);
Sets the printing format on prn
.
void
gretl_print_toggle_doc_flag (PRN *prn
);
Toggles the GRETL_FORMAT_DOC
flag on prn
.
void
gretl_print_set_has_minus (PRN *prn
);
Sets the GRETL_FORMAT_HAS_MINUS
flag on prn
,
indicating that the Unicode minus sign is
supported.
void gretl_print_set_delim (PRN *prn
,char delim
);
Sets the CSV delimiter on prn
.
int pprintf (PRN *prn
,const char *format
,...
);
Multi-purpose printing function: can output to stream, to buffer
or to nowhere (silently discarding the output), depending on
how prn
was initialized. Note that it's preferable to use
pputs()
for large chunks of fixed text.
void
gretl_prn_newline (PRN *prn
);
Print a line break, in the mode appropriate to the
format of prn
(plain text, TeX or RTF).
void
gretl_print_flush_stream (PRN *prn
);
If the output of prn
is directed to a stream, flush
that stream.
int print_start_redirection (PRN *prn
,FILE *fp
,const char *fname
,const char *strvar
);
Redirects output of prn
to fp
.
int
print_end_redirection (PRN *prn
);
If the output of prn
has been diverted relative to
its original setting, terminate the redirection.
int gretl_print_alloc (PRN *prn
,size_t s
);
If prn
is using a buffer for printing, try to
ensure that at least s
bytes are available for
further printing. May speed things up if we
know there is a large amount of text to be
printed.
char * gretl_print_read_tempfile (PRN *prn
,int *err
);
Retrieves a copy of the content of prn
, if it takes the
form of a file that has been opened in "w+" or "a+" mode.