diff --git a/example/src/brightness_tester.c b/example/src/brightness_tester.c
index c3e42ba..9476422 100644
--- a/example/src/brightness_tester.c
+++ b/example/src/brightness_tester.c
@@ -1,30 +1,44 @@
#include "servicepoint.h"
-int main(void) {
- UdpSocket *connection = sp_udp_open_ipv4(172, 23, 42, 29, 2342);
- //UdpSocket *connection = sp_udp_open_ipv4(127, 0, 0, 1, 2342);
- if (connection == NULL)
- return -1;
+static UdpSocket *connection = NULL;
+void enable_all_pixels(void) {
Bitmap *all_on = sp_bitmap_new_max_sized();
sp_bitmap_fill(all_on, true);
- Packet *packet = sp_bitmap_into_packet(all_on, 0, 0, COMPRESSION_CODE_UNCOMPRESSED);
- if (packet == NULL)
- return -1;
-
- sp_udp_send_packet(connection, packet);
-
- BrightnessGrid *grid = sp_brightness_grid_new(TILE_WIDTH, TILE_HEIGHT);
+ BitmapCommand *bitmapCommand = sp_cmd_bitmap_from_bitmap(all_on);
+ Packet *packet = sp_cmd_bitmap_into_packet(bitmapCommand);
+ if (packet != NULL)
+ sp_udp_send_packet(connection, packet);
+}
+void make_brightness_pattern(BrightnessGrid *grid) {
ByteSlice slice = sp_brightness_grid_unsafe_data_ref(grid);
for (size_t index = 0; index < slice.length; index++) {
slice.start[index] = (uint8_t) (index % ((size_t) Brightness_MAX));
}
+}
- packet = sp_brightness_grid_into_packet(grid, 0, 0);
- sp_udp_send_packet(connection, packet);
-
+void run_at_exit() {
sp_udp_free(connection);
+}
+
+int main(void) {
+ //UdpSocket *connection = sp_udp_open_ipv4(172, 23, 42, 29, 2342);
+ connection = sp_udp_open_ipv4(127, 0, 0, 1, 2342);
+ if (connection == NULL)
+ return -1;
+ atexit(run_at_exit);
+
+ enable_all_pixels();
+
+ BrightnessGrid *grid = sp_brightness_grid_new(TILE_WIDTH, TILE_HEIGHT);
+ make_brightness_pattern(grid);
+
+ Packet *packet = sp_cmd_brightness_grid_into_packet(sp_cmd_brightness_grid_from_grid(grid));
+ if (packet == NULL)
+ return -2;
+
+ sp_udp_send_packet(connection, packet);
return 0;
}
diff --git a/include/servicepoint.h b/include/servicepoint.h
index 8923756..805d84b 100644
--- a/include/servicepoint.h
+++ b/include/servicepoint.h
@@ -239,6 +239,54 @@ typedef struct Bitmap Bitmap;
*/
typedef struct BitmapCommand BitmapCommand;
+/**
+ * Set the brightness of individual tiles in a rectangular area of the display.
+ */
+typedef struct BrightnessGridCommand BrightnessGridCommand;
+
+/**
+ * Show text on the screen.
+ *
+ * The text is sent in the form of a 2D grid of UTF-8 encoded characters (the default encoding in rust).
+ *
+ * # Examples
+ *
+ * ```rust
+ * # use servicepoint::*;
+ * # let connection = FakeConnection;
+ * let grid = CharGrid::from("Hello,\nWorld!");
+ * connection.send_command(CharGridCommand { origin: Origin::ZERO, grid }).expect("send failed");
+ * ```
+ */
+typedef struct CharGridCommand CharGridCommand;
+
+/**
+ * Show text on the screen.
+ *
+ * The text is sent in the form of a 2D grid of [CP-437] encoded characters.
+ *
+ *
You probably want to use [Command::Utf8Data] instead
+ *
+ * # Examples
+ *
+ * ```rust
+ * # use servicepoint::*;
+ * # let connection = FakeConnection;
+ * let grid = CharGrid::from("Hello,\nWorld!");
+ * let grid = Cp437Grid::from(&grid);
+ * connection.send_command(Cp437GridCommand{ origin: Origin::ZERO, grid }).expect("send failed");
+ * ```
+ *
+ * ```rust
+ * # use servicepoint::*;
+ * # let connection = FakeConnection;
+ * let grid = Cp437Grid::load_ascii("Hello\nWorld", 5, false).unwrap();
+ * connection.send_command(Cp437GridCommand{ origin: Origin::new(2, 2), grid }).unwrap();
+ * ```
+ * [CP-437]: https://en.wikipedia.org/wiki/Code_page_437
+ */
+typedef struct Cp437GridCommand Cp437GridCommand;
+
/**
* This is a type only used by cbindgen to have a type for pointers.
*/
@@ -961,6 +1009,10 @@ void sp_char_grid_set(CharGrid */*notnull*/ char_grid,
*/
size_t sp_char_grid_width(CharGrid */*notnull*/ char_grid);
+BitmapCommand */*notnull*/ sp_cmd_bitmap_clone(BitmapCommand */*notnull*/ command);
+
+void sp_cmd_bitmap_free(BitmapCommand */*notnull*/ command);
+
BitmapCommand */*notnull*/ sp_cmd_bitmap_from_bitmap(Bitmap */*notnull*/ bitmap);
/**
@@ -1008,6 +1060,10 @@ void sp_cmd_bitmap_set_origin(BitmapCommand */*notnull*/ command,
size_t origin_x,
size_t origin_y);
+BitVecCommand */*notnull*/ sp_cmd_bitvec_clone(BitVecCommand */*notnull*/ command);
+
+void sp_cmd_bitvec_free(BitVecCommand */*notnull*/ command);
+
DisplayBitVec *sp_cmd_bitvec_get(BitVecCommand */*notnull*/ command);
CompressionCode sp_cmd_bitvec_get_compression(BitVecCommand */*notnull*/ command);
@@ -1054,6 +1110,96 @@ void sp_cmd_bitvec_set_offset(BitVecCommand */*notnull*/ command,
void sp_cmd_bitvec_set_operation(BitVecCommand */*notnull*/ command,
BinaryOperation operation);
+BrightnessGridCommand */*notnull*/ sp_cmd_brightness_grid_clone(BrightnessGridCommand */*notnull*/ command);
+
+void sp_cmd_brightness_grid_free(BitmapCommand */*notnull*/ command);
+
+BrightnessGridCommand */*notnull*/ sp_cmd_brightness_grid_from_grid(BrightnessGrid */*notnull*/ grid);
+
+BrightnessGrid *sp_cmd_brightness_grid_get(BrightnessGridCommand */*notnull*/ command);
+
+void sp_cmd_brightness_grid_get_origin(BrightnessGridCommand */*notnull*/ command,
+ size_t */*notnull*/ origin_x,
+ size_t */*notnull*/ origin_y);
+
+Packet *sp_cmd_brightness_grid_into_packet(BrightnessGridCommand */*notnull*/ command);
+
+TypedCommand */*notnull*/ sp_cmd_brightness_grid_into_typed(BrightnessGridCommand */*notnull*/ command);
+
+BrightnessGridCommand */*notnull*/ sp_cmd_brightness_grid_new(BrightnessGrid */*notnull*/ grid,
+ size_t origin_x,
+ size_t origin_y);
+
+/**
+ * Moves the provided bitmap to be contained in the command.
+ */
+void sp_cmd_brightness_grid_set(BrightnessGridCommand */*notnull*/ command,
+ BrightnessGrid */*notnull*/ grid);
+
+void sp_cmd_brightness_grid_set_origin(BrightnessGridCommand */*notnull*/ command,
+ size_t origin_x,
+ size_t origin_y);
+
+CharGridCommand */*notnull*/ sp_cmd_char_grid_clone(CharGridCommand */*notnull*/ command);
+
+void sp_cmd_char_grid_free(BitmapCommand */*notnull*/ command);
+
+CharGridCommand */*notnull*/ sp_cmd_char_grid_from_grid(CharGrid */*notnull*/ grid);
+
+CharGrid *sp_cmd_char_grid_get(CharGridCommand */*notnull*/ command);
+
+void sp_cmd_char_grid_get_origin(CharGridCommand */*notnull*/ command,
+ size_t */*notnull*/ origin_x,
+ size_t */*notnull*/ origin_y);
+
+Packet *sp_cmd_char_grid_into_packet(CharGridCommand */*notnull*/ command);
+
+TypedCommand */*notnull*/ sp_cmd_char_grid_into_typed(CharGridCommand */*notnull*/ command);
+
+CharGridCommand */*notnull*/ sp_cmd_char_grid_new(CharGrid */*notnull*/ grid,
+ size_t origin_x,
+ size_t origin_y);
+
+/**
+ * Moves the provided bitmap to be contained in the command.
+ */
+void sp_cmd_char_grid_set(CharGridCommand */*notnull*/ command,
+ CharGrid */*notnull*/ grid);
+
+void sp_cmd_char_grid_set_origin(CharGridCommand */*notnull*/ command,
+ size_t origin_x,
+ size_t origin_y);
+
+Cp437GridCommand */*notnull*/ sp_cmd_cp437_grid_clone(Cp437GridCommand */*notnull*/ command);
+
+void sp_cmd_cp437_grid_free(BitmapCommand */*notnull*/ command);
+
+Cp437GridCommand */*notnull*/ sp_cmd_cp437_grid_from_grid(Cp437Grid */*notnull*/ grid);
+
+Cp437Grid *sp_cmd_cp437_grid_get(Cp437GridCommand */*notnull*/ command);
+
+void sp_cmd_cp437_grid_get_origin(Cp437GridCommand */*notnull*/ command,
+ size_t */*notnull*/ origin_x,
+ size_t */*notnull*/ origin_y);
+
+Packet *sp_cmd_cp437_grid_into_packet(Cp437GridCommand */*notnull*/ command);
+
+TypedCommand */*notnull*/ sp_cmd_cp437_grid_into_typed(Cp437GridCommand */*notnull*/ command);
+
+Cp437GridCommand */*notnull*/ sp_cmd_cp437_grid_new(Cp437Grid */*notnull*/ grid,
+ size_t origin_x,
+ size_t origin_y);
+
+/**
+ * Moves the provided bitmap to be contained in the command.
+ */
+void sp_cmd_cp437_grid_set(Cp437GridCommand */*notnull*/ command,
+ Cp437Grid */*notnull*/ grid);
+
+void sp_cmd_cp437_grid_set_origin(Cp437GridCommand */*notnull*/ command,
+ size_t origin_x,
+ size_t origin_y);
+
/**
* Set the brightness of individual tiles in a rectangular area of the display.
*
diff --git a/src/commands/bitmap_command.rs b/src/commands/bitmap_command.rs
index b1ab343..4413a3c 100644
--- a/src/commands/bitmap_command.rs
+++ b/src/commands/bitmap_command.rs
@@ -1,4 +1,4 @@
-use crate::{heap_move_nonnull, heap_move_ok, heap_remove};
+use crate::{heap_drop, heap_move_nonnull, heap_move_ok, heap_remove};
use servicepoint::{
Bitmap, BitmapCommand, CompressionCode, Origin, Packet, TypedCommand,
};
@@ -44,6 +44,18 @@ pub unsafe extern "C" fn sp_cmd_bitmap_into_packet(
heap_move_ok(unsafe { heap_remove(command) }.try_into())
}
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_bitmap_clone(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { command.as_ref().clone() })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_bitmap_free(command: NonNull) {
+ unsafe { heap_drop(command) }
+}
+
/// Returns a pointer to the provided `BitmapCommand`.
///
/// # Safety
diff --git a/src/commands/bitvec_command.rs b/src/commands/bitvec_command.rs
index 39d5253..5795017 100644
--- a/src/commands/bitvec_command.rs
+++ b/src/commands/bitvec_command.rs
@@ -1,4 +1,4 @@
-use crate::{heap_move_nonnull, heap_move_ok, heap_remove};
+use crate::{heap_drop, heap_move_nonnull, heap_move_ok, heap_remove};
use servicepoint::{
BinaryOperation, BitVecCommand, CompressionCode, DisplayBitVec, Offset,
Packet, TypedCommand,
@@ -46,6 +46,18 @@ pub unsafe extern "C" fn sp_cmd_bitvec_into_packet(
heap_move_ok(unsafe { heap_remove(command) }.try_into())
}
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_bitvec_clone(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { command.as_ref().clone() })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_bitvec_free(command: NonNull) {
+ unsafe { heap_drop(command) }
+}
+
#[no_mangle]
pub unsafe extern "C" fn sp_cmd_bitvec_get(
mut command: NonNull,
@@ -63,6 +75,7 @@ pub unsafe extern "C" fn sp_cmd_bitvec_set(
command.as_mut().bitvec = heap_remove(bitvec);
}
}
+
#[no_mangle]
pub unsafe extern "C" fn sp_cmd_bitvec_get_offset(
command: NonNull,
diff --git a/src/commands/brightness_grid_command.rs b/src/commands/brightness_grid_command.rs
new file mode 100644
index 0000000..18a2836
--- /dev/null
+++ b/src/commands/brightness_grid_command.rs
@@ -0,0 +1,95 @@
+use crate::{heap_drop, heap_move_nonnull, heap_move_ok, heap_remove};
+use servicepoint::{
+ BitmapCommand, BrightnessGrid, BrightnessGridCommand, Origin, Packet,
+ TypedCommand,
+};
+use std::ptr::NonNull;
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_new(
+ grid: NonNull,
+ origin_x: usize,
+ origin_y: usize,
+) -> NonNull {
+ heap_move_nonnull(BrightnessGridCommand {
+ grid: unsafe { heap_remove(grid) },
+ origin: Origin::new(origin_x, origin_y),
+ })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_from_grid(
+ grid: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { heap_remove(grid) }.into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_into_typed(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { heap_remove(command) }.into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_into_packet(
+ command: NonNull,
+) -> *mut Packet {
+ heap_move_ok(unsafe { heap_remove(command) }.try_into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_clone(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { command.as_ref().clone() })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_free(
+ command: NonNull,
+) {
+ unsafe { heap_drop(command) }
+}
+
+/// Moves the provided bitmap to be contained in the command.
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_set(
+ mut command: NonNull,
+ grid: NonNull,
+) {
+ unsafe {
+ command.as_mut().grid = heap_remove(grid);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_get(
+ mut command: NonNull,
+) -> *mut BrightnessGrid {
+ &mut unsafe { command.as_mut() }.grid
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_get_origin(
+ command: NonNull,
+ origin_x: NonNull,
+ origin_y: NonNull,
+) {
+ unsafe {
+ let origin = &command.as_ref().origin;
+ *origin_x.as_ptr() = origin.x;
+ *origin_y.as_ptr() = origin.y;
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_brightness_grid_set_origin(
+ mut command: NonNull,
+ origin_x: usize,
+ origin_y: usize,
+) {
+ unsafe {
+ command.as_mut().origin = Origin::new(origin_x, origin_y);
+ }
+}
diff --git a/src/commands/char_grid_command.rs b/src/commands/char_grid_command.rs
new file mode 100644
index 0000000..933e4cd
--- /dev/null
+++ b/src/commands/char_grid_command.rs
@@ -0,0 +1,94 @@
+use crate::{heap_drop, heap_move_nonnull, heap_move_ok, heap_remove};
+use servicepoint::{
+ BitmapCommand, CharGrid, CharGridCommand, Origin, Packet, TypedCommand,
+};
+use std::ptr::NonNull;
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_new(
+ grid: NonNull,
+ origin_x: usize,
+ origin_y: usize,
+) -> NonNull {
+ heap_move_nonnull(CharGridCommand {
+ grid: unsafe { heap_remove(grid) },
+ origin: Origin::new(origin_x, origin_y),
+ })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_from_grid(
+ grid: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { heap_remove(grid) }.into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_into_typed(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { heap_remove(command) }.into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_into_packet(
+ command: NonNull,
+) -> *mut Packet {
+ heap_move_ok(unsafe { heap_remove(command) }.try_into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_clone(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { command.as_ref().clone() })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_free(
+ command: NonNull,
+) {
+ unsafe { heap_drop(command) }
+}
+
+/// Moves the provided bitmap to be contained in the command.
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_set(
+ mut command: NonNull,
+ grid: NonNull,
+) {
+ unsafe {
+ command.as_mut().grid = heap_remove(grid);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_get(
+ mut command: NonNull,
+) -> *mut CharGrid {
+ &mut unsafe { command.as_mut() }.grid
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_get_origin(
+ command: NonNull,
+ origin_x: NonNull,
+ origin_y: NonNull,
+) {
+ unsafe {
+ let origin = &command.as_ref().origin;
+ *origin_x.as_ptr() = origin.x;
+ *origin_y.as_ptr() = origin.y;
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_char_grid_set_origin(
+ mut command: NonNull,
+ origin_x: usize,
+ origin_y: usize,
+) {
+ unsafe {
+ command.as_mut().origin = Origin::new(origin_x, origin_y);
+ }
+}
diff --git a/src/commands/cp437_grid_command.rs b/src/commands/cp437_grid_command.rs
new file mode 100644
index 0000000..0f3d9e2
--- /dev/null
+++ b/src/commands/cp437_grid_command.rs
@@ -0,0 +1,94 @@
+use crate::{heap_drop, heap_move_nonnull, heap_move_ok, heap_remove};
+use servicepoint::{
+ BitmapCommand, Cp437Grid, Cp437GridCommand, Origin, Packet, TypedCommand,
+};
+use std::ptr::NonNull;
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_new(
+ grid: NonNull,
+ origin_x: usize,
+ origin_y: usize,
+) -> NonNull {
+ heap_move_nonnull(Cp437GridCommand {
+ grid: unsafe { heap_remove(grid) },
+ origin: Origin::new(origin_x, origin_y),
+ })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_from_grid(
+ grid: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { heap_remove(grid) }.into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_into_typed(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { heap_remove(command) }.into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_into_packet(
+ command: NonNull,
+) -> *mut Packet {
+ heap_move_ok(unsafe { heap_remove(command) }.try_into())
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_clone(
+ command: NonNull,
+) -> NonNull {
+ heap_move_nonnull(unsafe { command.as_ref().clone() })
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_free(
+ command: NonNull,
+) {
+ unsafe { heap_drop(command) }
+}
+
+/// Moves the provided bitmap to be contained in the command.
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_set(
+ mut command: NonNull,
+ grid: NonNull,
+) {
+ unsafe {
+ command.as_mut().grid = heap_remove(grid);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_get(
+ mut command: NonNull,
+) -> *mut Cp437Grid {
+ &mut unsafe { command.as_mut() }.grid
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_get_origin(
+ command: NonNull,
+ origin_x: NonNull,
+ origin_y: NonNull,
+) {
+ unsafe {
+ let origin = &command.as_ref().origin;
+ *origin_x.as_ptr() = origin.x;
+ *origin_y.as_ptr() = origin.y;
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn sp_cmd_cp437_grid_set_origin(
+ mut command: NonNull,
+ origin_x: usize,
+ origin_y: usize,
+) {
+ unsafe {
+ command.as_mut().origin = Origin::new(origin_x, origin_y);
+ }
+}
diff --git a/src/commands/mod.rs b/src/commands/mod.rs
index 45489df..90422ff 100644
--- a/src/commands/mod.rs
+++ b/src/commands/mod.rs
@@ -1,2 +1,5 @@
mod bitmap_command;
mod bitvec_command;
+mod brightness_grid_command;
+mod char_grid_command;
+mod cp437_grid_command;
diff --git a/src/typed_command.rs b/src/typed_command.rs
index 451c0b7..26c33f1 100644
--- a/src/typed_command.rs
+++ b/src/typed_command.rs
@@ -1,6 +1,6 @@
use crate::{heap_drop, heap_move_nonnull, heap_move_ok};
use servicepoint::{
- Brightness, BrightnessGrid, CharGrid, Cp437Grid, GlobalBrightnessCommand,
+ Brightness, GlobalBrightnessCommand,
Packet, TypedCommand,
};
use std::ptr::NonNull;
@@ -72,66 +72,6 @@ pub unsafe extern "C" fn sp_command_global_brightness(
heap_move_nonnull(GlobalBrightnessCommand::from(brightness).into())
}
-/// Set the brightness of individual tiles in a rectangular area of the display.
-///
-/// The passed [BrightnessGrid] gets consumed.
-///
-/// Returns: a new [servicepoint::Command::CharBrightness] instance.
-#[no_mangle]
-pub unsafe extern "C" fn sp_command_brightness_grid(
- x: usize,
- y: usize,
- grid: NonNull,
-) -> NonNull {
- let grid = unsafe { *Box::from_raw(grid.as_ptr()) };
- let result = servicepoint::BrightnessGridCommand {
- origin: servicepoint::Origin::new(x, y),
- grid,
- }
- .into();
- heap_move_nonnull(result)
-}
-
-/// Show codepage 437 encoded text on the screen.
-///
-/// The passed [Cp437Grid] gets consumed.
-///
-/// Returns: a new [servicepoint::Cp437GridCommand] instance.
-#[no_mangle]
-pub unsafe extern "C" fn sp_command_cp437_grid(
- x: usize,
- y: usize,
- grid: NonNull,
-) -> NonNull {
- let grid = *unsafe { Box::from_raw(grid.as_ptr()) };
- let result = servicepoint::Cp437GridCommand {
- origin: servicepoint::Origin::new(x, y),
- grid,
- }
- .into();
- heap_move_nonnull(result)
-}
-
-/// Show UTF-8 encoded text on the screen.
-///
-/// The passed [CharGrid] gets consumed.
-///
-/// Returns: a new [servicepoint::CharGridCommand] instance.
-#[no_mangle]
-pub unsafe extern "C" fn sp_command_char_grid(
- x: usize,
- y: usize,
- grid: NonNull,
-) -> NonNull {
- let grid = unsafe { *Box::from_raw(grid.as_ptr()) };
- let result = servicepoint::CharGridCommand {
- origin: servicepoint::Origin::new(x, y),
- grid,
- }
- .into();
- heap_move_nonnull(result)
-}
-
/// Deallocates a [TypedCommand].
///
/// # Examples