[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] libpoke, poke, poked, pokefmt: add `pk_compiler' to terminal int
From: |
Mohammad-Reza Nabipoor |
Subject: |
[PATCH] libpoke, poke, poked, pokefmt: add `pk_compiler' to terminal interface |
Date: |
Wed, 1 Nov 2023 22:44:58 +0100 |
This patch adds `pk_compiler' paramter to add terminal interface
function pointers.
Additionally it adds two new API function to set/get a user-defined
opaque pointer to a compiler instance. The user can use these helper
functions in the terminal interface callbacks to retrieve the pointer.
2023-11-01 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/libpoke.h (struct pk_term_if): Add `pk_compiler' parameter
to all function pointers.
(pk_set_user_data): New function to register an opaque data pointer.
(pk_get_user_data): New function to retrieve the registered opaque
data pointer.
* libpoke/libpoke.c (struct _pk_compiler): Add new field `user_data'.
(libpoke_term_if): Change the type to `struct pk_term_if_internal'.
(pk_compiler_new_with_flags): Populate `libpoke_term_if'.
(pk_set_user_data): New function impl.
(pk_get_user_data): Likewise.
* libpoke/pkt.h (PKT_IF): New macro to convey the terminal interface
function pointers.
(PK_PKC): New macro to convey the instance of current incremental
compiler.
(pk_*): Re-write the macro definitions to new paradigm.
(struct pk_term_if_internal): New data type.
(libpoke_term_if): Change the type of the variable.
* common/pk-utils.h (pk_print_binary): Remove function decl.
(PK_PRINT_BINARY): New macro for printing in base 2 to make use of
`pk_puts' macro easier.
* common/pk-utils.c (pk_print_binary): Remove function.
(pk_integral_suffix): New function.
* libpoke/pvm-val.c (pvm_print_val_1): Change `pk_print_binary' to
`PK_PRINT_BINARY'.
* libpoke/pvm.jitter (wrapped-functions):
s/pk_print_binary/pk_integral_suffix/.
(PVM_PRINTI): s/pk_print_binary/PK_PRINT_BINARY/.
(PVM_PRINTL): Likewise.
* poke/pk-cmd-compiler.c (pk_cmd_compiler_ast): Adapt the new terminal
interface.
* poke/pk-cmd-def.c (PREP_REGEXP_PAYLOAD): Likewise.
(pk_cmd_info_type): Likewise.
* poke/pk-cmd-editor.c (pk_cmd_editor): Likewise.
* poke/pk-cmd-ios.c (pk_cmd_ios): Likewise.
(pk_cmd_sub): Likewise.
(pk_cmd_proc): Likewise.
(pk_cmd_file): Likewise.
(pk_cmd_close): Likewise.
(pk_cmd_load_file): Likewise.
(pk_cmd_source_file): Likewise.
(pk_cmd_mem): Likewise.
(pk_cmd_nbd): Likewise.
* poke/pk-cmd-map.c (SET_TO_CUR_IOS_ID): Likewise.
(pk_cmd_map_create): Likewise.
(pk_cmd_map_remove): Likewise.
(pk_cmd_show): Likewise.
(pk_cmd_map_entry_add): Likewise.
(pk_cmd_map_entry_remove): Likewise.
(pk_cmd_map_load): Likewise.
(pk_cmd_map_save): Likewise.
(pk_cmd_info_maps): Likewise.
* poke/pk-cmd-misc.c (pk_cmd_doc): Likewise.
* poke/pk-cmd-set.c (pk_cmd_set_dump): Likewise.
* poke/pk-cmd-vm.c (pk_cmd_vm_disas_exp): Likewise.
* poke/pk-cmd.c (pk_cmd_exec_1): Likewise.
* poke/pk-hserver.c (read_from_client): Likewise.
* poke/pk-ios.c (pk_open_file): Likewise.
* poke/pk-map-tab.y (pk_map_printf_error): Likewise.
* poke/pk-map.c (pk_map_load_parsed_map): Likewise.
* poke/pk-repl.c (banner): Likewise.
(pk_repl): Likewise.
(pk_repl_display_begin): Likewise.
(pk_repl_display_end): Likewise.
* poke/pk-table.c (pk_table_print): Likewise.
* poke/pk-term.h (pk_term_flush): Add `pk_compiler' parameter.
(pk_puts): Likewise.
(pk_printf): Likewise.
(pk_vprintf): Likewise.
(pk_term_indent): Likewise.
(pk_term_class): Likewise.
(pk_term_end_class): Likewise.
(pk_term_hyperlink): Likewise.
(pk_term_end_hyperlink): Likewise.
(pk_term_get_color): Likewise.
(pk_term_get_bgcolor): Likewise.
(pk_term_set_color): Likewise.
(pk_term_set_bgcolor): Likewise.
* poke/pk-term.c (pk_term_flush): Likewise.
(pk_puts): Likewise.
(pk_printf): Likewise.
(pk_vprintf): Likewise.
(pk_term_indent): Likewise.
(pk_term_class): Likewise.
(pk_term_end_class): Likewise.
(pk_term_hyperlink): Likewise.
(pk_term_end_hyperlink): Likewise.
(pk_term_get_color): Likewise.
(pk_term_get_bgcolor): Likewise.
(pk_term_set_color): Likewise.
(pk_term_set_bgcolor): Likewise.
* poked/poked.c (tif_flush): Likewise.
(tif_puts): Likewise.
(tif_printf): Likewise.
(tif_indent): Likewise.
(tif_class): Likewise.
(tif_class_end): Likewise.
(tif_hlink): Likewise.
(tif_hlink_end): Likewise.
(tif_color): Likewise.
(tif_bgcolor): Likewise.
(tif_color_set): Likewise.
(tif_bgcolor_set): Likewise.
* pokefmt/pokefmt.l (tif_flush): Likewise.
(tif_puts): Likewise.
(tif_printf): Likewise.
(tif_indent): Likewise.
(tif_class): Likewise.
(tif_class_end): Likewise.
(tif_hlink): Likewise.
(tif_hlink_end): Likewise.
(tif_color): Likewise.
(tif_bgcolor): Likewise.
(tif_color_set): Likewise.
(tif_bgcolor_set): Likewise.
* testsutie/poke.libpoke/term-if.h (pk_term_flush): Likewise.
(pk_puts): Likewise.
(pk_printf): Likewise.
(pk_term_indent): Likewise.
(pk_term_class): Likewise.
(pk_term_end_class): Likewise.
(pk_term_hyperlink): Likewise.
(pk_term_end_hyperlink): Likewise.
(pk_term_get_color): Likewise.
(pk_term_get_bgcolor): Likewise.
(pk_term_set_color): Likewise.
(pk_term_set_bgcolor): Likewise.
---
Hi Jose.
Yet another boring patch :D
This patch will pass the compiler instance as a new parameter to the
terminal interface (as we agreed on in GNU40).
I also changed the `libpoke/pkt.h' to be ready for next patches to remove
global state from libpoke. This is the first step as we discussed.
Regards,
Mohammad-Reza
ChangeLog | 129 +++++++++++++++++++++++++++++++
common/pk-utils.c | 33 +++-----
common/pk-utils.h | 27 ++++++-
libpoke/libpoke.c | 20 ++++-
libpoke/libpoke.h | 29 ++++---
libpoke/pkt.h | 46 +++++++----
libpoke/pvm-val.c | 11 +--
libpoke/pvm.jitter | 6 +-
poke/pk-cmd-compiler.c | 2 +-
poke/pk-cmd-def.c | 17 ++--
poke/pk-cmd-editor.c | 38 ++++-----
poke/pk-cmd-ios.c | 39 +++++-----
poke/pk-cmd-map.c | 60 +++++++-------
poke/pk-cmd-misc.c | 11 +--
poke/pk-cmd-set.c | 28 +++----
poke/pk-cmd-vm.c | 17 ++--
poke/pk-cmd.c | 19 +++--
poke/pk-hserver.c | 12 +--
poke/pk-ios.c | 27 +++----
poke/pk-map-tab.y | 11 +--
poke/pk-map.c | 2 +-
poke/pk-repl.c | 44 +++++------
poke/pk-table.c | 22 +++---
poke/pk-term.c | 38 ++++-----
poke/pk-term.h | 31 ++++----
poked/poked.c | 26 ++++---
pokefmt/pokefmt.l | 26 ++++---
testsuite/poke.libpoke/term-if.h | 36 ++++-----
28 files changed, 500 insertions(+), 307 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 5fd7f8c3..03ac15ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,132 @@
+2023-11-01 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
+
+ * libpoke/libpoke.h (struct pk_term_if): Add `pk_compiler' parameter
+ to all function pointers.
+ (pk_set_user_data): New function to register an opaque data pointer.
+ (pk_get_user_data): New function to retrieve the registered opaque
+ data pointer.
+ * libpoke/libpoke.c (struct _pk_compiler): Add new field `user_data'.
+ (libpoke_term_if): Change the type to `struct pk_term_if_internal'.
+ (pk_compiler_new_with_flags): Populate `libpoke_term_if'.
+ (pk_set_user_data): New function impl.
+ (pk_get_user_data): Likewise.
+ * libpoke/pkt.h (PKT_IF): New macro to convey the terminal interface
+ function pointers.
+ (PK_PKC): New macro to convey the instance of current incremental
+ compiler.
+ (pk_*): Re-write the macro definitions to new paradigm.
+ (struct pk_term_if_internal): New data type.
+ (libpoke_term_if): Change the type of the variable.
+ * common/pk-utils.h (pk_print_binary): Remove function decl.
+ (PK_PRINT_BINARY): New macro for printing in base 2 to make use of
+ `pk_puts' macro easier.
+ * common/pk-utils.c (pk_print_binary): Remove function.
+ (pk_integral_suffix): New function.
+ * libpoke/pvm-val.c (pvm_print_val_1): Change `pk_print_binary' to
+ `PK_PRINT_BINARY'.
+ * libpoke/pvm.jitter (wrapped-functions):
+ s/pk_print_binary/pk_integral_suffix/.
+ (PVM_PRINTI): s/pk_print_binary/PK_PRINT_BINARY/.
+ (PVM_PRINTL): Likewise.
+ * poke/pk-cmd-compiler.c (pk_cmd_compiler_ast): Adapt the new terminal
+ interface.
+ * poke/pk-cmd-def.c (PREP_REGEXP_PAYLOAD): Likewise.
+ (pk_cmd_info_type): Likewise.
+ * poke/pk-cmd-editor.c (pk_cmd_editor): Likewise.
+ * poke/pk-cmd-ios.c (pk_cmd_ios): Likewise.
+ (pk_cmd_sub): Likewise.
+ (pk_cmd_proc): Likewise.
+ (pk_cmd_file): Likewise.
+ (pk_cmd_close): Likewise.
+ (pk_cmd_load_file): Likewise.
+ (pk_cmd_source_file): Likewise.
+ (pk_cmd_mem): Likewise.
+ (pk_cmd_nbd): Likewise.
+ * poke/pk-cmd-map.c (SET_TO_CUR_IOS_ID): Likewise.
+ (pk_cmd_map_create): Likewise.
+ (pk_cmd_map_remove): Likewise.
+ (pk_cmd_show): Likewise.
+ (pk_cmd_map_entry_add): Likewise.
+ (pk_cmd_map_entry_remove): Likewise.
+ (pk_cmd_map_load): Likewise.
+ (pk_cmd_map_save): Likewise.
+ (pk_cmd_info_maps): Likewise.
+ * poke/pk-cmd-misc.c (pk_cmd_doc): Likewise.
+ * poke/pk-cmd-set.c (pk_cmd_set_dump): Likewise.
+ * poke/pk-cmd-vm.c (pk_cmd_vm_disas_exp): Likewise.
+ * poke/pk-cmd.c (pk_cmd_exec_1): Likewise.
+ * poke/pk-hserver.c (read_from_client): Likewise.
+ * poke/pk-ios.c (pk_open_file): Likewise.
+ * poke/pk-map-tab.y (pk_map_printf_error): Likewise.
+ * poke/pk-map.c (pk_map_load_parsed_map): Likewise.
+ * poke/pk-repl.c (banner): Likewise.
+ (pk_repl): Likewise.
+ (pk_repl_display_begin): Likewise.
+ (pk_repl_display_end): Likewise.
+ * poke/pk-table.c (pk_table_print): Likewise.
+ * poke/pk-term.h (pk_term_flush): Add `pk_compiler' parameter.
+ (pk_puts): Likewise.
+ (pk_printf): Likewise.
+ (pk_vprintf): Likewise.
+ (pk_term_indent): Likewise.
+ (pk_term_class): Likewise.
+ (pk_term_end_class): Likewise.
+ (pk_term_hyperlink): Likewise.
+ (pk_term_end_hyperlink): Likewise.
+ (pk_term_get_color): Likewise.
+ (pk_term_get_bgcolor): Likewise.
+ (pk_term_set_color): Likewise.
+ (pk_term_set_bgcolor): Likewise.
+ * poke/pk-term.c (pk_term_flush): Likewise.
+ (pk_puts): Likewise.
+ (pk_printf): Likewise.
+ (pk_vprintf): Likewise.
+ (pk_term_indent): Likewise.
+ (pk_term_class): Likewise.
+ (pk_term_end_class): Likewise.
+ (pk_term_hyperlink): Likewise.
+ (pk_term_end_hyperlink): Likewise.
+ (pk_term_get_color): Likewise.
+ (pk_term_get_bgcolor): Likewise.
+ (pk_term_set_color): Likewise.
+ (pk_term_set_bgcolor): Likewise.
+ * poked/poked.c (tif_flush): Likewise.
+ (tif_puts): Likewise.
+ (tif_printf): Likewise.
+ (tif_indent): Likewise.
+ (tif_class): Likewise.
+ (tif_class_end): Likewise.
+ (tif_hlink): Likewise.
+ (tif_hlink_end): Likewise.
+ (tif_color): Likewise.
+ (tif_bgcolor): Likewise.
+ (tif_color_set): Likewise.
+ (tif_bgcolor_set): Likewise.
+ * pokefmt/pokefmt.l (tif_flush): Likewise.
+ (tif_puts): Likewise.
+ (tif_printf): Likewise.
+ (tif_indent): Likewise.
+ (tif_class): Likewise.
+ (tif_class_end): Likewise.
+ (tif_hlink): Likewise.
+ (tif_hlink_end): Likewise.
+ (tif_color): Likewise.
+ (tif_bgcolor): Likewise.
+ (tif_color_set): Likewise.
+ (tif_bgcolor_set): Likewise.
+ * testsutie/poke.libpoke/term-if.h (pk_term_flush): Likewise.
+ (pk_puts): Likewise.
+ (pk_printf): Likewise.
+ (pk_term_indent): Likewise.
+ (pk_term_class): Likewise.
+ (pk_term_end_class): Likewise.
+ (pk_term_hyperlink): Likewise.
+ (pk_term_end_hyperlink): Likewise.
+ (pk_term_get_color): Likewise.
+ (pk_term_get_bgcolor): Likewise.
+ (pk_term_set_color): Likewise.
+ (pk_term_set_bgcolor): Likewise.
+
2023-11-01 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/libpoke.h (pk_ios_search): Add new param: FLAGS to support
diff --git a/common/pk-utils.c b/common/pk-utils.c
index 1134251c..d1c7cf90 100644
--- a/common/pk-utils.c
+++ b/common/pk-utils.c
@@ -82,29 +82,18 @@ PK_POW (pk_upow, uint64_t)
#undef PK_POW
-void
-pk_print_binary (void (*puts_fn) (const char *str),
- uint64_t val, int size, int sign_p, int use_suffix_p)
+const char *
+pk_integral_suffix (int size, int sign_p)
{
- char b[65];
-
- for (int z = 0; z < size; z++)
- b[size-1-z] = ((val >> z) & 0x1) + '0';
- b[size] = '\0';
-
- puts_fn (b);
-
- if (use_suffix_p)
- {
- if (size == 64)
- puts_fn (sign_p ? "L" : "UL");
- else if (size == 16)
- puts_fn (sign_p ? "H" : "UH");
- else if (size == 8)
- puts_fn (sign_p ? "B" : "UB");
- else if (size == 4)
- puts_fn (sign_p ? "N" : "UN");
- }
+ if (size == 64)
+ return sign_p ? "L" : "UL";
+ if (size == 16)
+ return sign_p ? "H" : "UH";
+ if (size == 8)
+ return sign_p ? "B" : "UB";
+ if (size == 4)
+ return sign_p ? "N" : "UN";
+ return "";
}
int
diff --git a/common/pk-utils.h b/common/pk-utils.h
index 97f5dc0a..78e49a5c 100644
--- a/common/pk-utils.h
+++ b/common/pk-utils.h
@@ -49,9 +49,32 @@ char *pk_file_readable (const char *filename);
int64_t pk_ipow (int64_t base, uint32_t exp);
uint64_t pk_upow (uint64_t base, uint32_t exp);
+/* Return one of the following strings based on the SIZE and SIGN_P:
+ "N", "UN", "B", "UB", "H", "UH", "L", "UL"
+ which are valid suffix for integral values in Poke. */
+
+const char *pk_integral_suffix (int size, int sign_p);
+
/* Print the given unsigned 64-bit integer in binary. */
-void pk_print_binary (void (*puts_fn) (const char *str), uint64_t val,
- int size, int sign_p, int use_suffix_p);
+
+#define PK_PRINT_BINARY(val, size, sign_p, use_suffix_p) \
+ do \
+ { \
+ char _pkpb_buf[65]; \
+ uint64_t _pkpb_val = (val); \
+ int _pkpb_sz = (size); \
+ \
+ for (int _pkpb_z = 0; _pkpb_z < _pkpb_sz; _pkpb_z++) \
+ _pkpb_buf[_pkpb_sz - 1 - _pkpb_z] \
+ = ((_pkpb_val >> _pkpb_z) & 0x1) + '0'; \
+ _pkpb_buf[_pkpb_sz] = '\0'; \
+ \
+ pk_puts (_pkpb_buf); \
+ \
+ if (use_suffix_p) \
+ pk_puts (pk_integral_suffix (_pkpb_sz, (sign_p))); \
+ } \
+ while (0)
/* Format the given unsigned 64-bit integer in binary. */
int pk_format_binary (char* out, size_t outlen, uint64_t val, int size,
diff --git a/libpoke/libpoke.c b/libpoke/libpoke.c
index a0bc7ee9..2c25bc55 100644
--- a/libpoke/libpoke.c
+++ b/libpoke/libpoke.c
@@ -44,9 +44,10 @@ struct _pk_compiler
ios completion_ios;
int completion_idx;
struct pkl_ast_node_iter completion_iter;
+ void *user_data;
};
-struct pk_term_if libpoke_term_if;
+struct pk_term_if_internal libpoke_term_if;
#define PK_RETURN(code) do { return pkc->status = (code); } while (0)
@@ -83,7 +84,8 @@ pk_compiler_new_with_flags (struct pk_term_if *term_if,
uint32_t flags)
if (libpoke_datadir == NULL)
libpoke_datadir = PKGDATADIR;
- libpoke_term_if = *term_if;
+ libpoke_term_if.term_if = *term_if;
+ libpoke_term_if.pkc = pkc;
pkc->vm = pvm_init ();
if (pkc->vm == NULL)
@@ -134,6 +136,20 @@ pk_errno (pk_compiler pkc)
return PK_ERROR;
}
+void
+pk_set_user_data (pk_compiler pkc, void *user_data)
+{
+ pkc->status = PK_OK;
+ pkc->user_data = user_data;
+}
+
+void *
+pk_get_user_data (pk_compiler pkc)
+{
+ pkc->status = PK_OK;
+ return pkc->user_data;
+}
+
int
pk_compile_file (pk_compiler pkc, const char *filename,
pk_val *exit_exception)
diff --git a/libpoke/libpoke.h b/libpoke/libpoke.h
index f49a5b30..3d571de3 100644
--- a/libpoke/libpoke.h
+++ b/libpoke/libpoke.h
@@ -83,46 +83,46 @@ struct pk_color
struct pk_term_if
{
/* Flush the output in the terminal. */
- void (*flush_fn) (void);
+ void (*flush_fn) (pk_compiler pkc);
/* Output a NULL-terminated C string. */
- void (*puts_fn) (const char *str);
+ void (*puts_fn) (pk_compiler pkc, const char *str);
/* Output a formatted string. */
- void (*printf_fn) (const char *format, ...);
+ void (*printf_fn) (pk_compiler pkc, const char *format, ...);
/* Output LVL levels of indentation, using STEP white chars in each
indentation level. */
- void (*indent_fn) (unsigned int lvl, unsigned int step);
+ void (*indent_fn) (pk_compiler pkc, unsigned int lvl, unsigned int step);
/* Mark the beginning of a styling class with name CLASS. */
- void (*class_fn) (const char *aclass);
+ void (*class_fn) (pk_compiler pkc, const char *aclass);
/* Mark the end of a styling class with name CLASS. This function
returns 0 if the given class is not active and therefore can't be
ended. 1 otherwise. */
- int (*end_class_fn) (const char *aclass);
+ int (*end_class_fn) (pk_compiler pkc, const char *aclass);
/* Mark the beginning of an hyperlink with url URL and identifier
ID. The identifier can be NULL. */
- void (*hyperlink_fn) (const char *url, const char *id);
+ void (*hyperlink_fn) (pk_compiler pkc, const char *url, const char *id);
/* Mark the end of the current hyperlink. This function returns 0
if there is no currently an hyperlink open to close. 1
otherwise. */
- int (*end_hyperlink_fn) (void);
+ int (*end_hyperlink_fn) (pk_compiler pkc);
/* Get the current foreground color. */
- struct pk_color (*get_color_fn) (void);
+ struct pk_color (*get_color_fn) (pk_compiler pkc);
/* Get the current background color. */
- struct pk_color (*get_bgcolor_fn) (void);
+ struct pk_color (*get_bgcolor_fn) (pk_compiler pkc);
/* Set the foreground color. */
- void (*set_color_fn) (struct pk_color color);
+ void (*set_color_fn) (pk_compiler pkc, struct pk_color color);
/* Set the background color. */
- void (*set_bgcolor_fn) (struct pk_color color);
+ void (*set_bgcolor_fn) (pk_compiler pkc, struct pk_color color);
};
/* Create and return a new Poke incremental compiler.
@@ -166,6 +166,11 @@ void pk_unregister_thread (void) LIBPOKE_API;
int pk_errno (pk_compiler pkc) LIBPOKE_API;
+/* Set/get user-defined opaque data to compiler instance. */
+
+void pk_set_user_data (pk_compiler pkc, void *user_data) LIBPOKE_API;
+void *pk_get_user_data (pk_compiler pkc) LIBPOKE_API;
+
/* Compile and execute a Poke program from the given file FILENAME.
EXIT_EXCEPTION is a pointer to a pk_val variable that is set to an
diff --git a/libpoke/pkt.h b/libpoke/pkt.h
index 5be77f68..d5d010db 100644
--- a/libpoke/pkt.h
+++ b/libpoke/pkt.h
@@ -21,21 +21,35 @@
#include <config.h>
-#include "libpoke.h" /* For struct pk_term_if */
-
-extern struct pk_term_if libpoke_term_if;
-
-#define pk_puts libpoke_term_if.puts_fn
-#define pk_printf libpoke_term_if.printf_fn
-#define pk_term_flush libpoke_term_if.flush_fn
-#define pk_term_indent libpoke_term_if.indent_fn
-#define pk_term_class libpoke_term_if.class_fn
-#define pk_term_end_class libpoke_term_if.end_class_fn
-#define pk_term_hyperlink libpoke_term_if.hyperlink_fn
-#define pk_term_end_hyperlink libpoke_term_if.end_hyperlink_fn
-#define pk_term_get_color libpoke_term_if.get_color_fn
-#define pk_term_set_color libpoke_term_if.set_color_fn
-#define pk_term_get_bgcolor libpoke_term_if.get_bgcolor_fn
-#define pk_term_set_bgcolor libpoke_term_if.set_bgcolor_fn
+#include "libpoke.h" /* For struct pk_term_if, pk_compiler. */
+
+struct pk_term_if_internal
+{
+ struct pk_term_if term_if;
+ pk_compiler pkc;
+};
+
+extern struct pk_term_if_internal libpoke_term_if;
+
+/* Terminal interface for Poke compiler. */
+
+#define pk_puts(str) (PKT_IF)->puts_fn ((PKT_PKC), str)
+#define pk_printf(...) (PKT_IF)->printf_fn ((PKT_PKC), __VA_ARGS__)
+#define pk_term_flush() (PKT_IF)->flush_fn (PKT_PKC)
+#define pk_term_indent(lvl, step) \
+ (PKT_IF)->indent_fn ((PKT_PKC), (lvl), (step))
+#define pk_term_class(cls) (PKT_IF)->class_fn ((PKT_PKC), (cls))
+#define pk_term_end_class(cls) (PKT_IF)->end_class_fn ((PKT_PKC), (cls))
+#define pk_term_hyperlink(url, id) \
+ (PKT_IF)->hyperlink_fn ((PKT_PKC), (url), id)
+#define pk_term_end_hyperlink() (PKT_IF)->end_hyperlink_fn (PKT_PKC)
+#define pk_term_get_color() (PKT_IF)->get_color_fn (PKT_PKC)
+#define pk_term_set_color(color) (PKT_IF)->set_color_fn ((PKT_PKC), (color))
+#define pk_term_get_bgcolor() (PKT_IF)->get_bgcolor_fn (PKT_PKC)
+#define pk_term_set_bgcolor(color) \
+ (PKT_IF)->set_bgcolor_fn ((PKT_PKC), (color))
+
+#define PKT_IF (&libpoke_term_if.term_if)
+#define PKT_PKC (libpoke_term_if.pkc)
#endif /* ! PKT_H */
diff --git a/libpoke/pvm-val.c b/libpoke/pvm-val.c
index 07e66b2c..e8091c50 100644
--- a/libpoke/pvm-val.c
+++ b/libpoke/pvm-val.c
@@ -1168,8 +1168,7 @@ pvm_print_val_1 (pvm vm, int depth, int mode, int base,
int indent,
if (base == 2)
{
pk_puts ("0b");
- pk_print_binary (pk_puts, ulongval, size, /*signed_p*/ 1,
- /*use_suffix_p*/ 1);
+ PK_PRINT_BINARY (ulongval, size, /*signed_p*/ 1, /*use_suffix_p*/ 1);
}
else
{
@@ -1198,7 +1197,7 @@ pvm_print_val_1 (pvm vm, int depth, int mode, int base,
int indent,
if (base == 2)
{
pk_puts ("0b");
- pk_print_binary (pk_puts, (uint64_t) uintval, size, /*signed*/ 1,
+ PK_PRINT_BINARY ((uint64_t) uintval, size, /*signed*/ 1,
/*use_suffix_p*/ 1);
}
else
@@ -1228,8 +1227,7 @@ pvm_print_val_1 (pvm vm, int depth, int mode, int base,
int indent,
if (base == 2)
{
pk_puts ("0b");
- pk_print_binary (pk_puts, ulongval, size, /*signed_p*/ 0,
- /*use_suffix_p*/ 1);
+ PK_PRINT_BINARY (ulongval, size, /*signed_p*/ 0, /*use_suffix_p*/ 1);
}
else
{
@@ -1251,8 +1249,7 @@ pvm_print_val_1 (pvm vm, int depth, int mode, int base,
int indent,
if (base == 2)
{
pk_puts ("0b");
- pk_print_binary (pk_puts, uintval, size, /*signed_p*/ 0,
- /*use_suffix_p*/ 1);
+ PK_PRINT_BINARY (uintval, size, /*signed_p*/ 0, /*use_suffix_p*/ 1);
}
else
{
diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
index 8d44872f..3954345a 100644
--- a/libpoke/pvm.jitter
+++ b/libpoke/pvm.jitter
@@ -90,7 +90,7 @@ wrapped-functions
pvm_make_offset_type
pvm_make_array_type
pk_upow
- pk_print_binary
+ pk_integral_suffix
pk_format_binary
pvm_alloc
pvm_allocate_struct_attrs
@@ -517,7 +517,7 @@ late-header-c
} \
else if ((BASE) == 2) \
{ \
- pk_print_binary (pk_puts, val, JITTER_ARGN0, 1, 0); \
+ PK_PRINT_BINARY (val, JITTER_ARGN0, 1, 0); \
JITTER_DROP_STACK (); \
JITTER_DROP_STACK (); \
break; \
@@ -571,7 +571,7 @@ late-header-c
} \
else if ((BASE) == 2) \
{ \
- pk_print_binary (pk_puts, val, JITTER_ARGN0, 1, 0); \
+ PK_PRINT_BINARY (val, JITTER_ARGN0, 1, 0); \
JITTER_DROP_STACK (); \
JITTER_DROP_STACK (); \
break; \
diff --git a/poke/pk-cmd-compiler.c b/poke/pk-cmd-compiler.c
index c1357e22..5872f4dd 100644
--- a/poke/pk-cmd-compiler.c
+++ b/poke/pk-cmd-compiler.c
@@ -51,7 +51,7 @@ pk_cmd_compiler_ast (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
const char *ast_str = pk_get_debug_ast (poke_compiler);
assert (ast_str != NULL);
- pk_printf ("%s", ast_str);
+ pk_printf (poke_compiler, "%s", ast_str);
}
pk_set_debug_p (poke_compiler, 0);
}
diff --git a/poke/pk-cmd-def.c b/poke/pk-cmd-def.c
index 8adbe0e3..166d915f 100644
--- a/poke/pk-cmd-def.c
+++ b/poke/pk-cmd-def.c
@@ -160,11 +160,11 @@ print_type_decl (int kind,
PK_CMD_ARG_STR (argv[1]), \
REG_EXTENDED | REG_NOSUB) != 0) \
{ \
- pk_term_class ("error"); \
- pk_puts ("error:"); \
- pk_term_end_class ("error"); \
+ pk_term_class (poke_compiler, "error"); \
+ pk_puts (poke_compiler, "error:"); \
+ pk_term_end_class (poke_compiler, "error"); \
\
- pk_printf (" invalid regexp\n"); \
+ pk_printf (poke_compiler, " invalid regexp\n"); \
return 0; \
} \
payload.regexp_p = 1; \
@@ -284,10 +284,11 @@ pk_cmd_info_type (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
return 1;
invalid_type:
- pk_term_class ("error");
- pk_puts ("error:");
- pk_term_end_class ("error");
- pk_printf (" this command requires a type specifier o an expression\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error:");
+ pk_term_end_class (poke_compiler, "error");
+ pk_printf (poke_compiler,
+ " this command requires a type specifier o an expression\n");
return 0;
}
diff --git a/poke/pk-cmd-editor.c b/poke/pk-cmd-editor.c
index 76ad7406..4c833776 100644
--- a/poke/pk-cmd-editor.c
+++ b/poke/pk-cmd-editor.c
@@ -63,10 +63,10 @@ pk_cmd_editor (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
}
if (!editor)
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_puts ("the EDITOR environment variable is not set.\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "the EDITOR environment variable is not set.\n");
return 0;
}
@@ -74,10 +74,10 @@ pk_cmd_editor (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
if (((des = path_search (tmpfile, PATH_MAX, NULL, "poke", true)) == -1)
|| ((des = mkstemp (tmpfile)) == -1))
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_puts ("determining a temporary file name.\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "determining a temporary file name.\n");
return 0;
}
@@ -87,10 +87,10 @@ pk_cmd_editor (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
/* Start command. */
if (system (cmdline) != 0)
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_puts ("executing editor.\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "executing editor.\n");
free (cmdline);
return 0;
}
@@ -124,10 +124,10 @@ pk_cmd_editor (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (*newline != '\0')
{
char *prompt = pk_prompt();
- pk_puts (prompt);
+ pk_puts (poke_compiler, prompt);
free(prompt);
- pk_puts (newline);
- pk_puts ("\n");
+ pk_puts (poke_compiler, newline);
+ pk_puts (poke_compiler, "\n");
pk_cmd_exec (newline);
}
free (newline);
@@ -136,10 +136,10 @@ pk_cmd_editor (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
/* Remove the temporary file. */
if (unlink (tmpfile) != 0)
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_printf ("removing temporary file %s\n", tmpfile);
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_printf (poke_compiler, "removing temporary file %s\n", tmpfile);
return 0;
}
diff --git a/poke/pk-cmd-ios.c b/poke/pk-cmd-ios.c
index c7d1f350..9bc9b140 100644
--- a/poke/pk-cmd-ios.c
+++ b/poke/pk-cmd-ios.c
@@ -83,13 +83,13 @@ pk_cmd_ios (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
io = expr_to_ios (PK_CMD_ARG_STR (argv[1]));
if (io == NULL)
{
- pk_puts ("error: no such IO space\n");
+ pk_puts (poke_compiler, "error: no such IO space\n");
return 0;
}
pk_ios_set_cur (poke_compiler, io);
if (poke_interactive_p && !poke_quiet_p)
- pk_printf (_("The current IOS is now `%s'.\n"),
+ pk_printf (poke_compiler, _("The current IOS is now `%s'.\n"),
pk_ios_handler (pk_ios_cur (poke_compiler)));
return 1;
}
@@ -128,7 +128,7 @@ pk_cmd_sub (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
/* Open the IOS. */
if (pk_ios_open (poke_compiler, handler, 0, 1) == PK_IOS_NOID)
{
- pk_printf (_("Error creating sub IOS %s\n"), handler);
+ pk_printf (poke_compiler, _("Error creating sub IOS %s\n"), handler);
free (handler);
return 0;
}
@@ -162,7 +162,7 @@ pk_cmd_proc (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
ios_id = pk_ios_open (poke_compiler, handler, 0, 1);
if (ios_id == PK_IOS_NOID)
{
- pk_printf (_("Error creating proc IOS %s\n"), handler);
+ pk_printf (poke_compiler, _("Error creating proc IOS %s\n"), handler);
free (handler);
return 0;
}
@@ -175,10 +175,11 @@ pk_cmd_proc (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
return 1;
#else
- pk_term_class ("error");
- pk_puts (_("error: "));
- pk_term_end_class ("error");
- pk_printf (_("this poke hasn't been built with support for .proc\n"));
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, _("error: "));
+ pk_term_end_class (poke_compiler, "error");
+ pk_printf (poke_compiler,
+ _("this poke hasn't been built with support for .proc\n"));
return 0;
#endif /* HAVE_PROC */
}
@@ -213,11 +214,11 @@ pk_cmd_file (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
if (PK_IOS_NOID == pk_open_file (filename, 1 /* set_cur_p */, create_p))
{
- pk_term_class ("error");
- pk_puts (_("error: "));
- pk_term_end_class ("error");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, _("error: "));
+ pk_term_end_class (poke_compiler, "error");
- pk_printf (_("opening %s\n"), filename);
+ pk_printf (poke_compiler, _("opening %s\n"), filename);
return 0;
}
@@ -269,7 +270,7 @@ pk_cmd_close (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
io = expr_to_ios (expr);
if (io == NULL)
{
- pk_printf (_("error: no such IO space\n"));
+ pk_printf (poke_compiler, _("error: no such IO space\n"));
return 0;
}
}
@@ -443,7 +444,7 @@ pk_cmd_load_file (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
return 1;
no_file:
- pk_puts (emsg);
+ pk_puts (poke_compiler, emsg);
error:
if (filename != arg)
free (filename);
@@ -463,7 +464,7 @@ pk_cmd_source_file (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if ((emsg = pk_file_readable (arg)) != NULL)
{
- pk_puts (emsg);
+ pk_puts (poke_compiler, emsg);
return 0;
}
@@ -518,7 +519,7 @@ pk_cmd_mem (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
if (PK_IOS_NOID == pk_ios_open (poke_compiler, mem_name, 0, 1))
{
- pk_printf (_("Error creating memory IOS %s\n"), mem_name);
+ pk_printf (poke_compiler, _("Error creating memory IOS %s\n"), mem_name);
free (mem_name);
return 0;
}
@@ -526,7 +527,7 @@ pk_cmd_mem (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
free (mem_name);
if (poke_interactive_p && !poke_quiet_p)
- pk_printf (_("The current IOS is now `%s'.\n"),
+ pk_printf (poke_compiler, _("The current IOS is now `%s'.\n"),
pk_ios_handler (pk_ios_cur (poke_compiler)));
return 1;
@@ -555,13 +556,13 @@ pk_cmd_nbd (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
if (PK_IOS_NOID == pk_ios_open (poke_compiler, nbd_name, 0, 1))
{
- pk_printf (_("Error creating NBD IOS %s\n"), nbd_name);
+ pk_printf (poke_compiler, _("Error creating NBD IOS %s\n"), nbd_name);
free (nbd_name);
return 0;
}
if (poke_interactive_p && !poke_quiet_p)
- pk_printf (_("The current IOS is now `%s'.\n"),
+ pk_printf (poke_compiler, _("The current IOS is now `%s'.\n"),
pk_ios_handler (pk_ios_cur (poke_compiler)));
return 1;
diff --git a/poke/pk-cmd-map.c b/poke/pk-cmd-map.c
index 4052aff6..971ee042 100644
--- a/poke/pk-cmd-map.c
+++ b/poke/pk-cmd-map.c
@@ -63,7 +63,7 @@ expr_to_intval (const char *expr, pk_val *retval)
\
if (!cur_ios) \
{ \
- pk_printf (_ ("No current IOS\n")); \
+ pk_printf (poke_compiler, _ ("No current IOS\n")); \
return 0; \
} \
\
@@ -86,7 +86,7 @@ pk_cmd_map_create (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (strlen (mapname) == 0)
{
- pk_printf (_("Invalid name for map.\n"));
+ pk_printf (poke_compiler, _("Invalid name for map.\n"));
return 0;
}
@@ -102,7 +102,7 @@ pk_cmd_map_create (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
@@ -110,14 +110,14 @@ pk_cmd_map_create (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS with Id %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS with Id %d.\n"), ios_id);
return 0;
}
}
if (!pk_map_create (ios_id, mapname, NULL /* source */))
{
- pk_printf (_("The map `%s' already exists in IOS %d\n."),
+ pk_printf (poke_compiler, _("The map `%s' already exists in IOS %d\n."),
mapname, ios_id);
return 0;
}
@@ -140,7 +140,7 @@ pk_cmd_map_remove (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (strlen (mapname) == 0)
{
- pk_printf (_("Invalid name for map.\n"));
+ pk_printf (poke_compiler, _("Invalid name for map.\n"));
return 0;
}
@@ -156,7 +156,7 @@ pk_cmd_map_remove (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
@@ -164,14 +164,14 @@ pk_cmd_map_remove (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS %d.\n"), ios_id);
return 0;
}
}
if (!pk_map_remove (ios_id, mapname))
{
- pk_printf (_("No such map `%s' in IOS %d.\n"),
+ pk_printf (poke_compiler, _("No such map `%s' in IOS %d.\n"),
mapname, ios_id);
return 0;
}
@@ -205,14 +205,14 @@ pk_cmd_map_show (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
ios_id = pk_int_value (val);
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS %d.\n"), ios_id);
return 0;
}
}
@@ -223,7 +223,7 @@ pk_cmd_map_show (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
map = pk_map_search (ios_id, mapname);
if (!map)
{
- pk_printf (_("No such map `%s' in IOS %d.\n"),
+ pk_printf (poke_compiler, _("No such map `%s' in IOS %d.\n"),
mapname, ios_id);
return 0;
}
@@ -290,14 +290,14 @@ pk_cmd_map_entry_add (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
ios_id = pk_int_value (val);
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS %d.\n"), ios_id);
return 0;
}
}
@@ -305,7 +305,7 @@ pk_cmd_map_entry_add (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
/* Make sure the specified map exists in the given IO space. */
if (!pk_map_search (ios_id, mapname))
{
- pk_printf (_("No such map `%s' in IOS %d.\n"),
+ pk_printf (poke_compiler, _("No such map `%s' in IOS %d.\n"),
mapname, ios_id);
return 0;
}
@@ -313,7 +313,7 @@ pk_cmd_map_entry_add (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
/* Make sure the variable exists in the top-level environment. */
if (!pk_decl_p (poke_compiler, varname, PK_DECL_KIND_VAR))
{
- pk_printf ("Variable `%s' doesn't exist.\n", varname);
+ pk_printf (poke_compiler, "Variable `%s' doesn't exist.\n", varname);
return 0;
}
@@ -325,7 +325,7 @@ pk_cmd_map_entry_add (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (!pk_val_mapped_p (val)
|| pk_int_value (pk_val_ios (val)) != ios_id)
{
- pk_printf ("Variable `%s' is not mapped in the IOS %d.\n",
+ pk_printf (poke_compiler, "Variable `%s' is not mapped in the IOS %d.\n",
varname, ios_id);
return 0;
}
@@ -334,7 +334,7 @@ pk_cmd_map_entry_add (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (!pk_map_add_entry (ios_id, mapname,
varname, varname, pk_val_offset (val)))
{
- pk_printf ("The entry `%s' already exists in map `%s'.\n",
+ pk_printf (poke_compiler, "The entry `%s' already exists in map `%s'.\n",
varname, mapname);
return 0;
}
@@ -371,14 +371,14 @@ pk_cmd_map_entry_remove (int argc, struct pk_cmd_arg
argv[], uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
ios_id = pk_int_value (val);
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS %d.\n"), ios_id);
return 0;
}
}
@@ -386,14 +386,14 @@ pk_cmd_map_entry_remove (int argc, struct pk_cmd_arg
argv[], uint64_t uflags)
/* Make sure the specified map exists in the given IO space. */
if (!pk_map_search (ios_id, mapname))
{
- pk_printf (_("No such map `%s' in IOS %d.\n"),
+ pk_printf (poke_compiler, _("No such map `%s' in IOS %d.\n"),
mapname, ios_id);
return 0;
}
if (!pk_map_remove_entry (ios_id, mapname, entryname))
{
- pk_printf (_("No entry `%s' in map `%s'.\n"),
+ pk_printf (poke_compiler, _("No entry `%s' in map `%s'.\n"),
entryname, mapname);
return 0;
}
@@ -426,14 +426,14 @@ pk_cmd_map_load (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
ios_id = pk_int_value (val);
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS %d.\n"), ios_id);
return 0;
}
}
@@ -442,7 +442,7 @@ pk_cmd_map_load (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
filename = pk_map_resolve_map (mapname, filename_p);
if (!filename)
{
- pk_printf (_("No such map `%s'.\n"), mapname);
+ pk_printf (poke_compiler, _("No such map `%s'.\n"), mapname);
return 0;
}
@@ -450,9 +450,9 @@ pk_cmd_map_load (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
{
if (emsg)
{
- pk_printf ("%s", emsg);
+ pk_printf (poke_compiler, "%s", emsg);
if (emsg[strlen (emsg) - 1] != '\n')
- pk_puts ("\n");
+ pk_puts (poke_compiler, "\n");
}
return 0;
}
@@ -465,7 +465,7 @@ pk_cmd_map_save (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
{
/* XXX writeme */
- pk_printf (".map save is not implemented yet, sorry :/\n");
+ pk_printf (poke_compiler, ".map save is not implemented yet, sorry :/\n");
return 1;
}
@@ -490,14 +490,14 @@ pk_cmd_info_maps (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (pk_type_code (pk_typeof (val)) != PK_TYPE_INT)
{
- pk_printf (_("Expected IO space identifier.\n"));
+ pk_printf (poke_compiler, _("Expected IO space identifier.\n"));
return 0;
}
ios_id = pk_int_value (val);
if (pk_ios_search_by_id (poke_compiler, ios_id) == NULL)
{
- pk_printf (_("No such IOS %d.\n"), ios_id);
+ pk_printf (poke_compiler, _("No such IOS %d.\n"), ios_id);
return 0;
}
}
diff --git a/poke/pk-cmd-misc.c b/poke/pk-cmd-misc.c
index db4dd5b3..9d4d4322 100644
--- a/poke/pk-cmd-misc.c
+++ b/poke/pk-cmd-misc.c
@@ -105,10 +105,11 @@ pk_cmd_doc (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
const char *ip = find_in_path (info_prog_name);
if (STREQ (ip, info_prog_name))
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_puts ("a suitable documentation viewer is not installed.\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_puts (poke_compiler,
+ "a suitable documentation viewer is not installed.\n");
return 0;
}
@@ -171,7 +172,7 @@ pk_cmd_jmd (int argc, struct pk_cmd_arg argv[], uint64_t
uflags)
num_strings++;
}
- pk_printf ("%s\n", strings[rand () % num_strings]);
+ pk_printf (poke_compiler, "%s\n", strings[rand () % num_strings]);
return 1;
}
diff --git a/poke/pk-cmd-set.c b/poke/pk-cmd-set.c
index 64ee2a3f..d523a1ff 100644
--- a/poke/pk-cmd-set.c
+++ b/poke/pk-cmd-set.c
@@ -41,10 +41,11 @@ pk_cmd_set_dump (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
|| exit_exception != PK_NULL)
PK_UNREACHABLE (); /* This shouldn't happen. */
- pk_term_class ("setting-header");
- pk_puts ("error-on-warning");
- pk_term_end_class ("setting-header");
- pk_printf (" %s\n", pk_error_on_warning (poke_compiler) ? "yes" : "no");
+ pk_term_class (poke_compiler, "setting-header");
+ pk_puts (poke_compiler, "error-on-warning");
+ pk_term_end_class (poke_compiler, "setting-header");
+ pk_printf (poke_compiler,
+ " %s\n", pk_error_on_warning (poke_compiler) ? "yes" : "no");
return 0;
}
@@ -76,9 +77,9 @@ pk_cmd_set (int int_p,
PK_UNREACHABLE ();
if (int_p)
- pk_printf ("%" PRId64 "\n", pk_int_value (retval));
+ pk_printf (poke_compiler, "%" PRId64 "\n", pk_int_value (retval));
else
- pk_printf ("%s\n", pk_string_str (retval));
+ pk_printf (poke_compiler, "%s\n", pk_string_str (retval));
}
else
{
@@ -108,7 +109,7 @@ pk_cmd_set (int int_p,
retmsg = pk_string_str (retval);
if (*retmsg != '\0')
{
- pk_printf ("%s\n", retmsg);
+ pk_printf (poke_compiler, "%s\n", retmsg);
return 0;
}
}
@@ -149,9 +150,9 @@ pk_cmd_set_error_on_warning (int argc, struct pk_cmd_arg
argv[],
if (*arg == '\0')
{
if (pk_error_on_warning (poke_compiler))
- pk_puts ("yes\n");
+ pk_puts (poke_compiler, "yes\n");
else
- pk_puts ("no\n");
+ pk_puts (poke_compiler, "no\n");
}
else
{
@@ -163,10 +164,11 @@ pk_cmd_set_error_on_warning (int argc, struct pk_cmd_arg
argv[],
error_on_warning = 0;
else
{
- pk_term_class ("error");
- pk_puts (_("error: "));
- pk_term_end_class ("error");
- pk_puts (_("error-on-warning should be one of `yes' or `no'\n"));
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, _("error: "));
+ pk_term_end_class (poke_compiler, "error");
+ pk_puts (poke_compiler,
+ _("error-on-warning should be one of `yes' or `no'\n"));
return 0;
}
diff --git a/poke/pk-cmd-vm.c b/poke/pk-cmd-vm.c
index 51ff59a7..c2806035 100644
--- a/poke/pk-cmd-vm.c
+++ b/poke/pk-cmd-vm.c
@@ -44,10 +44,10 @@ pk_cmd_vm_disas_exp (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
if (ret == PK_ERROR)
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_puts ("invalid expression\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "invalid expression\n");
return 0;
}
return 1;
@@ -81,10 +81,11 @@ pk_cmd_vm_disas_fun (int argc, struct pk_cmd_arg argv[],
uint64_t uflags)
uflags & PK_VM_DIS_F_NAT);
if (ret != PK_OK)
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
- pk_printf ("given expression doesn't evaluate to a function\n");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
+ pk_printf (poke_compiler,
+ "given expression doesn't evaluate to a function\n");
return 0;
}
diff --git a/poke/pk-cmd.c b/poke/pk-cmd.c
index e6825423..b73d1875 100644
--- a/poke/pk-cmd.c
+++ b/poke/pk-cmd.c
@@ -301,7 +301,7 @@ pk_cmd_exec_1 (const char *str, struct pk_trie *cmds_trie,
char *prefix)
{
if (i >= MAX_CMD_NAME - 1)
{
- pk_printf (_("%s: command not found.\n"), cmd_name);
+ pk_printf (poke_compiler, _("%s: command not found.\n"), cmd_name);
return 0;
}
cmd_name[i++] = *(p++);
@@ -312,8 +312,8 @@ pk_cmd_exec_1 (const char *str, struct pk_trie *cmds_trie,
char *prefix)
if (cmd == NULL)
{
if (prefix != NULL)
- pk_printf ("%s ", prefix);
- pk_printf (_("%s: command not found.\n"), cmd_name);
+ pk_printf (poke_compiler, "%s ", prefix);
+ pk_printf (poke_compiler, _("%s: command not found.\n"), cmd_name);
return 0;
}
strncpy (cmd_name, cmd->name, MAX_CMD_NAME - 1);
@@ -340,7 +340,8 @@ pk_cmd_exec_1 (const char *str, struct pk_trie *cmds_trie,
char *prefix)
if (cmd->uflags[fi] == '\0')
{
- pk_printf (_("%s: invalid flag `%c'\n"), cmd_name, *p);
+ pk_printf (poke_compiler,
+ _("%s: invalid flag `%c'\n"), cmd_name, *p);
return 0;
}
@@ -519,7 +520,9 @@ pk_cmd_exec_1 (const char *str, struct pk_trie *cmds_trie,
char *prefix)
if (cmd->flags & PK_CMD_F_REQ_IO
&& pk_ios_cur (poke_compiler) == NULL)
{
- pk_puts (_("This command requires an IO space. Use the `file'
command.\n"));
+ pk_puts (
+ poke_compiler,
+ _("This command requires an IO space. Use the `file' command.\n"));
return 0;
}
@@ -529,7 +532,7 @@ pk_cmd_exec_1 (const char *str, struct pk_trie *cmds_trie,
char *prefix)
if (cur_io == NULL
|| !(pk_ios_flags (cur_io) & PK_IOS_F_READ))
{
- pk_puts (_("This command requires a writable IO space."));
+ pk_puts (poke_compiler, _("This command requires a writable IO
space."));
return 0;
}
}
@@ -554,7 +557,7 @@ pk_cmd_exec_1 (const char *str, struct pk_trie *cmds_trie,
char *prefix)
}
if (!besilent && !run_default_handler_p)
- pk_printf (_("Usage: %s\n"), cmd->usage);
+ pk_printf (poke_compiler, _("Usage: %s\n"), cmd->usage);
return ret;
#undef GOTO_USAGE
@@ -664,7 +667,7 @@ pk_cmd_exec (const char *str)
exception, in case a pretty-printer is involved. */
pk_print_val (poke_compiler, val, &exit_exception);
if (exit_exception == PK_NULL)
- pk_puts ("\n");
+ pk_puts (poke_compiler, "\n");
}
}
pk_set_lexical_cuckolding_p (poke_compiler, 0);
diff --git a/poke/pk-hserver.c b/poke/pk-hserver.c
index aa8c3212..dab48aa3 100644
--- a/poke/pk-hserver.c
+++ b/poke/pk-hserver.c
@@ -247,9 +247,9 @@ read_from_client (int filedes)
cmd = pk_hserver_cmd (token);
pthread_mutex_lock (&hserver_mutex);
pk_repl_display_begin ();
- pk_puts (p);
- pk_puts (cmd);
- pk_puts ("\n");
+ pk_puts (poke_compiler, p);
+ pk_puts (poke_compiler, cmd);
+ pk_puts (poke_compiler, "\n");
pk_cmd_exec (cmd);
pk_repl_display_end ();
pthread_mutex_unlock (&hserver_mutex);
@@ -260,9 +260,9 @@ read_from_client (int filedes)
cmd = pk_hserver_cmd (token);
pthread_mutex_lock (&hserver_mutex);
pk_repl_display_begin ();
- pk_puts (p);
- pk_puts (cmd);
- pk_puts ("\n");
+ pk_puts (poke_compiler, p);
+ pk_puts (poke_compiler, cmd);
+ pk_puts (poke_compiler, "\n");
/* Note we just ignore raised exceptions. */
pk_call (poke_compiler, cls, NULL, NULL, 0);
pk_repl_display_end ();
diff --git a/poke/pk-ios.c b/poke/pk-ios.c
index 5f698dd0..bb5f8919 100644
--- a/poke/pk-ios.c
+++ b/poke/pk-ios.c
@@ -80,11 +80,12 @@ pk_open_file (const char *handler, int set_cur_p, int
create_p)
if (regcomp (®exp, pk_string_str (regex),
REG_EXTENDED | REG_NOSUB) != 0)
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
- pk_printf ("invalid regexp `%s' in auto_map. Skipping entry.\n",
+ pk_printf (poke_compiler,
+ "invalid regexp `%s' in auto_map. Skipping entry.\n",
pk_string_str (regex));
}
else
@@ -99,11 +100,11 @@ pk_open_file (const char *handler, int set_cur_p, int
create_p)
if (!map_handler)
{
- pk_term_class ("error");
- pk_puts ("warning: ");
- pk_term_end_class ("error");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "warning: ");
+ pk_term_end_class (poke_compiler, "error");
- pk_printf ("auto-map: unknown map `%s'",
+ pk_printf (poke_compiler, "auto-map: unknown map `%s'",
pk_string_str (mapname));
regfree (®exp);
break;
@@ -111,11 +112,11 @@ pk_open_file (const char *handler, int set_cur_p, int
create_p)
if (!pk_map_load_file (ios_id, map_handler, NULL))
{
- pk_term_class ("error");
- pk_puts ("error: ");
- pk_term_end_class ("error");
+ pk_term_class (poke_compiler, "error");
+ pk_puts (poke_compiler, "error: ");
+ pk_term_end_class (poke_compiler, "error");
- pk_printf ("auto-map: loading `%s'\n",
+ pk_printf (poke_compiler, "auto-map: loading `%s'\n",
pk_string_str (mapname));
regfree (®exp);
break;
@@ -123,7 +124,7 @@ pk_open_file (const char *handler, int set_cur_p, int
create_p)
if (poke_interactive_p && !poke_quiet_p
&& ! pk_var_int ("pk_prompt_maps_p"))
- pk_printf ("auto-map: map `%s' loaded\n",
+ pk_printf (poke_compiler, "auto-map: map `%s' loaded\n",
pk_string_str (mapname));
}
diff --git a/poke/pk-map-tab.y b/poke/pk-map-tab.y
index 3b9ac6ae..e58603f1 100644
--- a/poke/pk-map-tab.y
+++ b/poke/pk-map-tab.y
@@ -196,24 +196,25 @@ static void
pk_map_printf_error (struct pk_map_parser *map_parser,
YYLTYPE loc, const char *format, ...)
{
+ extern pk_compiler poke_compiler;
va_list ap;
if (map_parser->filename)
- pk_printf ("%s:", map_parser->filename);
+ pk_printf (poke_compiler, "%s:", map_parser->filename);
if (loc.first_line != 0
|| loc.first_column != 0
|| loc.last_line != 0
|| loc.last_column != 0)
{
- pk_term_class ("error-location");
- pk_printf ("%d:%d: ", loc.first_line, loc.first_column);
- pk_term_end_class ("error-location");
+ pk_term_class (poke_compiler, "error-location");
+ pk_printf (poke_compiler, "%d:%d: ", loc.first_line, loc.first_column);
+ pk_term_end_class (poke_compiler, "error-location");
}
va_start (ap, format);
- pk_vprintf (format, ap);
+ pk_vprintf (poke_compiler, format, ap);
va_end (ap);
}
diff --git a/poke/pk-map.c b/poke/pk-map.c
index 7f1fb6fc..a49fa8a8 100644
--- a/poke/pk-map.c
+++ b/poke/pk-map.c
@@ -519,7 +519,7 @@ pk_map_load_parsed_map (int ios_id, const char *mapname,
&& pk_val_kind (val) != PK_VAL_UINT)
{
/* XXX error location. */
- pk_printf ("error: invalid condition expression\n");
+ pk_printf (poke_compiler, "error: invalid condition
expression\n");
goto error;
}
diff --git a/poke/pk-repl.c b/poke/pk-repl.c
index d8ce4cd1..333c935a 100644
--- a/poke/pk-repl.c
+++ b/poke/pk-repl.c
@@ -177,14 +177,14 @@ banner (void)
if (!poke_quiet_p)
{
pk_print_version (1 /* hand_p */);
- pk_puts ("\n");
+ pk_puts (poke_compiler, "\n");
#if HAVE_HSERVER
if (poke_hserver_p)
{
- pk_printf ("hserver listening in port %d.\n",
+ pk_printf (poke_compiler, "hserver listening in port %d.\n",
pk_hserver_port ());
- pk_puts ("\n");
+ pk_puts (poke_compiler, "\n");
}
#endif
@@ -194,22 +194,22 @@ banner (void)
char *help_hyperlink
= pk_hserver_make_hyperlink ('e', ".help", PK_NULL);
- pk_puts (_("For help, type: "));
- pk_puts ("\"");
- pk_term_class ("hyperlink");
- pk_term_hyperlink (help_hyperlink, NULL);
- pk_term_end_class ("hyperlink");
- pk_term_class ("hyperlink");
- pk_puts (".help");
- pk_term_end_class ("hyperlink");
- pk_term_end_hyperlink ();
- pk_puts ("\".\n");
+ pk_puts (poke_compiler, _("For help, type: "));
+ pk_puts (poke_compiler, "\"");
+ pk_term_class (poke_compiler, "hyperlink");
+ pk_term_hyperlink (poke_compiler, help_hyperlink, NULL);
+ pk_term_end_class (poke_compiler, "hyperlink");
+ pk_term_class (poke_compiler, "hyperlink");
+ pk_puts (poke_compiler, ".help");
+ pk_term_end_class (poke_compiler, "hyperlink");
+ pk_term_end_hyperlink (poke_compiler);
+ pk_puts (poke_compiler, "\".\n");
free (help_hyperlink);
}
else
#endif
- pk_puts (_("For help, type \".help\".\n"));
- pk_puts (_("Type \".exit\" to leave the program.\n"));
+ pk_puts (poke_compiler, _("For help, type \".help\".\n"));
+ pk_puts (poke_compiler, _("Type \".exit\" to leave the program.\n"));
}
}
@@ -386,17 +386,17 @@ pk_repl (void)
that we still have to pass it to the readline call below, so
it can update the screen appropiately. */
prompt = pk_prompt ();
- pk_term_class ("prompt");
- pk_puts (prompt);
- pk_term_end_class ("prompt");
- pk_term_flush ();
+ pk_term_class (poke_compiler, "prompt");
+ pk_puts (poke_compiler, prompt);
+ pk_term_end_class (poke_compiler, "prompt");
+ pk_term_flush (poke_compiler);
rl_already_prompted = 1;
line = readline (prompt);
free (prompt);
if (line == NULL)
{
/* EOF in stdin (probably Ctrl-D). */
- pk_puts ("\n");
+ pk_puts (poke_compiler, "\n");
break;
}
@@ -446,13 +446,13 @@ pk_repl_display_begin (void)
rl_save_prompt ();
rl_clear_message ();
- pk_puts (rl_prompt);
+ pk_puts (poke_compiler, rl_prompt);
}
void
pk_repl_display_end (void)
{
- pk_term_flush ();
+ pk_term_flush (poke_compiler);
rl_restore_prompt ();
rl_point = saved_point;
rl_end = saved_end;
diff --git a/poke/pk-table.c b/poke/pk-table.c
index c8315fed..653f42c8 100644
--- a/poke/pk-table.c
+++ b/poke/pk-table.c
@@ -212,7 +212,7 @@ pk_table_print (pk_table table)
for (i = 0; i < table->num_rows; ++i)
{
if (table->rows[i].style)
- pk_term_class (table->rows[i].style);
+ pk_term_class (poke_compiler, table->rows[i].style);
for (j = 0; j < table->rows[i].num_entries; ++j)
{
@@ -230,34 +230,34 @@ pk_table_print (pk_table table)
: 2);
if (class)
- pk_term_class (class);
+ pk_term_class (poke_compiler, class);
if (hyperlink)
{
- pk_term_class ("hyperlink");
- pk_term_hyperlink (hyperlink, NULL);
+ pk_term_class (poke_compiler, "hyperlink");
+ pk_term_hyperlink (poke_compiler, hyperlink, NULL);
}
if (str)
- pk_puts (str);
+ pk_puts (poke_compiler, str);
else
pk_print_val (poke_compiler, val, NULL /* exit_exception */);
if (hyperlink)
{
- pk_term_end_hyperlink ();
- pk_term_end_class ("hyperlink");
+ pk_term_end_hyperlink (poke_compiler);
+ pk_term_end_class (poke_compiler, "hyperlink");
}
if (class)
- pk_term_end_class (class);
+ pk_term_end_class (poke_compiler, class);
if (j < table->rows[i].num_entries - 1)
for (k = 0; k < fill; ++k)
- pk_puts (" ");
+ pk_puts (poke_compiler, " ");
}
if (table->rows[i].style)
- pk_term_end_class (table->rows[i].style);
+ pk_term_end_class (poke_compiler, table->rows[i].style);
- pk_puts ("\n");
+ pk_puts (poke_compiler, "\n");
}
}
diff --git a/poke/pk-term.c b/poke/pk-term.c
index 71f83a7a..f8adbd80 100644
--- a/poke/pk-term.c
+++ b/poke/pk-term.c
@@ -364,7 +364,7 @@ pk_term_shutdown ()
}
void
-pk_term_flush ()
+pk_term_flush (pk_compiler pkc __attribute__ ((unused)))
{
ostream_flush (pk_ostream, FLUSH_THIS_STREAM);
}
@@ -470,7 +470,7 @@ pk_puts_paged (const char *lines)
}
void
-pk_puts (const char *str)
+pk_puts (pk_compiler pkc __attribute__ ((unused)), const char *str)
{
if (pager_active_p)
pk_puts_paged (str);
@@ -478,9 +478,9 @@ pk_puts (const char *str)
ostream_write_str (pk_ostream, str);
}
-__attribute__ ((__format__ (__printf__, 1, 2)))
+__attribute__ ((__format__ (__printf__, 2, 3)))
void
-pk_printf (const char *format, ...)
+pk_printf (pk_compiler pkc, const char *format, ...)
{
va_list ap;
char *str;
@@ -491,12 +491,12 @@ pk_printf (const char *format, ...)
assert (r != -1);
va_end (ap);
- pk_puts (str);
+ pk_puts (pkc, str);
free (str);
}
void
-pk_vprintf (const char *format, va_list ap)
+pk_vprintf (pk_compiler pkc, const char *format, va_list ap)
{
char *str;
int r;
@@ -504,27 +504,26 @@ pk_vprintf (const char *format, va_list ap)
r = vasprintf (&str, format, ap);
assert (r != -1);
- pk_puts (str);
+ pk_puts (pkc, str);
free (str);
}
void
-pk_term_indent (unsigned int lvl,
- unsigned int step)
+pk_term_indent (pk_compiler pkc, unsigned int lvl, unsigned int step)
{
- pk_printf ("\n%*s", (step * lvl), "");
+ pk_printf (pkc, "\n%*s", (step * lvl), "");
}
void
-pk_term_class (const char *class)
+pk_term_class (pk_compiler pkc __attribute__ ((unused)), const char *class)
{
styled_ostream_begin_use_class (pk_ostream, class);
push_active_class (class);
}
int
-pk_term_end_class (const char *class)
+pk_term_end_class (pk_compiler pkc __attribute__ ((unused)), const char *class)
{
if (!pop_active_class (class))
return 0;
@@ -537,7 +536,8 @@ pk_term_end_class (const char *class)
static int hlcount = 0;
void
-pk_term_hyperlink (const char *url, const char *id)
+pk_term_hyperlink (pk_compiler pkc __attribute__ ((unused)),
+ const char *url, const char *id)
{
#ifdef HAVE_TEXTSTYLE_HYPERLINK_SUPPORT
styled_ostream_set_hyperlink (pk_ostream, url, id);
@@ -546,7 +546,7 @@ pk_term_hyperlink (const char *url, const char *id)
}
int
-pk_term_end_hyperlink (void)
+pk_term_end_hyperlink (pk_compiler pkc __attribute__ ((unused)))
{
#ifdef HAVE_TEXTSTYLE_HYPERLINK_SUPPORT
if (hlcount == 0)
@@ -568,7 +568,7 @@ pk_term_color_p (void)
}
struct pk_color
-pk_term_get_color (void)
+pk_term_get_color (pk_compiler pkc __attribute__ ((unused)))
{
#if defined HAVE_TEXTSTYLE_ACCESSORS_SUPPORT
if (color_mode != color_html
@@ -591,7 +591,7 @@ pk_term_get_color (void)
}
struct pk_color
-pk_term_get_bgcolor ()
+pk_term_get_bgcolor (pk_compiler pkc __attribute__ ((unused)))
{
#if defined HAVE_TEXTSTYLE_ACCESSORS_SUPPORT
if (color_mode != color_html
@@ -614,7 +614,8 @@ pk_term_get_bgcolor ()
}
void
-pk_term_set_color (struct pk_color color)
+pk_term_set_color (pk_compiler pkc __attribute__ ((unused)),
+ struct pk_color color)
{
#if defined HAVE_TEXTSTYLE_ACCESSORS_SUPPORT
if (color_mode != color_html)
@@ -642,7 +643,8 @@ pk_term_set_color (struct pk_color color)
}
void
-pk_term_set_bgcolor (struct pk_color color)
+pk_term_set_bgcolor (pk_compiler pkc __attribute__ ((unused)),
+ struct pk_color color)
{
#if defined HAVE_TEXTSTYLE_ACCESSORS_SUPPORT
if (color_mode != color_html)
diff --git a/poke/pk-term.h b/poke/pk-term.h
index 8516dc30..d176f87a 100644
--- a/poke/pk-term.h
+++ b/poke/pk-term.h
@@ -23,6 +23,9 @@
#include <textstyle.h>
+/* From libpoke.h. */
+typedef struct _pk_compiler *pk_compiler;
+
/* Initialize and finalize the terminal subsystem. */
void pk_term_init (int argc, char *argv[]);
void pk_term_shutdown (void);
@@ -32,33 +35,33 @@ void pk_term_shutdown (void);
extern int pk_term_color_p (void);
/* Flush the terminal output. */
-extern void pk_term_flush (void);
+extern void pk_term_flush (pk_compiler pkc);
/* Print a string to the terminal. */
-extern void pk_puts (const char *str);
+extern void pk_puts (pk_compiler pkc, const char *str);
/* Print a formatted string to the terminal. */
-extern void pk_printf (const char *format, ...)
- __attribute__ ((format (printf, 1, 2)));
-extern void pk_vprintf (const char *format, va_list ap);
+extern void pk_printf (pk_compiler pkc, const char *format, ...)
+ __attribute__ ((format (printf, 2, 3)));
+extern void pk_vprintf (pk_compiler pkc, const char *format, va_list ap);
/* Print indentation. */
-extern void pk_term_indent (unsigned int lvl,
+extern void pk_term_indent (pk_compiler pkc, unsigned int lvl,
unsigned int step);
/* Class handling. */
-extern void pk_term_class (const char *class);
-extern int pk_term_end_class (const char *class);
+extern void pk_term_class (pk_compiler pkc, const char *class);
+extern int pk_term_end_class (pk_compiler pkc, const char *class);
/* Hyperlinks. */
-extern void pk_term_hyperlink (const char *url, const char *id);
-extern int pk_term_end_hyperlink (void);
+extern void pk_term_hyperlink (pk_compiler pkc, const char *url, const char
*id);
+extern int pk_term_end_hyperlink (pk_compiler pkc);
/* Color handling. */
-extern struct pk_color pk_term_get_color (void);
-extern struct pk_color pk_term_get_bgcolor (void);
-extern void pk_term_set_color (struct pk_color color);
-extern void pk_term_set_bgcolor (struct pk_color color);
+extern struct pk_color pk_term_get_color (pk_compiler pkc);
+extern struct pk_color pk_term_get_bgcolor (pk_compiler pkc);
+extern void pk_term_set_color (pk_compiler pkc, struct pk_color color);
+extern void pk_term_set_bgcolor (pk_compiler pkc, struct pk_color color);
/* Paging. */
extern void pk_term_start_pager (void);
diff --git a/poked/poked.c b/poked/poked.c
index 7e087c6a..0d377b1c 100644
--- a/poked/poked.c
+++ b/poked/poked.c
@@ -701,18 +701,18 @@ tifbuf_init(void)
#endif
static void
-tif_flush (void)
+tif_flush (pk_compiler pkc __attribute__ ((unused)))
{
}
static void
-tif_puts (const char *s)
+tif_puts (pk_compiler pkc __attribute__ ((unused)), const char *s)
{
if (poked_options.debug_p)
printf (">(p) '%s'\n", s);
usock_out (srv, termout_chan, termout_cmdkind, s, strlen (s) + 1);
}
static void
-tif_printf (const char *fmt, ...)
+tif_printf (pk_compiler pkc __attribute__ ((unused)), const char *fmt, ...)
{
va_list ap;
char *data = NULL;
@@ -730,7 +730,8 @@ tif_printf (const char *fmt, ...)
free (data);
}
static void
-tif_indent (unsigned int level, unsigned int step)
+tif_indent (pk_compiler pkc __attribute__ ((unused)), unsigned int level,
+ unsigned int step)
{
size_t len = /*newline*/ 1u + step * level;
char *data;
@@ -743,31 +744,32 @@ tif_indent (unsigned int level, unsigned int step)
free (data);
}
static void
-tif_class (const char *name)
+tif_class (pk_compiler pkc __attribute__ ((unused)), const char *name)
{
if (termout_chan == USOCK_CHAN_OUT_OUT)
usock_out (srv, termout_chan, OUTCMD_CLS_BEGIN, name, strlen (name) + 1);
}
static int
-tif_class_end (const char *name)
+tif_class_end (pk_compiler pkc __attribute__ ((unused)), const char *name)
{
if (termout_chan == USOCK_CHAN_OUT_OUT)
usock_out (srv, termout_chan, OUTCMD_CLS_END, name, strlen (name) + 1);
return 1;
}
static void
-tif_hlink (const char *name, const char *id)
+tif_hlink (pk_compiler pkc __attribute__ ((unused)), const char *name,
+ const char *id)
{
(void)name;
(void)id;
}
static int
-tif_hlink_end (void)
+tif_hlink_end (pk_compiler pkc __attribute__ ((unused)))
{
return 1;
}
static struct pk_color
-tif_color (void)
+tif_color (pk_compiler pkc __attribute__ ((unused)))
{
static struct pk_color c = {
.red = 0,
@@ -777,7 +779,7 @@ tif_color (void)
return c;
}
static struct pk_color
-tif_bgcolor (void)
+tif_bgcolor (pk_compiler pkc __attribute__ ((unused)))
{
static struct pk_color c = {
.red = 255,
@@ -787,12 +789,12 @@ tif_bgcolor (void)
return c;
}
static void
-tif_color_set (struct pk_color c)
+tif_color_set (pk_compiler pkc __attribute__ ((unused)), struct pk_color c)
{
(void)c;
}
static void
-tif_bgcolor_set (struct pk_color c)
+tif_bgcolor_set (pk_compiler pkc __attribute__ ((unused)), struct pk_color c)
{
(void)c;
}
diff --git a/pokefmt/pokefmt.l b/pokefmt/pokefmt.l
index fe57fbf7..74505134 100644
--- a/pokefmt/pokefmt.l
+++ b/pokefmt/pokefmt.l
@@ -362,17 +362,17 @@ pokefmt_opts_free ()
// terminal IO functions
static void
-tif_flush (void)
+tif_flush (pk_compiler pkc __attribute__ ((unused)))
{
fflush (stdout);
}
static void
-tif_puts (const char *s)
+tif_puts (pk_compiler pkc __attribute__ ((unused)), const char *s)
{
printf ("%s", s);
}
static void
-tif_printf (const char *fmt, ...)
+tif_printf (pk_compiler pkc __attribute__ ((unused)), const char *fmt, ...)
{
va_list ap;
@@ -381,36 +381,38 @@ tif_printf (const char *fmt, ...)
va_end (ap);
}
static void
-tif_indent (unsigned int level, unsigned int step)
+tif_indent (pk_compiler pkc __attribute__ ((unused)), unsigned int level,
+ unsigned int step)
{
putchar ('\n');
for (unsigned int i = 0; i < step * level; ++i)
putchar (' ');
}
static void
-tif_class (const char *name)
+tif_class (pk_compiler pkc __attribute__ ((unused)), const char *name)
{
(void)name;
}
static int
-tif_class_end (const char *name)
+tif_class_end (pk_compiler pkc __attribute__ ((unused)), const char *name)
{
(void)name;
return 1;
}
static void
-tif_hlink (const char *name, const char *id)
+tif_hlink (pk_compiler pkc __attribute__ ((unused)), const char *name,
+ const char *id)
{
(void)name;
(void)id;
}
static int
-tif_hlink_end (void)
+tif_hlink_end (pk_compiler pkc __attribute__ ((unused)))
{
return 1;
}
static struct pk_color
-tif_color (void)
+tif_color (pk_compiler pkc __attribute__ ((unused)))
{
static struct pk_color c = {
.red = 0,
@@ -420,7 +422,7 @@ tif_color (void)
return c;
}
static struct pk_color
-tif_bgcolor (void)
+tif_bgcolor (pk_compiler pkc __attribute__ ((unused)))
{
static struct pk_color c = {
.red = 255,
@@ -430,12 +432,12 @@ tif_bgcolor (void)
return c;
}
static void
-tif_color_set (struct pk_color c)
+tif_color_set (pk_compiler pkc __attribute__ ((unused)), struct pk_color c)
{
(void)c;
}
static void
-tif_bgcolor_set (struct pk_color c)
+tif_bgcolor_set (pk_compiler pkc __attribute__ ((unused)), struct pk_color c)
{
(void)c;
}
diff --git a/testsuite/poke.libpoke/term-if.h b/testsuite/poke.libpoke/term-if.h
index dfcece14..0f9d20e6 100644
--- a/testsuite/poke.libpoke/term-if.h
+++ b/testsuite/poke.libpoke/term-if.h
@@ -20,19 +20,18 @@
#include <stdio.h>
static void
-pk_term_flush ()
+pk_term_flush (pk_compiler pkc __attribute__ ((unused)))
{
}
void
-pk_puts (const char *str)
+pk_puts (pk_compiler pkc __attribute__ ((unused)), const char *str)
{
printf ("%s", str);
}
-__attribute__ ((__format__ (__printf__, 1, 2)))
-void
-pk_printf (const char *format, ...)
+__attribute__ ((__format__ (__printf__, 2, 3))) void
+pk_printf (pk_compiler pkc __attribute__ ((unused)), const char *format, ...)
{
va_list ap;
@@ -42,58 +41,59 @@ pk_printf (const char *format, ...)
}
void
-pk_term_indent (unsigned int lvl,
+pk_term_indent (pk_compiler pkc __attribute__ ((unused)), unsigned int lvl,
unsigned int step)
{
printf ("\n%*s", (step * lvl), "");
}
void
-pk_term_class (const char *class)
+pk_term_class (pk_compiler pkc __attribute__ ((unused)), const char *class)
{
}
int
-pk_term_end_class (const char *class)
+pk_term_end_class (pk_compiler pkc __attribute__ ((unused)), const char *class)
{
return 1;
}
void
-pk_term_hyperlink (const char *url, const char *id)
+pk_term_hyperlink (pk_compiler pkc __attribute__ ((unused)), const char *url,
+ const char *id)
{
}
int
-pk_term_end_hyperlink (void)
+pk_term_end_hyperlink (pk_compiler pkc __attribute__ ((unused)))
{
return 1;
}
struct pk_color
-pk_term_get_color (void)
+pk_term_get_color (pk_compiler pkc __attribute__ ((unused)))
{
- struct pk_color inv = {-1,-1,-1};
+ struct pk_color inv = { -1, -1, -1 };
return inv;
}
struct pk_color
-pk_term_get_bgcolor (void)
+pk_term_get_bgcolor (pk_compiler pkc __attribute__ ((unused)))
{
- struct pk_color inv = {-1,-1,-1};
+ struct pk_color inv = { -1, -1, -1 };
return inv;
}
void
-pk_term_set_color (struct pk_color color)
+pk_term_set_color (pk_compiler pkc __attribute__ ((unused)),
+ struct pk_color color)
{
-
}
void
-pk_term_set_bgcolor (struct pk_color color)
+pk_term_set_bgcolor (pk_compiler pkc __attribute__ ((unused)),
+ struct pk_color color)
{
-
}
static struct pk_term_if poke_term_if =
--
2.42.0
- [PATCH] libpoke, poke, poked, pokefmt: add `pk_compiler' to terminal interface,
Mohammad-Reza Nabipoor <=
- Re: [PATCH] libpoke,poke,poked,pokefmt: add `pk_compiler' to terminal interface, Jose E. Marchesi, 2023/11/01
- [PATCH 3/3] libpoke, poke, poked, pokefmt: add `pk_compiler' to terminal interface, Mohammad-Reza Nabipoor, 2023/11/13
- Re: [PATCH 3/3] libpoke,poke,poked,pokefmt: add `pk_compiler' to terminal interface, Jose E. Marchesi, 2023/11/14
- Re: [PATCH 1/3] pk-utils: change pk_print_binary func to macro, Jose E. Marchesi, 2023/11/14