summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2014-05-20 14:40:51 -0400
committerRay Strode <rstrode@redhat.com>2014-05-20 15:16:48 -0400
commit85704145ee1a83fccc1be59ca30d690d756acaad (patch)
tree1f91825341be9365d5a4a990292451f7dacb1392
parent5e55bdb33e98cbaee7e81d362828f258e8bf5d20 (diff)
Reindent
I don't like the GNU coding style and I'm not sure why I chose it. This commit changes things over to use 8 space tabs and 'if () {' style braces.
-rw-r--r--src/client/ply-boot-client.c1085
-rw-r--r--src/client/ply-boot-client.h224
-rw-r--r--src/client/plymouth.c1940
-rw-r--r--src/libply-splash-core/ply-boot-splash-plugin.h96
-rw-r--r--src/libply-splash-core/ply-boot-splash.c881
-rw-r--r--src/libply-splash-core/ply-boot-splash.h18
-rw-r--r--src/libply-splash-core/ply-device-manager.c1109
-rw-r--r--src/libply-splash-core/ply-device-manager.h22
-rw-r--r--src/libply-splash-core/ply-keyboard.c693
-rw-r--r--src/libply-splash-core/ply-keyboard.h54
-rw-r--r--src/libply-splash-core/ply-pixel-buffer.c945
-rw-r--r--src/libply-splash-core/ply-pixel-buffer.h10
-rw-r--r--src/libply-splash-core/ply-pixel-display.c119
-rw-r--r--src/libply-splash-core/ply-pixel-display.h22
-rw-r--r--src/libply-splash-core/ply-renderer-plugin.h48
-rw-r--r--src/libply-splash-core/ply-renderer.c391
-rw-r--r--src/libply-splash-core/ply-renderer.h28
-rw-r--r--src/libply-splash-core/ply-seat.c381
-rw-r--r--src/libply-splash-core/ply-seat.h6
-rw-r--r--src/libply-splash-core/ply-terminal.c1174
-rw-r--r--src/libply-splash-core/ply-terminal.h56
-rw-r--r--src/libply-splash-core/ply-text-display.c189
-rw-r--r--src/libply-splash-core/ply-text-display.h34
-rw-r--r--src/libply-splash-core/ply-text-progress-bar.c300
-rw-r--r--src/libply-splash-core/ply-text-progress-bar.h10
-rw-r--r--src/libply-splash-core/ply-text-step-bar.c139
-rw-r--r--src/libply-splash-core/ply-text-step-bar.h4
-rw-r--r--src/libply-splash-graphics/ply-animation.c463
-rw-r--r--src/libply-splash-graphics/ply-animation.h8
-rw-r--r--src/libply-splash-graphics/ply-entry.c306
-rw-r--r--src/libply-splash-graphics/ply-entry.h6
-rw-r--r--src/libply-splash-graphics/ply-image.c275
-rw-r--r--src/libply-splash-graphics/ply-image.h15
-rw-r--r--src/libply-splash-graphics/ply-label-plugin.h58
-rw-r--r--src/libply-splash-graphics/ply-label.c322
-rw-r--r--src/libply-splash-graphics/ply-label.h25
-rw-r--r--src/libply-splash-graphics/ply-progress-animation.c599
-rw-r--r--src/libply-splash-graphics/ply-progress-animation.h12
-rw-r--r--src/libply-splash-graphics/ply-progress-bar.c119
-rw-r--r--src/libply-splash-graphics/ply-throbber.c414
-rw-r--r--src/libply-splash-graphics/ply-throbber.h2
-rw-r--r--src/libply/ply-array.c130
-rw-r--r--src/libply/ply-array.h10
-rw-r--r--src/libply/ply-bitarray.c13
-rw-r--r--src/libply/ply-bitarray.h4
-rw-r--r--src/libply/ply-buffer.c221
-rw-r--r--src/libply/ply-buffer.h11
-rw-r--r--src/libply/ply-command-parser.c1126
-rw-r--r--src/libply/ply-command-parser.h43
-rw-r--r--src/libply/ply-event-loop.c1520
-rw-r--r--src/libply/ply-event-loop.h67
-rw-r--r--src/libply/ply-hashtable.c286
-rw-r--r--src/libply/ply-hashtable.h22
-rw-r--r--src/libply/ply-key-file.c426
-rw-r--r--src/libply/ply-key-file.h8
-rw-r--r--src/libply/ply-list.c349
-rw-r--r--src/libply/ply-list.h11
-rw-r--r--src/libply/ply-logger.c603
-rw-r--r--src/libply/ply-logger.h95
-rw-r--r--src/libply/ply-progress.c437
-rw-r--r--src/libply/ply-progress.h24
-rw-r--r--src/libply/ply-rectangle.c377
-rw-r--r--src/libply/ply-rectangle.h107
-rw-r--r--src/libply/ply-region.c727
-rw-r--r--src/libply/ply-terminal-session.c725
-rw-r--r--src/libply/ply-terminal-session.h44
-rw-r--r--src/libply/ply-trigger.c153
-rw-r--r--src/libply/ply-trigger.h18
-rw-r--r--src/libply/ply-utils.c1146
-rw-r--r--src/libply/ply-utils.h42
-rw-r--r--src/main.c3093
-rw-r--r--src/plugins/controls/label/plugin.c457
-rw-r--r--src/plugins/renderers/drm/plugin.c1535
-rw-r--r--src/plugins/renderers/drm/ply-renderer-driver.h41
-rw-r--r--src/plugins/renderers/drm/ply-renderer-generic-driver.c370
-rw-r--r--src/plugins/renderers/frame-buffer/plugin.c888
-rw-r--r--src/plugins/renderers/x11/plugin.c659
-rw-r--r--src/plugins/splash/details/plugin.c408
-rw-r--r--src/plugins/splash/fade-throbber/plugin.c1258
-rw-r--r--src/plugins/splash/script/plugin.c546
-rw-r--r--src/plugins/splash/script/script-debug.c48
-rw-r--r--src/plugins/splash/script/script-debug.h6
-rw-r--r--src/plugins/splash/script/script-execute.c1052
-rw-r--r--src/plugins/splash/script/script-execute.h8
-rw-r--r--src/plugins/splash/script/script-lib-image.c424
-rw-r--r--src/plugins/splash/script/script-lib-image.h6
-rw-r--r--src/plugins/splash/script/script-lib-math.c129
-rw-r--r--src/plugins/splash/script/script-lib-math.h2
-rw-r--r--src/plugins/splash/script/script-lib-plymouth.c453
-rw-r--r--src/plugins/splash/script/script-lib-plymouth.h34
-rw-r--r--src/plugins/splash/script/script-lib-sprite.c1243
-rw-r--r--src/plugins/splash/script/script-lib-sprite.h50
-rw-r--r--src/plugins/splash/script/script-lib-string.c128
-rw-r--r--src/plugins/splash/script/script-lib-string.h2
-rw-r--r--src/plugins/splash/script/script-object.c671
-rw-r--r--src/plugins/splash/script/script-object.h40
-rw-r--r--src/plugins/splash/script/script-parse.c1582
-rw-r--r--src/plugins/splash/script/script-scan.c609
-rw-r--r--src/plugins/splash/script/script-scan.h88
-rw-r--r--src/plugins/splash/script/script.c136
-rw-r--r--src/plugins/splash/script/script.h299
-rw-r--r--src/plugins/splash/space-flares/plugin.c2526
-rw-r--r--src/plugins/splash/text/plugin.c714
-rw-r--r--src/plugins/splash/throbgress/plugin.c1050
-rw-r--r--src/plugins/splash/tribar/plugin.c714
-rw-r--r--src/plugins/splash/two-step/plugin.c1877
-rw-r--r--src/ply-boot-server.c1201
-rw-r--r--src/ply-boot-server.h152
-rw-r--r--src/upstart-bridge/ply-upstart-monitor.c1634
-rw-r--r--src/upstart-bridge/ply-upstart-monitor.h52
-rw-r--r--src/upstart-bridge/plymouth-upstart-bridge.c304
-rw-r--r--src/viewer/plymouth-log-viewer.c491
112 files changed, 23464 insertions, 24863 deletions
diff --git a/src/client/ply-boot-client.c b/src/client/ply-boot-client.c
index 3480676a..9cd129bb 100644
--- a/src/client/ply-boot-client.c
+++ b/src/client/ply-boot-client.c
@@ -38,27 +38,27 @@
struct _ply_boot_client
{
- ply_event_loop_t *loop;
- ply_fd_watch_t *daemon_can_take_request_watch;
- ply_fd_watch_t *daemon_has_reply_watch;
- ply_list_t *requests_to_send;
- ply_list_t *requests_waiting_for_replies;
- int socket_fd;
+ ply_event_loop_t *loop;
+ ply_fd_watch_t *daemon_can_take_request_watch;
+ ply_fd_watch_t *daemon_has_reply_watch;
+ ply_list_t *requests_to_send;
+ ply_list_t *requests_waiting_for_replies;
+ int socket_fd;
- ply_boot_client_disconnect_handler_t disconnect_handler;
- void *disconnect_handler_user_data;
+ ply_boot_client_disconnect_handler_t disconnect_handler;
+ void *disconnect_handler_user_data;
- uint32_t is_connected : 1;
+ uint32_t is_connected : 1;
};
typedef struct
{
- ply_boot_client_t *client;
- char *command;
- char *argument;
- ply_boot_client_response_handler_t handler;
- ply_boot_client_response_handler_t failed_handler;
- void *user_data;
+ ply_boot_client_t *client;
+ char *command;
+ char *argument;
+ ply_boot_client_response_handler_t handler;
+ ply_boot_client_response_handler_t failed_handler;
+ void *user_data;
} ply_boot_client_request_t;
static void ply_boot_client_cancel_request (ply_boot_client_t *client,
@@ -67,320 +67,297 @@ static void ply_boot_client_cancel_request (ply_boot_client_t *client,
ply_boot_client_t *
ply_boot_client_new (void)
{
- ply_boot_client_t *client;
+ ply_boot_client_t *client;
- client = calloc (1, sizeof (ply_boot_client_t));
- client->daemon_can_take_request_watch = NULL;
- client->daemon_has_reply_watch = NULL;
- client->requests_to_send = ply_list_new ();
- client->requests_waiting_for_replies = ply_list_new ();
- client->loop = NULL;
- client->is_connected = false;
- client->disconnect_handler = NULL;
- client->disconnect_handler_user_data = NULL;
+ client = calloc (1, sizeof(ply_boot_client_t));
+ client->daemon_can_take_request_watch = NULL;
+ client->daemon_has_reply_watch = NULL;
+ client->requests_to_send = ply_list_new ();
+ client->requests_waiting_for_replies = ply_list_new ();
+ client->loop = NULL;
+ client->is_connected = false;
+ client->disconnect_handler = NULL;
+ client->disconnect_handler_user_data = NULL;
- return client;
+ return client;
}
static void
ply_boot_client_cancel_unsent_requests (ply_boot_client_t *client)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (ply_list_get_length (client->requests_to_send) == 0)
- return;
+ if (ply_list_get_length (client->requests_to_send) == 0)
+ return;
- node = ply_list_get_first_node (client->requests_to_send);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_boot_client_request_t *request;
+ node = ply_list_get_first_node (client->requests_to_send);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_boot_client_request_t *request;
- request = (ply_boot_client_request_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (client->requests_to_send, node);
+ request = (ply_boot_client_request_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (client->requests_to_send, node);
- ply_boot_client_cancel_request (client, request);
- ply_list_remove_node (client->requests_to_send, node);
+ ply_boot_client_cancel_request (client, request);
+ ply_list_remove_node (client->requests_to_send, node);
- node = next_node;
- }
+ node = next_node;
+ }
- if (client->daemon_can_take_request_watch != NULL)
- {
- assert (client->loop != NULL);
+ if (client->daemon_can_take_request_watch != NULL) {
+ assert (client->loop != NULL);
- ply_event_loop_stop_watching_fd (client->loop,
- client->daemon_can_take_request_watch);
- client->daemon_can_take_request_watch = NULL;
- }
+ ply_event_loop_stop_watching_fd (client->loop,
+ client->daemon_can_take_request_watch);
+ client->daemon_can_take_request_watch = NULL;
+ }
}
static void
ply_boot_client_cancel_requests_waiting_for_replies (ply_boot_client_t *client)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (ply_list_get_length (client->requests_waiting_for_replies) == 0)
- return;
+ if (ply_list_get_length (client->requests_waiting_for_replies) == 0)
+ return;
- node = ply_list_get_first_node (client->requests_waiting_for_replies);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_boot_client_request_t *request;
+ node = ply_list_get_first_node (client->requests_waiting_for_replies);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_boot_client_request_t *request;
- request = (ply_boot_client_request_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (client->requests_waiting_for_replies, node);
+ request = (ply_boot_client_request_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (client->requests_waiting_for_replies, node);
- ply_boot_client_cancel_request (client, request);
- ply_list_remove_node (client->requests_waiting_for_replies, node);
+ ply_boot_client_cancel_request (client, request);
+ ply_list_remove_node (client->requests_waiting_for_replies, node);
- node = next_node;
- }
+ node = next_node;
+ }
- if (client->daemon_has_reply_watch != NULL)
- {
- assert (client->loop != NULL);
+ if (client->daemon_has_reply_watch != NULL) {
+ assert (client->loop != NULL);
- ply_event_loop_stop_watching_fd (client->loop,
- client->daemon_has_reply_watch);
- client->daemon_has_reply_watch = NULL;
- }
+ ply_event_loop_stop_watching_fd (client->loop,
+ client->daemon_has_reply_watch);
+ client->daemon_has_reply_watch = NULL;
+ }
}
static void
ply_boot_client_cancel_requests (ply_boot_client_t *client)
{
- ply_boot_client_cancel_unsent_requests (client);
- ply_boot_client_cancel_requests_waiting_for_replies (client);
+ ply_boot_client_cancel_unsent_requests (client);
+ ply_boot_client_cancel_requests_waiting_for_replies (client);
}
void
ply_boot_client_free (ply_boot_client_t *client)
{
- if (client == NULL)
- return;
+ if (client == NULL)
+ return;
- ply_boot_client_cancel_requests (client);
+ ply_boot_client_cancel_requests (client);
- ply_list_free (client->requests_to_send);
- ply_list_free (client->requests_waiting_for_replies);
+ ply_list_free (client->requests_to_send);
+ ply_list_free (client->requests_waiting_for_replies);
- free (client);
+ free (client);
}
bool
-ply_boot_client_connect (ply_boot_client_t *client,
- ply_boot_client_disconnect_handler_t disconnect_handler,
- void *user_data)
-{
- assert (client != NULL);
- assert (!client->is_connected);
- assert (client->disconnect_handler == NULL);
- assert (client->disconnect_handler_user_data == NULL);
-
- client->socket_fd =
- ply_connect_to_unix_socket (PLY_BOOT_PROTOCOL_TRIMMED_ABSTRACT_SOCKET_PATH,
- PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT);
-
- if (client->socket_fd < 0)
- {
- ply_trace ("could not connect to " PLY_BOOT_PROTOCOL_TRIMMED_ABSTRACT_SOCKET_PATH ": %m");
- ply_trace ("trying old fallback path " PLY_BOOT_PROTOCOL_OLD_ABSTRACT_SOCKET_PATH);
-
- client->socket_fd =
- ply_connect_to_unix_socket (PLY_BOOT_PROTOCOL_OLD_ABSTRACT_SOCKET_PATH,
- PLY_UNIX_SOCKET_TYPE_ABSTRACT);
- if (client->socket_fd < 0)
- {
- ply_trace ("could not connect to " PLY_BOOT_PROTOCOL_OLD_ABSTRACT_SOCKET_PATH ": %m");
- return false;
+ply_boot_client_connect (ply_boot_client_t *client,
+ ply_boot_client_disconnect_handler_t disconnect_handler,
+ void *user_data)
+{
+ assert (client != NULL);
+ assert (!client->is_connected);
+ assert (client->disconnect_handler == NULL);
+ assert (client->disconnect_handler_user_data == NULL);
+
+ client->socket_fd =
+ ply_connect_to_unix_socket (PLY_BOOT_PROTOCOL_TRIMMED_ABSTRACT_SOCKET_PATH,
+ PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT);
+
+ if (client->socket_fd < 0) {
+ ply_trace ("could not connect to " PLY_BOOT_PROTOCOL_TRIMMED_ABSTRACT_SOCKET_PATH ": %m");
+ ply_trace ("trying old fallback path " PLY_BOOT_PROTOCOL_OLD_ABSTRACT_SOCKET_PATH);
+
+ client->socket_fd =
+ ply_connect_to_unix_socket (PLY_BOOT_PROTOCOL_OLD_ABSTRACT_SOCKET_PATH,
+ PLY_UNIX_SOCKET_TYPE_ABSTRACT);
+ if (client->socket_fd < 0) {
+ ply_trace ("could not connect to " PLY_BOOT_PROTOCOL_OLD_ABSTRACT_SOCKET_PATH ": %m");
+ return false;
+ }
}
- }
- client->disconnect_handler = disconnect_handler;
- client->disconnect_handler_user_data = user_data;
+ client->disconnect_handler = disconnect_handler;
+ client->disconnect_handler_user_data = user_data;
- client->is_connected = true;
- return true;
+ client->is_connected = true;
+ return true;
}
static ply_boot_client_request_t *
-ply_boot_client_request_new (ply_boot_client_t *client,
- const char *request_command,
- const char *request_argument,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_request_new (ply_boot_client_t *client,
+ const char *request_command,
+ const char *request_argument,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- ply_boot_client_request_t *request;
+ ply_boot_client_request_t *request;
- assert (client != NULL);
- assert (request_command != NULL);
+ assert (client != NULL);
+ assert (request_command != NULL);
- request = calloc (1, sizeof (ply_boot_client_request_t));
- request->client = client;
- request->command = strdup (request_command);
- if (request_argument != NULL)
- request->argument = strdup (request_argument);
- request->handler = handler;
- request->failed_handler = failed_handler;
- request->user_data = user_data;
+ request = calloc (1, sizeof(ply_boot_client_request_t));
+ request->client = client;
+ request->command = strdup (request_command);
+ if (request_argument != NULL)
+ request->argument = strdup (request_argument);
+ request->handler = handler;
+ request->failed_handler = failed_handler;
+ request->user_data = user_data;
- return request;
+ return request;
}
static void
ply_boot_client_request_free (ply_boot_client_request_t *request)
{
- if (request == NULL)
- return;
- free (request->command);
- if (request->argument != NULL)
- free (request->argument);
- free (request);
+ if (request == NULL)
+ return;
+ free (request->command);
+ if (request->argument != NULL)
+ free (request->argument);
+ free (request);
}
static void
ply_boot_client_cancel_request (ply_boot_client_t *client,
ply_boot_client_request_t *request)
{
- if (request->failed_handler != NULL)
- request->failed_handler (request->user_data, request->client);
+ if (request->failed_handler != NULL)
+ request->failed_handler (request->user_data, request->client);
- ply_boot_client_request_free (request);
+ ply_boot_client_request_free (request);
}
static void
ply_boot_client_process_incoming_replies (ply_boot_client_t *client)
{
- ply_list_node_t *request_node;
- ply_boot_client_request_t *request;
- bool processed_reply;
- uint8_t byte[2] = "";
- uint32_t size;
-
- assert (client != NULL);
-
- processed_reply = false;
- if (ply_list_get_length (client->requests_waiting_for_replies) == 0)
- {
- ply_error ("received unexpected response from boot status daemon");
- return;
- }
-
- request_node = ply_list_get_first_node (client->requests_waiting_for_replies);
- assert (request_node != NULL);
-
- request = (ply_boot_client_request_t *) ply_list_node_get_data (request_node);
- assert (request != NULL);
-
- if (!ply_read (client->socket_fd, byte, sizeof (uint8_t)))
- goto out;
-
- if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK, sizeof (uint8_t)) == 0)
- {
- if (request->handler != NULL)
- request->handler (request->user_data, client);
- }
- else if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER, sizeof (uint8_t)) == 0)
- {
- char *answer;
-
- if (!ply_read_uint32 (client->socket_fd, &size))
- goto out;
-
- answer = malloc ((size+1) * sizeof(char));
- if (size > 0)
- {
- if (!ply_read (client->socket_fd, answer, size))
- {
- free (answer);
- goto out;
- }
- }
+ ply_list_node_t *request_node;
+ ply_boot_client_request_t *request;
+ bool processed_reply;
+ uint8_t byte[2] = "";
+ uint32_t size;
- answer[size] = '\0';
- if (request->handler != NULL)
- ((ply_boot_client_answer_handler_t) request->handler) (request->user_data, answer, client);
- free(answer);
- }
- else if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_MULTIPLE_ANSWERS, sizeof (uint8_t)) == 0)
- {
- ply_array_t *array;
- char **answers;
- char *answer;
- char *p;
- char *q;
- uint8_t i;
-
- array = NULL;
- answers = NULL;
-
- if (!ply_read_uint32 (client->socket_fd, &size))
- goto out;
-
- assert (size > 0);
-
- answer = malloc (size);
-
- if (!ply_read (client->socket_fd, answer, size))
- {
- free (answer);
- goto out;
- }
+ assert (client != NULL);
- array = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
-
- p = answer;
- q = p;
- for (i = 0; i < size; i++, q++)
- {
- if (*q == '\0')
- {
- ply_array_add_pointer_element (array, strdup (p));
- p = q + 1;
- }
+ processed_reply = false;
+ if (ply_list_get_length (client->requests_waiting_for_replies) == 0) {
+ ply_error ("received unexpected response from boot status daemon");
+ return;
}
- free (answer);
-
- answers = (char **) ply_array_steal_pointer_elements (array);
- ply_array_free (array);
-
- if (request->handler != NULL)
- ((ply_boot_client_multiple_answers_handler_t) request->handler) (request->user_data, (const char * const *) answers, client);
- ply_free_string_array (answers);
- }
- else if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER, sizeof (uint8_t)) == 0)
- {
- if (request->handler != NULL)
- ((ply_boot_client_answer_handler_t) request->handler) (request->user_data, NULL, client);
- }
- else
- goto out;
+ request_node = ply_list_get_first_node (client->requests_waiting_for_replies);
+ assert (request_node != NULL);
+
+ request = (ply_boot_client_request_t *) ply_list_node_get_data (request_node);
+ assert (request != NULL);
+
+ if (!ply_read (client->socket_fd, byte, sizeof(uint8_t)))
+ goto out;
+
+ if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK, sizeof(uint8_t)) == 0) {
+ if (request->handler != NULL)
+ request->handler (request->user_data, client);
+ } else if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER, sizeof(uint8_t)) == 0) {
+ char *answer;
+
+ if (!ply_read_uint32 (client->socket_fd, &size))
+ goto out;
+
+ answer = malloc ((size + 1) * sizeof(char));
+ if (size > 0) {
+ if (!ply_read (client->socket_fd, answer, size)) {
+ free (answer);
+ goto out;
+ }
+ }
+
+ answer[size] = '\0';
+ if (request->handler != NULL)
+ ((ply_boot_client_answer_handler_t) request->handler)(request->user_data, answer, client);
+ free (answer);
+ } else if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_MULTIPLE_ANSWERS, sizeof(uint8_t)) == 0) {
+ ply_array_t *array;
+ char **answers;
+ char *answer;
+ char *p;
+ char *q;
+ uint8_t i;
+
+ array = NULL;
+ answers = NULL;
+
+ if (!ply_read_uint32 (client->socket_fd, &size))
+ goto out;
+
+ assert (size > 0);
+
+ answer = malloc (size);
+
+ if (!ply_read (client->socket_fd, answer, size)) {
+ free (answer);
+ goto out;
+ }
+
+ array = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
+
+ p = answer;
+ q = p;
+ for (i = 0; i < size; i++, q++) {
+ if (*q == '\0') {
+ ply_array_add_pointer_element (array, strdup (p));
+ p = q + 1;
+ }
+ }
+ free (answer);
+
+ answers = (char **) ply_array_steal_pointer_elements (array);
+ ply_array_free (array);
+
+ if (request->handler != NULL)
+ ((ply_boot_client_multiple_answers_handler_t) request->handler)(request->user_data, (const char *const *) answers, client);
+
+ ply_free_string_array (answers);
+ } else if (memcmp (byte, PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER, sizeof(uint8_t)) == 0) {
+ if (request->handler != NULL)
+ ((ply_boot_client_answer_handler_t) request->handler)(request->user_data, NULL, client);
+ } else {
+ goto out;
+ }
- processed_reply = true;
+ processed_reply = true;
out:
- if (!processed_reply)
- {
- if (request->failed_handler != NULL)
- request->failed_handler (request->user_data, client);
- }
-
- ply_list_remove_node (client->requests_waiting_for_replies, request_node);
-
- if (ply_list_get_length (client->requests_waiting_for_replies) == 0)
- {
- if (client->daemon_has_reply_watch != NULL)
- {
- assert (client->loop != NULL);
- ply_event_loop_stop_watching_fd (client->loop,
- client->daemon_has_reply_watch);
- client->daemon_has_reply_watch = NULL;
+ if (!processed_reply)
+ if (request->failed_handler != NULL)
+ request->failed_handler (request->user_data, client);
+
+ ply_list_remove_node (client->requests_waiting_for_replies, request_node);
+
+ if (ply_list_get_length (client->requests_waiting_for_replies) == 0) {
+ if (client->daemon_has_reply_watch != NULL) {
+ assert (client->loop != NULL);
+ ply_event_loop_stop_watching_fd (client->loop,
+ client->daemon_has_reply_watch);
+ client->daemon_has_reply_watch = NULL;
+ }
}
- }
}
static char *
@@ -388,485 +365,471 @@ ply_boot_client_get_request_string (ply_boot_client_t *client,
ply_boot_client_request_t *request,
size_t *request_size)
{
- char *request_string;
+ char *request_string;
- assert (client != NULL);
- assert (request != NULL);
- assert (request_size != NULL);
+ assert (client != NULL);
+ assert (request != NULL);
+ assert (request_size != NULL);
- assert (request->command != NULL);
+ assert (request->command != NULL);
- if (request->argument == NULL)
- {
- request_string = strdup (request->command);
- *request_size = strlen (request_string) + 1;
- return request_string;
- }
+ if (request->argument == NULL) {
+ request_string = strdup (request->command);
+ *request_size = strlen (request_string) + 1;
+ return request_string;
+ }
- assert (strlen (request->argument) <= UCHAR_MAX);
+ assert (strlen (request->argument) <= UCHAR_MAX);
- request_string = NULL;
- asprintf (&request_string, "%s\002%c%s", request->command,
- (char) (strlen (request->argument) + 1), request->argument);
- *request_size = strlen (request_string) + 1;
+ request_string = NULL;
+ asprintf (&request_string, "%s\002%c%s", request->command,
+ (char) (strlen (request->argument) + 1), request->argument);
+ *request_size = strlen (request_string) + 1;
- return request_string;
+ return request_string;
}
static bool
ply_boot_client_send_request (ply_boot_client_t *client,
ply_boot_client_request_t *request)
{
- char *request_string;
- size_t request_size;
-
- assert (client != NULL);
- assert (request != NULL);
-
- request_string = ply_boot_client_get_request_string (client, request,
- &request_size);
- if (!ply_write (client->socket_fd, request_string, request_size))
- {
- free (request_string);
- ply_boot_client_cancel_request (client, request);
- return false;
- }
- free (request_string);
-
- if (client->daemon_has_reply_watch == NULL)
- {
- assert (ply_list_get_length (client->requests_waiting_for_replies) == 0);
- client->daemon_has_reply_watch =
- ply_event_loop_watch_fd (client->loop, client->socket_fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- ply_boot_client_process_incoming_replies,
- NULL, client);
- }
- return true;
+ char *request_string;
+ size_t request_size;
+
+ assert (client != NULL);
+ assert (request != NULL);
+
+ request_string = ply_boot_client_get_request_string (client, request,
+ &request_size);
+ if (!ply_write (client->socket_fd, request_string, request_size)) {
+ free (request_string);
+ ply_boot_client_cancel_request (client, request);
+ return false;
+ }
+ free (request_string);
+
+ if (client->daemon_has_reply_watch == NULL) {
+ assert (ply_list_get_length (client->requests_waiting_for_replies) == 0);
+ client->daemon_has_reply_watch =
+ ply_event_loop_watch_fd (client->loop, client->socket_fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ ply_boot_client_process_incoming_replies,
+ NULL, client);
+ }
+ return true;
}
static void
ply_boot_client_process_pending_requests (ply_boot_client_t *client)
{
- ply_list_node_t *request_node;
- ply_boot_client_request_t *request;
+ ply_list_node_t *request_node;
+ ply_boot_client_request_t *request;
- assert (ply_list_get_length (client->requests_to_send) != 0);
- assert (client->daemon_can_take_request_watch != NULL);
+ assert (ply_list_get_length (client->requests_to_send) != 0);
+ assert (client->daemon_can_take_request_watch != NULL);
- request_node = ply_list_get_first_node (client->requests_to_send);
- assert (request_node != NULL);
+ request_node = ply_list_get_first_node (client->requests_to_send);
+ assert (request_node != NULL);
- request = (ply_boot_client_request_t *) ply_list_node_get_data (request_node);
- assert (request != NULL);
+ request = (ply_boot_client_request_t *) ply_list_node_get_data (request_node);
+ assert (request != NULL);
- ply_list_remove_node (client->requests_to_send, request_node);
+ ply_list_remove_node (client->requests_to_send, request_node);
- if (ply_boot_client_send_request (client, request))
- ply_list_append_data (client->requests_waiting_for_replies, request);
+ if (ply_boot_client_send_request (client, request))
+ ply_list_append_data (client->requests_waiting_for_replies, request);
- if (ply_list_get_length (client->requests_to_send) == 0)
- {
- if (client->daemon_has_reply_watch != NULL)
- {
- assert (client->loop != NULL);
+ if (ply_list_get_length (client->requests_to_send) == 0) {
+ if (client->daemon_has_reply_watch != NULL) {
+ assert (client->loop != NULL);
- ply_event_loop_stop_watching_fd (client->loop,
- client->daemon_can_take_request_watch);
- client->daemon_can_take_request_watch = NULL;
+ ply_event_loop_stop_watching_fd (client->loop,
+ client->daemon_can_take_request_watch);
+ client->daemon_can_take_request_watch = NULL;
+ }
}
- }
}
static void
-ply_boot_client_queue_request (ply_boot_client_t *client,
- const char *request_command,
- const char *request_argument,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
-{
- assert (client != NULL);
- assert (client->loop != NULL);
- assert (request_command != NULL);
- assert (request_argument == NULL || strlen (request_argument) <= UCHAR_MAX);
-
- if (client->daemon_can_take_request_watch == NULL &&
- client->socket_fd >= 0)
- {
- assert (ply_list_get_length (client->requests_to_send) == 0);
- client->daemon_can_take_request_watch =
- ply_event_loop_watch_fd (client->loop, client->socket_fd,
- PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA,
- (ply_event_handler_t)
- ply_boot_client_process_pending_requests,
- NULL, client);
- }
-
- if (!client->is_connected)
- {
- if (failed_handler != NULL)
- {
- failed_handler (user_data, client);
+ply_boot_client_queue_request (ply_boot_client_t *client,
+ const char *request_command,
+ const char *request_argument,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
+{
+ assert (client != NULL);
+ assert (client->loop != NULL);
+ assert (request_command != NULL);
+ assert (request_argument == NULL || strlen (request_argument) <= UCHAR_MAX);
+
+ if (client->daemon_can_take_request_watch == NULL &&
+ client->socket_fd >= 0) {
+ assert (ply_list_get_length (client->requests_to_send) == 0);
+ client->daemon_can_take_request_watch =
+ ply_event_loop_watch_fd (client->loop, client->socket_fd,
+ PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA,
+ (ply_event_handler_t)
+ ply_boot_client_process_pending_requests,
+ NULL, client);
}
- }
- else
- {
- ply_boot_client_request_t *request;
- request = ply_boot_client_request_new (client, request_command,
- request_argument,
- handler, failed_handler, user_data);
- ply_list_append_data (client->requests_to_send, request);
- }
+ if (!client->is_connected) {
+ if (failed_handler != NULL)
+ failed_handler (user_data, client);
+ } else {
+ ply_boot_client_request_t *request;
+
+ request = ply_boot_client_request_new (client, request_command,
+ request_argument,
+ handler, failed_handler, user_data);
+ ply_list_append_data (client->requests_to_send, request);
+ }
}
void
-ply_boot_client_ping_daemon (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_ping_daemon (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PING,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PING,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_update_daemon (ply_boot_client_t *client,
- const char *status,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_update_daemon (ply_boot_client_t *client,
+ const char *status,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_UPDATE,
- status, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_UPDATE,
+ status, handler, failed_handler, user_data);
}
void
-ply_boot_client_change_mode (ply_boot_client_t *client,
- const char *new_mode,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_change_mode (ply_boot_client_t *client,
+ const char *new_mode,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CHANGE_MODE,
- new_mode, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CHANGE_MODE,
+ new_mode, handler, failed_handler, user_data);
}
void
-ply_boot_client_system_update (ply_boot_client_t *client,
- const char *progress,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_system_update (ply_boot_client_t *client,
+ const char *progress,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_UPDATE,
- progress, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_UPDATE,
+ progress, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_change_root (ply_boot_client_t *client,
- const char *root_dir,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_change_root (ply_boot_client_t *client,
+ const char *root_dir,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
- assert (root_dir != NULL);
+ assert (client != NULL);
+ assert (root_dir != NULL);
- ply_boot_client_queue_request(client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT,
- root_dir, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT,
+ root_dir, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_display_message (ply_boot_client_t *client,
- const char *message,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_display_message (ply_boot_client_t *client,
+ const char *message,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
- assert (message != NULL);
+ assert (client != NULL);
+ assert (message != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_MESSAGE,
- message, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_MESSAGE,
+ message, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_hide_message (ply_boot_client_t *client,
- const char *message,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_hide_message (ply_boot_client_t *client,
+ const char *message,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
- assert (message != NULL);
+ assert (client != NULL);
+ assert (message != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_MESSAGE,
- message, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_MESSAGE,
+ message, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_system_is_initialized (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_system_is_initialized (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client,
- PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_INITIALIZED,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client,
+ PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_INITIALIZED,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_ask_daemon_for_password (ply_boot_client_t *client,
+ply_boot_client_ask_daemon_for_password (ply_boot_client_t *client,
- const char *prompt,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ const char *prompt,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PASSWORD,
- prompt, (ply_boot_client_response_handler_t)
- handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PASSWORD,
+ prompt, (ply_boot_client_response_handler_t)
+ handler, failed_handler, user_data);
}
void
-ply_boot_client_ask_daemon_for_cached_passwords (ply_boot_client_t *client,
- ply_boot_client_multiple_answers_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_ask_daemon_for_cached_passwords (ply_boot_client_t *client,
+ ply_boot_client_multiple_answers_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CACHED_PASSWORD,
- NULL, (ply_boot_client_response_handler_t)
- handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CACHED_PASSWORD,
+ NULL, (ply_boot_client_response_handler_t)
+ handler, failed_handler, user_data);
}
void
-ply_boot_client_ask_daemon_question (ply_boot_client_t *client,
- const char *prompt,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_ask_daemon_question (ply_boot_client_t *client,
+ const char *prompt,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUESTION,
- prompt, (ply_boot_client_response_handler_t)
- handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUESTION,
+ prompt, (ply_boot_client_response_handler_t)
+ handler, failed_handler, user_data);
}
void
-ply_boot_client_ask_daemon_to_watch_for_keystroke (ply_boot_client_t *client,
- const char *keys,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_ask_daemon_to_watch_for_keystroke (ply_boot_client_t *client,
+ const char *keys,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE,
- keys, (ply_boot_client_response_handler_t)
- handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE,
+ keys, (ply_boot_client_response_handler_t)
+ handler, failed_handler, user_data);
}
void
-ply_boot_client_ask_daemon_to_ignore_keystroke (ply_boot_client_t *client,
- const char *keys,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_ask_daemon_to_ignore_keystroke (ply_boot_client_t *client,
+ const char *keys,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE_REMOVE,
- keys, (ply_boot_client_response_handler_t)
- handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE_REMOVE,
+ keys, (ply_boot_client_response_handler_t)
+ handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_show_splash (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_show_splash (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_hide_splash (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_hide_splash (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_SPLASH,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_SPLASH,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_deactivate (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_deactivate (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_DEACTIVATE,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_DEACTIVATE,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_reactivate (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_reactivate (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- assert (client != NULL);
+ assert (client != NULL);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_REACTIVATE,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_REACTIVATE,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client,
- bool retain_splash,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client,
+ bool retain_splash,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- char arg[2] = "";
+ char arg[2] = "";
- assert (client != NULL);
+ assert (client != NULL);
- arg[0] = (char) (retain_splash != false);
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUIT,
- arg, handler, failed_handler, user_data);
+ arg[0] = (char) (retain_splash != false);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUIT,
+ arg, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_progress_pause (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_progress_pause (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_to_progress_unpause (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_to_progress_unpause (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_ask_daemon_has_active_vt (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_ask_daemon_has_active_vt (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HAS_ACTIVE_VT,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HAS_ACTIVE_VT,
+ NULL, handler, failed_handler, user_data);
}
void
-ply_boot_client_tell_daemon_about_error (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data)
+ply_boot_client_tell_daemon_about_error (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
{
- ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_ERROR,
- NULL, handler, failed_handler, user_data);
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_ERROR,
+ NULL, handler, failed_handler, user_data);
}
void
ply_boot_client_flush (ply_boot_client_t *client)
{
- assert (client != NULL);
+ assert (client != NULL);
- while (ply_list_get_length (client->requests_to_send) > 0)
- {
- ply_event_loop_process_pending_events (client->loop);
- }
+ while (ply_list_get_length (client->requests_to_send) > 0) {
+ ply_event_loop_process_pending_events (client->loop);
+ }
}
void
ply_boot_client_disconnect (ply_boot_client_t *client)
{
- assert (client != NULL);
+ assert (client != NULL);
- close (client->socket_fd);
- client->socket_fd = -1;
- client->is_connected = false;
+ close (client->socket_fd);
+ client->socket_fd = -1;
+ client->is_connected = false;
}
static void
ply_boot_client_detach_from_event_loop (ply_boot_client_t *client)
{
- assert (client != NULL);
- ply_trace ("detaching from event loop");
- client->loop = NULL;
- client->daemon_can_take_request_watch = NULL;
- client->daemon_has_reply_watch = NULL;
+ assert (client != NULL);
+ ply_trace ("detaching from event loop");
+ client->loop = NULL;
+ client->daemon_can_take_request_watch = NULL;
+ client->daemon_has_reply_watch = NULL;
}
static void
ply_boot_client_on_hangup (ply_boot_client_t *client)
{
- assert (client != NULL);
- ply_boot_client_cancel_requests (client);
+ assert (client != NULL);
+ ply_boot_client_cancel_requests (client);
- if (client->disconnect_handler != NULL)
- client->disconnect_handler (client->disconnect_handler_user_data,
- client);
+ if (client->disconnect_handler != NULL)
+ client->disconnect_handler (client->disconnect_handler_user_data,
+ client);
}
void
ply_boot_client_attach_to_event_loop (ply_boot_client_t *client,
ply_event_loop_t *loop)
{
- assert (client != NULL);
- assert (loop != NULL);
- assert (client->loop == NULL);
+ assert (client != NULL);
+ assert (loop != NULL);
+ assert (client->loop == NULL);
- client->loop = loop;
+ client->loop = loop;
- if (client->socket_fd >= 0)
- {
- ply_event_loop_watch_fd (client->loop, client->socket_fd,
- PLY_EVENT_LOOP_FD_STATUS_NONE,
- NULL,
- (ply_event_handler_t) ply_boot_client_on_hangup,
- client);
- }
-
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- ply_boot_client_detach_from_event_loop,
- client);
+ if (client->socket_fd >= 0) {
+ ply_event_loop_watch_fd (client->loop, client->socket_fd,
+ PLY_EVENT_LOOP_FD_STATUS_NONE,
+ NULL,
+ (ply_event_handler_t) ply_boot_client_on_hangup,
+ client);
+ }
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ ply_boot_client_detach_from_event_loop,
+ client);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/client/ply-boot-client.h b/src/client/ply-boot-client.h
index 24939f76..3ccf9b3c 100644
--- a/src/client/ply-boot-client.h
+++ b/src/client/ply-boot-client.h
@@ -30,128 +30,128 @@
#include "ply-event-loop.h"
typedef struct _ply_boot_client ply_boot_client_t;
-typedef void (* ply_boot_client_response_handler_t) (void *user_data,
- ply_boot_client_t *client);
-typedef void (* ply_boot_client_answer_handler_t) (void *user_data,
- const char *answer,
- ply_boot_client_t *client);
+typedef void (*ply_boot_client_response_handler_t) (void *user_data,
+ ply_boot_client_t *client);
+typedef void (*ply_boot_client_answer_handler_t) (void *user_data,
+ const char *answer,
+ ply_boot_client_t *client);
-typedef void (* ply_boot_client_multiple_answers_handler_t) (void *user_data,
- const char * const *answers,
- ply_boot_client_t *client);
-typedef void (* ply_boot_client_disconnect_handler_t) (void *user_data,
- ply_boot_client_t *client);
+typedef void (*ply_boot_client_multiple_answers_handler_t) (void *user_data,
+ const char *const *answers,
+ ply_boot_client_t *client);
+typedef void (*ply_boot_client_disconnect_handler_t) (void *user_data,
+ ply_boot_client_t *client);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_boot_client_t *ply_boot_client_new (void);
void ply_boot_client_free (ply_boot_client_t *client);
-bool ply_boot_client_connect (ply_boot_client_t *client,
- ply_boot_client_disconnect_handler_t disconnect_handler,
- void *user_data);
-void ply_boot_client_ping_daemon (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_update_daemon (ply_boot_client_t *client,
- const char *new_status,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_change_mode (ply_boot_client_t *client,
- const char *new_mode,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_system_update (ply_boot_client_t *client,
- const char *progress,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_change_root (ply_boot_client_t *client,
- const char *chroot_dir,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_display_message (ply_boot_client_t *client,
- const char *message,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_hide_message (ply_boot_client_t *client,
- const char *message,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_ask_daemon_for_password (ply_boot_client_t *client,
- const char *prompt,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_ask_daemon_for_cached_passwords (ply_boot_client_t *client,
- ply_boot_client_multiple_answers_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_ask_daemon_question (ply_boot_client_t *client,
- const char *prompt,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_ask_daemon_to_watch_for_keystroke (ply_boot_client_t *client,
- const char *keys,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_ask_daemon_to_ignore_keystroke (ply_boot_client_t *client,
- const char *keys,
- ply_boot_client_answer_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_system_is_initialized (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_show_splash (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_hide_splash (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_deactivate (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_reactivate (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client,
- bool retain_splash,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_progress_pause (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_tell_daemon_to_progress_unpause (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
-void ply_boot_client_ask_daemon_has_active_vt (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
+bool ply_boot_client_connect (ply_boot_client_t *client,
+ ply_boot_client_disconnect_handler_t disconnect_handler,
+ void *user_data);
+void ply_boot_client_ping_daemon (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_update_daemon (ply_boot_client_t *client,
+ const char *new_status,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_change_mode (ply_boot_client_t *client,
+ const char *new_mode,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_system_update (ply_boot_client_t *client,
+ const char *progress,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_change_root (ply_boot_client_t *client,
+ const char *chroot_dir,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_display_message (ply_boot_client_t *client,
+ const char *message,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_hide_message (ply_boot_client_t *client,
+ const char *message,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_ask_daemon_for_password (ply_boot_client_t *client,
+ const char *prompt,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_ask_daemon_for_cached_passwords (ply_boot_client_t *client,
+ ply_boot_client_multiple_answers_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_ask_daemon_question (ply_boot_client_t *client,
+ const char *prompt,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_ask_daemon_to_watch_for_keystroke (ply_boot_client_t *client,
+ const char *keys,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_ask_daemon_to_ignore_keystroke (ply_boot_client_t *client,
+ const char *keys,
+ ply_boot_client_answer_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_system_is_initialized (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_show_splash (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_hide_splash (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_deactivate (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_reactivate (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client,
+ bool retain_splash,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_progress_pause (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_tell_daemon_to_progress_unpause (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
+void ply_boot_client_ask_daemon_has_active_vt (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
void ply_boot_client_flush (ply_boot_client_t *client);
void ply_boot_client_disconnect (ply_boot_client_t *client);
void ply_boot_client_attach_to_event_loop (ply_boot_client_t *client,
ply_event_loop_t *loop);
-void ply_boot_client_tell_daemon_about_error (ply_boot_client_t *client,
- ply_boot_client_response_handler_t handler,
- ply_boot_client_response_handler_t failed_handler,
- void *user_data);
+void ply_boot_client_tell_daemon_about_error (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
#endif
diff --git a/src/client/plymouth.c b/src/client/plymouth.c
index b22e90cf..bf02bce6 100644
--- a/src/client/plymouth.c
+++ b/src/client/plymouth.c
@@ -42,320 +42,293 @@
#define PLY_MAX_COMMAND_LINE_SIZE 512
#endif
-#define KEY_CTRL_C ('\100' ^'C')
+#define KEY_CTRL_C ('\100' ^ 'C')
typedef struct
{
- ply_event_loop_t *loop;
- ply_boot_client_t *client;
- ply_command_parser_t *command_parser;
- char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE];
+ ply_event_loop_t *loop;
+ ply_boot_client_t *client;
+ ply_command_parser_t *command_parser;
+ char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE];
} state_t;
typedef struct
{
- state_t *state;
- char *command;
- char *prompt;
- int number_of_tries_left;
- uint32_t pause : 1;
+ state_t *state;
+ char *command;
+ char *prompt;
+ int number_of_tries_left;
+ uint32_t pause : 1;
} password_answer_state_t;
typedef struct
{
- state_t *state;
- char *command;
- char *prompt;
- uint32_t pause : 1;
+ state_t *state;
+ char *command;
+ char *prompt;
+ uint32_t pause : 1;
} question_answer_state_t;
typedef struct
{
- state_t *state;
- char *command;
- char *keys;
+ state_t *state;
+ char *command;
+ char *keys;
} key_answer_state_t;
static char **
split_string (const char *command,
const char delimiter)
{
- const char *p, *q;
- int i, number_of_delimiters;
- char **args;
-
- number_of_delimiters = 0;
- for (p = command; *p != '\0'; p++)
- {
- if (*p == delimiter &&
- *(p + 1) != delimiter)
- number_of_delimiters++;
- }
-
- /* there is one more arg that delimiters between args
- * and a trailing NULL arg
- */
- args = calloc (number_of_delimiters + 2, sizeof (char *));
- q = command;
- i = 0;
- for (p = command; *p != '\0'; p++)
- {
- if (*p == delimiter)
- {
- args[i++] = strndup (q, p - q);
-
- while (*p == delimiter)
- p++;
-
- q = p;
+ const char *p, *q;
+ int i, number_of_delimiters;
+ char **args;
+
+ number_of_delimiters = 0;
+ for (p = command; *p != '\0'; p++) {
+ if (*p == delimiter &&
+ *(p + 1) != delimiter)
+ number_of_delimiters++;
}
- assert (*q != delimiter);
- assert (i <= number_of_delimiters);
- }
+ /* there is one more arg that delimiters between args
+ * and a trailing NULL arg
+ */
+ args = calloc (number_of_delimiters + 2, sizeof(char *));
+ q = command;
+ i = 0;
+ for (p = command; *p != '\0'; p++) {
+ if (*p == delimiter) {
+ args[i++] = strndup (q, p - q);
+
+ while (*p == delimiter) {
+ p++;
+ }
+
+ q = p;
+ }
+
+ assert (*q != delimiter);
+ assert (i <= number_of_delimiters);
+ }
- args[i++] = strndup (q, p - q);
+ args[i++] = strndup (q, p - q);
- return args;
+ return args;
}
static bool
-answer_via_command (char *command,
- const char *answer,
- int *exit_status)
+answer_via_command (char *command,
+ const char *answer,
+ int *exit_status)
{
- bool gave_answer;
- pid_t pid;
- int command_input_sender_fd, command_input_receiver_fd;
+ bool gave_answer;
+ pid_t pid;
+ int command_input_sender_fd, command_input_receiver_fd;
- ply_trace ("running command '%s'", command);
+ ply_trace ("running command '%s'", command);
- /* answer may be NULL which means,
- * "The daemon can't ask the user questions,
- * do all the prompting from the client"
- */
+ /* answer may be NULL which means,
+ * "The daemon can't ask the user questions,
+ * do all the prompting from the client"
+ */
- gave_answer = false;
- if (answer != NULL &&
- !ply_open_unidirectional_pipe (&command_input_sender_fd,
- &command_input_receiver_fd))
- return false;
+ gave_answer = false;
+ if (answer != NULL &&
+ !ply_open_unidirectional_pipe (&command_input_sender_fd,
+ &command_input_receiver_fd))
+ return false;
- pid = fork ();
+ pid = fork ();
- if (pid < 0)
- return false;
+ if (pid < 0)
+ return false;
- if (pid == 0)
- {
- char **args;
- args = split_string (command, ' ');
- if (answer != NULL)
- {
- close (command_input_sender_fd);
- dup2 (command_input_receiver_fd, STDIN_FILENO);
- }
+ if (pid == 0) {
+ char **args;
+ args = split_string (command, ' ');
+ if (answer != NULL) {
+ close (command_input_sender_fd);
+ dup2 (command_input_receiver_fd, STDIN_FILENO);
+ }
- execvp (args[0], args);
- ply_trace ("could not run command: %m");
- _exit (127);
- }
+ execvp (args[0], args);
+ ply_trace ("could not run command: %m");
+ _exit (127);
+ }
- if (answer != NULL)
- {
- close (command_input_receiver_fd);
+ if (answer != NULL) {
+ close (command_input_receiver_fd);
- if (write (command_input_sender_fd, answer, strlen (answer)) < 0)
- goto out;
- }
+ if (write (command_input_sender_fd, answer, strlen (answer)) < 0)
+ goto out;
+ }
- gave_answer = true;
+ gave_answer = true;
out:
- if (answer != NULL)
- close (command_input_sender_fd);
- waitpid (pid, exit_status, 0);
+ if (answer != NULL)
+ close (command_input_sender_fd);
+ waitpid (pid, exit_status, 0);
- return gave_answer;
+ return gave_answer;
}
static void
on_failure (state_t *state)
{
- ply_event_loop_exit (state->loop, 1);
+ ply_event_loop_exit (state->loop, 1);
}
static void
on_success (state_t *state)
{
- ply_event_loop_exit (state->loop, 0);
+ ply_event_loop_exit (state->loop, 0);
}
static void
on_password_answer_failure (password_answer_state_t *answer_state,
ply_boot_client_t *client)
{
- ply_trace ("password answer failure");
-
- /* plymouthd isn't running for some reason. If there is a command
- * to run, we'll run it anyway, because it might be important for
- * boot up to continue (to decrypt the root partition or whatever)
- */
- if (answer_state->command != NULL)
- {
- int exit_status;
- bool command_started;
-
- ply_trace ("daemon not available, running command on our own");
-
- exit_status = 127;
- command_started = false;
- while (answer_state->number_of_tries_left > 0)
- {
- command_started = answer_via_command (answer_state->command, NULL,
- &exit_status);
-
- if (command_started && WIFEXITED (exit_status) &&
- WEXITSTATUS (exit_status) == 0)
- {
- ply_trace ("command was successful");
- break;
- }
-
- ply_trace ("command failed");
- answer_state->number_of_tries_left--;
- }
+ ply_trace ("password answer failure");
+
+ /* plymouthd isn't running for some reason. If there is a command
+ * to run, we'll run it anyway, because it might be important for
+ * boot up to continue (to decrypt the root partition or whatever)
+ */
+ if (answer_state->command != NULL) {
+ int exit_status;
+ bool command_started;
+
+ ply_trace ("daemon not available, running command on our own");
+
+ exit_status = 127;
+ command_started = false;
+ while (answer_state->number_of_tries_left > 0) {
+ command_started = answer_via_command (answer_state->command, NULL,
+ &exit_status);
+
+ if (command_started && WIFEXITED (exit_status) &&
+ WEXITSTATUS (exit_status) == 0) {
+ ply_trace ("command was successful");
+ break;
+ }
+
+ ply_trace ("command failed");
+ answer_state->number_of_tries_left--;
+ }
- if (command_started && WIFSIGNALED (exit_status))
- {
- ply_trace ("command died with signal %s", strsignal (WTERMSIG (exit_status)));
- raise (WTERMSIG (exit_status));
- }
- else
- {
- ply_event_loop_exit (answer_state->state->loop,
- WEXITSTATUS (exit_status));
+ if (command_started && WIFSIGNALED (exit_status)) {
+ ply_trace ("command died with signal %s", strsignal (WTERMSIG (exit_status)));
+ raise (WTERMSIG (exit_status));
+ } else {
+ ply_event_loop_exit (answer_state->state->loop,
+ WEXITSTATUS (exit_status));
+ }
+ } else {
+ ply_event_loop_exit (answer_state->state->loop, 1);
}
- }
- else
- {
- ply_event_loop_exit (answer_state->state->loop, 1);
- }
}
static void
-on_password_answer (password_answer_state_t *answer_state,
- const char *answer,
- ply_boot_client_t *client)
+on_password_answer (password_answer_state_t *answer_state,
+ const char *answer,
+ ply_boot_client_t *client)
{
- int exit_status;
-
- exit_status = 127;
- if (answer != NULL && answer[0] != KEY_CTRL_C) /* a CTRL-C answer means the user canceled */
- {
- if (answer_state->command != NULL)
- {
- bool command_started = false;
-
- command_started = answer_via_command (answer_state->command, answer,
- &exit_status);
-
- if (command_started && (!WIFEXITED (exit_status) ||
- WEXITSTATUS (exit_status) != 0))
- {
- answer_state->number_of_tries_left--;
-
- if (answer_state->number_of_tries_left > 0)
- {
- ply_boot_client_ask_daemon_for_password (answer_state->state->client,
- answer_state->prompt,
- (ply_boot_client_answer_handler_t)
- on_password_answer,
- (ply_boot_client_response_handler_t)
- on_password_answer_failure,
- answer_state);
- return;
+ int exit_status;
+
+ exit_status = 127;
+ if (answer != NULL && answer[0] != KEY_CTRL_C) { /* a CTRL-C answer means the user canceled */
+ if (answer_state->command != NULL) {
+ bool command_started = false;
+
+ command_started = answer_via_command (answer_state->command, answer,
+ &exit_status);
+
+ if (command_started && (!WIFEXITED (exit_status) ||
+ WEXITSTATUS (exit_status) != 0)) {
+ answer_state->number_of_tries_left--;
+
+ if (answer_state->number_of_tries_left > 0) {
+ ply_boot_client_ask_daemon_for_password (answer_state->state->client,
+ answer_state->prompt,
+ (ply_boot_client_answer_handler_t)
+ on_password_answer,
+ (ply_boot_client_response_handler_t)
+ on_password_answer_failure,
+ answer_state);
+ return;
+ }
+ }
+ } else {
+ write (STDOUT_FILENO, answer, strlen (answer));
+ exit_status = 0;
}
- }
+ } else if (answer == NULL) {
+ on_password_answer_failure (answer_state, answer_state->state->client);
}
- else
- {
- write (STDOUT_FILENO, answer, strlen (answer));
- exit_status = 0;
+
+ if (WIFSIGNALED (exit_status))
+ raise (WTERMSIG (exit_status));
+
+ if (answer_state->pause) {
+ ply_boot_client_tell_daemon_to_progress_unpause (client,
+ (ply_boot_client_response_handler_t)
+ (WEXITSTATUS (exit_status) ? on_failure : on_success),
+ (ply_boot_client_response_handler_t)
+ on_failure,
+ answer_state->state);
+ } else {
+ ply_event_loop_exit (answer_state->state->loop, WEXITSTATUS (exit_status));
}
- }
- else if (answer == NULL)
- {
- on_password_answer_failure (answer_state, answer_state->state->client);
- }
-
- if (WIFSIGNALED (exit_status))
- raise (WTERMSIG (exit_status));
-
- if (answer_state->pause)
- {
- ply_boot_client_tell_daemon_to_progress_unpause (client,
- (ply_boot_client_response_handler_t)
- (WEXITSTATUS (exit_status) ? on_failure : on_success),
- (ply_boot_client_response_handler_t)
- on_failure,
- answer_state->state);
- }
- else
- ply_event_loop_exit (answer_state->state->loop, WEXITSTATUS (exit_status));
}
static void
on_question_answer_failure (question_answer_state_t *answer_state,
ply_boot_client_t *client)
{
- ply_event_loop_exit (answer_state->state->loop, 1);
+ ply_event_loop_exit (answer_state->state->loop, 1);
}
static void
-on_question_answer (question_answer_state_t *answer_state,
- const char *answer,
- ply_boot_client_t *client)
+on_question_answer (question_answer_state_t *answer_state,
+ const char *answer,
+ ply_boot_client_t *client)
{
- if (answer != NULL)
- {
- if (answer_state->command != NULL)
- {
- answer_via_command (answer_state->command, answer, NULL);
- }
- else
- {
- write (STDOUT_FILENO, answer, strlen (answer));
+ if (answer != NULL) {
+ if (answer_state->command != NULL)
+ answer_via_command (answer_state->command, answer, NULL);
+ else
+ write (STDOUT_FILENO, answer, strlen (answer));
+ if (answer_state->pause) {
+ ply_boot_client_tell_daemon_to_progress_unpause (client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure,
+ answer_state->state);
+ } else {
+ ply_event_loop_exit (answer_state->state->loop, 0);
+ }
+ } else {
+ if (answer_state->pause) {
+ ply_boot_client_tell_daemon_to_progress_unpause (client,
+ (ply_boot_client_response_handler_t)
+ on_failure,
+ (ply_boot_client_response_handler_t)
+ on_failure,
+ answer_state->state);
+ } else {
+ ply_event_loop_exit (answer_state->state->loop, 1);
+ }
}
- if (answer_state->pause)
- ply_boot_client_tell_daemon_to_progress_unpause (client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure,
- answer_state->state);
- else
- ply_event_loop_exit (answer_state->state->loop, 0);
- }
- else
- {
- if (answer_state->pause)
- ply_boot_client_tell_daemon_to_progress_unpause (client,
- (ply_boot_client_response_handler_t)
- on_failure,
- (ply_boot_client_response_handler_t)
- on_failure,
- answer_state->state);
- else
- ply_event_loop_exit (answer_state->state->loop, 1);
- }
}
static void
on_key_answer_failure (key_answer_state_t *answer_state,
ply_boot_client_t *client)
{
- ply_event_loop_exit (answer_state->state->loop, 1);
+ ply_event_loop_exit (answer_state->state->loop, 1);
}
static void
@@ -363,182 +336,164 @@ on_key_answer (key_answer_state_t *answer_state,
const char *answer,
ply_boot_client_t *client)
{
+ if (answer == NULL) {
+ ply_event_loop_exit (answer_state->state->loop, 1);
+ return;
+ }
+
+ if (answer_state->command != NULL)
+ answer_via_command (answer_state->command, answer, NULL);
+ else
+ if (answer != NULL)
+ write (STDOUT_FILENO, answer, strlen (answer));
- if (answer == NULL)
- {
- ply_event_loop_exit (answer_state->state->loop, 1);
- return;
- }
-
- if (answer_state->command != NULL)
- {
- answer_via_command (answer_state->command, answer, NULL);
- }
- else
- {
- if (answer != NULL)
- write (STDOUT_FILENO, answer, strlen (answer));
- }
-
- ply_event_loop_exit (answer_state->state->loop, 0);
+ ply_event_loop_exit (answer_state->state->loop, 0);
}
static void
-on_multiple_password_answers (password_answer_state_t *answer_state,
- const char * const *answers)
+on_multiple_password_answers (password_answer_state_t *answer_state,
+ const char *const *answers)
{
- bool need_to_ask_user;
- int i;
- int exit_status;
-
- assert (answer_state->command != NULL);
-
- ply_trace ("on multiple password answers");
-
- need_to_ask_user = true;
-
- if (answers != NULL)
- {
- ply_trace ("daemon has a few candidate passwords for us to try");
- for (i = 0; answers[i] != NULL; i++)
- {
- bool command_started;
- exit_status = 127;
- command_started = answer_via_command (answer_state->command, answers[i],
- &exit_status);
- if (command_started && WIFEXITED (exit_status) &&
- WEXITSTATUS (exit_status) == 0)
- {
- need_to_ask_user = false;
- break;
- }
+ bool need_to_ask_user;
+ int i;
+ int exit_status;
+
+ assert (answer_state->command != NULL);
+
+ ply_trace ("on multiple password answers");
+
+ need_to_ask_user = true;
+
+ if (answers != NULL) {
+ ply_trace ("daemon has a few candidate passwords for us to try");
+ for (i = 0; answers[i] != NULL; i++) {
+ bool command_started;
+ exit_status = 127;
+ command_started = answer_via_command (answer_state->command, answers[i],
+ &exit_status);
+ if (command_started && WIFEXITED (exit_status) &&
+ WEXITSTATUS (exit_status) == 0) {
+ need_to_ask_user = false;
+ break;
+ }
+ }
+ } else {
+ ply_trace ("daemon has no candidate passwords for us to try");
}
- }
- else
- {
- ply_trace ("daemon has no candidate passwords for us to try");
- }
-
- if (need_to_ask_user)
- {
- ply_boot_client_ask_daemon_for_password (answer_state->state->client,
- answer_state->prompt,
- (ply_boot_client_answer_handler_t)
- on_password_answer,
- (ply_boot_client_response_handler_t)
- on_password_answer_failure, answer_state);
- return;
- }
- ply_event_loop_exit (answer_state->state->loop, 0);
+ if (need_to_ask_user) {
+ ply_boot_client_ask_daemon_for_password (answer_state->state->client,
+ answer_state->prompt,
+ (ply_boot_client_answer_handler_t)
+ on_password_answer,
+ (ply_boot_client_response_handler_t)
+ on_password_answer_failure, answer_state);
+ return;
+ }
+
+ ply_event_loop_exit (answer_state->state->loop, 0);
}
static void
on_disconnect (state_t *state)
{
- bool wait;
- int status = 0;
-
- wait = false;
- ply_command_parser_get_options (state->command_parser,
- "wait", &wait,
- NULL
- );
-
- if (! wait) {
- ply_error ("error: unexpectedly disconnected from boot status daemon");
- status = 2;
- }
-
- ply_trace ("disconnect");
- ply_event_loop_exit (state->loop, status);
+ bool wait;
+ int status = 0;
+
+ wait = false;
+ ply_command_parser_get_options (state->command_parser,
+ "wait", &wait,
+ NULL
+ );
+
+ if (!wait) {
+ ply_error ("error: unexpectedly disconnected from boot status daemon");
+ status = 2;
+ }
+
+ ply_trace ("disconnect");
+ ply_event_loop_exit (state->loop, status);
}
static void
on_password_request_execute (password_answer_state_t *password_answer_state,
ply_boot_client_t *client)
{
- ply_trace ("executing password request (command %s)",
- password_answer_state->command);
-
- if (password_answer_state->command != NULL)
- {
- ply_boot_client_ask_daemon_for_cached_passwords (client,
- (ply_boot_client_multiple_answers_handler_t)
- on_multiple_password_answers,
- (ply_boot_client_response_handler_t)
- on_password_answer_failure, password_answer_state);
- }
- else
- {
- ply_boot_client_ask_daemon_for_password (client,
- password_answer_state->prompt,
- (ply_boot_client_answer_handler_t)
- on_password_answer,
- (ply_boot_client_response_handler_t)
- on_password_answer_failure, password_answer_state);
- }
+ ply_trace ("executing password request (command %s)",
+ password_answer_state->command);
+
+ if (password_answer_state->command != NULL) {
+ ply_boot_client_ask_daemon_for_cached_passwords (client,
+ (ply_boot_client_multiple_answers_handler_t)
+ on_multiple_password_answers,
+ (ply_boot_client_response_handler_t)
+ on_password_answer_failure, password_answer_state);
+ } else {
+ ply_boot_client_ask_daemon_for_password (client,
+ password_answer_state->prompt,
+ (ply_boot_client_answer_handler_t)
+ on_password_answer,
+ (ply_boot_client_response_handler_t)
+ on_password_answer_failure, password_answer_state);
+ }
}
static void
on_password_request (state_t *state,
const char *command)
{
- char *prompt;
- char *program;
- int number_of_tries;
- bool dont_pause;
- password_answer_state_t *password_answer_state;
-
- prompt = NULL;
- program = NULL;
- number_of_tries = 0;
- dont_pause = false;
-
- ply_trace ("Password request");
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "command", &program,
- "prompt", &prompt,
- "number-of-tries", &number_of_tries,
- "dont-pause-progress", &dont_pause,
- NULL);
-
- if (number_of_tries <= 0)
- number_of_tries = INT_MAX;
-
- password_answer_state = calloc (1, sizeof (password_answer_state_t));
- password_answer_state->state = state;
- password_answer_state->command = program;
- password_answer_state->prompt = prompt;
- password_answer_state->number_of_tries_left = number_of_tries;
- password_answer_state->pause = !dont_pause;
- if (password_answer_state->pause)
- {
- ply_boot_client_tell_daemon_to_progress_pause (state->client,
- (ply_boot_client_response_handler_t)
- on_password_request_execute,
- (ply_boot_client_response_handler_t)
- on_password_answer_failure,
- password_answer_state);
- }
- else
- {
- on_password_request_execute (password_answer_state, state->client);
- }
+ char *prompt;
+ char *program;
+ int number_of_tries;
+ bool dont_pause;
+ password_answer_state_t *password_answer_state;
+
+ prompt = NULL;
+ program = NULL;
+ number_of_tries = 0;
+ dont_pause = false;
+
+ ply_trace ("Password request");
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "command", &program,
+ "prompt", &prompt,
+ "number-of-tries", &number_of_tries,
+ "dont-pause-progress", &dont_pause,
+ NULL);
+
+ if (number_of_tries <= 0)
+ number_of_tries = INT_MAX;
+
+ password_answer_state = calloc (1, sizeof(password_answer_state_t));
+ password_answer_state->state = state;
+ password_answer_state->command = program;
+ password_answer_state->prompt = prompt;
+ password_answer_state->number_of_tries_left = number_of_tries;
+ password_answer_state->pause = !dont_pause;
+ if (password_answer_state->pause) {
+ ply_boot_client_tell_daemon_to_progress_pause (state->client,
+ (ply_boot_client_response_handler_t)
+ on_password_request_execute,
+ (ply_boot_client_response_handler_t)
+ on_password_answer_failure,
+ password_answer_state);
+ } else {
+ on_password_request_execute (password_answer_state, state->client);
+ }
}
static void
on_question_request_execute (question_answer_state_t *question_answer_state,
ply_boot_client_t *client)
{
- ply_boot_client_ask_daemon_question (client,
- question_answer_state->prompt,
- (ply_boot_client_answer_handler_t)
- on_question_answer,
- (ply_boot_client_response_handler_t)
- on_question_answer_failure,
- question_answer_state);
+ ply_boot_client_ask_daemon_question (client,
+ question_answer_state->prompt,
+ (ply_boot_client_answer_handler_t)
+ on_question_answer,
+ (ply_boot_client_response_handler_t)
+ on_question_answer_failure,
+ question_answer_state);
}
@@ -546,147 +501,142 @@ static void
on_question_request (state_t *state,
const char *command)
{
- char *prompt;
- char *program;
- bool dont_pause;
- question_answer_state_t *question_answer_state;
-
- prompt = NULL;
- program = NULL;
- dont_pause = false;
-
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "command", &program,
- "prompt", &prompt,
- "dont-pause-progress", &dont_pause,
- NULL);
-
- question_answer_state = calloc (1, sizeof (question_answer_state_t));
- question_answer_state->state = state;
- question_answer_state->command = program;
- question_answer_state->prompt = prompt;
- question_answer_state->pause = !dont_pause;
- if (question_answer_state->pause)
- {
- ply_boot_client_tell_daemon_to_progress_pause (state->client,
- (ply_boot_client_response_handler_t)
- on_question_request_execute,
- (ply_boot_client_response_handler_t)
- on_question_answer_failure,
- question_answer_state);
- }
- else
- {
- on_question_request_execute (question_answer_state, state->client);
- }
+ char *prompt;
+ char *program;
+ bool dont_pause;
+ question_answer_state_t *question_answer_state;
+
+ prompt = NULL;
+ program = NULL;
+ dont_pause = false;
+
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "command", &program,
+ "prompt", &prompt,
+ "dont-pause-progress", &dont_pause,
+ NULL);
+
+ question_answer_state = calloc (1, sizeof(question_answer_state_t));
+ question_answer_state->state = state;
+ question_answer_state->command = program;
+ question_answer_state->prompt = prompt;
+ question_answer_state->pause = !dont_pause;
+ if (question_answer_state->pause) {
+ ply_boot_client_tell_daemon_to_progress_pause (state->client,
+ (ply_boot_client_response_handler_t)
+ on_question_request_execute,
+ (ply_boot_client_response_handler_t)
+ on_question_answer_failure,
+ question_answer_state);
+ } else {
+ on_question_request_execute (question_answer_state, state->client);
+ }
}
static void
on_display_message_request (state_t *state,
const char *command)
{
- char *text;
-
- text = NULL;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "text", &text,
- NULL);
- if (text != NULL)
- {
- ply_boot_client_tell_daemon_to_display_message (state->client,
- text,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
- free (text);
- }
+ char *text;
+
+ text = NULL;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "text", &text,
+ NULL);
+ if (text != NULL) {
+ ply_boot_client_tell_daemon_to_display_message (state->client,
+ text,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ free (text);
+ }
}
static void
on_hide_message_request (state_t *state,
const char *command)
{
- char *text;
-
- text = NULL;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "text", &text,
- NULL);
- if (text != NULL)
- {
- ply_boot_client_tell_daemon_to_hide_message (state->client,
- text,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
- free (text);
- }
+ char *text;
+
+ text = NULL;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "text", &text,
+ NULL);
+ if (text != NULL) {
+ ply_boot_client_tell_daemon_to_hide_message (state->client,
+ text,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ free (text);
+ }
}
static void
on_keystroke_request (state_t *state,
- const char *command)
+ const char *command)
{
- char *keys;
- char *program;
-
- keys = NULL;
- program = NULL;
-
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "command", &program,
- "keys", &keys,
- NULL);
- key_answer_state_t *key_answer_state;
- key_answer_state = calloc (1, sizeof (key_answer_state_t));
- key_answer_state->state = state;
- key_answer_state->keys = keys;
- key_answer_state->command = program;
- ply_boot_client_ask_daemon_to_watch_for_keystroke (state->client,
- keys,
- (ply_boot_client_answer_handler_t)
- on_key_answer,
- (ply_boot_client_response_handler_t)
- on_key_answer_failure,
- key_answer_state);
+ char *keys;
+ char *program;
+
+ keys = NULL;
+ program = NULL;
+
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "command", &program,
+ "keys", &keys,
+ NULL);
+ key_answer_state_t *key_answer_state;
+ key_answer_state = calloc (1, sizeof(key_answer_state_t));
+ key_answer_state->state = state;
+ key_answer_state->keys = keys;
+ key_answer_state->command = program;
+ ply_boot_client_ask_daemon_to_watch_for_keystroke (state->client,
+ keys,
+ (ply_boot_client_answer_handler_t)
+ on_key_answer,
+ (ply_boot_client_response_handler_t)
+ on_key_answer_failure,
+ key_answer_state);
}
static void
on_keystroke_ignore (state_t *state,
const char *command)
{
- char *keys;
-
- keys = NULL;
-
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "keys", &keys,
- NULL);
-
- ply_boot_client_ask_daemon_to_ignore_keystroke (state->client,
- keys,
- (ply_boot_client_answer_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ char *keys;
+
+ keys = NULL;
+
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "keys", &keys,
+ NULL);
+
+ ply_boot_client_ask_daemon_to_ignore_keystroke (state->client,
+ keys,
+ (ply_boot_client_answer_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_progress_pause_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_to_progress_pause (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ ply_boot_client_tell_daemon_to_progress_pause (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
@@ -694,613 +644,581 @@ static void
on_progress_unpause_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_to_progress_unpause (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ ply_boot_client_tell_daemon_to_progress_unpause (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_report_error_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_about_error (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
-
+ ply_boot_client_tell_daemon_about_error (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_deactivate_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_to_deactivate (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ ply_boot_client_tell_daemon_to_deactivate (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_reactivate_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_to_reactivate (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ ply_boot_client_tell_daemon_to_reactivate (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_quit_request (state_t *state,
const char *command)
{
- bool should_retain_splash;
-
- should_retain_splash = false;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "retain-splash", &should_retain_splash,
- NULL);
-
- ply_boot_client_tell_daemon_to_quit (state->client,
- should_retain_splash,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ bool should_retain_splash;
+
+ should_retain_splash = false;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "retain-splash", &should_retain_splash,
+ NULL);
+
+ ply_boot_client_tell_daemon_to_quit (state->client,
+ should_retain_splash,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static bool
get_kernel_command_line (state_t *state)
{
- int fd;
-
- ply_trace ("opening /proc/cmdline");
- fd = open ("/proc/cmdline", O_RDONLY);
-
- if (fd < 0)
- {
- ply_trace ("couldn't open it: %m");
- return false;
- }
-
- ply_trace ("reading kernel command line");
- if (read (fd, state->kernel_command_line, sizeof (state->kernel_command_line)) < 0)
- {
- ply_trace ("couldn't read it: %m");
- close (fd);
- return false;
- }
-
- ply_trace ("Kernel command line is: '%s'", state->kernel_command_line);
- close (fd);
- return true;
+ int fd;
+
+ ply_trace ("opening /proc/cmdline");
+ fd = open ("/proc/cmdline", O_RDONLY);
+
+ if (fd < 0) {
+ ply_trace ("couldn't open it: %m");
+ return false;
+ }
+
+ ply_trace ("reading kernel command line");
+ if (read (fd, state->kernel_command_line, sizeof(state->kernel_command_line)) < 0) {
+ ply_trace ("couldn't read it: %m");
+ close (fd);
+ return false;
+ }
+
+ ply_trace ("Kernel command line is: '%s'", state->kernel_command_line);
+ close (fd);
+ return true;
}
static void
on_update_root_fs_request (state_t *state,
const char *command)
{
+ char *root_dir;
+ bool is_read_write;
+
+ root_dir = NULL;
+ is_read_write = false;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "new-root-dir", &root_dir,
+ "read-write", &is_read_write,
+ NULL);
+
+ if (root_dir != NULL) {
+ ply_boot_client_tell_daemon_to_change_root (state->client, root_dir,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ }
- char *root_dir;
- bool is_read_write;
-
- root_dir = NULL;
- is_read_write = false;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "new-root-dir", &root_dir,
- "read-write", &is_read_write,
- NULL);
-
- if (root_dir != NULL)
- {
- ply_boot_client_tell_daemon_to_change_root (state->client, root_dir,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
-
- }
-
- if (is_read_write)
- {
- ply_boot_client_tell_daemon_system_is_initialized (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
- }
+ if (is_read_write) {
+ ply_boot_client_tell_daemon_system_is_initialized (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ }
}
static void
on_show_splash_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_to_show_splash (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ ply_boot_client_tell_daemon_to_show_splash (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_hide_splash_request (state_t *state,
const char *command)
{
- ply_boot_client_tell_daemon_to_hide_splash (state->client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
+ ply_boot_client_tell_daemon_to_hide_splash (state->client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
}
static void
on_update_request (state_t *state,
const char *command)
{
- char *status;
-
- status = NULL;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "status", &status,
- NULL);
-
- if (status != NULL)
- {
- ply_boot_client_update_daemon (state->client, status,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
-
- }
+ char *status;
+
+ status = NULL;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "status", &status,
+ NULL);
+
+ if (status != NULL) {
+ ply_boot_client_update_daemon (state->client, status,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ }
}
static void
on_change_mode_request (state_t *state,
const char *command)
{
- bool boot_up;
- bool shutdown;
- bool updates;
-
- boot_up = false;
- shutdown = false;
- updates = false;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "boot-up", &boot_up,
- "shutdown", &shutdown,
- "updates", &updates,
- NULL);
-
- if (boot_up)
- {
- ply_boot_client_change_mode (state->client, "boot-up",
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
-
- }
- else if (shutdown)
- {
- ply_boot_client_change_mode (state->client, "shutdown",
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
-
- }
- else if (updates)
- {
- ply_boot_client_change_mode (state->client, "updates",
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
-
- }
+ bool boot_up;
+ bool shutdown;
+ bool updates;
+
+ boot_up = false;
+ shutdown = false;
+ updates = false;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "boot-up", &boot_up,
+ "shutdown", &shutdown,
+ "updates", &updates,
+ NULL);
+
+ if (boot_up) {
+ ply_boot_client_change_mode (state->client, "boot-up",
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ } else if (shutdown) {
+ ply_boot_client_change_mode (state->client, "shutdown",
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ } else if (updates) {
+ ply_boot_client_change_mode (state->client, "updates",
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ }
}
static void
on_system_update_request (state_t *state,
const char *command)
{
- int progress;
-
- progress = 0;
- ply_command_parser_get_command_options (state->command_parser,
- command,
- "progress", &progress,
- NULL);
-
- if (progress >= 0 && progress <= 100)
- {
- char *progress_string = NULL;
-
- asprintf (&progress_string, "%d", progress);
-
- ply_boot_client_system_update (state->client,
- progress_string,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, state);
- free (progress_string);
- }
- else
- {
- ply_error ("couldn't set invalid percentage: %i", progress);
- ply_event_loop_exit (state->loop, 1);
- }
+ int progress;
+
+ progress = 0;
+ ply_command_parser_get_command_options (state->command_parser,
+ command,
+ "progress", &progress,
+ NULL);
+
+ if (progress >= 0 && progress <= 100) {
+ char *progress_string = NULL;
+
+ asprintf (&progress_string, "%d", progress);
+
+ ply_boot_client_system_update (state->client,
+ progress_string,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, state);
+ free (progress_string);
+ } else {
+ ply_error ("couldn't set invalid percentage: %i", progress);
+ ply_event_loop_exit (state->loop, 1);
+ }
}
int
main (int argc,
char **argv)
{
- state_t state = { 0 };
- bool should_help, should_quit, should_ping, should_check_for_active_vt, should_sysinit, should_ask_for_password, should_show_splash, should_hide_splash, should_wait, should_be_verbose, report_error, should_get_plugin_path;
- bool is_connected;
- char *status, *chroot_dir, *ignore_keystroke;
- int exit_code;
-
- exit_code = 0;
-
- signal (SIGPIPE, SIG_IGN);
-
- state.loop = ply_event_loop_new ();
- state.client = ply_boot_client_new ();
- state.command_parser = ply_command_parser_new ("plymouth", "Splash control client");
-
- ply_command_parser_add_options (state.command_parser,
- "help", "This help message", PLY_COMMAND_OPTION_TYPE_FLAG,
- "debug", "Enable verbose debug logging", PLY_COMMAND_OPTION_TYPE_FLAG,
- "get-splash-plugin-path", "Get directory where splash plugins are installed", PLY_COMMAND_OPTION_TYPE_FLAG,
- "newroot", "Tell boot daemon that new root filesystem is mounted", PLY_COMMAND_OPTION_TYPE_STRING,
- "quit", "Tell boot daemon to quit", PLY_COMMAND_OPTION_TYPE_FLAG,
- "ping", "Check of boot daemon is running", PLY_COMMAND_OPTION_TYPE_FLAG,
- "has-active-vt", "Check if boot daemon has an active vt", PLY_COMMAND_OPTION_TYPE_FLAG,
- "sysinit", "Tell boot daemon root filesystem is mounted read-write", PLY_COMMAND_OPTION_TYPE_FLAG,
- "show-splash", "Show splash screen", PLY_COMMAND_OPTION_TYPE_FLAG,
- "hide-splash", "Hide splash screen", PLY_COMMAND_OPTION_TYPE_FLAG,
- "ask-for-password", "Ask user for password", PLY_COMMAND_OPTION_TYPE_FLAG,
- "ignore-keystroke", "Remove sensitivity to a keystroke", PLY_COMMAND_OPTION_TYPE_STRING,
- "update", "Tell boot daemon an update about boot progress", PLY_COMMAND_OPTION_TYPE_STRING,
- "details", "Tell boot daemon there were errors during boot", PLY_COMMAND_OPTION_TYPE_FLAG,
- "wait", "Wait for boot daemon to quit", PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "change-mode", "Change the operation mode",
- (ply_command_handler_t)
- on_change_mode_request, &state,
- "boot-up", "Starting the system up",
- PLY_COMMAND_OPTION_TYPE_FLAG,
- "shutdown", "Shutting the system down",
- PLY_COMMAND_OPTION_TYPE_FLAG,
- "updates", "Applying updates",
- PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "system-update", "Tell the daemon about updates progress",
- (ply_command_handler_t)
- on_system_update_request, &state,
- "progress", "The percentage progress of the updates",
- PLY_COMMAND_OPTION_TYPE_INTEGER,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "update", "Tell daemon about boot status changes",
- (ply_command_handler_t)
- on_update_request, &state,
- "status", "Tell daemon the current boot status",
- PLY_COMMAND_OPTION_TYPE_STRING,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "update-root-fs", "Tell daemon about root filesystem changes",
- (ply_command_handler_t)
- on_update_root_fs_request, &state,
- "new-root-dir", "Root filesystem is about to change",
- PLY_COMMAND_OPTION_TYPE_STRING,
- "read-write", "Root filesystem is no longer read-only",
- PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "show-splash", "Tell daemon to show splash screen",
- (ply_command_handler_t)
- on_show_splash_request, &state,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "hide-splash", "Tell daemon to hide splash screen",
- (ply_command_handler_t)
- on_hide_splash_request, &state,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "ask-for-password", "Ask user for password",
- (ply_command_handler_t)
- on_password_request, &state,
- "command", "Command to send password to via standard input",
- PLY_COMMAND_OPTION_TYPE_STRING,
- "prompt", "Message to display when asking for password",
- PLY_COMMAND_OPTION_TYPE_STRING,
- "number-of-tries", "Number of times to ask before giving up (requires --command)",
- PLY_COMMAND_OPTION_TYPE_INTEGER,
- "dont-pause-progress", "Don't pause boot progress bar while asking",
- PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "ask-question", "Ask user a question",
- (ply_command_handler_t)
- on_question_request, &state,
- "command", "Command to send the answer to via standard input",
- PLY_COMMAND_OPTION_TYPE_STRING,
- "prompt", "Message to display when asking the question",
- PLY_COMMAND_OPTION_TYPE_STRING,
- "dont-pause-progress", "Don't pause boot progress bar while asking",
- PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "display-message", "Display a message",
- (ply_command_handler_t)
- on_display_message_request, &state,
- "text", "The message text",
- PLY_COMMAND_OPTION_TYPE_STRING,
- NULL);
- ply_command_parser_add_command_alias (state.command_parser,
- "display-message",
- "message");
- ply_command_parser_add_command (state.command_parser,
- "hide-message", "Hide a message",
- (ply_command_handler_t)
- on_hide_message_request, &state,
- "text", "The message text",
- PLY_COMMAND_OPTION_TYPE_STRING,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "watch-keystroke", "Become sensitive to a keystroke",
- (ply_command_handler_t)
- on_keystroke_request, &state,
- "command", "Command to send keystroke to via standard input",
- PLY_COMMAND_OPTION_TYPE_STRING,
- "keys", "Keys to become sensitive to",
- PLY_COMMAND_OPTION_TYPE_STRING,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "ignore-keystroke", "Remove sensitivity to a keystroke",
- (ply_command_handler_t)
- on_keystroke_ignore, &state,
- "keys", "Keys to remove sensitivity to",
- PLY_COMMAND_OPTION_TYPE_STRING,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "pause-progress", "Pause boot progress bar",
- (ply_command_handler_t)
- on_progress_pause_request, &state,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "unpause-progress", "Unpause boot progress bar",
- (ply_command_handler_t)
- on_progress_unpause_request, &state,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "report-error", "Tell boot daemon there were errors during boot",
- (ply_command_handler_t)
- on_report_error_request, &state,
- NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "deactivate", "Tell boot daemon to deactivate",
- (ply_command_handler_t)
- on_deactivate_request, &state, NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "reactivate", "Tell boot daemon to reactivate",
- (ply_command_handler_t)
- on_reactivate_request, &state, NULL);
-
- ply_command_parser_add_command (state.command_parser,
- "quit", "Tell boot daemon to quit",
- (ply_command_handler_t)
- on_quit_request, &state,
- "retain-splash", "Don't explicitly hide boot splash on exit",
- PLY_COMMAND_OPTION_TYPE_FLAG, NULL);
-
- if (!ply_command_parser_parse_arguments (state.command_parser, state.loop, argv, argc))
- {
- char *help_string;
-
- help_string = ply_command_parser_get_help_string (state.command_parser);
-
- ply_error ("%s", help_string);
-
- free (help_string);
- return 1;
- }
-
- ply_command_parser_get_options (state.command_parser,
- "help", &should_help,
- "debug", &should_be_verbose,
- "get-splash-plugin-path", &should_get_plugin_path,
- "newroot", &chroot_dir,
- "quit", &should_quit,
- "ping", &should_ping,
- "has-active-vt", &should_check_for_active_vt,
- "sysinit", &should_sysinit,
- "show-splash", &should_show_splash,
- "hide-splash", &should_hide_splash,
- "ask-for-password", &should_ask_for_password,
- "ignore-keystroke", &ignore_keystroke,
- "update", &status,
- "wait", &should_wait,
- "details", &report_error,
- NULL);
-
- if (should_help || argc < 2)
- {
- char *help_string;
-
- help_string = ply_command_parser_get_help_string (state.command_parser);
-
- if (argc < 2)
- fprintf (stderr, "%s", help_string);
- else
- printf ("%s", help_string);
-
- free (help_string);
- return 0;
- }
-
- if (get_kernel_command_line (&state))
- {
- if ((strstr (state.kernel_command_line, "plymouth.debug") != NULL ||
- strstr (state.kernel_command_line, "plymouth:debug") != NULL)
- && !ply_is_tracing ())
- ply_toggle_tracing ();
- }
-
- if (should_be_verbose && !ply_is_tracing ())
- ply_toggle_tracing ();
-
- if (should_get_plugin_path)
- {
- printf ("%s\n", PLYMOUTH_PLUGIN_PATH);
- return 0;
- }
-
- is_connected = ply_boot_client_connect (state.client,
- (ply_boot_client_disconnect_handler_t)
- on_disconnect, &state);
- if (!is_connected)
- {
- ply_trace ("daemon not running");
-
- if (should_ping)
- {
- ply_trace ("ping failed");
- return 1;
+ state_t state = { 0 };
+ bool should_help, should_quit, should_ping, should_check_for_active_vt, should_sysinit, should_ask_for_password, should_show_splash, should_hide_splash, should_wait, should_be_verbose, report_error, should_get_plugin_path;
+ bool is_connected;
+ char *status, *chroot_dir, *ignore_keystroke;
+ int exit_code;
+
+ exit_code = 0;
+
+ signal (SIGPIPE, SIG_IGN);
+
+ state.loop = ply_event_loop_new ();
+ state.client = ply_boot_client_new ();
+ state.command_parser = ply_command_parser_new ("plymouth", "Splash control client");
+
+ ply_command_parser_add_options (state.command_parser,
+ "help", "This help message", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "debug", "Enable verbose debug logging", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "get-splash-plugin-path", "Get directory where splash plugins are installed", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "newroot", "Tell boot daemon that new root filesystem is mounted", PLY_COMMAND_OPTION_TYPE_STRING,
+ "quit", "Tell boot daemon to quit", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "ping", "Check of boot daemon is running", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "has-active-vt", "Check if boot daemon has an active vt", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "sysinit", "Tell boot daemon root filesystem is mounted read-write", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "show-splash", "Show splash screen", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "hide-splash", "Hide splash screen", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "ask-for-password", "Ask user for password", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "ignore-keystroke", "Remove sensitivity to a keystroke", PLY_COMMAND_OPTION_TYPE_STRING,
+ "update", "Tell boot daemon an update about boot progress", PLY_COMMAND_OPTION_TYPE_STRING,
+ "details", "Tell boot daemon there were errors during boot", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "wait", "Wait for boot daemon to quit", PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "change-mode", "Change the operation mode",
+ (ply_command_handler_t)
+ on_change_mode_request, &state,
+ "boot-up", "Starting the system up",
+ PLY_COMMAND_OPTION_TYPE_FLAG,
+ "shutdown", "Shutting the system down",
+ PLY_COMMAND_OPTION_TYPE_FLAG,
+ "updates", "Applying updates",
+ PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "system-update", "Tell the daemon about updates progress",
+ (ply_command_handler_t)
+ on_system_update_request, &state,
+ "progress", "The percentage progress of the updates",
+ PLY_COMMAND_OPTION_TYPE_INTEGER,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "update", "Tell daemon about boot status changes",
+ (ply_command_handler_t)
+ on_update_request, &state,
+ "status", "Tell daemon the current boot status",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "update-root-fs", "Tell daemon about root filesystem changes",
+ (ply_command_handler_t)
+ on_update_root_fs_request, &state,
+ "new-root-dir", "Root filesystem is about to change",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ "read-write", "Root filesystem is no longer read-only",
+ PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "show-splash", "Tell daemon to show splash screen",
+ (ply_command_handler_t)
+ on_show_splash_request, &state,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "hide-splash", "Tell daemon to hide splash screen",
+ (ply_command_handler_t)
+ on_hide_splash_request, &state,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "ask-for-password", "Ask user for password",
+ (ply_command_handler_t)
+ on_password_request, &state,
+ "command", "Command to send password to via standard input",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ "prompt", "Message to display when asking for password",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ "number-of-tries", "Number of times to ask before giving up (requires --command)",
+ PLY_COMMAND_OPTION_TYPE_INTEGER,
+ "dont-pause-progress", "Don't pause boot progress bar while asking",
+ PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "ask-question", "Ask user a question",
+ (ply_command_handler_t)
+ on_question_request, &state,
+ "command", "Command to send the answer to via standard input",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ "prompt", "Message to display when asking the question",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ "dont-pause-progress", "Don't pause boot progress bar while asking",
+ PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "display-message", "Display a message",
+ (ply_command_handler_t)
+ on_display_message_request, &state,
+ "text", "The message text",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ NULL);
+ ply_command_parser_add_command_alias (state.command_parser,
+ "display-message",
+ "message");
+ ply_command_parser_add_command (state.command_parser,
+ "hide-message", "Hide a message",
+ (ply_command_handler_t)
+ on_hide_message_request, &state,
+ "text", "The message text",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "watch-keystroke", "Become sensitive to a keystroke",
+ (ply_command_handler_t)
+ on_keystroke_request, &state,
+ "command", "Command to send keystroke to via standard input",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ "keys", "Keys to become sensitive to",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "ignore-keystroke", "Remove sensitivity to a keystroke",
+ (ply_command_handler_t)
+ on_keystroke_ignore, &state,
+ "keys", "Keys to remove sensitivity to",
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "pause-progress", "Pause boot progress bar",
+ (ply_command_handler_t)
+ on_progress_pause_request, &state,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "unpause-progress", "Unpause boot progress bar",
+ (ply_command_handler_t)
+ on_progress_unpause_request, &state,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "report-error", "Tell boot daemon there were errors during boot",
+ (ply_command_handler_t)
+ on_report_error_request, &state,
+ NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "deactivate", "Tell boot daemon to deactivate",
+ (ply_command_handler_t)
+ on_deactivate_request, &state, NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "reactivate", "Tell boot daemon to reactivate",
+ (ply_command_handler_t)
+ on_reactivate_request, &state, NULL);
+
+ ply_command_parser_add_command (state.command_parser,
+ "quit", "Tell boot daemon to quit",
+ (ply_command_handler_t)
+ on_quit_request, &state,
+ "retain-splash", "Don't explicitly hide boot splash on exit",
+ PLY_COMMAND_OPTION_TYPE_FLAG, NULL);
+
+ if (!ply_command_parser_parse_arguments (state.command_parser, state.loop, argv, argc)) {
+ char *help_string;
+
+ help_string = ply_command_parser_get_help_string (state.command_parser);
+
+ ply_error ("%s", help_string);
+
+ free (help_string);
+ return 1;
}
- if (should_check_for_active_vt)
- {
- ply_trace ("has active vt? failed");
- return 1;
+
+ ply_command_parser_get_options (state.command_parser,
+ "help", &should_help,
+ "debug", &should_be_verbose,
+ "get-splash-plugin-path", &should_get_plugin_path,
+ "newroot", &chroot_dir,
+ "quit", &should_quit,
+ "ping", &should_ping,
+ "has-active-vt", &should_check_for_active_vt,
+ "sysinit", &should_sysinit,
+ "show-splash", &should_show_splash,
+ "hide-splash", &should_hide_splash,
+ "ask-for-password", &should_ask_for_password,
+ "ignore-keystroke", &ignore_keystroke,
+ "update", &status,
+ "wait", &should_wait,
+ "details", &report_error,
+ NULL);
+
+ if (should_help || argc < 2) {
+ char *help_string;
+
+ help_string = ply_command_parser_get_help_string (state.command_parser);
+
+ if (argc < 2)
+ fprintf (stderr, "%s", help_string);
+ else
+ printf ("%s", help_string);
+
+ free (help_string);
+ return 0;
}
- if (should_wait)
- {
- ply_trace("no need to wait");
- return 0;
+
+ if (get_kernel_command_line (&state)) {
+ if ((strstr (state.kernel_command_line, "plymouth.debug") != NULL ||
+ strstr (state.kernel_command_line, "plymouth:debug") != NULL)
+ && !ply_is_tracing ())
+ ply_toggle_tracing ();
}
- }
- ply_boot_client_attach_to_event_loop (state.client, state.loop);
+ if (should_be_verbose && !ply_is_tracing ())
+ ply_toggle_tracing ();
- if (should_show_splash)
- ply_boot_client_tell_daemon_to_show_splash (state.client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (should_hide_splash)
- ply_boot_client_tell_daemon_to_hide_splash (state.client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (should_quit)
- ply_boot_client_tell_daemon_to_quit (state.client,
- false,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (should_ping)
- ply_boot_client_ping_daemon (state.client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (should_check_for_active_vt)
- ply_boot_client_ask_daemon_has_active_vt (state.client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (status != NULL)
- ply_boot_client_update_daemon (state.client, status,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (should_ask_for_password)
- {
- password_answer_state_t answer_state = { 0 };
-
- answer_state.state = &state;
- answer_state.number_of_tries_left = 1;
- ply_boot_client_ask_daemon_for_password (state.client,
- NULL,
- (ply_boot_client_answer_handler_t)
- on_password_answer,
- (ply_boot_client_response_handler_t)
- on_password_answer_failure, &answer_state);
- }
- else if (ignore_keystroke)
- {
- ply_boot_client_ask_daemon_to_ignore_keystroke (state.client,
- ignore_keystroke,
- (ply_boot_client_answer_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- }
- else if (should_sysinit)
- ply_boot_client_tell_daemon_system_is_initialized (state.client,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
- else if (chroot_dir)
- ply_boot_client_tell_daemon_to_change_root (state.client, chroot_dir,
- (ply_boot_client_response_handler_t)
- on_success,
- (ply_boot_client_response_handler_t)
- on_failure, &state);
-
- else if (should_wait)
- {} // Do nothing
- else if (report_error)
- ply_boot_client_tell_daemon_about_error (state.client,
+ if (should_get_plugin_path) {
+ printf ("%s\n", PLYMOUTH_PLUGIN_PATH);
+ return 0;
+ }
+
+ is_connected = ply_boot_client_connect (state.client,
+ (ply_boot_client_disconnect_handler_t)
+ on_disconnect, &state);
+ if (!is_connected) {
+ ply_trace ("daemon not running");
+
+ if (should_ping) {
+ ply_trace ("ping failed");
+ return 1;
+ }
+ if (should_check_for_active_vt) {
+ ply_trace ("has active vt? failed");
+ return 1;
+ }
+ if (should_wait) {
+ ply_trace ("no need to wait");
+ return 0;
+ }
+ }
+
+ ply_boot_client_attach_to_event_loop (state.client, state.loop);
+
+ if (should_show_splash) {
+ ply_boot_client_tell_daemon_to_show_splash (state.client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (should_hide_splash) {
+ ply_boot_client_tell_daemon_to_hide_splash (state.client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (should_quit) {
+ ply_boot_client_tell_daemon_to_quit (state.client,
+ false,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (should_ping) {
+ ply_boot_client_ping_daemon (state.client,
(ply_boot_client_response_handler_t)
on_success,
(ply_boot_client_response_handler_t)
on_failure, &state);
+ } else if (should_check_for_active_vt) {
+ ply_boot_client_ask_daemon_has_active_vt (state.client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (status != NULL) {
+ ply_boot_client_update_daemon (state.client, status,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (should_ask_for_password) {
+ password_answer_state_t answer_state = { 0 };
+
+ answer_state.state = &state;
+ answer_state.number_of_tries_left = 1;
+ ply_boot_client_ask_daemon_for_password (state.client,
+ NULL,
+ (ply_boot_client_answer_handler_t)
+ on_password_answer,
+ (ply_boot_client_response_handler_t)
+ on_password_answer_failure, &answer_state);
+ } else if (ignore_keystroke) {
+ ply_boot_client_ask_daemon_to_ignore_keystroke (state.client,
+ ignore_keystroke,
+ (ply_boot_client_answer_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (should_sysinit) {
+ ply_boot_client_tell_daemon_system_is_initialized (state.client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (chroot_dir) {
+ ply_boot_client_tell_daemon_to_change_root (state.client, chroot_dir,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ } else if (should_wait) {
+ } // Do nothing
+ else if (report_error) {
+ ply_boot_client_tell_daemon_about_error (state.client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, &state);
+ }
- exit_code = ply_event_loop_run (state.loop);
+ exit_code = ply_event_loop_run (state.loop);
- ply_boot_client_free (state.client);
+ ply_boot_client_free (state.client);
- ply_event_loop_free (state.loop);
+ ply_event_loop_free (state.loop);
- return exit_code;
+ return exit_code;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-core/ply-boot-splash-plugin.h b/src/libply-splash-core/ply-boot-splash-plugin.h
index 2d73d661..710047e9 100644
--- a/src/libply-splash-core/ply-boot-splash-plugin.h
+++ b/src/libply-splash-core/ply-boot-splash-plugin.h
@@ -36,61 +36,61 @@
typedef enum
{
- PLY_BOOT_SPLASH_MODE_BOOT_UP,
- PLY_BOOT_SPLASH_MODE_SHUTDOWN,
- PLY_BOOT_SPLASH_MODE_UPDATES,
- PLY_BOOT_SPLASH_MODE_INVALID
+ PLY_BOOT_SPLASH_MODE_BOOT_UP,
+ PLY_BOOT_SPLASH_MODE_SHUTDOWN,
+ PLY_BOOT_SPLASH_MODE_UPDATES,
+ PLY_BOOT_SPLASH_MODE_INVALID
} ply_boot_splash_mode_t;
typedef struct _ply_boot_splash_plugin ply_boot_splash_plugin_t;
typedef struct
{
- ply_boot_splash_plugin_t * (* create_plugin) (ply_key_file_t *key_file);
- void (* destroy_plugin) (ply_boot_splash_plugin_t *plugin);
+ ply_boot_splash_plugin_t * (*create_plugin)(ply_key_file_t * key_file);
+ void (*destroy_plugin)(ply_boot_splash_plugin_t *plugin);
- void (* set_keyboard) (ply_boot_splash_plugin_t *plugin,
- ply_keyboard_t *keyboard);
- void (* unset_keyboard) (ply_boot_splash_plugin_t *plugin,
- ply_keyboard_t *keyboard);
- void (* add_pixel_display) (ply_boot_splash_plugin_t *plugin,
- ply_pixel_display_t *display);
- void (* remove_pixel_display) (ply_boot_splash_plugin_t *plugin,
- ply_pixel_display_t *display);
- void (* add_text_display) (ply_boot_splash_plugin_t *plugin,
- ply_text_display_t *display);
- void (* remove_text_display) (ply_boot_splash_plugin_t *plugin,
- ply_text_display_t *display);
- bool (* show_splash_screen) (ply_boot_splash_plugin_t *plugin,
- ply_event_loop_t *loop,
- ply_buffer_t *boot_buffer,
- ply_boot_splash_mode_t mode);
- void (* system_update) (ply_boot_splash_plugin_t *plugin,
- int progress);
- void (* update_status) (ply_boot_splash_plugin_t *plugin,
- const char *status);
- void (* on_boot_output) (ply_boot_splash_plugin_t *plugin,
- const char *output,
- size_t size);
- void (* on_boot_progress) (ply_boot_splash_plugin_t *plugin,
- double duration,
- double percent_done);
- void (* on_root_mounted) (ply_boot_splash_plugin_t *plugin);
- void (* hide_splash_screen) (ply_boot_splash_plugin_t *plugin,
- ply_event_loop_t *loop);
- void (* display_message) (ply_boot_splash_plugin_t *plugin,
- const char *message);
- void (* hide_message) (ply_boot_splash_plugin_t *plugin,
- const char *message);
- void (* display_normal) (ply_boot_splash_plugin_t *plugin);
- void (* display_password) (ply_boot_splash_plugin_t *plugin,
- const char *prompt,
- int bullets);
- void (* display_question) (ply_boot_splash_plugin_t *plugin,
- const char *prompt,
- const char *entry_text);
- void (* become_idle) (ply_boot_splash_plugin_t *plugin,
- ply_trigger_t *idle_trigger);
+ void (*set_keyboard)(ply_boot_splash_plugin_t *plugin,
+ ply_keyboard_t *keyboard);
+ void (*unset_keyboard)(ply_boot_splash_plugin_t *plugin,
+ ply_keyboard_t *keyboard);
+ void (*add_pixel_display)(ply_boot_splash_plugin_t *plugin,
+ ply_pixel_display_t *display);
+ void (*remove_pixel_display)(ply_boot_splash_plugin_t *plugin,
+ ply_pixel_display_t *display);
+ void (*add_text_display)(ply_boot_splash_plugin_t *plugin,
+ ply_text_display_t *display);
+ void (*remove_text_display)(ply_boot_splash_plugin_t *plugin,
+ ply_text_display_t *display);
+ bool (*show_splash_screen)(ply_boot_splash_plugin_t *plugin,
+ ply_event_loop_t *loop,
+ ply_buffer_t *boot_buffer,
+ ply_boot_splash_mode_t mode);
+ void (*system_update)(ply_boot_splash_plugin_t *plugin,
+ int progress);
+ void (*update_status)(ply_boot_splash_plugin_t *plugin,
+ const char *status);
+ void (*on_boot_output)(ply_boot_splash_plugin_t *plugin,
+ const char *output,
+ size_t size);
+ void (*on_boot_progress)(ply_boot_splash_plugin_t *plugin,
+ double duration,
+ double percent_done);
+ void (*on_root_mounted)(ply_boot_splash_plugin_t *plugin);
+ void (*hide_splash_screen)(ply_boot_splash_plugin_t *plugin,
+ ply_event_loop_t *loop);
+ void (*display_message)(ply_boot_splash_plugin_t *plugin,
+ const char *message);
+ void (*hide_message)(ply_boot_splash_plugin_t *plugin,
+ const char *message);
+ void (*display_normal)(ply_boot_splash_plugin_t *plugin);
+ void (*display_password)(ply_boot_splash_plugin_t *plugin,
+ const char *prompt,
+ int bullets);
+ void (*display_question)(ply_boot_splash_plugin_t *plugin,
+ const char *prompt,
+ const char *entry_text);
+ void (*become_idle)(ply_boot_splash_plugin_t *plugin,
+ ply_trigger_t *idle_trigger);
} ply_boot_splash_plugin_interface_t;
#endif /* PLY_BOOT_SPLASH_PLUGIN_H */
diff --git a/src/libply-splash-core/ply-boot-splash.c b/src/libply-splash-core/ply-boot-splash.c
index 160ce45e..310d4d5a 100644
--- a/src/libply-splash-core/ply-boot-splash.c
+++ b/src/libply-splash-core/ply-boot-splash.c
@@ -50,517 +50,493 @@
struct _ply_boot_splash
{
- ply_event_loop_t *loop;
- ply_module_handle_t *module_handle;
- const ply_boot_splash_plugin_interface_t *plugin_interface;
- ply_boot_splash_plugin_t *plugin;
- ply_boot_splash_mode_t mode;
- ply_buffer_t *boot_buffer;
- ply_trigger_t *idle_trigger;
- ply_list_t *seats;
-
- char *theme_path;
- char *plugin_dir;
- char *status;
-
- ply_progress_t *progress;
- ply_boot_splash_on_idle_handler_t idle_handler;
- void *idle_handler_user_data;
-
- uint32_t is_loaded : 1;
- uint32_t should_force_text_mode : 1;
+ ply_event_loop_t *loop;
+ ply_module_handle_t *module_handle;
+ const ply_boot_splash_plugin_interface_t *plugin_interface;
+ ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_mode_t mode;
+ ply_buffer_t *boot_buffer;
+ ply_trigger_t *idle_trigger;
+ ply_list_t *seats;
+
+ char *theme_path;
+ char *plugin_dir;
+ char *status;
+
+ ply_progress_t *progress;
+ ply_boot_splash_on_idle_handler_t idle_handler;
+ void *idle_handler_user_data;
+
+ uint32_t is_loaded : 1;
+ uint32_t should_force_text_mode : 1;
};
typedef const ply_boot_splash_plugin_interface_t *
- (* get_plugin_interface_function_t) (void);
+(*get_plugin_interface_function_t) (void);
static void ply_boot_splash_update_progress (ply_boot_splash_t *splash);
static void ply_boot_splash_detach_from_event_loop (ply_boot_splash_t *splash);
ply_boot_splash_t *
-ply_boot_splash_new (const char *theme_path,
- const char *plugin_dir,
- ply_buffer_t *boot_buffer)
+ply_boot_splash_new (const char *theme_path,
+ const char *plugin_dir,
+ ply_buffer_t *boot_buffer)
{
- ply_boot_splash_t *splash;
+ ply_boot_splash_t *splash;
- assert (theme_path != NULL);
+ assert (theme_path != NULL);
- splash = calloc (1, sizeof (ply_boot_splash_t));
- splash->loop = NULL;
- splash->theme_path = strdup (theme_path);
- splash->plugin_dir = strdup (plugin_dir);
- splash->module_handle = NULL;
- splash->mode = PLY_BOOT_SPLASH_MODE_INVALID;
+ splash = calloc (1, sizeof(ply_boot_splash_t));
+ splash->loop = NULL;
+ splash->theme_path = strdup (theme_path);
+ splash->plugin_dir = strdup (plugin_dir);
+ splash->module_handle = NULL;
+ splash->mode = PLY_BOOT_SPLASH_MODE_INVALID;
- splash->boot_buffer = boot_buffer;
- splash->seats = ply_list_new ();
+ splash->boot_buffer = boot_buffer;
+ splash->seats = ply_list_new ();
- return splash;
+ return splash;
}
static void
detach_from_seat (ply_boot_splash_t *splash,
ply_seat_t *seat)
{
- ply_keyboard_t *keyboard;
- ply_list_t *displays;
- ply_list_node_t *node, *next_node;
-
- ply_trace ("removing keyboard");
- if (splash->plugin_interface->unset_keyboard != NULL)
- {
- keyboard = ply_seat_get_keyboard (seat);
- splash->plugin_interface->unset_keyboard (splash->plugin, keyboard);
- }
+ ply_keyboard_t *keyboard;
+ ply_list_t *displays;
+ ply_list_node_t *node, *next_node;
+
+ ply_trace ("removing keyboard");
+ if (splash->plugin_interface->unset_keyboard != NULL) {
+ keyboard = ply_seat_get_keyboard (seat);
+ splash->plugin_interface->unset_keyboard (splash->plugin, keyboard);
+ }
- ply_trace ("removing pixel displays");
- displays = ply_seat_get_pixel_displays (seat);
+ ply_trace ("removing pixel displays");
+ displays = ply_seat_get_pixel_displays (seat);
- node = ply_list_get_first_node (displays);
- while (node != NULL)
- {
- ply_pixel_display_t *display;
- ply_list_node_t *next_node;
- unsigned long width, height;
+ node = ply_list_get_first_node (displays);
+ while (node != NULL) {
+ ply_pixel_display_t *display;
+ ply_list_node_t *next_node;
+ unsigned long width, height;
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (displays, node);
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (displays, node);
- width = ply_pixel_display_get_width (display);
- height = ply_pixel_display_get_height (display);
+ width = ply_pixel_display_get_width (display);
+ height = ply_pixel_display_get_height (display);
- ply_trace ("Removing %lux%lu pixel display", width, height);
+ ply_trace ("Removing %lux%lu pixel display", width, height);
- if (splash->plugin_interface->remove_pixel_display != NULL)
- splash->plugin_interface->remove_pixel_display (splash->plugin, display);
+ if (splash->plugin_interface->remove_pixel_display != NULL)
+ splash->plugin_interface->remove_pixel_display (splash->plugin, display);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_trace ("removing text displays");
- displays = ply_seat_get_text_displays (seat);
+ ply_trace ("removing text displays");
+ displays = ply_seat_get_text_displays (seat);
- node = ply_list_get_first_node (displays);
- while (node != NULL)
- {
- ply_text_display_t *display;
- int number_of_columns, number_of_rows;
+ node = ply_list_get_first_node (displays);
+ while (node != NULL) {
+ ply_text_display_t *display;
+ int number_of_columns, number_of_rows;
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (displays, node);
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (displays, node);
- number_of_columns = ply_text_display_get_number_of_columns (display);
- number_of_rows = ply_text_display_get_number_of_rows (display);
+ number_of_columns = ply_text_display_get_number_of_columns (display);
+ number_of_rows = ply_text_display_get_number_of_rows (display);
- ply_trace ("Removing %dx%d text display", number_of_columns, number_of_rows);
+ ply_trace ("Removing %dx%d text display", number_of_columns, number_of_rows);
- if (splash->plugin_interface->remove_text_display != NULL)
- splash->plugin_interface->remove_text_display (splash->plugin, display);
+ if (splash->plugin_interface->remove_text_display != NULL)
+ splash->plugin_interface->remove_text_display (splash->plugin, display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
attach_to_seat (ply_boot_splash_t *splash,
ply_seat_t *seat)
{
- ply_keyboard_t *keyboard;
- ply_list_t *displays;
- ply_list_node_t *node, *next_node;
+ ply_keyboard_t *keyboard;
+ ply_list_t *displays;
+ ply_list_node_t *node, *next_node;
- if (splash->plugin_interface->set_keyboard != NULL)
- {
- keyboard = ply_seat_get_keyboard (seat);
- splash->plugin_interface->set_keyboard (splash->plugin, keyboard);
- }
+ if (splash->plugin_interface->set_keyboard != NULL) {
+ keyboard = ply_seat_get_keyboard (seat);
+ splash->plugin_interface->set_keyboard (splash->plugin, keyboard);
+ }
- if (splash->plugin_interface->add_pixel_display != NULL)
- {
- displays = ply_seat_get_pixel_displays (seat);
+ if (splash->plugin_interface->add_pixel_display != NULL) {
+ displays = ply_seat_get_pixel_displays (seat);
- ply_trace ("adding pixel displays");
- node = ply_list_get_first_node (displays);
- while (node != NULL)
- {
- ply_pixel_display_t *display;
- ply_list_node_t *next_node;
- unsigned long width, height;
+ ply_trace ("adding pixel displays");
+ node = ply_list_get_first_node (displays);
+ while (node != NULL) {
+ ply_pixel_display_t *display;
+ ply_list_node_t *next_node;
+ unsigned long width, height;
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (displays, node);
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (displays, node);
- width = ply_pixel_display_get_width (display);
- height = ply_pixel_display_get_height (display);
+ width = ply_pixel_display_get_width (display);
+ height = ply_pixel_display_get_height (display);
- ply_trace ("Adding %lux%lu pixel display", width, height);
+ ply_trace ("Adding %lux%lu pixel display", width, height);
- splash->plugin_interface->add_pixel_display (splash->plugin, display);
+ splash->plugin_interface->add_pixel_display (splash->plugin, display);
- node = next_node;
+ node = next_node;
+ }
}
- }
- if (splash->plugin_interface->add_text_display != NULL)
- {
- displays = ply_seat_get_text_displays (seat);
+ if (splash->plugin_interface->add_text_display != NULL) {
+ displays = ply_seat_get_text_displays (seat);
- ply_trace ("adding text displays");
- node = ply_list_get_first_node (displays);
- while (node != NULL)
- {
- ply_text_display_t *display;
- int number_of_columns, number_of_rows;
+ ply_trace ("adding text displays");
+ node = ply_list_get_first_node (displays);
+ while (node != NULL) {
+ ply_text_display_t *display;
+ int number_of_columns, number_of_rows;
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (displays, node);
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (displays, node);
- number_of_columns = ply_text_display_get_number_of_columns (display);
- number_of_rows = ply_text_display_get_number_of_rows (display);
+ number_of_columns = ply_text_display_get_number_of_columns (display);
+ number_of_rows = ply_text_display_get_number_of_rows (display);
- ply_trace ("Adding %dx%d text display", number_of_columns, number_of_rows);
+ ply_trace ("Adding %dx%d text display", number_of_columns, number_of_rows);
- splash->plugin_interface->add_text_display (splash->plugin, display);
+ splash->plugin_interface->add_text_display (splash->plugin, display);
- node = next_node;
+ node = next_node;
+ }
}
- }
}
void
ply_boot_splash_attach_to_seat (ply_boot_splash_t *splash,
ply_seat_t *seat)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_find_node (splash->seats, seat);
+ node = ply_list_find_node (splash->seats, seat);
- if (node != NULL)
- return;
+ if (node != NULL)
+ return;
- ply_list_append_data (splash->seats, seat);
- attach_to_seat (splash, seat);
+ ply_list_append_data (splash->seats, seat);
+ attach_to_seat (splash, seat);
}
void
ply_boot_splash_detach_from_seat (ply_boot_splash_t *splash,
ply_seat_t *seat)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_find_node (splash->seats, seat);
+ node = ply_list_find_node (splash->seats, seat);
- if (node == NULL)
- return;
+ if (node == NULL)
+ return;
- ply_list_remove_data (splash->seats, seat);
- detach_from_seat (splash, seat);
+ ply_list_remove_data (splash->seats, seat);
+ detach_from_seat (splash, seat);
}
bool
ply_boot_splash_load (ply_boot_splash_t *splash)
{
- ply_key_file_t *key_file;
- char *module_name;
- char *module_path;
+ ply_key_file_t *key_file;
+ char *module_name;
+ char *module_path;
- assert (splash != NULL);
+ assert (splash != NULL);
- get_plugin_interface_function_t get_boot_splash_plugin_interface;
+ get_plugin_interface_function_t get_boot_splash_plugin_interface;
- key_file = ply_key_file_new (splash->theme_path);
+ key_file = ply_key_file_new (splash->theme_path);
- if (!ply_key_file_load (key_file))
- return false;
+ if (!ply_key_file_load (key_file))
+ return false;
- module_name = ply_key_file_get_value (key_file, "Plymouth Theme", "ModuleName");
+ module_name = ply_key_file_get_value (key_file, "Plymouth Theme", "ModuleName");
- asprintf (&module_path, "%s%s.so",
- splash->plugin_dir, module_name);
- free (module_name);
+ asprintf (&module_path, "%s%s.so",
+ splash->plugin_dir, module_name);
+ free (module_name);
- splash->module_handle = ply_open_module (module_path);
+ splash->module_handle = ply_open_module (module_path);
- free (module_path);
+ free (module_path);
- if (splash->module_handle == NULL)
- {
- ply_key_file_free (key_file);
- return false;
- }
-
- get_boot_splash_plugin_interface = (get_plugin_interface_function_t)
- ply_module_look_up_function (splash->module_handle,
- "ply_boot_splash_plugin_get_interface");
+ if (splash->module_handle == NULL) {
+ ply_key_file_free (key_file);
+ return false;
+ }
- if (get_boot_splash_plugin_interface == NULL)
- {
- ply_save_errno ();
- ply_close_module (splash->module_handle);
- splash->module_handle = NULL;
- ply_key_file_free (key_file);
- ply_restore_errno ();
- return false;
- }
+ get_boot_splash_plugin_interface = (get_plugin_interface_function_t)
+ ply_module_look_up_function (splash->module_handle,
+ "ply_boot_splash_plugin_get_interface");
+
+ if (get_boot_splash_plugin_interface == NULL) {
+ ply_save_errno ();
+ ply_close_module (splash->module_handle);
+ splash->module_handle = NULL;
+ ply_key_file_free (key_file);
+ ply_restore_errno ();
+ return false;
+ }
- splash->plugin_interface = get_boot_splash_plugin_interface ();
+ splash->plugin_interface = get_boot_splash_plugin_interface ();
- if (splash->plugin_interface == NULL)
- {
- ply_save_errno ();
- ply_close_module (splash->module_handle);
- splash->module_handle = NULL;
- ply_key_file_free (key_file);
- ply_restore_errno ();
- return false;
- }
+ if (splash->plugin_interface == NULL) {
+ ply_save_errno ();
+ ply_close_module (splash->module_handle);
+ splash->module_handle = NULL;
+ ply_key_file_free (key_file);
+ ply_restore_errno ();
+ return false;
+ }
- splash->plugin = splash->plugin_interface->create_plugin (key_file);
+ splash->plugin = splash->plugin_interface->create_plugin (key_file);
- ply_key_file_free (key_file);
+ ply_key_file_free (key_file);
- assert (splash->plugin != NULL);
+ assert (splash->plugin != NULL);
- splash->is_loaded = true;
+ splash->is_loaded = true;
- return true;
+ return true;
}
bool
ply_boot_splash_load_built_in (ply_boot_splash_t *splash)
{
- get_plugin_interface_function_t get_boot_splash_plugin_interface;
+ get_plugin_interface_function_t get_boot_splash_plugin_interface;
- assert (splash != NULL);
+ assert (splash != NULL);
- splash->module_handle = ply_open_built_in_module ();
+ splash->module_handle = ply_open_built_in_module ();
- if (splash->module_handle == NULL)
- return false;
+ if (splash->module_handle == NULL)
+ return false;
- get_boot_splash_plugin_interface = (get_plugin_interface_function_t)
- ply_module_look_up_function (splash->module_handle,
- "ply_boot_splash_plugin_get_interface");
+ get_boot_splash_plugin_interface = (get_plugin_interface_function_t)
+ ply_module_look_up_function (splash->module_handle,
+ "ply_boot_splash_plugin_get_interface");
- if (get_boot_splash_plugin_interface == NULL)
- {
- ply_save_errno ();
- ply_close_module (splash->module_handle);
- splash->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
+ if (get_boot_splash_plugin_interface == NULL) {
+ ply_save_errno ();
+ ply_close_module (splash->module_handle);
+ splash->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
- splash->plugin_interface = get_boot_splash_plugin_interface ();
+ splash->plugin_interface = get_boot_splash_plugin_interface ();
- if (splash->plugin_interface == NULL)
- {
- ply_save_errno ();
- ply_close_module (splash->module_handle);
- splash->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
+ if (splash->plugin_interface == NULL) {
+ ply_save_errno ();
+ ply_close_module (splash->module_handle);
+ splash->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
- splash->plugin = splash->plugin_interface->create_plugin (NULL);
+ splash->plugin = splash->plugin_interface->create_plugin (NULL);
- assert (splash->plugin != NULL);
+ assert (splash->plugin != NULL);
- splash->is_loaded = true;
+ splash->is_loaded = true;
- return true;
+ return true;
}
void
ply_boot_splash_unload (ply_boot_splash_t *splash)
{
- assert (splash != NULL);
- assert (splash->plugin != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->module_handle != NULL);
+ assert (splash != NULL);
+ assert (splash->plugin != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->module_handle != NULL);
- splash->plugin_interface->destroy_plugin (splash->plugin);
- splash->plugin = NULL;
+ splash->plugin_interface->destroy_plugin (splash->plugin);
+ splash->plugin = NULL;
- ply_close_module (splash->module_handle);
- splash->plugin_interface = NULL;
- splash->module_handle = NULL;
+ ply_close_module (splash->module_handle);
+ splash->plugin_interface = NULL;
+ splash->module_handle = NULL;
- splash->is_loaded = false;
+ splash->is_loaded = false;
}
static void
detach_from_seats (ply_boot_splash_t *splash)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("detaching from seats");
+ ply_trace ("detaching from seats");
- node = ply_list_get_first_node (splash->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (splash->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (splash->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (splash->seats, node);
- detach_from_seat (splash, seat);
+ detach_from_seat (splash, seat);
- ply_list_remove_node (splash->seats, node);
+ ply_list_remove_node (splash->seats, node);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_boot_splash_free (ply_boot_splash_t *splash)
{
- ply_trace ("freeing splash");
- if (splash == NULL)
- return;
-
- if (splash->loop != NULL)
- {
- if (splash->plugin_interface->on_boot_progress != NULL)
- {
- ply_event_loop_stop_watching_for_timeout (splash->loop,
- (ply_event_loop_timeout_handler_t)
- ply_boot_splash_update_progress, splash);
+ ply_trace ("freeing splash");
+ if (splash == NULL)
+ return;
+
+ if (splash->loop != NULL) {
+ if (splash->plugin_interface->on_boot_progress != NULL) {
+ ply_event_loop_stop_watching_for_timeout (splash->loop,
+ (ply_event_loop_timeout_handler_t)
+ ply_boot_splash_update_progress, splash);
+ }
+
+ ply_event_loop_stop_watching_for_exit (splash->loop, (ply_event_loop_exit_handler_t)
+ ply_boot_splash_detach_from_event_loop,
+ splash);
}
- ply_event_loop_stop_watching_for_exit (splash->loop, (ply_event_loop_exit_handler_t)
- ply_boot_splash_detach_from_event_loop,
- splash);
- }
-
- detach_from_seats (splash);
- ply_list_free (splash->seats);
+ detach_from_seats (splash);
+ ply_list_free (splash->seats);
- if (splash->module_handle != NULL)
- ply_boot_splash_unload (splash);
+ if (splash->module_handle != NULL)
+ ply_boot_splash_unload (splash);
- if (splash->idle_trigger != NULL)
- ply_trigger_free (splash->idle_trigger);
+ if (splash->idle_trigger != NULL)
+ ply_trigger_free (splash->idle_trigger);
- free (splash->theme_path);
- free (splash->plugin_dir);
- free (splash);
+ free (splash->theme_path);
+ free (splash->plugin_dir);
+ free (splash);
}
static void
ply_boot_splash_update_progress (ply_boot_splash_t *splash)
{
- double percentage=0.0;
- double time=0.0;
-
- assert (splash != NULL);
-
- if (splash->progress)
- {
- percentage = ply_progress_get_percentage(splash->progress);
- time = ply_progress_get_time(splash->progress);
- }
-
- if (splash->plugin_interface->on_boot_progress != NULL)
- splash->plugin_interface->on_boot_progress (splash->plugin,
- time,
- percentage);
-
- ply_event_loop_watch_for_timeout (splash->loop,
- 1.0 / UPDATES_PER_SECOND,
- (ply_event_loop_timeout_handler_t)
- ply_boot_splash_update_progress, splash);
+ double percentage = 0.0;
+ double time = 0.0;
+
+ assert (splash != NULL);
+
+ if (splash->progress) {
+ percentage = ply_progress_get_percentage (splash->progress);
+ time = ply_progress_get_time (splash->progress);
+ }
+
+ if (splash->plugin_interface->on_boot_progress != NULL)
+ splash->plugin_interface->on_boot_progress (splash->plugin,
+ time,
+ percentage);
+
+ ply_event_loop_watch_for_timeout (splash->loop,
+ 1.0 / UPDATES_PER_SECOND,
+ (ply_event_loop_timeout_handler_t)
+ ply_boot_splash_update_progress, splash);
}
void
ply_boot_splash_attach_progress (ply_boot_splash_t *splash,
- ply_progress_t *progress)
+ ply_progress_t *progress)
{
- assert (splash != NULL);
- assert (progress != NULL);
- assert (splash->progress == NULL);
- splash->progress = progress;
+ assert (splash != NULL);
+ assert (progress != NULL);
+ assert (splash->progress == NULL);
+ splash->progress = progress;
}
bool
-ply_boot_splash_show (ply_boot_splash_t *splash,
+ply_boot_splash_show (ply_boot_splash_t *splash,
ply_boot_splash_mode_t mode)
{
- assert (splash != NULL);
- assert (mode != PLY_BOOT_SPLASH_MODE_INVALID);
- assert (splash->module_handle != NULL);
- assert (splash->loop != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- assert (splash->plugin_interface->show_splash_screen != NULL);
-
- if (splash->mode == mode)
- {
- ply_trace ("already set same splash screen mode");
- return true;
- }
- else if (splash->mode != PLY_BOOT_SPLASH_MODE_INVALID)
- {
- splash->plugin_interface->hide_splash_screen (splash->plugin,
- splash->loop);
- }
-
- ply_trace ("showing splash screen");
- if (!splash->plugin_interface->show_splash_screen (splash->plugin,
- splash->loop,
- splash->boot_buffer,
- mode))
- {
-
- ply_save_errno ();
- ply_trace ("can't show splash: %m");
- ply_restore_errno ();
- return false;
- }
-
- if (splash->plugin_interface->on_boot_progress != NULL)
- {
- ply_boot_splash_update_progress (splash);
- }
-
- splash->mode = mode;
- return true;
+ assert (splash != NULL);
+ assert (mode != PLY_BOOT_SPLASH_MODE_INVALID);
+ assert (splash->module_handle != NULL);
+ assert (splash->loop != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ assert (splash->plugin_interface->show_splash_screen != NULL);
+
+ if (splash->mode == mode) {
+ ply_trace ("already set same splash screen mode");
+ return true;
+ } else if (splash->mode != PLY_BOOT_SPLASH_MODE_INVALID) {
+ splash->plugin_interface->hide_splash_screen (splash->plugin,
+ splash->loop);
+ }
+
+ ply_trace ("showing splash screen");
+ if (!splash->plugin_interface->show_splash_screen (splash->plugin,
+ splash->loop,
+ splash->boot_buffer,
+ mode)) {
+ ply_save_errno ();
+ ply_trace ("can't show splash: %m");
+ ply_restore_errno ();
+ return false;
+ }
+
+ if (splash->plugin_interface->on_boot_progress != NULL)
+ ply_boot_splash_update_progress (splash);
+
+ splash->mode = mode;
+ return true;
}
bool
ply_boot_splash_system_update (ply_boot_splash_t *splash,
int progress)
{
- assert (splash != NULL);
- assert (splash->module_handle != NULL);
- assert (splash->loop != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
-
- if (splash->plugin_interface->system_update == NULL)
- return false;
-
- ply_trace ("updating system %i%%", progress);
- splash->plugin_interface->system_update (splash->plugin,
- progress);
- return true;
+ assert (splash != NULL);
+ assert (splash->module_handle != NULL);
+ assert (splash->loop != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+
+ if (splash->plugin_interface->system_update == NULL)
+ return false;
+
+ ply_trace ("updating system %i%%", progress);
+ splash->plugin_interface->system_update (splash->plugin,
+ progress);
+ return true;
}
void
ply_boot_splash_update_status (ply_boot_splash_t *splash,
const char *status)
{
- assert (splash != NULL);
- assert (status != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- assert (splash->plugin_interface->update_status != NULL);
- assert (splash->mode != PLY_BOOT_SPLASH_MODE_INVALID);
-
- splash->plugin_interface->update_status (splash->plugin, status);
+ assert (splash != NULL);
+ assert (status != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ assert (splash->plugin_interface->update_status != NULL);
+ assert (splash->mode != PLY_BOOT_SPLASH_MODE_INVALID);
+
+ splash->plugin_interface->update_status (splash->plugin, status);
}
void
@@ -568,107 +544,105 @@ ply_boot_splash_update_output (ply_boot_splash_t *splash,
const char *output,
size_t size)
{
- assert (splash != NULL);
- assert (output != NULL);
+ assert (splash != NULL);
+ assert (output != NULL);
- if (splash->plugin_interface->on_boot_output != NULL)
- splash->plugin_interface->on_boot_output (splash->plugin, output, size);
+ if (splash->plugin_interface->on_boot_output != NULL)
+ splash->plugin_interface->on_boot_output (splash->plugin, output, size);
}
void
ply_boot_splash_root_mounted (ply_boot_splash_t *splash)
{
- assert (splash != NULL);
+ assert (splash != NULL);
- if (splash->plugin_interface->on_root_mounted != NULL)
- splash->plugin_interface->on_root_mounted (splash->plugin);
+ if (splash->plugin_interface->on_root_mounted != NULL)
+ splash->plugin_interface->on_root_mounted (splash->plugin);
}
static void
ply_boot_splash_detach_from_event_loop (ply_boot_splash_t *splash)
{
- assert (splash != NULL);
- splash->loop = NULL;
+ assert (splash != NULL);
+ splash->loop = NULL;
}
void
ply_boot_splash_hide (ply_boot_splash_t *splash)
{
- assert (splash != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- assert (splash->plugin_interface->hide_splash_screen != NULL);
-
- splash->plugin_interface->hide_splash_screen (splash->plugin,
- splash->loop);
-
- splash->mode = PLY_BOOT_SPLASH_MODE_INVALID;
-
- if (splash->loop != NULL)
- {
- if (splash->plugin_interface->on_boot_progress != NULL)
- {
- ply_event_loop_stop_watching_for_timeout (splash->loop,
- (ply_event_loop_timeout_handler_t)
- ply_boot_splash_update_progress, splash);
+ assert (splash != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ assert (splash->plugin_interface->hide_splash_screen != NULL);
+
+ splash->plugin_interface->hide_splash_screen (splash->plugin,
+ splash->loop);
+
+ splash->mode = PLY_BOOT_SPLASH_MODE_INVALID;
+
+ if (splash->loop != NULL) {
+ if (splash->plugin_interface->on_boot_progress != NULL) {
+ ply_event_loop_stop_watching_for_timeout (splash->loop,
+ (ply_event_loop_timeout_handler_t)
+ ply_boot_splash_update_progress, splash);
+ }
+
+ ply_event_loop_stop_watching_for_exit (splash->loop, (ply_event_loop_exit_handler_t)
+ ply_boot_splash_detach_from_event_loop,
+ splash);
}
-
- ply_event_loop_stop_watching_for_exit (splash->loop, (ply_event_loop_exit_handler_t)
- ply_boot_splash_detach_from_event_loop,
- splash);
- }
}
-void ply_boot_splash_display_message (ply_boot_splash_t *splash,
- const char *message)
+void ply_boot_splash_display_message (ply_boot_splash_t *splash,
+ const char *message)
{
- assert (splash != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
+ assert (splash != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
- if (splash->plugin_interface->display_message != NULL)
- splash->plugin_interface->display_message (splash->plugin, message);
+ if (splash->plugin_interface->display_message != NULL)
+ splash->plugin_interface->display_message (splash->plugin, message);
}
-void ply_boot_splash_hide_message (ply_boot_splash_t *splash,
- const char *message)
+void ply_boot_splash_hide_message (ply_boot_splash_t *splash,
+ const char *message)
{
- assert (splash != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- if (splash->plugin_interface->hide_message != NULL)
- splash->plugin_interface->hide_message (splash->plugin, message);
+ assert (splash != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ if (splash->plugin_interface->hide_message != NULL)
+ splash->plugin_interface->hide_message (splash->plugin, message);
}
-void ply_boot_splash_display_normal (ply_boot_splash_t *splash)
+void ply_boot_splash_display_normal (ply_boot_splash_t *splash)
{
- assert (splash != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- if (splash->plugin_interface->display_normal != NULL)
- splash->plugin_interface->display_normal (splash->plugin);
+ assert (splash != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ if (splash->plugin_interface->display_normal != NULL)
+ splash->plugin_interface->display_normal (splash->plugin);
}
-void ply_boot_splash_display_password (ply_boot_splash_t *splash,
- const char *prompt,
- int bullets)
+void ply_boot_splash_display_password (ply_boot_splash_t *splash,
+ const char *prompt,
+ int bullets)
{
- assert (splash != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- if (splash->plugin_interface->display_password != NULL)
- splash->plugin_interface->display_password (splash->plugin, prompt, bullets);
+ assert (splash != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ if (splash->plugin_interface->display_password != NULL)
+ splash->plugin_interface->display_password (splash->plugin, prompt, bullets);
}
-void ply_boot_splash_display_question (ply_boot_splash_t *splash,
- const char *prompt,
- const char *entry_text)
+void ply_boot_splash_display_question (ply_boot_splash_t *splash,
+ const char *prompt,
+ const char *entry_text)
{
- assert (splash != NULL);
- assert (splash->plugin_interface != NULL);
- assert (splash->plugin != NULL);
- if (splash->plugin_interface->display_question != NULL)
- splash->plugin_interface->display_question (splash->plugin, prompt, entry_text);
+ assert (splash != NULL);
+ assert (splash->plugin_interface != NULL);
+ assert (splash->plugin != NULL);
+ if (splash->plugin_interface->display_question != NULL)
+ splash->plugin_interface->display_question (splash->plugin, prompt, entry_text);
}
@@ -677,63 +651,60 @@ void
ply_boot_splash_attach_to_event_loop (ply_boot_splash_t *splash,
ply_event_loop_t *loop)
{
- assert (splash != NULL);
- assert (loop != NULL);
- assert (splash->loop == NULL);
+ assert (splash != NULL);
+ assert (loop != NULL);
+ assert (splash->loop == NULL);
- splash->loop = loop;
+ splash->loop = loop;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- ply_boot_splash_detach_from_event_loop,
- splash);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ ply_boot_splash_detach_from_event_loop,
+ splash);
}
static void
on_idle (ply_boot_splash_t *splash)
{
-
- ply_trace ("splash now idle");
- ply_event_loop_watch_for_timeout (splash->loop, 0.01,
- (ply_event_loop_timeout_handler_t)
- splash->idle_handler,
- splash->idle_handler_user_data);
- splash->idle_handler = NULL;
- splash->idle_handler_user_data = NULL;
+ ply_trace ("splash now idle");
+ ply_event_loop_watch_for_timeout (splash->loop, 0.01,
+ (ply_event_loop_timeout_handler_t)
+ splash->idle_handler,
+ splash->idle_handler_user_data);
+ splash->idle_handler = NULL;
+ splash->idle_handler_user_data = NULL;
}
void
-ply_boot_splash_become_idle (ply_boot_splash_t *splash,
- ply_boot_splash_on_idle_handler_t idle_handler,
- void *user_data)
+ply_boot_splash_become_idle (ply_boot_splash_t *splash,
+ ply_boot_splash_on_idle_handler_t idle_handler,
+ void *user_data)
{
- assert (splash->idle_trigger == NULL);
-
- if (splash->progress != NULL)
- {
- ply_progress_set_percentage (splash->progress, 1.0);
- ply_boot_splash_update_progress (splash);
- }
-
- ply_trace ("telling splash to become idle");
- if (splash->plugin_interface->become_idle == NULL)
- {
- ply_event_loop_watch_for_timeout (splash->loop, 0.01,
- (ply_event_loop_timeout_handler_t)
- idle_handler,
- user_data);
-
- return;
- }
-
- splash->idle_handler = idle_handler;
- splash->idle_handler_user_data = user_data;
-
- splash->idle_trigger = ply_trigger_new (&splash->idle_trigger);
- ply_trigger_add_handler (splash->idle_trigger,
- (ply_trigger_handler_t) on_idle,
- splash);
-
- splash->plugin_interface->become_idle (splash->plugin, splash->idle_trigger);
+ assert (splash->idle_trigger == NULL);
+
+ if (splash->progress != NULL) {
+ ply_progress_set_percentage (splash->progress, 1.0);
+ ply_boot_splash_update_progress (splash);
+ }
+
+ ply_trace ("telling splash to become idle");
+ if (splash->plugin_interface->become_idle == NULL) {
+ ply_event_loop_watch_for_timeout (splash->loop, 0.01,
+ (ply_event_loop_timeout_handler_t)
+ idle_handler,
+ user_data);
+
+ return;
+ }
+
+ splash->idle_handler = idle_handler;
+ splash->idle_handler_user_data = user_data;
+
+ splash->idle_trigger = ply_trigger_new (&splash->idle_trigger);
+ ply_trigger_add_handler (splash->idle_trigger,
+ (ply_trigger_handler_t) on_idle,
+ splash);
+
+ splash->plugin_interface->become_idle (splash->plugin, splash->idle_trigger);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-core/ply-boot-splash.h b/src/libply-splash-core/ply-boot-splash.h
index 335039ba..0ad6f22b 100644
--- a/src/libply-splash-core/ply-boot-splash.h
+++ b/src/libply-splash-core/ply-boot-splash.h
@@ -40,12 +40,12 @@
typedef struct _ply_boot_splash ply_boot_splash_t;
typedef struct _ply_seat ply_seat_t;
-typedef void (* ply_boot_splash_on_idle_handler_t) (void *user_data);
+typedef void (*ply_boot_splash_on_idle_handler_t) (void *user_data);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
-ply_boot_splash_t *ply_boot_splash_new (const char * theme_path,
- const char * plugin_dir,
- ply_buffer_t * boot_buffer);
+ply_boot_splash_t *ply_boot_splash_new (const char *theme_path,
+ const char *plugin_dir,
+ ply_buffer_t *boot_buffer);
bool ply_boot_splash_load (ply_boot_splash_t *splash);
bool ply_boot_splash_load_built_in (ply_boot_splash_t *splash);
@@ -55,7 +55,7 @@ void ply_boot_splash_attach_to_seat (ply_boot_splash_t *splash,
void ply_boot_splash_detach_from_seat (ply_boot_splash_t *splash,
ply_seat_t *seat);
void ply_boot_splash_free (ply_boot_splash_t *splash);
-bool ply_boot_splash_show (ply_boot_splash_t *splash,
+bool ply_boot_splash_show (ply_boot_splash_t *splash,
ply_boot_splash_mode_t mode);
bool ply_boot_splash_system_update (ply_boot_splash_t *splash,
int progress);
@@ -70,7 +70,7 @@ void ply_boot_splash_display_message (ply_boot_splash_t *splash,
void ply_boot_splash_hide_message (ply_boot_splash_t *splash,
const char *message);
void ply_boot_splash_hide (ply_boot_splash_t *splash);
-void ply_boot_splash_display_normal (ply_boot_splash_t *splash);
+void ply_boot_splash_display_normal (ply_boot_splash_t *splash);
void ply_boot_splash_display_password (ply_boot_splash_t *splash,
const char *prompt,
int bullets);
@@ -81,9 +81,9 @@ void ply_boot_splash_attach_to_event_loop (ply_boot_splash_t *splash,
ply_event_loop_t *loop);
void ply_boot_splash_attach_progress (ply_boot_splash_t *splash,
ply_progress_t *progress);
-void ply_boot_splash_become_idle (ply_boot_splash_t *splash,
- ply_boot_splash_on_idle_handler_t idle_handler,
- void *user_data);
+void ply_boot_splash_become_idle (ply_boot_splash_t *splash,
+ ply_boot_splash_on_idle_handler_t idle_handler,
+ void *user_data);
#endif
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
index dbc203d6..e9047086 100644
--- a/src/libply-splash-core/ply-device-manager.c
+++ b/src/libply-splash-core/ply-device-manager.c
@@ -47,392 +47,362 @@ static void create_seat_for_terminal_and_renderer_type (ply_device_manager_t *ma
ply_renderer_type_t renderer_type);
struct _ply_device_manager
{
- ply_device_manager_flags_t flags;
- ply_event_loop_t *loop;
- ply_hashtable_t *terminals;
- ply_terminal_t *local_console_terminal;
- ply_seat_t *local_console_seat;
- ply_list_t *seats;
- struct udev *udev_context;
- struct udev_queue *udev_queue;
- int udev_queue_fd;
- ply_fd_watch_t *udev_queue_fd_watch;
- struct udev_monitor *udev_monitor;
-
- ply_seat_added_handler_t seat_added_handler;
- ply_seat_removed_handler_t seat_removed_handler;
- void *seat_event_handler_data;
+ ply_device_manager_flags_t flags;
+ ply_event_loop_t *loop;
+ ply_hashtable_t *terminals;
+ ply_terminal_t *local_console_terminal;
+ ply_seat_t *local_console_seat;
+ ply_list_t *seats;
+ struct udev *udev_context;
+ struct udev_queue *udev_queue;
+ int udev_queue_fd;
+ ply_fd_watch_t *udev_queue_fd_watch;
+ struct udev_monitor *udev_monitor;
+
+ ply_seat_added_handler_t seat_added_handler;
+ ply_seat_removed_handler_t seat_removed_handler;
+ void *seat_event_handler_data;
};
static void
detach_from_event_loop (ply_device_manager_t *manager)
{
- assert (manager != NULL);
+ assert (manager != NULL);
- manager->loop = NULL;
+ manager->loop = NULL;
}
static void
attach_to_event_loop (ply_device_manager_t *manager,
ply_event_loop_t *loop)
{
- assert (manager != NULL);
- assert (loop != NULL);
- assert (manager->loop == NULL);
+ assert (manager != NULL);
+ assert (loop != NULL);
+ assert (manager->loop == NULL);
- manager->loop = loop;
+ manager->loop = loop;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- manager);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ manager);
}
static bool
device_is_for_local_console (ply_device_manager_t *manager,
struct udev_device *device)
{
- const char *device_path;
- struct udev_device *bus_device;
- char *bus_device_path;
- const char *boot_vga;
- bool for_local_console;
+ const char *device_path;
+ struct udev_device *bus_device;
+ char *bus_device_path;
+ const char *boot_vga;
+ bool for_local_console;
- /* Look at the associated bus device to see if this card is the
- * card the kernel is using for its console. */
- device_path = udev_device_get_syspath (device);
- asprintf (&bus_device_path, "%s/device", device_path);
- bus_device = udev_device_new_from_syspath (manager->udev_context, bus_device_path);
+ /* Look at the associated bus device to see if this card is the
+ * card the kernel is using for its console. */
+ device_path = udev_device_get_syspath (device);
+ asprintf (&bus_device_path, "%s/device", device_path);
+ bus_device = udev_device_new_from_syspath (manager->udev_context, bus_device_path);
- boot_vga = udev_device_get_sysattr_value (bus_device, "boot_vga");
- free (bus_device_path);
+ boot_vga = udev_device_get_sysattr_value (bus_device, "boot_vga");
+ free (bus_device_path);
- if (boot_vga != NULL && strcmp (boot_vga, "1") == 0)
- for_local_console = true;
- else
- for_local_console = false;
+ if (boot_vga != NULL && strcmp (boot_vga, "1") == 0)
+ for_local_console = true;
+ else
+ for_local_console = false;
- return for_local_console;
+ return for_local_console;
}
static bool
fb_device_has_drm_device (ply_device_manager_t *manager,
struct udev_device *fb_device)
{
- struct udev_enumerate *card_matches;
- struct udev_list_entry *card_entry;
- const char *id_path;
- bool has_drm_device = false;
-
- /* We want to see if the framebuffer is associated with a DRM-capable
- * graphics card, if it is, we'll use the DRM device */
- card_matches = udev_enumerate_new (manager->udev_context);
- udev_enumerate_add_match_is_initialized(card_matches);
- udev_enumerate_add_match_parent (card_matches, udev_device_get_parent (fb_device));
- udev_enumerate_add_match_subsystem (card_matches, "drm");
- id_path = udev_device_get_property_value (fb_device, "ID_PATH");
- udev_enumerate_add_match_property (card_matches, "ID_PATH", id_path);
-
- ply_trace ("trying to find associated drm node for fb device (path: %s)", id_path);
-
- udev_enumerate_scan_devices (card_matches);
-
- /* there should only ever be at most one match so we don't iterate through
- * the list, but just look at the first entry */
- card_entry = udev_enumerate_get_list_entry (card_matches);
-
- if (card_entry != NULL)
- {
- struct udev_device *card_device = NULL;
- const char *card_node;
- const char *card_path;
-
- card_path = udev_list_entry_get_name (card_entry);
- card_device = udev_device_new_from_syspath (manager->udev_context, card_path);
- card_node = udev_device_get_devnode (card_device);
- if (card_node != NULL)
- has_drm_device = true;
- else
- ply_trace ("no card node!");
-
- udev_device_unref (card_device);
- }
- else
- {
- ply_trace ("no card entry!");
- }
-
- udev_enumerate_unref (card_matches);
- return has_drm_device;
+ struct udev_enumerate *card_matches;
+ struct udev_list_entry *card_entry;
+ const char *id_path;
+ bool has_drm_device = false;
+
+ /* We want to see if the framebuffer is associated with a DRM-capable
+ * graphics card, if it is, we'll use the DRM device */
+ card_matches = udev_enumerate_new (manager->udev_context);
+ udev_enumerate_add_match_is_initialized (card_matches);
+ udev_enumerate_add_match_parent (card_matches, udev_device_get_parent (fb_device));
+ udev_enumerate_add_match_subsystem (card_matches, "drm");
+ id_path = udev_device_get_property_value (fb_device, "ID_PATH");
+ udev_enumerate_add_match_property (card_matches, "ID_PATH", id_path);
+
+ ply_trace ("trying to find associated drm node for fb device (path: %s)", id_path);
+
+ udev_enumerate_scan_devices (card_matches);
+
+ /* there should only ever be at most one match so we don't iterate through
+ * the list, but just look at the first entry */
+ card_entry = udev_enumerate_get_list_entry (card_matches);
+
+ if (card_entry != NULL) {
+ struct udev_device *card_device = NULL;
+ const char *card_node;
+ const char *card_path;
+
+ card_path = udev_list_entry_get_name (card_entry);
+ card_device = udev_device_new_from_syspath (manager->udev_context, card_path);
+ card_node = udev_device_get_devnode (card_device);
+ if (card_node != NULL)
+ has_drm_device = true;
+ else
+ ply_trace ("no card node!");
+
+ udev_device_unref (card_device);
+ } else {
+ ply_trace ("no card entry!");
+ }
+
+ udev_enumerate_unref (card_matches);
+ return has_drm_device;
}
static void
create_seat_for_udev_device (ply_device_manager_t *manager,
struct udev_device *device)
{
- bool for_local_console;
- const char *device_path;
- ply_terminal_t *terminal = NULL;
+ bool for_local_console;
+ const char *device_path;
+ ply_terminal_t *terminal = NULL;
- for_local_console = device_is_for_local_console (manager, device);
+ for_local_console = device_is_for_local_console (manager, device);
- ply_trace ("device is for local console: %s", for_local_console? "yes" : "no");
+ ply_trace ("device is for local console: %s", for_local_console ? "yes" : "no");
- if (for_local_console)
- terminal = manager->local_console_terminal;
+ if (for_local_console)
+ terminal = manager->local_console_terminal;
- device_path = udev_device_get_devnode (device);
+ device_path = udev_device_get_devnode (device);
- if (device_path != NULL)
- {
- const char *subsystem;
- ply_renderer_type_t renderer_type = PLY_RENDERER_TYPE_NONE;
+ if (device_path != NULL) {
+ const char *subsystem;
+ ply_renderer_type_t renderer_type = PLY_RENDERER_TYPE_NONE;
- subsystem = udev_device_get_subsystem (device);
- ply_trace ("device subsystem is %s", subsystem);
+ subsystem = udev_device_get_subsystem (device);
+ ply_trace ("device subsystem is %s", subsystem);
- if (subsystem != NULL && strcmp (subsystem, SUBSYSTEM_DRM) == 0)
- {
- ply_trace ("found DRM device %s", device_path);
- renderer_type = PLY_RENDERER_TYPE_DRM;
- }
- else if (strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0)
- {
- ply_trace ("found frame buffer device %s", device_path);
- if (!fb_device_has_drm_device (manager, device))
- {
- renderer_type = PLY_RENDERER_TYPE_FRAME_BUFFER;
- }
- else
- {
- ply_trace ("ignoring, since there's a DRM device associated with it");
- }
- }
+ if (subsystem != NULL && strcmp (subsystem, SUBSYSTEM_DRM) == 0) {
+ ply_trace ("found DRM device %s", device_path);
+ renderer_type = PLY_RENDERER_TYPE_DRM;
+ } else if (strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0) {
+ ply_trace ("found frame buffer device %s", device_path);
+ if (!fb_device_has_drm_device (manager, device))
+ renderer_type = PLY_RENDERER_TYPE_FRAME_BUFFER;
+ else
+ ply_trace ("ignoring, since there's a DRM device associated with it");
+ }
- if (renderer_type != PLY_RENDERER_TYPE_NONE)
- create_seat_for_terminal_and_renderer_type (manager,
- device_path,
- terminal,
- renderer_type);
- }
+ if (renderer_type != PLY_RENDERER_TYPE_NONE) {
+ create_seat_for_terminal_and_renderer_type (manager,
+ device_path,
+ terminal,
+ renderer_type);
+ }
+ }
}
static void
free_seat_from_device_path (ply_device_manager_t *manager,
const char *device_path)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_renderer_t *renderer;
- ply_list_node_t *next_node;
- const char *renderer_device_path;
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_renderer_t *renderer;
+ ply_list_node_t *next_node;
+ const char *renderer_device_path;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
- renderer = ply_seat_get_renderer (seat);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
+ renderer = ply_seat_get_renderer (seat);
- if (renderer != NULL)
- {
- renderer_device_path = ply_renderer_get_device_name (renderer);
+ if (renderer != NULL) {
+ renderer_device_path = ply_renderer_get_device_name (renderer);
- if (renderer_device_path != NULL)
- {
- if (strcmp (device_path, renderer_device_path) == 0)
- {
- ply_trace ("removing seat associated with %s", device_path);
+ if (renderer_device_path != NULL) {
+ if (strcmp (device_path, renderer_device_path) == 0) {
+ ply_trace ("removing seat associated with %s", device_path);
- if (manager->seat_removed_handler != NULL)
- manager->seat_removed_handler (manager->seat_event_handler_data, seat);
+ if (manager->seat_removed_handler != NULL)
+ manager->seat_removed_handler (manager->seat_event_handler_data, seat);
- ply_seat_free (seat);
- ply_list_remove_node (manager->seats, node);
- break;
+ ply_seat_free (seat);
+ ply_list_remove_node (manager->seats, node);
+ break;
+ }
+ }
}
- }
- }
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
free_seat_for_udev_device (ply_device_manager_t *manager,
struct udev_device *device)
{
- const char *device_path;
+ const char *device_path;
- device_path = udev_device_get_devnode (device);
+ device_path = udev_device_get_devnode (device);
- if (device_path != NULL)
- free_seat_from_device_path (manager, device_path);
+ if (device_path != NULL)
+ free_seat_from_device_path (manager, device_path);
}
static bool
create_seats_for_subsystem (ply_device_manager_t *manager,
const char *subsystem)
{
- struct udev_enumerate *matches;
- struct udev_list_entry *entry;
- bool found_device = false;
+ struct udev_enumerate *matches;
+ struct udev_list_entry *entry;
+ bool found_device = false;
- ply_trace ("creating seats for %s devices",
- strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0?
- "frame buffer":
- subsystem);
+ ply_trace ("creating seats for %s devices",
+ strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0 ?
+ "frame buffer" :
+ subsystem);
- matches = udev_enumerate_new (manager->udev_context);
- udev_enumerate_add_match_subsystem (matches, subsystem);
- udev_enumerate_scan_devices (matches);
+ matches = udev_enumerate_new (manager->udev_context);
+ udev_enumerate_add_match_subsystem (matches, subsystem);
+ udev_enumerate_scan_devices (matches);
- udev_list_entry_foreach (entry, udev_enumerate_get_list_entry (matches))
- {
- struct udev_device *device = NULL;
- const char *path;
+ udev_list_entry_foreach (entry, udev_enumerate_get_list_entry (matches)){
+ struct udev_device *device = NULL;
+ const char *path;
- path = udev_list_entry_get_name (entry);
+ path = udev_list_entry_get_name (entry);
- if (path == NULL)
- {
- ply_trace ("path was null!");
- continue;
- }
+ if (path == NULL) {
+ ply_trace ("path was null!");
+ continue;
+ }
- ply_trace ("found device %s", path);
-
- device = udev_device_new_from_syspath (manager->udev_context, path);
-
- /* if device isn't fully initialized, we'll get an add event later
- */
- if (udev_device_get_is_initialized (device))
- {
- ply_trace ("device is initialized");
-
- /* We only care about devices assigned to a (any) seat. Floating
- * devices should be ignored.
- */
- if (udev_device_has_tag (device, "seat"))
- {
- const char *node;
- node = udev_device_get_devnode (device);
- if (node != NULL)
- {
- ply_trace ("found node %s", node);
- found_device = true;
- create_seat_for_udev_device (manager, device);
+ ply_trace ("found device %s", path);
+
+ device = udev_device_new_from_syspath (manager->udev_context, path);
+
+ /* if device isn't fully initialized, we'll get an add event later
+ */
+ if (udev_device_get_is_initialized (device)) {
+ ply_trace ("device is initialized");
+
+ /* We only care about devices assigned to a (any) seat. Floating
+ * devices should be ignored.
+ */
+ if (udev_device_has_tag (device, "seat")) {
+ const char *node;
+ node = udev_device_get_devnode (device);
+ if (node != NULL) {
+ ply_trace ("found node %s", node);
+ found_device = true;
+ create_seat_for_udev_device (manager, device);
+ }
+ } else {
+ ply_trace ("device doesn't have a seat tag");
+ }
+ } else {
+ ply_trace ("it's not initialized");
}
- }
- else
- {
- ply_trace ("device doesn't have a seat tag");
- }
- }
- else
- {
- ply_trace ("it's not initialized");
- }
- udev_device_unref (device);
- }
+ udev_device_unref (device);
+ }
- udev_enumerate_unref (matches);
+ udev_enumerate_unref (matches);
- return found_device;
+ return found_device;
}
static void
on_udev_event (ply_device_manager_t *manager)
{
- struct udev_device *device;
- const char *action;
+ struct udev_device *device;
+ const char *action;
- device = udev_monitor_receive_device (manager->udev_monitor);
- if (device == NULL)
- return;
+ device = udev_monitor_receive_device (manager->udev_monitor);
+ if (device == NULL)
+ return;
- action = udev_device_get_action (device);
+ action = udev_device_get_action (device);
- ply_trace ("got %s event for device %s", action, udev_device_get_sysname (device));
+ ply_trace ("got %s event for device %s", action, udev_device_get_sysname (device));
- if (action == NULL)
- return;
+ if (action == NULL)
+ return;
- if (strcmp (action, "add") == 0)
- {
- const char *subsystem;
- bool coldplug_complete = manager->udev_queue_fd_watch == NULL;
+ if (strcmp (action, "add") == 0) {
+ const char *subsystem;
+ bool coldplug_complete = manager->udev_queue_fd_watch == NULL;
- subsystem = udev_device_get_subsystem (device);
+ subsystem = udev_device_get_subsystem (device);
- if (strcmp (subsystem, SUBSYSTEM_DRM) == 0 ||
- coldplug_complete)
- {
- create_seat_for_udev_device (manager, device);
+ if (strcmp (subsystem, SUBSYSTEM_DRM) == 0 ||
+ coldplug_complete)
+ create_seat_for_udev_device (manager, device);
+ else
+ ply_trace ("ignoring since we only handle subsystem %s devices after coldplug completes", subsystem);
+ } else if (strcmp (action, "remove") == 0) {
+ free_seat_for_udev_device (manager, device);
}
- else
- {
- ply_trace ("ignoring since we only handle subsystem %s devices after coldplug completes", subsystem);
- }
- }
- else if (strcmp (action, "remove") == 0)
- {
- free_seat_for_udev_device (manager, device);
- }
- udev_device_unref (device);
+ udev_device_unref (device);
}
static void
watch_for_udev_events (ply_device_manager_t *manager)
{
- int fd;
- assert (manager != NULL);
- assert (manager->udev_monitor == NULL);
+ int fd;
+
+ assert (manager != NULL);
+ assert (manager->udev_monitor == NULL);
- ply_trace ("watching for udev graphics device add and remove events");
+ ply_trace ("watching for udev graphics device add and remove events");
- manager->udev_monitor = udev_monitor_new_from_netlink (manager->udev_context, "udev");
+ manager->udev_monitor = udev_monitor_new_from_netlink (manager->udev_context, "udev");
- udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_DRM, NULL);
- udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_FRAME_BUFFER, NULL);
- udev_monitor_filter_add_match_tag (manager->udev_monitor, "seat");
- udev_monitor_enable_receiving (manager->udev_monitor);
+ udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_DRM, NULL);
+ udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_FRAME_BUFFER, NULL);
+ udev_monitor_filter_add_match_tag (manager->udev_monitor, "seat");
+ udev_monitor_enable_receiving (manager->udev_monitor);
- fd = udev_monitor_get_fd (manager->udev_monitor);
- ply_event_loop_watch_fd (manager->loop,
- fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- on_udev_event,
- NULL,
- manager);
+ fd = udev_monitor_get_fd (manager->udev_monitor);
+ ply_event_loop_watch_fd (manager->loop,
+ fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ on_udev_event,
+ NULL,
+ manager);
}
static void
free_seats (ply_device_manager_t *manager)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("removing seats");
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ ply_trace ("removing seats");
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
- if (manager->seat_removed_handler != NULL)
- manager->seat_removed_handler (manager->seat_event_handler_data, seat);
+ if (manager->seat_removed_handler != NULL)
+ manager->seat_removed_handler (manager->seat_event_handler_data, seat);
- ply_seat_free (seat);
- ply_list_remove_node (manager->seats, node);
+ ply_seat_free (seat);
+ ply_list_remove_node (manager->seats, node);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -440,183 +410,176 @@ free_terminal (char *device,
ply_terminal_t *terminal,
ply_device_manager_t *manager)
{
- ply_hashtable_remove (manager->terminals, device);
+ ply_hashtable_remove (manager->terminals, device);
- ply_terminal_close (terminal);
- ply_terminal_free (terminal);
+ ply_terminal_close (terminal);
+ ply_terminal_free (terminal);
}
static void
free_terminals (ply_device_manager_t *manager)
{
- ply_hashtable_foreach (manager->terminals,
- (ply_hashtable_foreach_func_t *)
- free_terminal,
- manager);
+ ply_hashtable_foreach (manager->terminals,
+ (ply_hashtable_foreach_func_t *)
+ free_terminal,
+ manager);
}
static ply_terminal_t *
get_terminal (ply_device_manager_t *manager,
const char *device_name)
{
- char *full_name = NULL;
- ply_terminal_t *terminal;
+ char *full_name = NULL;
+ ply_terminal_t *terminal;
- if (strncmp (device_name, "/dev/", strlen ("/dev/")) == 0)
- full_name = strdup (device_name);
- else
- asprintf (&full_name, "/dev/%s", device_name);
+ if (strncmp (device_name, "/dev/", strlen ("/dev/")) == 0)
+ full_name = strdup (device_name);
+ else
+ asprintf (&full_name, "/dev/%s", device_name);
- if (strcmp (full_name, "/dev/tty0") == 0 ||
- strcmp (full_name, "/dev/tty") == 0 ||
- strcmp (full_name, ply_terminal_get_name (manager->local_console_terminal)) == 0)
- {
- terminal = manager->local_console_terminal;
- goto done;
- }
+ if (strcmp (full_name, "/dev/tty0") == 0 ||
+ strcmp (full_name, "/dev/tty") == 0 ||
+ strcmp (full_name, ply_terminal_get_name (manager->local_console_terminal)) == 0) {
+ terminal = manager->local_console_terminal;
+ goto done;
+ }
- terminal = ply_hashtable_lookup (manager->terminals, full_name);
+ terminal = ply_hashtable_lookup (manager->terminals, full_name);
- if (terminal == NULL)
- {
- terminal = ply_terminal_new (full_name);
+ if (terminal == NULL) {
+ terminal = ply_terminal_new (full_name);
- ply_hashtable_insert (manager->terminals,
- (void *) ply_terminal_get_name (terminal),
- terminal);
- }
+ ply_hashtable_insert (manager->terminals,
+ (void *) ply_terminal_get_name (terminal),
+ terminal);
+ }
done:
- free (full_name);
- return terminal;
+ free (full_name);
+ return terminal;
}
ply_device_manager_t *
-ply_device_manager_new (const char *default_tty,
- ply_device_manager_flags_t flags)
+ply_device_manager_new (const char *default_tty,
+ ply_device_manager_flags_t flags)
{
- ply_device_manager_t *manager;
+ ply_device_manager_t *manager;
- manager = calloc (1, sizeof (ply_device_manager_t));
- manager->loop = NULL;
- manager->terminals = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare);
- manager->local_console_terminal = ply_terminal_new (default_tty);
- ply_hashtable_insert (manager->terminals,
- (void *) ply_terminal_get_name (manager->local_console_terminal),
- manager->local_console_terminal);
- manager->seats = ply_list_new ();
- manager->flags = flags;
+ manager = calloc (1, sizeof(ply_device_manager_t));
+ manager->loop = NULL;
+ manager->terminals = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare);
+ manager->local_console_terminal = ply_terminal_new (default_tty);
+ ply_hashtable_insert (manager->terminals,
+ (void *) ply_terminal_get_name (manager->local_console_terminal),
+ manager->local_console_terminal);
+ manager->seats = ply_list_new ();
+ manager->flags = flags;
- if (!(flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV))
- manager->udev_context = udev_new ();
+ if (!(flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV))
+ manager->udev_context = udev_new ();
- attach_to_event_loop (manager, ply_event_loop_get_default ());
+ attach_to_event_loop (manager, ply_event_loop_get_default ());
- return manager;
+ return manager;
}
void
ply_device_manager_free (ply_device_manager_t *manager)
{
- ply_trace ("freeing device manager");
+ ply_trace ("freeing device manager");
- if (manager == NULL)
- return;
+ if (manager == NULL)
+ return;
- ply_event_loop_stop_watching_for_exit (manager->loop,
- (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- manager);
- free_seats (manager);
- ply_list_free (manager->seats);
+ ply_event_loop_stop_watching_for_exit (manager->loop,
+ (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ manager);
+ free_seats (manager);
+ ply_list_free (manager->seats);
- free_terminals (manager);
- ply_hashtable_free (manager->terminals);
+ free_terminals (manager);
+ ply_hashtable_free (manager->terminals);
- if (manager->udev_monitor != NULL)
- udev_monitor_unref (manager->udev_monitor);
+ if (manager->udev_monitor != NULL)
+ udev_monitor_unref (manager->udev_monitor);
- if (manager->udev_context != NULL)
- udev_unref (manager->udev_context);
+ if (manager->udev_context != NULL)
+ udev_unref (manager->udev_context);
- free (manager);
+ free (manager);
}
static bool
add_consoles_from_file (ply_device_manager_t *manager,
const char *path)
{
- int fd;
- char contents[512] = "";
- ssize_t contents_length;
- bool has_serial_consoles;
- const char *remaining_file_contents;
-
- ply_trace ("opening %s", path);
- fd = open (path, O_RDONLY);
-
- if (fd < 0)
- {
- ply_trace ("couldn't open it: %m");
- return false;
- }
-
- ply_trace ("reading file");
- contents_length = read (fd, contents, sizeof (contents) - 1);
-
- if (contents_length <= 0)
- {
- ply_trace ("couldn't read it: %m");
- close (fd);
- return false;
- }
- close (fd);
-
- remaining_file_contents = contents;
- has_serial_consoles = false;
-
- while (remaining_file_contents < contents + contents_length)
- {
- char *console;
- size_t console_length;
- const char *console_device;
- ply_terminal_t *terminal;
-
- /* Advance past any leading whitespace */
- remaining_file_contents += strspn (remaining_file_contents, " \n\t\v");
-
- if (*remaining_file_contents == '\0')
- {
- /* There's nothing left after the whitespace, we're done */
- break;
+ int fd;
+ char contents[512] = "";
+ ssize_t contents_length;
+ bool has_serial_consoles;
+ const char *remaining_file_contents;
+
+ ply_trace ("opening %s", path);
+ fd = open (path, O_RDONLY);
+
+ if (fd < 0) {
+ ply_trace ("couldn't open it: %m");
+ return false;
}
- /* Find trailing whitespace and NUL terminate. If strcspn
- * doesn't find whitespace, it gives us the length of the string
- * until the next NUL byte, which we'll just overwrite with
- * another NUL byte anyway. */
- console_length = strcspn (remaining_file_contents, " \n\t\v");
- console = strndup (remaining_file_contents, console_length);
+ ply_trace ("reading file");
+ contents_length = read (fd, contents, sizeof(contents) - 1);
- terminal = get_terminal (manager, console);
- console_device = ply_terminal_get_name (terminal);
+ if (contents_length <= 0) {
+ ply_trace ("couldn't read it: %m");
+ close (fd);
+ return false;
+ }
+ close (fd);
- free (console);
+ remaining_file_contents = contents;
+ has_serial_consoles = false;
- ply_trace ("console %s found!", console_device);
+ while (remaining_file_contents < contents + contents_length) {
+ char *console;
+ size_t console_length;
+ const char *console_device;
+ ply_terminal_t *terminal;
- if (terminal != manager->local_console_terminal)
- has_serial_consoles = true;
+ /* Advance past any leading whitespace */
+ remaining_file_contents += strspn (remaining_file_contents, " \n\t\v");
- /* Move past the parsed console string, and the whitespace we
- * may have found above. If we found a NUL above and not whitespace,
- * then we're going to jump past the end of the buffer and the loop
- * will terminate
- */
- remaining_file_contents += console_length + 1;
- }
+ if (*remaining_file_contents == '\0')
+ /* There's nothing left after the whitespace, we're done */
+ break;
- return has_serial_consoles;
+ /* Find trailing whitespace and NUL terminate. If strcspn
+ * doesn't find whitespace, it gives us the length of the string
+ * until the next NUL byte, which we'll just overwrite with
+ * another NUL byte anyway. */
+ console_length = strcspn (remaining_file_contents, " \n\t\v");
+ console = strndup (remaining_file_contents, console_length);
+
+ terminal = get_terminal (manager, console);
+ console_device = ply_terminal_get_name (terminal);
+
+ free (console);
+
+ ply_trace ("console %s found!", console_device);
+
+ if (terminal != manager->local_console_terminal)
+ has_serial_consoles = true;
+
+ /* Move past the parsed console string, and the whitespace we
+ * may have found above. If we found a NUL above and not whitespace,
+ * then we're going to jump past the end of the buffer and the loop
+ * will terminate
+ */
+ remaining_file_contents += console_length + 1;
+ }
+
+ return has_serial_consoles;
}
static void
@@ -625,36 +588,34 @@ create_seat_for_terminal_and_renderer_type (ply_device_manager_t *manager,
ply_terminal_t *terminal,
ply_renderer_type_t renderer_type)
{
- ply_seat_t *seat;
- bool is_local_terminal = false;
+ ply_seat_t *seat;
+ bool is_local_terminal = false;
- if (terminal != NULL && manager->local_console_terminal == terminal)
- is_local_terminal = true;
+ if (terminal != NULL && manager->local_console_terminal == terminal)
+ is_local_terminal = true;
- if (is_local_terminal && manager->local_console_seat != NULL)
- {
- ply_trace ("trying to create seat for local console when one already exists");
- return;
- }
+ if (is_local_terminal && manager->local_console_seat != NULL) {
+ ply_trace ("trying to create seat for local console when one already exists");
+ return;
+ }
- ply_trace ("creating seat for %s (renderer type: %u) (terminal: %s)",
- device_path? : "", renderer_type, terminal? ply_terminal_get_name (terminal): "none");
- seat = ply_seat_new (terminal);
+ ply_trace ("creating seat for %s (renderer type: %u) (terminal: %s)",
+ device_path ? : "", renderer_type, terminal ? ply_terminal_get_name (terminal) : "none");
+ seat = ply_seat_new (terminal);
- if (!ply_seat_open (seat, renderer_type, device_path))
- {
- ply_trace ("could not create seat");
- ply_seat_free (seat);
- return;
- }
+ if (!ply_seat_open (seat, renderer_type, device_path)) {
+ ply_trace ("could not create seat");
+ ply_seat_free (seat);
+ return;
+ }
- ply_list_append_data (manager->seats, seat);
+ ply_list_append_data (manager->seats, seat);
- if (is_local_terminal)
- manager->local_console_seat = seat;
+ if (is_local_terminal)
+ manager->local_console_seat = seat;
- if (manager->seat_added_handler != NULL)
- manager->seat_added_handler (manager->seat_event_handler_data, seat);
+ if (manager->seat_added_handler != NULL)
+ manager->seat_added_handler (manager->seat_event_handler_data, seat);
}
static void
@@ -662,274 +623,260 @@ create_seat_for_terminal (const char *device_path,
ply_terminal_t *terminal,
ply_device_manager_t *manager)
{
- create_seat_for_terminal_and_renderer_type (manager,
- device_path,
- terminal,
- PLY_RENDERER_TYPE_NONE);
+ create_seat_for_terminal_and_renderer_type (manager,
+ device_path,
+ terminal,
+ PLY_RENDERER_TYPE_NONE);
}
static bool
create_seats_from_terminals (ply_device_manager_t *manager)
{
- bool has_serial_consoles;
+ bool has_serial_consoles;
- ply_trace ("checking for consoles");
+ ply_trace ("checking for consoles");
- if (manager->flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES)
- {
- has_serial_consoles = false;
- ply_trace ("ignoring all consoles but default console because explicitly told to.");
- }
- else
- {
- has_serial_consoles = add_consoles_from_file (manager, "/sys/class/tty/console/active");
- }
+ if (manager->flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES) {
+ has_serial_consoles = false;
+ ply_trace ("ignoring all consoles but default console because explicitly told to.");
+ } else {
+ has_serial_consoles = add_consoles_from_file (manager, "/sys/class/tty/console/active");
+ }
- if (has_serial_consoles)
- {
- ply_trace ("serial consoles detected, managing them with details forced");
- ply_hashtable_foreach (manager->terminals,
- (ply_hashtable_foreach_func_t *)
- create_seat_for_terminal,
- manager);
- return true;
- }
+ if (has_serial_consoles) {
+ ply_trace ("serial consoles detected, managing them with details forced");
+ ply_hashtable_foreach (manager->terminals,
+ (ply_hashtable_foreach_func_t *)
+ create_seat_for_terminal,
+ manager);
+ return true;
+ }
- return false;
+ return false;
}
static void
create_seats_from_udev (ply_device_manager_t *manager)
{
- bool found_drm_device, found_fb_device;
+ bool found_drm_device, found_fb_device;
- ply_trace ("Looking for devices from udev");
+ ply_trace ("Looking for devices from udev");
- found_drm_device = create_seats_for_subsystem (manager, SUBSYSTEM_DRM);
- found_fb_device = create_seats_for_subsystem (manager, SUBSYSTEM_FRAME_BUFFER);
+ found_drm_device = create_seats_for_subsystem (manager, SUBSYSTEM_DRM);
+ found_fb_device = create_seats_for_subsystem (manager, SUBSYSTEM_FRAME_BUFFER);
- if (found_drm_device || found_fb_device)
- return;
+ if (found_drm_device || found_fb_device)
+ return;
- ply_trace ("Creating non-graphical seat, since there's no suitable graphics hardware");
- create_seat_for_terminal_and_renderer_type (manager,
- ply_terminal_get_name (manager->local_console_terminal),
- manager->local_console_terminal,
- PLY_RENDERER_TYPE_NONE);
+ ply_trace ("Creating non-graphical seat, since there's no suitable graphics hardware");
+ create_seat_for_terminal_and_renderer_type (manager,
+ ply_terminal_get_name (manager->local_console_terminal),
+ manager->local_console_terminal,
+ PLY_RENDERER_TYPE_NONE);
}
static void
create_fallback_seat (ply_device_manager_t *manager)
{
- create_seat_for_terminal_and_renderer_type (manager,
- ply_terminal_get_name (manager->local_console_terminal),
- manager->local_console_terminal,
- PLY_RENDERER_TYPE_AUTO);
+ create_seat_for_terminal_and_renderer_type (manager,
+ ply_terminal_get_name (manager->local_console_terminal),
+ manager->local_console_terminal,
+ PLY_RENDERER_TYPE_AUTO);
}
static void
on_udev_queue_changed (ply_device_manager_t *manager)
{
+ if (!udev_queue_get_queue_is_empty (manager->udev_queue))
+ return;
- if (!udev_queue_get_queue_is_empty (manager->udev_queue))
- return;
-
- ply_trace ("udev coldplug complete");
- ply_event_loop_stop_watching_fd (manager->loop, manager->udev_queue_fd_watch);
- manager->udev_queue_fd_watch = NULL;
- udev_queue_unref (manager->udev_queue);
+ ply_trace ("udev coldplug complete");
+ ply_event_loop_stop_watching_fd (manager->loop, manager->udev_queue_fd_watch);
+ manager->udev_queue_fd_watch = NULL;
+ udev_queue_unref (manager->udev_queue);
- close (manager->udev_queue_fd);
- manager->udev_queue_fd = -1;
+ close (manager->udev_queue_fd);
+ manager->udev_queue_fd = -1;
- manager->udev_queue = NULL;
+ manager->udev_queue = NULL;
- create_seats_from_udev (manager);
+ create_seats_from_udev (manager);
}
static void
watch_for_coldplug_completion (ply_device_manager_t *manager)
{
- int fd;
- int result;
+ int fd;
+ int result;
- manager->udev_queue = udev_queue_new (manager->udev_context);
+ manager->udev_queue = udev_queue_new (manager->udev_context);
- if (udev_queue_get_queue_is_empty (manager->udev_queue))
- {
- ply_trace ("udev coldplug completed already ");
- create_seats_from_udev (manager);
- return;
- }
-
- fd = inotify_init1 (IN_CLOEXEC);
- result = inotify_add_watch (fd, "/run/udev", IN_MOVED_TO);
+ if (udev_queue_get_queue_is_empty (manager->udev_queue)) {
+ ply_trace ("udev coldplug completed already ");
+ create_seats_from_udev (manager);
+ return;
+ }
- if (result < 0)
- {
- ply_trace ("could not watch for udev to show up: %m");
- close (fd);
+ fd = inotify_init1 (IN_CLOEXEC);
+ result = inotify_add_watch (fd, "/run/udev", IN_MOVED_TO);
- create_fallback_seat (manager);
- return;
- }
+ if (result < 0) {
+ ply_trace ("could not watch for udev to show up: %m");
+ close (fd);
- manager->udev_queue_fd = fd;
+ create_fallback_seat (manager);
+ return;
+ }
- manager->udev_queue_fd_watch = ply_event_loop_watch_fd (manager->loop,
- fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- on_udev_queue_changed,
- NULL,
- manager);
+ manager->udev_queue_fd = fd;
+ manager->udev_queue_fd_watch = ply_event_loop_watch_fd (manager->loop,
+ fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ on_udev_queue_changed,
+ NULL,
+ manager);
}
void
-ply_device_manager_watch_seats (ply_device_manager_t *manager,
- ply_seat_added_handler_t seat_added_handler,
- ply_seat_removed_handler_t seat_removed_handler,
- void *data)
+ply_device_manager_watch_seats (ply_device_manager_t *manager,
+ ply_seat_added_handler_t seat_added_handler,
+ ply_seat_removed_handler_t seat_removed_handler,
+ void *data)
{
- bool done_with_initial_seat_setup;
+ bool done_with_initial_seat_setup;
- manager->seat_added_handler = seat_added_handler;
- manager->seat_removed_handler = seat_removed_handler;
- manager->seat_event_handler_data = data;
+ manager->seat_added_handler = seat_added_handler;
+ manager->seat_removed_handler = seat_removed_handler;
+ manager->seat_event_handler_data = data;
- /* Try to create seats for each serial device right away, if possible
- */
- done_with_initial_seat_setup = create_seats_from_terminals (manager);
+ /* Try to create seats for each serial device right away, if possible
+ */
+ done_with_initial_seat_setup = create_seats_from_terminals (manager);
- if (done_with_initial_seat_setup)
- return;
+ if (done_with_initial_seat_setup)
+ return;
- if ((manager->flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV))
- {
- ply_trace ("udev support disabled, creating fallback seat");
- create_fallback_seat (manager);
- return;
- }
+ if ((manager->flags & PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV)) {
+ ply_trace ("udev support disabled, creating fallback seat");
+ create_fallback_seat (manager);
+ return;
+ }
- watch_for_udev_events (manager);
- watch_for_coldplug_completion (manager);
+ watch_for_udev_events (manager);
+ watch_for_coldplug_completion (manager);
}
bool
ply_device_manager_has_open_seats (ply_device_manager_t *manager)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
- if (ply_seat_is_open (seat))
- return true;
+ if (ply_seat_is_open (seat))
+ return true;
- node = next_node;
- }
+ node = next_node;
+ }
- return false;
+ return false;
}
ply_list_t *
ply_device_manager_get_seats (ply_device_manager_t *manager)
{
- return manager->seats;
+ return manager->seats;
}
ply_terminal_t *
ply_device_manager_get_default_terminal (ply_device_manager_t *manager)
{
- return manager->local_console_terminal;
+ return manager->local_console_terminal;
}
void
ply_device_manager_activate_renderers (ply_device_manager_t *manager)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("activating renderers");
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ ply_trace ("activating renderers");
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
- ply_seat_activate_renderer (seat);
+ ply_seat_activate_renderer (seat);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_device_manager_deactivate_renderers (ply_device_manager_t *manager)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("deactivating renderers");
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ ply_trace ("deactivating renderers");
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
- ply_seat_deactivate_renderer (seat);
+ ply_seat_deactivate_renderer (seat);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_device_manager_activate_keyboards (ply_device_manager_t *manager)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("activating keyboards");
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ ply_trace ("activating keyboards");
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
- ply_seat_activate_keyboard (seat);
+ ply_seat_activate_keyboard (seat);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_device_manager_deactivate_keyboards (ply_device_manager_t *manager)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("deactivating keyboards");
- node = ply_list_get_first_node (manager->seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ ply_trace ("deactivating keyboards");
+ node = ply_list_get_first_node (manager->seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (manager->seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (manager->seats, node);
- ply_seat_deactivate_keyboard (seat);
+ ply_seat_deactivate_keyboard (seat);
- node = next_node;
- }
+ node = next_node;
+ }
}
diff --git a/src/libply-splash-core/ply-device-manager.h b/src/libply-splash-core/ply-device-manager.h
index d9c58e87..c3e6487b 100644
--- a/src/libply-splash-core/ply-device-manager.h
+++ b/src/libply-splash-core/ply-device-manager.h
@@ -25,22 +25,24 @@
typedef enum
{
- PLY_DEVICE_MANAGER_FLAGS_NONE = 0,
- PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES = 1 << 0,
- PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV = 1 << 1
+ PLY_DEVICE_MANAGER_FLAGS_NONE = 0,
+ PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES = 1 << 0,
+ PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV = 1 << 1
} ply_device_manager_flags_t;
typedef struct _ply_device_manager ply_device_manager_t;
-typedef void (* ply_seat_added_handler_t) (void *, ply_seat_t *);
-typedef void (* ply_seat_removed_handler_t) (void *, ply_seat_t *);
+typedef void (*ply_seat_added_handler_t) (void *,
+ ply_seat_t *);
+typedef void (*ply_seat_removed_handler_t) (void *,
+ ply_seat_t *);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
-ply_device_manager_t *ply_device_manager_new (const char *default_tty,
- ply_device_manager_flags_t flags);
-void ply_device_manager_watch_seats (ply_device_manager_t *manager,
- ply_seat_added_handler_t seat_added_handler,
+ply_device_manager_t *ply_device_manager_new (const char *default_tty,
+ ply_device_manager_flags_t flags);
+void ply_device_manager_watch_seats (ply_device_manager_t *manager,
+ ply_seat_added_handler_t seat_added_handler,
ply_seat_removed_handler_t seat_removed_handler,
- void *data);
+ void *data);
bool ply_device_manager_has_open_seats (ply_device_manager_t *manager);
ply_list_t *ply_device_manager_get_seats (ply_device_manager_t *manager);
void ply_device_manager_free (ply_device_manager_t *manager);
diff --git a/src/libply-splash-core/ply-keyboard.c b/src/libply-splash-core/ply-keyboard.c
index 624f906a..ccf08e81 100644
--- a/src/libply-splash-core/ply-keyboard.c
+++ b/src/libply-splash-core/ply-keyboard.c
@@ -41,57 +41,58 @@
#include "ply-terminal.h"
#include "ply-utils.h"
-#define KEY_CTRL_U ('\100' ^'U')
-#define KEY_CTRL_W ('\100' ^'W')
-#define KEY_CTRL_V ('\100' ^'V')
-#define KEY_ESCAPE ('\100' ^'[')
+#define KEY_CTRL_U ('\100' ^ 'U')
+#define KEY_CTRL_W ('\100' ^ 'W')
+#define KEY_CTRL_V ('\100' ^ 'V')
+#define KEY_ESCAPE ('\100' ^ '[')
#define KEY_RETURN '\n'
#define KEY_BACKSPACE '\177'
-typedef void (* ply_keyboard_handler_t) (void *);
+typedef void (*ply_keyboard_handler_t) (void *);
typedef struct
{
- ply_keyboard_handler_t function;
- void *user_data;
+ ply_keyboard_handler_t function;
+ void *user_data;
} ply_keyboard_closure_t;
typedef enum
{
- PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL,
- PLY_KEYBOARD_PROVIDER_TYPE_RENDERER
+ PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL,
+ PLY_KEYBOARD_PROVIDER_TYPE_RENDERER
} ply_keyboard_provider_type_t;
typedef struct
{
- ply_terminal_t *terminal;
- ply_buffer_t *key_buffer;
+ ply_terminal_t *terminal;
+ ply_buffer_t *key_buffer;
} ply_keyboard_terminal_provider_t;
typedef struct
{
- ply_renderer_t *renderer;
- ply_renderer_input_source_t *input_source;
+ ply_renderer_t *renderer;
+ ply_renderer_input_source_t *input_source;
} ply_keyboard_renderer_provider_t;
-typedef union {
- ply_keyboard_renderer_provider_t *if_renderer;
- ply_keyboard_terminal_provider_t *if_terminal;
+typedef union
+{
+ ply_keyboard_renderer_provider_t *if_renderer;
+ ply_keyboard_terminal_provider_t *if_terminal;
} ply_keyboard_provider_t;
struct _ply_keyboard
{
- ply_event_loop_t *loop;
+ ply_event_loop_t *loop;
- ply_keyboard_provider_type_t provider_type;
- ply_keyboard_provider_t provider;
+ ply_keyboard_provider_type_t provider_type;
+ ply_keyboard_provider_t provider;
- ply_buffer_t *line_buffer;
+ ply_buffer_t *line_buffer;
- ply_list_t *keyboard_input_handler_list;
- ply_list_t *backspace_handler_list;
- ply_list_t *escape_handler_list;
- ply_list_t *enter_handler_list;
+ ply_list_t *keyboard_input_handler_list;
+ ply_list_t *backspace_handler_list;
+ ply_list_t *escape_handler_list;
+ ply_list_t *enter_handler_list;
};
static bool ply_keyboard_watch_for_terminal_input (ply_keyboard_t *keyboard);
@@ -99,495 +100,473 @@ static bool ply_keyboard_watch_for_terminal_input (ply_keyboard_t *keyboard);
ply_keyboard_t *
ply_keyboard_new_for_terminal (ply_terminal_t *terminal)
{
- ply_keyboard_t *keyboard;
-
- keyboard = calloc (1, sizeof (ply_keyboard_t));
- keyboard->line_buffer = ply_buffer_new ();
- keyboard->keyboard_input_handler_list = ply_list_new ();
- keyboard->backspace_handler_list = ply_list_new ();
- keyboard->escape_handler_list = ply_list_new ();
- keyboard->enter_handler_list = ply_list_new ();
- keyboard->provider_type = PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL;
- keyboard->provider.if_terminal = calloc (1, sizeof (ply_keyboard_terminal_provider_t));
- keyboard->provider.if_terminal->terminal = terminal;
- keyboard->provider.if_terminal->key_buffer = ply_buffer_new ();
-
- keyboard->loop = ply_event_loop_get_default ();
-
- return keyboard;
+ ply_keyboard_t *keyboard;
+
+ keyboard = calloc (1, sizeof(ply_keyboard_t));
+ keyboard->line_buffer = ply_buffer_new ();
+ keyboard->keyboard_input_handler_list = ply_list_new ();
+ keyboard->backspace_handler_list = ply_list_new ();
+ keyboard->escape_handler_list = ply_list_new ();
+ keyboard->enter_handler_list = ply_list_new ();
+ keyboard->provider_type = PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL;
+ keyboard->provider.if_terminal = calloc (1, sizeof(ply_keyboard_terminal_provider_t));
+ keyboard->provider.if_terminal->terminal = terminal;
+ keyboard->provider.if_terminal->key_buffer = ply_buffer_new ();
+
+ keyboard->loop = ply_event_loop_get_default ();
+
+ return keyboard;
}
ply_keyboard_t *
ply_keyboard_new_for_renderer (ply_renderer_t *renderer)
{
- ply_keyboard_t *keyboard;
- ply_renderer_input_source_t *input_source;
+ ply_keyboard_t *keyboard;
+ ply_renderer_input_source_t *input_source;
- keyboard = calloc (1, sizeof (ply_keyboard_t));
- keyboard->line_buffer = ply_buffer_new ();
- keyboard->keyboard_input_handler_list = ply_list_new ();
- keyboard->backspace_handler_list = ply_list_new ();
- keyboard->escape_handler_list = ply_list_new ();
- keyboard->enter_handler_list = ply_list_new ();
- keyboard->provider_type = PLY_KEYBOARD_PROVIDER_TYPE_RENDERER;
- keyboard->provider.if_renderer = calloc (1, sizeof (ply_keyboard_renderer_provider_t));
- keyboard->provider.if_renderer->renderer = renderer;
+ keyboard = calloc (1, sizeof(ply_keyboard_t));
+ keyboard->line_buffer = ply_buffer_new ();
+ keyboard->keyboard_input_handler_list = ply_list_new ();
+ keyboard->backspace_handler_list = ply_list_new ();
+ keyboard->escape_handler_list = ply_list_new ();
+ keyboard->enter_handler_list = ply_list_new ();
+ keyboard->provider_type = PLY_KEYBOARD_PROVIDER_TYPE_RENDERER;
+ keyboard->provider.if_renderer = calloc (1, sizeof(ply_keyboard_renderer_provider_t));
+ keyboard->provider.if_renderer->renderer = renderer;
- input_source = ply_renderer_get_input_source (renderer);
+ input_source = ply_renderer_get_input_source (renderer);
- keyboard->provider.if_renderer->input_source = input_source;
+ keyboard->provider.if_renderer->input_source = input_source;
- keyboard->loop = ply_event_loop_get_default ();
+ keyboard->loop = ply_event_loop_get_default ();
- return keyboard;
+ return keyboard;
}
static void
process_backspace (ply_keyboard_t *keyboard)
{
- size_t bytes_to_remove;
- ssize_t previous_character_size;
- const char *bytes;
- size_t size;
- ply_list_node_t *node;
-
- bytes = ply_buffer_get_bytes (keyboard->line_buffer);
- size = ply_buffer_get_size (keyboard->line_buffer);
-
- bytes_to_remove = MIN (size, PLY_UTF8_CHARACTER_SIZE_MAX);
- while ((previous_character_size = ply_utf8_character_get_size (bytes + size - bytes_to_remove, bytes_to_remove)) < (ssize_t) bytes_to_remove)
- {
- if (previous_character_size > 0)
- bytes_to_remove -= previous_character_size;
- else
- bytes_to_remove--;
- }
-
- if (bytes_to_remove <= size)
- ply_buffer_remove_bytes_at_end (keyboard->line_buffer, bytes_to_remove);
-
- for (node = ply_list_get_first_node(keyboard->backspace_handler_list);
- node; node = ply_list_get_next_node(keyboard->backspace_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- ply_keyboard_backspace_handler_t backspace_handler =
- (ply_keyboard_backspace_handler_t) closure->function;
- backspace_handler (closure->user_data);
- }
+ size_t bytes_to_remove;
+ ssize_t previous_character_size;
+ const char *bytes;
+ size_t size;
+ ply_list_node_t *node;
+
+ bytes = ply_buffer_get_bytes (keyboard->line_buffer);
+ size = ply_buffer_get_size (keyboard->line_buffer);
+
+ bytes_to_remove = MIN (size, PLY_UTF8_CHARACTER_SIZE_MAX);
+ while ((previous_character_size = ply_utf8_character_get_size (bytes + size - bytes_to_remove, bytes_to_remove)) < (ssize_t) bytes_to_remove) {
+ if (previous_character_size > 0)
+ bytes_to_remove -= previous_character_size;
+ else
+ bytes_to_remove--;
+ }
+
+ if (bytes_to_remove <= size)
+ ply_buffer_remove_bytes_at_end (keyboard->line_buffer, bytes_to_remove);
+
+ for (node = ply_list_get_first_node (keyboard->backspace_handler_list);
+ node; node = ply_list_get_next_node (keyboard->backspace_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ ply_keyboard_backspace_handler_t backspace_handler =
+ (ply_keyboard_backspace_handler_t) closure->function;
+ backspace_handler (closure->user_data);
+ }
}
static void
process_line_erase (ply_keyboard_t *keyboard)
{
- size_t size;
+ size_t size;
- while ((size = ply_buffer_get_size (keyboard->line_buffer)) > 0)
- process_backspace (keyboard);
+ while ((size = ply_buffer_get_size (keyboard->line_buffer)) > 0) {
+ process_backspace (keyboard);
+ }
}
static void
process_keyboard_input (ply_keyboard_t *keyboard,
- const char *keyboard_input,
- size_t character_size)
+ const char *keyboard_input,
+ size_t character_size)
{
- wchar_t key;
- ply_list_node_t *node;
-
- if ((ssize_t) mbrtowc (&key, keyboard_input, character_size, NULL) > 0)
- {
- switch (key)
- {
- case KEY_CTRL_U:
- case KEY_CTRL_W:
- ply_trace ("erase line!");
- process_line_erase (keyboard);
- return;
-
- case KEY_CTRL_V:
- ply_trace ("toggle verbose mode!");
- ply_toggle_tracing ();
- ply_trace ("verbose mode toggled!");
- return;
-
- case KEY_ESCAPE:
- ply_trace ("escape key!");
- for (node = ply_list_get_first_node(keyboard->escape_handler_list);
- node; node = ply_list_get_next_node(keyboard->escape_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- ply_keyboard_escape_handler_t escape_handler = (ply_keyboard_escape_handler_t) closure->function;
- escape_handler (closure->user_data);
- }
-
- ply_trace ("end escape key handler");
- return;
-
- case KEY_BACKSPACE:
- ply_trace ("backspace key!");
- process_backspace (keyboard);
- return;
-
- case KEY_RETURN:
- ply_trace ("return key!");
+ wchar_t key;
+ ply_list_node_t *node;
+
+ if ((ssize_t) mbrtowc (&key, keyboard_input, character_size, NULL) > 0) {
+ switch (key) {
+ case KEY_CTRL_U:
+ case KEY_CTRL_W:
+ ply_trace ("erase line!");
+ process_line_erase (keyboard);
+ return;
+
+ case KEY_CTRL_V:
+ ply_trace ("toggle verbose mode!");
+ ply_toggle_tracing ();
+ ply_trace ("verbose mode toggled!");
+ return;
+
+ case KEY_ESCAPE:
+ ply_trace ("escape key!");
+ for (node = ply_list_get_first_node (keyboard->escape_handler_list);
+ node; node = ply_list_get_next_node (keyboard->escape_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ ply_keyboard_escape_handler_t escape_handler = (ply_keyboard_escape_handler_t) closure->function;
+ escape_handler (closure->user_data);
+ }
+
+ ply_trace ("end escape key handler");
+ return;
+
+ case KEY_BACKSPACE:
+ ply_trace ("backspace key!");
+ process_backspace (keyboard);
+ return;
+
+ case KEY_RETURN:
+ ply_trace ("return key!");
+
+ for (node = ply_list_get_first_node (keyboard->enter_handler_list);
+ node; node = ply_list_get_next_node (keyboard->enter_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ ply_keyboard_enter_handler_t enter_handler = (ply_keyboard_enter_handler_t) closure->function;
+ enter_handler (closure->user_data, ply_buffer_get_bytes (keyboard->line_buffer));
+ }
+ ply_buffer_clear (keyboard->line_buffer);
+ return;
+
+ default:
+ ply_buffer_append_bytes (keyboard->line_buffer,
+ keyboard_input, character_size);
+ break;
+ }
+ }
- for (node = ply_list_get_first_node(keyboard->enter_handler_list);
- node; node = ply_list_get_next_node(keyboard->enter_handler_list, node))
- {
+ for (node = ply_list_get_first_node (keyboard->keyboard_input_handler_list);
+ node; node = ply_list_get_next_node (keyboard->keyboard_input_handler_list, node)) {
ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- ply_keyboard_enter_handler_t enter_handler = (ply_keyboard_enter_handler_t) closure->function;
- enter_handler (closure->user_data, ply_buffer_get_bytes (keyboard->line_buffer));
- }
- ply_buffer_clear (keyboard->line_buffer);
- return;
-
- default:
- ply_buffer_append_bytes (keyboard->line_buffer,
- keyboard_input, character_size);
- break;
+ ply_keyboard_input_handler_t keyboard_input_handler =
+ (ply_keyboard_input_handler_t) closure->function;
+
+ keyboard_input_handler (closure->user_data,
+ keyboard_input, character_size);
}
- }
-
- for (node = ply_list_get_first_node(keyboard->keyboard_input_handler_list);
- node; node = ply_list_get_next_node(keyboard->keyboard_input_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- ply_keyboard_input_handler_t keyboard_input_handler =
- (ply_keyboard_input_handler_t) closure->function;
-
- keyboard_input_handler (closure->user_data,
- keyboard_input, character_size);
- }
}
static void
-on_key_event (ply_keyboard_t *keyboard,
- ply_buffer_t *buffer)
+on_key_event (ply_keyboard_t *keyboard,
+ ply_buffer_t *buffer)
{
- const char *bytes;
- size_t size, i;
+ const char *bytes;
+ size_t size, i;
- bytes = ply_buffer_get_bytes (buffer);
- size = ply_buffer_get_size (buffer);
+ bytes = ply_buffer_get_bytes (buffer);
+ size = ply_buffer_get_size (buffer);
- i = 0;
- while (i < size)
- {
- ssize_t character_size;
- char *keyboard_input;
+ i = 0;
+ while (i < size) {
+ ssize_t character_size;
+ char *keyboard_input;
- character_size = (ssize_t) ply_utf8_character_get_size (bytes + i, size - i);
+ character_size = (ssize_t) ply_utf8_character_get_size (bytes + i, size - i);
- if (character_size < 0)
- break;
+ if (character_size < 0)
+ break;
- /* If we're at a NUL character walk through it
- */
- if (character_size == 0)
- {
- i++;
- continue;
- }
+ /* If we're at a NUL character walk through it
+ */
+ if (character_size == 0) {
+ i++;
+ continue;
+ }
- keyboard_input = strndup (bytes + i, character_size);
+ keyboard_input = strndup (bytes + i, character_size);
- process_keyboard_input (keyboard, keyboard_input, character_size);
+ process_keyboard_input (keyboard, keyboard_input, character_size);
- i += character_size;
+ i += character_size;
- free (keyboard_input);
- }
+ free (keyboard_input);
+ }
- if (i > 0)
- ply_buffer_remove_bytes (buffer, i);
+ if (i > 0)
+ ply_buffer_remove_bytes (buffer, i);
}
static bool
ply_keyboard_watch_for_renderer_input (ply_keyboard_t *keyboard)
{
- assert (keyboard != NULL);
-
- if (!ply_renderer_open_input_source (keyboard->provider.if_renderer->renderer,
- keyboard->provider.if_renderer->input_source))
- return false;
-
- ply_renderer_set_handler_for_input_source (keyboard->provider.if_renderer->renderer,
- keyboard->provider.if_renderer->input_source,
- (ply_renderer_input_source_handler_t)
- on_key_event,
- keyboard);
- return true;
+ assert (keyboard != NULL);
+
+ if (!ply_renderer_open_input_source (keyboard->provider.if_renderer->renderer,
+ keyboard->provider.if_renderer->input_source))
+ return false;
+
+ ply_renderer_set_handler_for_input_source (keyboard->provider.if_renderer->renderer,
+ keyboard->provider.if_renderer->input_source,
+ (ply_renderer_input_source_handler_t)
+ on_key_event,
+ keyboard);
+ return true;
}
static void
ply_keyboard_stop_watching_for_renderer_input (ply_keyboard_t *keyboard)
{
- ply_renderer_set_handler_for_input_source (keyboard->provider.if_renderer->renderer,
- keyboard->provider.if_renderer->input_source,
- (ply_renderer_input_source_handler_t)
- NULL, NULL);
+ ply_renderer_set_handler_for_input_source (keyboard->provider.if_renderer->renderer,
+ keyboard->provider.if_renderer->input_source,
+ (ply_renderer_input_source_handler_t)
+ NULL, NULL);
- ply_renderer_close_input_source (keyboard->provider.if_renderer->renderer,
- keyboard->provider.if_renderer->input_source);
+ ply_renderer_close_input_source (keyboard->provider.if_renderer->renderer,
+ keyboard->provider.if_renderer->input_source);
}
static void
on_terminal_data (ply_keyboard_t *keyboard)
{
- int terminal_fd;
+ int terminal_fd;
- terminal_fd = ply_terminal_get_fd (keyboard->provider.if_terminal->terminal);
- ply_buffer_append_from_fd (keyboard->provider.if_terminal->key_buffer,
- terminal_fd);
- on_key_event (keyboard, keyboard->provider.if_terminal->key_buffer);
+ terminal_fd = ply_terminal_get_fd (keyboard->provider.if_terminal->terminal);
+ ply_buffer_append_from_fd (keyboard->provider.if_terminal->key_buffer,
+ terminal_fd);
+ on_key_event (keyboard, keyboard->provider.if_terminal->key_buffer);
}
static bool
ply_keyboard_watch_for_terminal_input (ply_keyboard_t *keyboard)
{
- int terminal_fd;
+ int terminal_fd;
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- terminal_fd = ply_terminal_get_fd (keyboard->provider.if_terminal->terminal);
+ terminal_fd = ply_terminal_get_fd (keyboard->provider.if_terminal->terminal);
- if (terminal_fd < 0 || !ply_terminal_is_open (keyboard->provider.if_terminal->terminal))
- {
- ply_trace ("terminal associated with keyboard isn't open");
- return false;
- }
+ if (terminal_fd < 0 || !ply_terminal_is_open (keyboard->provider.if_terminal->terminal)) {
+ ply_trace ("terminal associated with keyboard isn't open");
+ return false;
+ }
- ply_terminal_watch_for_input (keyboard->provider.if_terminal->terminal,
- (ply_terminal_input_handler_t) on_terminal_data,
- keyboard);
+ ply_terminal_watch_for_input (keyboard->provider.if_terminal->terminal,
+ (ply_terminal_input_handler_t) on_terminal_data,
+ keyboard);
- return true;
+ return true;
}
static void
ply_keyboard_stop_watching_for_terminal_input (ply_keyboard_t *keyboard)
{
- ply_terminal_stop_watching_for_input (keyboard->provider.if_terminal->terminal,
- (ply_terminal_input_handler_t)
- on_terminal_data,
- keyboard);
+ ply_terminal_stop_watching_for_input (keyboard->provider.if_terminal->terminal,
+ (ply_terminal_input_handler_t)
+ on_terminal_data,
+ keyboard);
}
bool
ply_keyboard_watch_for_input (ply_keyboard_t *keyboard)
{
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- switch (keyboard->provider_type)
- {
- case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER:
- return ply_keyboard_watch_for_renderer_input (keyboard);
+ switch (keyboard->provider_type) {
+ case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER:
+ return ply_keyboard_watch_for_renderer_input (keyboard);
- case PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL:
- return ply_keyboard_watch_for_terminal_input (keyboard);
- }
+ case PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL:
+ return ply_keyboard_watch_for_terminal_input (keyboard);
+ }
- return false;
+ return false;
}
void
ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard)
{
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- switch (keyboard->provider_type)
- {
- case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER:
- ply_keyboard_stop_watching_for_renderer_input (keyboard);
- break;
-
- case PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL:
- ply_keyboard_stop_watching_for_terminal_input (keyboard);
- break;
- }
+ switch (keyboard->provider_type) {
+ case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER:
+ ply_keyboard_stop_watching_for_renderer_input (keyboard);
+ break;
+ case PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL:
+ ply_keyboard_stop_watching_for_terminal_input (keyboard);
+ break;
+ }
}
void
ply_keyboard_free (ply_keyboard_t *keyboard)
{
- if (keyboard == NULL)
- return;
+ if (keyboard == NULL)
+ return;
- ply_keyboard_stop_watching_for_input (keyboard);
+ ply_keyboard_stop_watching_for_input (keyboard);
- ply_buffer_free (keyboard->line_buffer);
+ ply_buffer_free (keyboard->line_buffer);
- if (keyboard->provider_type == PLY_KEYBOARD_PROVIDER_TYPE_RENDERER)
- {
- free (keyboard->provider.if_renderer);
- }
- else
- {
- ply_buffer_free (keyboard->provider.if_terminal->key_buffer);
- free (keyboard->provider.if_terminal);
- }
+ if (keyboard->provider_type == PLY_KEYBOARD_PROVIDER_TYPE_RENDERER) {
+ free (keyboard->provider.if_renderer);
+ } else {
+ ply_buffer_free (keyboard->provider.if_terminal->key_buffer);
+ free (keyboard->provider.if_terminal);
+ }
- free (keyboard);
+ free (keyboard);
}
static ply_keyboard_closure_t *
-ply_keyboard_closure_new (ply_keyboard_handler_t function,
- void *user_data)
+ply_keyboard_closure_new (ply_keyboard_handler_t function,
+ void *user_data)
{
- ply_keyboard_closure_t *closure = calloc (1, sizeof (ply_keyboard_closure_t));
- closure->function = function;
- closure->user_data = user_data;
- return closure;
+ ply_keyboard_closure_t *closure = calloc (1, sizeof(ply_keyboard_closure_t));
+
+ closure->function = function;
+ closure->user_data = user_data;
+ return closure;
}
static void
ply_keyboard_closure_free (ply_keyboard_closure_t *closure)
{
- free (closure);
+ free (closure);
}
void
-ply_keyboard_add_input_handler (ply_keyboard_t *keyboard,
- ply_keyboard_input_handler_t input_handler,
- void *user_data)
+ply_keyboard_add_input_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_input_handler_t input_handler,
+ void *user_data)
{
- ply_keyboard_closure_t *closure;
+ ply_keyboard_closure_t *closure;
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) input_handler,
- user_data);
- ply_list_append_data (keyboard->keyboard_input_handler_list, closure);
+ closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) input_handler,
+ user_data);
+ ply_list_append_data (keyboard->keyboard_input_handler_list, closure);
}
void
-ply_keyboard_remove_input_handler (ply_keyboard_t *keyboard,
- ply_keyboard_input_handler_t input_handler)
+ply_keyboard_remove_input_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_input_handler_t input_handler)
{
- ply_list_node_t *node;
-
- assert (keyboard != NULL);
-
- for (node = ply_list_get_first_node(keyboard->keyboard_input_handler_list);
- node; node = ply_list_get_next_node(keyboard->keyboard_input_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- if ((ply_keyboard_input_handler_t) closure->function == input_handler)
- {
- ply_keyboard_closure_free (closure);
- ply_list_remove_node (keyboard->keyboard_input_handler_list, node);
- return;
+ ply_list_node_t *node;
+
+ assert (keyboard != NULL);
+
+ for (node = ply_list_get_first_node (keyboard->keyboard_input_handler_list);
+ node; node = ply_list_get_next_node (keyboard->keyboard_input_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ if ((ply_keyboard_input_handler_t) closure->function == input_handler) {
+ ply_keyboard_closure_free (closure);
+ ply_list_remove_node (keyboard->keyboard_input_handler_list, node);
+ return;
+ }
}
- }
}
void
-ply_keyboard_add_backspace_handler (ply_keyboard_t *keyboard,
- ply_keyboard_backspace_handler_t backspace_handler,
- void *user_data)
+ply_keyboard_add_backspace_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_backspace_handler_t backspace_handler,
+ void *user_data)
{
- ply_keyboard_closure_t *closure;
+ ply_keyboard_closure_t *closure;
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) backspace_handler,
- user_data);
- ply_list_append_data (keyboard->backspace_handler_list, closure);
+ closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) backspace_handler,
+ user_data);
+ ply_list_append_data (keyboard->backspace_handler_list, closure);
}
void
-ply_keyboard_remove_backspace_handler (ply_keyboard_t *keyboard,
- ply_keyboard_backspace_handler_t backspace_handler)
+ply_keyboard_remove_backspace_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_backspace_handler_t backspace_handler)
{
- ply_list_node_t *node;
-
- assert (keyboard != NULL);
-
- for (node = ply_list_get_first_node(keyboard->backspace_handler_list);
- node; node = ply_list_get_next_node(keyboard->backspace_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- if ((ply_keyboard_backspace_handler_t) closure->function == backspace_handler)
- {
- ply_keyboard_closure_free (closure);
- ply_list_remove_node (keyboard->backspace_handler_list, node);
- return;
+ ply_list_node_t *node;
+
+ assert (keyboard != NULL);
+
+ for (node = ply_list_get_first_node (keyboard->backspace_handler_list);
+ node; node = ply_list_get_next_node (keyboard->backspace_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ if ((ply_keyboard_backspace_handler_t) closure->function == backspace_handler) {
+ ply_keyboard_closure_free (closure);
+ ply_list_remove_node (keyboard->backspace_handler_list, node);
+ return;
+ }
}
- }
}
void
-ply_keyboard_add_escape_handler (ply_keyboard_t *keyboard,
- ply_keyboard_escape_handler_t escape_handler,
- void *user_data)
+ply_keyboard_add_escape_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_escape_handler_t escape_handler,
+ void *user_data)
{
- ply_keyboard_closure_t *closure;
+ ply_keyboard_closure_t *closure;
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) escape_handler,
- user_data);
- ply_list_append_data (keyboard->escape_handler_list, closure);
+ closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) escape_handler,
+ user_data);
+ ply_list_append_data (keyboard->escape_handler_list, closure);
}
void
-ply_keyboard_remove_escape_handler (ply_keyboard_t *keyboard,
- ply_keyboard_escape_handler_t escape_handler)
+ply_keyboard_remove_escape_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_escape_handler_t escape_handler)
{
- ply_list_node_t *node;
-
- assert (keyboard != NULL);
-
- for (node = ply_list_get_first_node(keyboard->escape_handler_list);
- node; node = ply_list_get_next_node(keyboard->escape_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- if ((ply_keyboard_escape_handler_t) closure->function == escape_handler)
- {
- ply_keyboard_closure_free (closure);
- ply_list_remove_node (keyboard->escape_handler_list, node);
- return;
+ ply_list_node_t *node;
+
+ assert (keyboard != NULL);
+
+ for (node = ply_list_get_first_node (keyboard->escape_handler_list);
+ node; node = ply_list_get_next_node (keyboard->escape_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ if ((ply_keyboard_escape_handler_t) closure->function == escape_handler) {
+ ply_keyboard_closure_free (closure);
+ ply_list_remove_node (keyboard->escape_handler_list, node);
+ return;
+ }
}
- }
}
void
-ply_keyboard_add_enter_handler (ply_keyboard_t *keyboard,
- ply_keyboard_enter_handler_t enter_handler,
- void *user_data)
+ply_keyboard_add_enter_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_enter_handler_t enter_handler,
+ void *user_data)
{
- ply_keyboard_closure_t *closure;
+ ply_keyboard_closure_t *closure;
- assert (keyboard != NULL);
+ assert (keyboard != NULL);
- closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) enter_handler,
- user_data);
+ closure = ply_keyboard_closure_new ((ply_keyboard_handler_t) enter_handler,
+ user_data);
- ply_list_append_data (keyboard->enter_handler_list, closure);
+ ply_list_append_data (keyboard->enter_handler_list, closure);
}
void
-ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard,
- ply_keyboard_enter_handler_t enter_handler)
+ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_enter_handler_t enter_handler)
{
- ply_list_node_t *node;
-
- assert (keyboard != NULL);
-
- for (node = ply_list_get_first_node(keyboard->enter_handler_list);
- node; node = ply_list_get_next_node(keyboard->enter_handler_list, node))
- {
- ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
- if ((ply_keyboard_enter_handler_t) closure->function == enter_handler)
- {
- ply_keyboard_closure_free (closure);
- ply_list_remove_node (keyboard->enter_handler_list, node);
- return;
+ ply_list_node_t *node;
+
+ assert (keyboard != NULL);
+
+ for (node = ply_list_get_first_node (keyboard->enter_handler_list);
+ node; node = ply_list_get_next_node (keyboard->enter_handler_list, node)) {
+ ply_keyboard_closure_t *closure = ply_list_node_get_data (node);
+ if ((ply_keyboard_enter_handler_t) closure->function == enter_handler) {
+ ply_keyboard_closure_free (closure);
+ ply_list_remove_node (keyboard->enter_handler_list, node);
+ return;
+ }
}
- }
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/libply-splash-core/ply-keyboard.h b/src/libply-splash-core/ply-keyboard.h
index 74683cf1..23497d9b 100644
--- a/src/libply-splash-core/ply-keyboard.h
+++ b/src/libply-splash-core/ply-keyboard.h
@@ -32,42 +32,42 @@
typedef struct _ply_keyboard ply_keyboard_t;
-typedef void (* ply_keyboard_input_handler_t) (void *user_data,
- const char *keyboard_input,
- size_t character_size);
+typedef void (*ply_keyboard_input_handler_t) (void *user_data,
+ const char *keyboard_input,
+ size_t character_size);
-typedef void (* ply_keyboard_backspace_handler_t) (void *user_data);
+typedef void (*ply_keyboard_backspace_handler_t) (void *user_data);
-typedef void (* ply_keyboard_escape_handler_t) (void *user_data);
+typedef void (*ply_keyboard_escape_handler_t) (void *user_data);
-typedef void (* ply_keyboard_enter_handler_t) (void *user_data,
- const char *line);
+typedef void (*ply_keyboard_enter_handler_t) (void *user_data,
+ const char *line);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_keyboard_t *ply_keyboard_new_for_terminal (ply_terminal_t *terminal);
ply_keyboard_t *ply_keyboard_new_for_renderer (ply_renderer_t *renderer);
void ply_keyboard_free (ply_keyboard_t *keyboard);
-void ply_keyboard_add_input_handler (ply_keyboard_t *keyboard,
- ply_keyboard_input_handler_t input_handler,
- void *user_data);
-void ply_keyboard_remove_input_handler (ply_keyboard_t *keyboard,
- ply_keyboard_input_handler_t input_handler);
-void ply_keyboard_add_backspace_handler (ply_keyboard_t *keyboard,
- ply_keyboard_backspace_handler_t backspace_handler,
- void *user_data);
-void ply_keyboard_remove_backspace_handler (ply_keyboard_t *keyboard,
- ply_keyboard_backspace_handler_t backspace_handler);
-void ply_keyboard_add_escape_handler (ply_keyboard_t *keyboard,
- ply_keyboard_escape_handler_t escape_handler,
- void *user_data);
-void ply_keyboard_remove_escape_handler (ply_keyboard_t *keyboard,
- ply_keyboard_escape_handler_t escape_handler);
-void ply_keyboard_add_enter_handler (ply_keyboard_t *keyboard,
- ply_keyboard_enter_handler_t enter_handler,
- void *user_data);
-void ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard,
- ply_keyboard_enter_handler_t enter_handler);
+void ply_keyboard_add_input_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_input_handler_t input_handler,
+ void *user_data);
+void ply_keyboard_remove_input_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_input_handler_t input_handler);
+void ply_keyboard_add_backspace_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_backspace_handler_t backspace_handler,
+ void *user_data);
+void ply_keyboard_remove_backspace_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_backspace_handler_t backspace_handler);
+void ply_keyboard_add_escape_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_escape_handler_t escape_handler,
+ void *user_data);
+void ply_keyboard_remove_escape_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_escape_handler_t escape_handler);
+void ply_keyboard_add_enter_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_enter_handler_t enter_handler,
+ void *user_data);
+void ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard,
+ ply_keyboard_enter_handler_t enter_handler);
bool ply_keyboard_watch_for_input (ply_keyboard_t *keyboard);
void ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard);
diff --git a/src/libply-splash-core/ply-pixel-buffer.c b/src/libply-splash-core/ply-pixel-buffer.c
index a860b7f1..c1825cc2 100644
--- a/src/libply-splash-core/ply-pixel-buffer.c
+++ b/src/libply-splash-core/ply-pixel-buffer.c
@@ -39,12 +39,12 @@
struct _ply_pixel_buffer
{
- uint32_t *bytes;
+ uint32_t *bytes;
- ply_rectangle_t area;
- ply_list_t *clip_areas;
+ ply_rectangle_t area;
+ ply_list_t *clip_areas;
- ply_region_t *updated_areas;
+ ply_region_t *updated_areas;
};
static inline void ply_pixel_buffer_blend_value_at_pixel (ply_pixel_buffer_t *buffer,
@@ -61,66 +61,63 @@ static inline uint32_t
blend_two_pixel_values (uint32_t pixel_value_1,
uint32_t pixel_value_2)
{
- if ((pixel_value_2 & 0xff000000) == 0xff000000)
- {
- uint8_t alpha_1, red_1, green_1, blue_1;
- uint8_t red_2, green_2, blue_2;
- uint_least32_t red, green, blue;
-
- alpha_1 = (uint8_t) (pixel_value_1 >> 24);
- red_1 = (uint8_t) (pixel_value_1 >> 16);
- green_1 = (uint8_t) (pixel_value_1 >> 8);
- blue_1 = (uint8_t) pixel_value_1;
-
- red_2 = (uint8_t) (pixel_value_2 >> 16);
- green_2 = (uint8_t) (pixel_value_2 >> 8);
- blue_2 = (uint8_t) pixel_value_2;
-
- red = red_1 * 255 + red_2 * (255 - alpha_1);
- green = green_1 * 255 + green_2 * (255 - alpha_1);
- blue = blue_1 * 255 + blue_2 * (255 - alpha_1);
-
- red = (uint8_t) ((red + (red >> 8) + 0x80) >> 8);
- green = (uint8_t) ((green + (green >> 8) + 0x80) >> 8);
- blue = (uint8_t) ((blue + (blue >> 8) + 0x80) >> 8);
-
- return 0xff000000 | (red << 16) | (green << 8) | blue;
- }
- else
- {
- uint8_t alpha_1, red_1, green_1, blue_1;
- uint8_t alpha_2, red_2, green_2, blue_2;
- uint_least32_t alpha, red, green, blue;
-
- alpha_1 = (uint8_t) (pixel_value_1 >> 24);
- red_1 = (uint8_t) (pixel_value_1 >> 16);
- green_1 = (uint8_t) (pixel_value_1 >> 8);
- blue_1 = (uint8_t) pixel_value_1;
-
- alpha_2 = (uint8_t) (pixel_value_2 >> 24);
- red_2 = (uint8_t) (pixel_value_2 >> 16);
- green_2 = (uint8_t) (pixel_value_2 >> 8);
- blue_2 = (uint8_t) pixel_value_2;
-
- red = red_1 * alpha_1 + red_2 * alpha_2 * (255 - alpha_1);
- green = green_1 * alpha_1 + green_2 * alpha_2 * (255 - alpha_1);
- blue = blue_1 * alpha_1 + blue_2 * alpha_2 * (255 - alpha_1);
- alpha = alpha_1 * 255 + alpha_2 * (255 - alpha_1);
-
- red = (red + (red >> 8) + 0x80) >> 8;
- red = MIN (red, 0xff);
-
- green = (green + (green >> 8) + 0x80) >> 8;
- green = MIN (green, 0xff);
-
- blue = (blue + (blue >> 8) + 0x80) >> 8;
- blue = MIN (blue, 0xff);
-
- alpha = (alpha + (alpha >> 8) + 0x80) >> 8;
- alpha = MIN (alpha, 0xff);
-
- return (alpha << 24) | (red << 16) | (green << 8) | blue;
- }
+ if ((pixel_value_2 & 0xff000000) == 0xff000000) {
+ uint8_t alpha_1, red_1, green_1, blue_1;
+ uint8_t red_2, green_2, blue_2;
+ uint_least32_t red, green, blue;
+
+ alpha_1 = (uint8_t) (pixel_value_1 >> 24);
+ red_1 = (uint8_t) (pixel_value_1 >> 16);
+ green_1 = (uint8_t) (pixel_value_1 >> 8);
+ blue_1 = (uint8_t) pixel_value_1;
+
+ red_2 = (uint8_t) (pixel_value_2 >> 16);
+ green_2 = (uint8_t) (pixel_value_2 >> 8);
+ blue_2 = (uint8_t) pixel_value_2;
+
+ red = red_1 * 255 + red_2 * (255 - alpha_1);
+ green = green_1 * 255 + green_2 * (255 - alpha_1);
+ blue = blue_1 * 255 + blue_2 * (255 - alpha_1);
+
+ red = (uint8_t) ((red + (red >> 8) + 0x80) >> 8);
+ green = (uint8_t) ((green + (green >> 8) + 0x80) >> 8);
+ blue = (uint8_t) ((blue + (blue >> 8) + 0x80) >> 8);
+
+ return 0xff000000 | (red << 16) | (green << 8) | blue;
+ } else {
+ uint8_t alpha_1, red_1, green_1, blue_1;
+ uint8_t alpha_2, red_2, green_2, blue_2;
+ uint_least32_t alpha, red, green, blue;
+
+ alpha_1 = (uint8_t) (pixel_value_1 >> 24);
+ red_1 = (uint8_t) (pixel_value_1 >> 16);
+ green_1 = (uint8_t) (pixel_value_1 >> 8);
+ blue_1 = (uint8_t) pixel_value_1;
+
+ alpha_2 = (uint8_t) (pixel_value_2 >> 24);
+ red_2 = (uint8_t) (pixel_value_2 >> 16);
+ green_2 = (uint8_t) (pixel_value_2 >> 8);
+ blue_2 = (uint8_t) pixel_value_2;
+
+ red = red_1 * alpha_1 + red_2 * alpha_2 * (255 - alpha_1);
+ green = green_1 * alpha_1 + green_2 * alpha_2 * (255 - alpha_1);
+ blue = blue_1 * alpha_1 + blue_2 * alpha_2 * (255 - alpha_1);
+ alpha = alpha_1 * 255 + alpha_2 * (255 - alpha_1);
+
+ red = (red + (red >> 8) + 0x80) >> 8;
+ red = MIN (red, 0xff);
+
+ green = (green + (green >> 8) + 0x80) >> 8;
+ green = MIN (green, 0xff);
+
+ blue = (blue + (blue >> 8) + 0x80) >> 8;
+ blue = MIN (blue, 0xff);
+
+ alpha = (alpha + (alpha >> 8) + 0x80) >> 8;
+ alpha = MIN (alpha, 0xff);
+
+ return (alpha << 24) | (red << 16) | (green << 8) | blue;
+ }
}
__attribute__((__pure__))
@@ -128,27 +125,27 @@ static inline uint32_t
make_pixel_value_translucent (uint32_t pixel_value,
uint8_t opacity)
{
- uint_least16_t alpha, red, green, blue;
+ uint_least16_t alpha, red, green, blue;
- if (opacity == 255)
- return pixel_value;
+ if (opacity == 255)
+ return pixel_value;
- alpha = (uint8_t) (pixel_value >> 24);
- red = (uint8_t) (pixel_value >> 16);
- green = (uint8_t) (pixel_value >> 8);
- blue = (uint8_t) pixel_value;
+ alpha = (uint8_t) (pixel_value >> 24);
+ red = (uint8_t) (pixel_value >> 16);
+ green = (uint8_t) (pixel_value >> 8);
+ blue = (uint8_t) pixel_value;
- red *= opacity;
- green *= opacity;
- blue *= opacity;
- alpha *= opacity;
+ red *= opacity;
+ green *= opacity;
+ blue *= opacity;
+ alpha *= opacity;
- red = (uint8_t) ((red + (red >> 8) + 0x80) >> 8);
- green = (uint8_t) ((green + (green >> 8) + 0x80) >> 8);
- blue = (uint8_t) ((blue + (blue >> 8) + 0x80) >> 8);
- alpha = (uint8_t) ((alpha + (alpha >> 8) + 0x80) >> 8);
+ red = (uint8_t) ((red + (red >> 8) + 0x80) >> 8);
+ green = (uint8_t) ((green + (green >> 8) + 0x80) >> 8);
+ blue = (uint8_t) ((blue + (blue >> 8) + 0x80) >> 8);
+ alpha = (uint8_t) ((alpha + (alpha >> 8) + 0x80) >> 8);
- return (alpha << 24) | (red << 16) | (green << 8) | blue;
+ return (alpha << 24) | (red << 16) | (green << 8) | blue;
}
static inline void
@@ -157,16 +154,15 @@ ply_pixel_buffer_blend_value_at_pixel (ply_pixel_buffer_t *buffer,
int y,
uint32_t pixel_value)
{
- uint32_t old_pixel_value;
+ uint32_t old_pixel_value;
- if ((pixel_value >> 24) != 0xff)
- {
- old_pixel_value = buffer->bytes[y * buffer->area.width + x];
+ if ((pixel_value >> 24) != 0xff) {
+ old_pixel_value = buffer->bytes[y * buffer->area.width + x];
- pixel_value = blend_two_pixel_values (pixel_value, old_pixel_value);
- }
+ pixel_value = blend_two_pixel_values (pixel_value, old_pixel_value);
+ }
- buffer->bytes[y * buffer->area.width + x] = pixel_value;
+ buffer->bytes[y * buffer->area.width + x] = pixel_value;
}
static void
@@ -174,137 +170,135 @@ ply_pixel_buffer_crop_area_to_clip_area (ply_pixel_buffer_t *buffer,
ply_rectangle_t *area,
ply_rectangle_t *cropped_area)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- *cropped_area = *area;
+ *cropped_area = *area;
- node = ply_list_get_first_node (buffer->clip_areas);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_rectangle_t *clip_rectangle;
+ node = ply_list_get_first_node (buffer->clip_areas);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_rectangle_t *clip_rectangle;
- clip_rectangle = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (buffer->clip_areas, node);
+ clip_rectangle = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (buffer->clip_areas, node);
- ply_rectangle_intersect (cropped_area, clip_rectangle, cropped_area);
+ ply_rectangle_intersect (cropped_area, clip_rectangle, cropped_area);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
-ply_pixel_buffer_fill_area_with_pixel_value (ply_pixel_buffer_t *buffer,
- ply_rectangle_t *fill_area,
- uint32_t pixel_value)
-{
- unsigned long row, column;
- ply_rectangle_t cropped_area;
-
- ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
-
- for (row = cropped_area.y; row < cropped_area.y + cropped_area.height; row++)
- {
- for (column = cropped_area.x; column < cropped_area.x + cropped_area.width; column++)
- {
- ply_pixel_buffer_blend_value_at_pixel (buffer,
- column, row,
- pixel_value);
+ply_pixel_buffer_fill_area_with_pixel_value (ply_pixel_buffer_t *buffer,
+ ply_rectangle_t *fill_area,
+ uint32_t pixel_value)
+{
+ unsigned long row, column;
+ ply_rectangle_t cropped_area;
+
+ ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
+
+ for (row = cropped_area.y; row < cropped_area.y + cropped_area.height; row++) {
+ for (column = cropped_area.x; column < cropped_area.x + cropped_area.width; column++) {
+ ply_pixel_buffer_blend_value_at_pixel (buffer,
+ column, row,
+ pixel_value);
+ }
}
- }
}
void
ply_pixel_buffer_push_clip_area (ply_pixel_buffer_t *buffer,
ply_rectangle_t *clip_area)
{
- ply_rectangle_t *new_clip_area;
+ ply_rectangle_t *new_clip_area;
- new_clip_area = malloc (sizeof (*new_clip_area));
+ new_clip_area = malloc (sizeof(*new_clip_area));
- *new_clip_area = *clip_area;
- ply_list_append_data (buffer->clip_areas, new_clip_area);
+ *new_clip_area = *clip_area;
+ ply_list_append_data (buffer->clip_areas, new_clip_area);
}
void
ply_pixel_buffer_pop_clip_area (ply_pixel_buffer_t *buffer)
{
- ply_list_node_t *last_node;
+ ply_list_node_t *last_node;
- last_node = ply_list_get_last_node (buffer->clip_areas);
- free (ply_list_node_get_data (last_node));
- ply_list_remove_node (buffer->clip_areas, last_node);
+ last_node = ply_list_get_last_node (buffer->clip_areas);
+ free (ply_list_node_get_data (last_node));
+ ply_list_remove_node (buffer->clip_areas, last_node);
}
ply_pixel_buffer_t *
ply_pixel_buffer_new (unsigned long width,
unsigned long height)
{
- ply_pixel_buffer_t *buffer;
+ ply_pixel_buffer_t *buffer;
- buffer = calloc (1, sizeof (ply_pixel_buffer_t));
+ buffer = calloc (1, sizeof(ply_pixel_buffer_t));
- buffer->updated_areas = ply_region_new ();
- buffer->bytes = (uint32_t *) calloc (height, width * sizeof (uint32_t));
- buffer->area.width = width;
- buffer->area.height = height;
+ buffer->updated_areas = ply_region_new ();
+ buffer->bytes = (uint32_t *) calloc (height, width * sizeof(uint32_t));
+ buffer->area.width = width;
+ buffer->area.height = height;
- buffer->clip_areas = ply_list_new ();
- ply_pixel_buffer_push_clip_area (buffer, &buffer->area);
+ buffer->clip_areas = ply_list_new ();
+ ply_pixel_buffer_push_clip_area (buffer, &buffer->area);
- return buffer;
+ return buffer;
}
static void
free_clip_areas (ply_pixel_buffer_t *buffer)
{
- while (ply_list_get_length (buffer->clip_areas) > 0)
- ply_pixel_buffer_pop_clip_area (buffer);
+ while (ply_list_get_length (buffer->clip_areas) > 0) {
+ ply_pixel_buffer_pop_clip_area (buffer);
+ }
- ply_list_free (buffer->clip_areas);
- buffer->clip_areas = NULL;
+ ply_list_free (buffer->clip_areas);
+ buffer->clip_areas = NULL;
}
void
ply_pixel_buffer_free (ply_pixel_buffer_t *buffer)
{
- if (buffer == NULL)
- return;
+ if (buffer == NULL)
+ return;
- free_clip_areas (buffer);
- free (buffer->bytes);
- ply_region_free (buffer->updated_areas);
- free (buffer);
+ free_clip_areas (buffer);
+ free (buffer->bytes);
+ ply_region_free (buffer->updated_areas);
+ free (buffer);
}
void
ply_pixel_buffer_get_size (ply_pixel_buffer_t *buffer,
ply_rectangle_t *size)
{
- assert (buffer != NULL);
- assert (size != NULL);
+ assert (buffer != NULL);
+ assert (size != NULL);
- *size = buffer->area;
+ *size = buffer->area;
}
-unsigned long
+unsigned long
ply_pixel_buffer_get_width (ply_pixel_buffer_t *buffer)
{
- assert (buffer != NULL);
- return buffer->area.width;
+ assert (buffer != NULL);
+ return buffer->area.width;
}
-unsigned long
+unsigned long
ply_pixel_buffer_get_height (ply_pixel_buffer_t *buffer)
{
- assert (buffer != NULL);
- return buffer->area.height;
+ assert (buffer != NULL);
+ return buffer->area.height;
}
ply_region_t *
ply_pixel_buffer_get_updated_areas (ply_pixel_buffer_t *buffer)
{
- return buffer->updated_areas;
+ return buffer->updated_areas;
}
void
@@ -356,83 +350,75 @@ ply_pixel_buffer_fill_with_gradient (ply_pixel_buffer_t *buffer,
*/
#define COLOR_MASK (0xff << (24 - NOISE_BITS))
- uint32_t red, green, blue, red_step, green_step, blue_step, t, pixel;
- uint32_t x, y;
- /* we use a fixed seed so that the dithering doesn't change on repaints
- * of the same area.
- */
- uint32_t noise = 0x100001;
- ply_rectangle_t cropped_area;
+ uint32_t red, green, blue, red_step, green_step, blue_step, t, pixel;
+ uint32_t x, y;
+ /* we use a fixed seed so that the dithering doesn't change on repaints
+ * of the same area.
+ */
+ uint32_t noise = 0x100001;
+ ply_rectangle_t cropped_area;
- if (fill_area == NULL)
- fill_area = &buffer->area;
+ if (fill_area == NULL)
+ fill_area = &buffer->area;
- ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
+ ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
- red = (start << RED_SHIFT) & COLOR_MASK;
- green = (start << GREEN_SHIFT) & COLOR_MASK;
- blue = (start << BLUE_SHIFT) & COLOR_MASK;
+ red = (start << RED_SHIFT) & COLOR_MASK;
+ green = (start << GREEN_SHIFT) & COLOR_MASK;
+ blue = (start << BLUE_SHIFT) & COLOR_MASK;
- t = (end << RED_SHIFT) & COLOR_MASK;
- red_step = (int32_t) (t - red) / (int32_t) buffer->area.height;
- t = (end << GREEN_SHIFT) & COLOR_MASK;
- green_step = (int32_t) (t - green) / (int32_t) buffer->area.height;
- t = (end << BLUE_SHIFT) & COLOR_MASK;
- blue_step = (int32_t) (t - blue) / (int32_t) buffer->area.height;
+ t = (end << RED_SHIFT) & COLOR_MASK;
+ red_step = (int32_t) (t - red) / (int32_t) buffer->area.height;
+ t = (end << GREEN_SHIFT) & COLOR_MASK;
+ green_step = (int32_t) (t - green) / (int32_t) buffer->area.height;
+ t = (end << BLUE_SHIFT) & COLOR_MASK;
+ blue_step = (int32_t) (t - blue) / (int32_t) buffer->area.height;
#define RANDOMIZE(num) (num = (num + (num << 1)) & NOISE_MASK)
#define UNROLLED_PIXEL_COUNT 8
- for (y = buffer->area.y; y < buffer->area.y + buffer->area.height; y++)
- {
- if (cropped_area.y <= y && y < cropped_area.y + cropped_area.height)
- {
- if (cropped_area.width < UNROLLED_PIXEL_COUNT)
- {
- for (x = cropped_area.x; x < cropped_area.x + cropped_area.width; x++)
- {
- pixel = 0xff000000;
- RANDOMIZE(noise);
- pixel |= (((red + noise) & COLOR_MASK) >> RED_SHIFT);
- RANDOMIZE(noise);
- pixel |= (((green + noise) & COLOR_MASK) >> GREEN_SHIFT);
- RANDOMIZE(noise);
- pixel |= (((blue + noise) & COLOR_MASK) >> BLUE_SHIFT);
-
- buffer->bytes[y * buffer->area.width + x] = pixel;
- }
- }
- else
- {
- uint32_t shaded_set[UNROLLED_PIXEL_COUNT];
- uint32_t *ptr = &buffer->bytes[y * buffer->area.width + cropped_area.x];
- for (x = 0; x < UNROLLED_PIXEL_COUNT; x++)
- {
- shaded_set[x] = 0xff000000;
- RANDOMIZE(noise);
- shaded_set[x] |= (((red + noise) & COLOR_MASK) >> RED_SHIFT);
- RANDOMIZE(noise);
- shaded_set[x] |= (((green + noise) & COLOR_MASK) >> GREEN_SHIFT);
- RANDOMIZE(noise);
- shaded_set[x] |= (((blue + noise) & COLOR_MASK) >> BLUE_SHIFT);
- }
- for (x = cropped_area.width; x >=UNROLLED_PIXEL_COUNT; x-= UNROLLED_PIXEL_COUNT)
- {
- memcpy (ptr, (void *) shaded_set, UNROLLED_PIXEL_COUNT * sizeof (uint32_t));
- ptr += UNROLLED_PIXEL_COUNT;
+ for (y = buffer->area.y; y < buffer->area.y + buffer->area.height; y++) {
+ if (cropped_area.y <= y && y < cropped_area.y + cropped_area.height) {
+ if (cropped_area.width < UNROLLED_PIXEL_COUNT) {
+ for (x = cropped_area.x; x < cropped_area.x + cropped_area.width; x++) {
+ pixel = 0xff000000;
+ RANDOMIZE (noise);
+ pixel |= (((red + noise) & COLOR_MASK) >> RED_SHIFT);
+ RANDOMIZE (noise);
+ pixel |= (((green + noise) & COLOR_MASK) >> GREEN_SHIFT);
+ RANDOMIZE (noise);
+ pixel |= (((blue + noise) & COLOR_MASK) >> BLUE_SHIFT);
+
+ buffer->bytes[y * buffer->area.width + x] = pixel;
+ }
+ } else {
+ uint32_t shaded_set[UNROLLED_PIXEL_COUNT];
+ uint32_t *ptr = &buffer->bytes[y * buffer->area.width + cropped_area.x];
+ for (x = 0; x < UNROLLED_PIXEL_COUNT; x++) {
+ shaded_set[x] = 0xff000000;
+ RANDOMIZE (noise);
+ shaded_set[x] |= (((red + noise) & COLOR_MASK) >> RED_SHIFT);
+ RANDOMIZE (noise);
+ shaded_set[x] |= (((green + noise) & COLOR_MASK) >> GREEN_SHIFT);
+ RANDOMIZE (noise);
+ shaded_set[x] |= (((blue + noise) & COLOR_MASK) >> BLUE_SHIFT);
+ }
+ for (x = cropped_area.width; x >= UNROLLED_PIXEL_COUNT; x -= UNROLLED_PIXEL_COUNT) {
+ memcpy (ptr, (void *) shaded_set, UNROLLED_PIXEL_COUNT * sizeof(uint32_t));
+ ptr += UNROLLED_PIXEL_COUNT;
+ }
+
+ memcpy (ptr, (void *) shaded_set, x * sizeof(uint32_t));
+ }
}
- memcpy (ptr, (void *) shaded_set, x * sizeof (uint32_t));
- }
+ red += red_step;
+ green += green_step;
+ blue += blue_step;
}
- red += red_step;
- green += green_step;
- blue += blue_step;
- }
-
- ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
+ ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
}
void
@@ -443,25 +429,25 @@ ply_pixel_buffer_fill_with_color (ply_pixel_buffer_t *buffer,
double blue,
double alpha)
{
- uint32_t pixel_value;
- ply_rectangle_t cropped_area;
+ uint32_t pixel_value;
+ ply_rectangle_t cropped_area;
- assert (buffer != NULL);
+ assert (buffer != NULL);
- if (fill_area == NULL)
- fill_area = &buffer->area;
+ if (fill_area == NULL)
+ fill_area = &buffer->area;
- ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
+ ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
- red *= alpha;
- green *= alpha;
- blue *= alpha;
+ red *= alpha;
+ green *= alpha;
+ blue *= alpha;
- pixel_value = PLY_PIXEL_BUFFER_COLOR_TO_PIXEL_VALUE (red, green, blue, alpha);
+ pixel_value = PLY_PIXEL_BUFFER_COLOR_TO_PIXEL_VALUE (red, green, blue, alpha);
- ply_pixel_buffer_fill_area_with_pixel_value (buffer, &cropped_area, pixel_value);
+ ply_pixel_buffer_fill_area_with_pixel_value (buffer, &cropped_area, pixel_value);
- ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
+ ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
}
void
@@ -470,41 +456,41 @@ ply_pixel_buffer_fill_with_hex_color_at_opacity (ply_pixel_buffer_t *buffer,
uint32_t hex_color,
double opacity)
{
- ply_rectangle_t cropped_area;
- uint32_t pixel_value;
- double red;
- double green;
- double blue;
- double alpha;
+ ply_rectangle_t cropped_area;
+ uint32_t pixel_value;
+ double red;
+ double green;
+ double blue;
+ double alpha;
- assert (buffer != NULL);
+ assert (buffer != NULL);
- if (fill_area == NULL)
- fill_area = &buffer->area;
+ if (fill_area == NULL)
+ fill_area = &buffer->area;
- ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
+ ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
- /* if they only gave an rgb hex number, assume an alpha of 0xff
- */
- if ((hex_color & 0xff000000) == 0)
- hex_color = (hex_color << 8) | 0xff;
+ /* if they only gave an rgb hex number, assume an alpha of 0xff
+ */
+ if ((hex_color & 0xff000000) == 0)
+ hex_color = (hex_color << 8) | 0xff;
- red = ((double) (hex_color & 0xff000000) / 0xff000000);
- green = ((double) (hex_color & 0x00ff0000) / 0x00ff0000);
- blue = ((double) (hex_color & 0x0000ff00) / 0x0000ff00);
- alpha = ((double) (hex_color & 0x000000ff) / 0x000000ff);
+ red = ((double) (hex_color & 0xff000000) / 0xff000000);
+ green = ((double) (hex_color & 0x00ff0000) / 0x00ff0000);
+ blue = ((double) (hex_color & 0x0000ff00) / 0x0000ff00);
+ alpha = ((double) (hex_color & 0x000000ff) / 0x000000ff);
- alpha *= opacity;
+ alpha *= opacity;
- red *= alpha;
- green *= alpha;
- blue *= alpha;
+ red *= alpha;
+ green *= alpha;
+ blue *= alpha;
- pixel_value = PLY_PIXEL_BUFFER_COLOR_TO_PIXEL_VALUE (red, green, blue, alpha);
+ pixel_value = PLY_PIXEL_BUFFER_COLOR_TO_PIXEL_VALUE (red, green, blue, alpha);
- ply_pixel_buffer_fill_area_with_pixel_value (buffer, &cropped_area, pixel_value);
+ ply_pixel_buffer_fill_area_with_pixel_value (buffer, &cropped_area, pixel_value);
- ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
+ ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
}
void
@@ -512,8 +498,8 @@ ply_pixel_buffer_fill_with_hex_color (ply_pixel_buffer_t *buffer,
ply_rectangle_t *fill_area,
uint32_t hex_color)
{
- return ply_pixel_buffer_fill_with_hex_color_at_opacity (buffer, fill_area,
- hex_color, 1.0);
+ return ply_pixel_buffer_fill_with_hex_color_at_opacity (buffer, fill_area,
+ hex_color, 1.0);
}
void
@@ -523,49 +509,46 @@ ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (ply_pixel_buffer_t
uint32_t *data,
double opacity)
{
- unsigned long row, column;
- uint8_t opacity_as_byte;
- ply_rectangle_t cropped_area;
- unsigned long x;
- unsigned long y;
-
- assert (buffer != NULL);
+ unsigned long row, column;
+ uint8_t opacity_as_byte;
+ ply_rectangle_t cropped_area;
+ unsigned long x;
+ unsigned long y;
- if (fill_area == NULL)
- fill_area = &buffer->area;
+ assert (buffer != NULL);
- ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
+ if (fill_area == NULL)
+ fill_area = &buffer->area;
- if (clip_area)
- ply_rectangle_intersect (&cropped_area, clip_area, &cropped_area);
+ ply_pixel_buffer_crop_area_to_clip_area (buffer, fill_area, &cropped_area);
- if (cropped_area.width == 0 || cropped_area.height == 0)
- return;
+ if (clip_area)
+ ply_rectangle_intersect (&cropped_area, clip_area, &cropped_area);
- x = cropped_area.x - fill_area->x;
- y = cropped_area.y - fill_area->y;
- opacity_as_byte = (uint8_t) (opacity * 255.0);
+ if (cropped_area.width == 0 || cropped_area.height == 0)
+ return;
- for (row = y; row < y + cropped_area.height; row++)
- {
- for (column = x; column < x + cropped_area.width; column++)
- {
- uint32_t pixel_value;
+ x = cropped_area.x - fill_area->x;
+ y = cropped_area.y - fill_area->y;
+ opacity_as_byte = (uint8_t) (opacity * 255.0);
- pixel_value = data[fill_area->width * row + column];
- if ((pixel_value >> 24) == 0x00)
- continue;
+ for (row = y; row < y + cropped_area.height; row++) {
+ for (column = x; column < x + cropped_area.width; column++) {
+ uint32_t pixel_value;
- pixel_value = make_pixel_value_translucent (pixel_value, opacity_as_byte);
- ply_pixel_buffer_blend_value_at_pixel (buffer,
- cropped_area.x + (column - x),
- cropped_area.y + (row - y),
- pixel_value);
+ pixel_value = data[fill_area->width * row + column];
+ if ((pixel_value >> 24) == 0x00)
+ continue;
+ pixel_value = make_pixel_value_translucent (pixel_value, opacity_as_byte);
+ ply_pixel_buffer_blend_value_at_pixel (buffer,
+ cropped_area.x + (column - x),
+ cropped_area.y + (row - y),
+ pixel_value);
+ }
}
- }
- ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
+ ply_region_add_rectangle (buffer->updated_areas, &cropped_area);
}
void
@@ -574,10 +557,10 @@ ply_pixel_buffer_fill_with_argb32_data_at_opacity (ply_pixel_buffer_t *buffer,
uint32_t *data,
double opacity)
{
- ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (buffer,
- fill_area,
- NULL,
- data, opacity);
+ ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (buffer,
+ fill_area,
+ NULL,
+ data, opacity);
}
void
@@ -585,10 +568,10 @@ ply_pixel_buffer_fill_with_argb32_data (ply_pixel_buffer_t *buffer,
ply_rectangle_t *fill_area,
uint32_t *data)
{
- ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (buffer,
- fill_area,
- NULL,
- data, 1.0);
+ ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (buffer,
+ fill_area,
+ NULL,
+ data, 1.0);
}
void
@@ -597,10 +580,10 @@ ply_pixel_buffer_fill_with_argb32_data_with_clip (ply_pixel_buffer_t *buffer,
ply_rectangle_t *clip_area,
uint32_t *data)
{
- ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (buffer,
- fill_area,
- clip_area,
- data, 1.0);
+ ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (buffer,
+ fill_area,
+ clip_area,
+ data, 1.0);
}
void
@@ -611,54 +594,51 @@ ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (ply_pixel_buffer_t *canv
ply_rectangle_t *clip_area,
float opacity)
{
- unsigned long row, column;
- uint8_t opacity_as_byte;
- ply_rectangle_t cropped_area;
- unsigned long x;
- unsigned long y;
+ unsigned long row, column;
+ uint8_t opacity_as_byte;
+ ply_rectangle_t cropped_area;
+ unsigned long x;
+ unsigned long y;
- assert (canvas != NULL);
- assert (source != NULL);
+ assert (canvas != NULL);
+ assert (source != NULL);
- cropped_area.x = x_offset;
- cropped_area.y = y_offset;
- cropped_area.width = source->area.width;
- cropped_area.height = source->area.height;
+ cropped_area.x = x_offset;
+ cropped_area.y = y_offset;
+ cropped_area.width = source->area.width;
+ cropped_area.height = source->area.height;
- ply_pixel_buffer_crop_area_to_clip_area (canvas, &cropped_area, &cropped_area);
+ ply_pixel_buffer_crop_area_to_clip_area (canvas, &cropped_area, &cropped_area);
- if (clip_area)
- ply_rectangle_intersect (&cropped_area, clip_area, &cropped_area);
+ if (clip_area)
+ ply_rectangle_intersect (&cropped_area, clip_area, &cropped_area);
- if (cropped_area.width == 0 || cropped_area.height == 0)
- return;
+ if (cropped_area.width == 0 || cropped_area.height == 0)
+ return;
- x = cropped_area.x - x_offset;
- y = cropped_area.y - y_offset;
- opacity_as_byte = (uint8_t) (opacity * 255.0);
+ x = cropped_area.x - x_offset;
+ y = cropped_area.y - y_offset;
+ opacity_as_byte = (uint8_t) (opacity * 255.0);
- for (row = y; row < y + cropped_area.height; row++)
- {
- for (column = x; column < x + cropped_area.width; column++)
- {
- uint32_t pixel_value;
+ for (row = y; row < y + cropped_area.height; row++) {
+ for (column = x; column < x + cropped_area.width; column++) {
+ uint32_t pixel_value;
- pixel_value = source->bytes[row * source->area.width + column];
+ pixel_value = source->bytes[row * source->area.width + column];
- pixel_value = make_pixel_value_translucent (pixel_value, opacity_as_byte);
-
- if ((pixel_value >> 24) == 0x00)
- continue;
+ pixel_value = make_pixel_value_translucent (pixel_value, opacity_as_byte);
- ply_pixel_buffer_blend_value_at_pixel (canvas,
- cropped_area.x + (column - x),
- cropped_area.y + (row - y),
- pixel_value);
+ if ((pixel_value >> 24) == 0x00)
+ continue;
+ ply_pixel_buffer_blend_value_at_pixel (canvas,
+ cropped_area.x + (column - x),
+ cropped_area.y + (row - y),
+ pixel_value);
+ }
}
- }
- ply_region_add_rectangle (canvas->updated_areas, &cropped_area);
+ ply_region_add_rectangle (canvas->updated_areas, &cropped_area);
}
void
@@ -668,12 +648,12 @@ ply_pixel_buffer_fill_with_buffer_at_opacity (ply_pixel_buffer_t *canvas,
int y_offset,
float opacity)
{
- ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (canvas,
- source,
- x_offset,
- y_offset,
- NULL,
- opacity);
+ ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (canvas,
+ source,
+ x_offset,
+ y_offset,
+ NULL,
+ opacity);
}
void
@@ -683,12 +663,12 @@ ply_pixel_buffer_fill_with_buffer_with_clip (ply_pixel_buffer_t *canvas,
int y_offset,
ply_rectangle_t *clip_area)
{
- ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (canvas,
- source,
- x_offset,
- y_offset,
- clip_area,
- 1.0);
+ ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (canvas,
+ source,
+ x_offset,
+ y_offset,
+ clip_area,
+ 1.0);
}
void
@@ -697,18 +677,18 @@ ply_pixel_buffer_fill_with_buffer (ply_pixel_buffer_t *canvas,
int x_offset,
int y_offset)
{
- ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (canvas,
- source,
- x_offset,
- y_offset,
- NULL,
- 1.0);
+ ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (canvas,
+ source,
+ x_offset,
+ y_offset,
+ NULL,
+ 1.0);
}
uint32_t *
ply_pixel_buffer_get_argb32_data (ply_pixel_buffer_t *buffer)
{
- return buffer->bytes;
+ return buffer->bytes;
}
static inline uint32_t
@@ -716,53 +696,52 @@ ply_pixel_buffer_interpolate (ply_pixel_buffer_t *buffer,
double x,
double y)
{
- int ix;
- int iy;
- int width;
- int height;
-
- int i;
-
- int offset_x;
- int offset_y;
- uint32_t pixels[2][2];
- uint32_t reply = 0;
- uint32_t *bytes;
-
- width = buffer->area.width;
- height = buffer->area.height;
-
-
- bytes = ply_pixel_buffer_get_argb32_data (buffer);
-
- for (offset_y = 0; offset_y < 2; offset_y++)
- for (offset_x = 0; offset_x < 2; offset_x++)
- {
- ix = x + offset_x;
- iy = y + offset_y;
-
- if (ix < 0 || ix >= width || iy < 0 || iy >= height)
- pixels[offset_y][offset_x] = 0x00000000;
- else
- pixels[offset_y][offset_x] = bytes[ix + iy * width];
- }
- if (!pixels[0][0] && !pixels[0][1] && !pixels[1][0] && !pixels[1][1]) return 0;
-
- ix = x;
- iy = y;
- x -= ix;
- y -= iy;
- for (i = 0; i < 4; i++)
- {
- uint32_t value = 0;
- uint32_t mask = 0xFF << (i * 8);
- value += ((pixels[0][0]) & mask) * (1-x) * (1-y);
- value += ((pixels[0][1]) & mask) * x * (1-y);
- value += ((pixels[1][0]) & mask) * (1-x) * y;
- value += ((pixels[1][1]) & mask) * x * y;
- reply |= value & mask;
- }
- return reply;
+ int ix;
+ int iy;
+ int width;
+ int height;
+
+ int i;
+
+ int offset_x;
+ int offset_y;
+ uint32_t pixels[2][2];
+ uint32_t reply = 0;
+ uint32_t *bytes;
+
+ width = buffer->area.width;
+ height = buffer->area.height;
+
+
+ bytes = ply_pixel_buffer_get_argb32_data (buffer);
+
+ for (offset_y = 0; offset_y < 2; offset_y++) {
+ for (offset_x = 0; offset_x < 2; offset_x++) {
+ ix = x + offset_x;
+ iy = y + offset_y;
+
+ if (ix < 0 || ix >= width || iy < 0 || iy >= height)
+ pixels[offset_y][offset_x] = 0x00000000;
+ else
+ pixels[offset_y][offset_x] = bytes[ix + iy * width];
+ }
+ }
+ if (!pixels[0][0] && !pixels[0][1] && !pixels[1][0] && !pixels[1][1]) return 0;
+
+ ix = x;
+ iy = y;
+ x -= ix;
+ y -= iy;
+ for (i = 0; i < 4; i++) {
+ uint32_t value = 0;
+ uint32_t mask = 0xFF << (i * 8);
+ value += ((pixels[0][0]) & mask) * (1 - x) * (1 - y);
+ value += ((pixels[0][1]) & mask) * x * (1 - y);
+ value += ((pixels[1][0]) & mask) * (1 - x) * y;
+ value += ((pixels[1][1]) & mask) * x * y;
+ reply |= value & mask;
+ }
+ return reply;
}
ply_pixel_buffer_t *
@@ -770,34 +749,32 @@ ply_pixel_buffer_resize (ply_pixel_buffer_t *old_buffer,
long width,
long height)
{
- ply_pixel_buffer_t *buffer;
- int x, y;
- double old_x, old_y;
- int old_width, old_height;
- float scale_x, scale_y;
- uint32_t *bytes;
-
- buffer = ply_pixel_buffer_new (width, height);
-
- bytes = ply_pixel_buffer_get_argb32_data (buffer);
-
- old_width = old_buffer->area.width;
- old_height = old_buffer->area.height;
-
- scale_x = ((double) old_width - 1) / MAX (width - 1, 1);
- scale_y = ((double) old_height - 1) / MAX (height - 1, 1);
-
- for (y = 0; y < height; y++)
- {
- old_y = y * scale_y;
- for (x=0; x < width; x++)
- {
- old_x = x * scale_x;
- bytes[x + y * width] =
- ply_pixel_buffer_interpolate (old_buffer, old_x, old_y);
+ ply_pixel_buffer_t *buffer;
+ int x, y;
+ double old_x, old_y;
+ int old_width, old_height;
+ float scale_x, scale_y;
+ uint32_t *bytes;
+
+ buffer = ply_pixel_buffer_new (width, height);
+
+ bytes = ply_pixel_buffer_get_argb32_data (buffer);
+
+ old_width = old_buffer->area.width;
+ old_height = old_buffer->area.height;
+
+ scale_x = ((double) old_width - 1) / MAX (width - 1, 1);
+ scale_y = ((double) old_height - 1) / MAX (height - 1, 1);
+
+ for (y = 0; y < height; y++) {
+ old_y = y * scale_y;
+ for (x = 0; x < width; x++) {
+ old_x = x * scale_x;
+ bytes[x + y * width] =
+ ply_pixel_buffer_interpolate (old_buffer, old_x, old_y);
+ }
}
- }
- return buffer;
+ return buffer;
}
ply_pixel_buffer_t *
@@ -806,46 +783,44 @@ ply_pixel_buffer_rotate (ply_pixel_buffer_t *old_buffer,
long center_y,
double theta_offset)
{
- ply_pixel_buffer_t *buffer;
- int x, y;
- double old_x, old_y;
- int width;
- int height;
- uint32_t *bytes;
-
- width = old_buffer->area.width;
- height = old_buffer->area.height;
-
- buffer = ply_pixel_buffer_new (width, height);
-
- bytes = ply_pixel_buffer_get_argb32_data (buffer);
-
- double d = sqrt ((center_x * center_x +
- center_y * center_y));
- double theta = atan2 (-center_y, -center_x) - theta_offset;
- double start_x = center_x + d * cos (theta);
- double start_y = center_y + d * sin (theta);
- double step_x = cos (-theta_offset);
- double step_y = sin (-theta_offset);
-
- for (y = 0; y < height; y++)
- {
- old_y = start_y;
- old_x = start_x;
- start_y += step_x;
- start_x -= step_y;
- for (x = 0; x < width; x++)
- {
- if (old_x < 0 || old_x > width || old_y < 0 || old_y > height)
- bytes[x + y * width] = 0;
- else
- bytes[x + y * width] =
- ply_pixel_buffer_interpolate (old_buffer, old_x, old_y);
- old_x += step_x;
- old_y += step_y;
+ ply_pixel_buffer_t *buffer;
+ int x, y;
+ double old_x, old_y;
+ int width;
+ int height;
+ uint32_t *bytes;
+
+ width = old_buffer->area.width;
+ height = old_buffer->area.height;
+
+ buffer = ply_pixel_buffer_new (width, height);
+
+ bytes = ply_pixel_buffer_get_argb32_data (buffer);
+
+ double d = sqrt ((center_x * center_x +
+ center_y * center_y));
+ double theta = atan2 (-center_y, -center_x) - theta_offset;
+ double start_x = center_x + d * cos (theta);
+ double start_y = center_y + d * sin (theta);
+ double step_x = cos (-theta_offset);
+ double step_y = sin (-theta_offset);
+
+ for (y = 0; y < height; y++) {
+ old_y = start_y;
+ old_x = start_x;
+ start_y += step_x;
+ start_x -= step_y;
+ for (x = 0; x < width; x++) {
+ if (old_x < 0 || old_x > width || old_y < 0 || old_y > height)
+ bytes[x + y * width] = 0;
+ else
+ bytes[x + y * width] =
+ ply_pixel_buffer_interpolate (old_buffer, old_x, old_y);
+ old_x += step_x;
+ old_y += step_y;
+ }
}
- }
- return buffer;
+ return buffer;
}
ply_pixel_buffer_t *
@@ -853,30 +828,28 @@ ply_pixel_buffer_tile (ply_pixel_buffer_t *old_buffer,
long width,
long height)
{
- long x, y;
- long old_x, old_y;
- long old_width, old_height;
- uint32_t *bytes, *old_bytes;
- ply_pixel_buffer_t *buffer;
+ long x, y;
+ long old_x, old_y;
+ long old_width, old_height;
+ uint32_t *bytes, *old_bytes;
+ ply_pixel_buffer_t *buffer;
- buffer = ply_pixel_buffer_new (width, height);
+ buffer = ply_pixel_buffer_new (width, height);
- old_bytes = ply_pixel_buffer_get_argb32_data (old_buffer);
- bytes = ply_pixel_buffer_get_argb32_data (buffer);
+ old_bytes = ply_pixel_buffer_get_argb32_data (old_buffer);
+ bytes = ply_pixel_buffer_get_argb32_data (buffer);
- old_width = old_buffer->area.width;
- old_height = old_buffer->area.height;
+ old_width = old_buffer->area.width;
+ old_height = old_buffer->area.height;
- for (y = 0; y < height; y++)
- {
- old_y = y % old_height;
- for (x = 0; x < width; x++)
- {
- old_x = x % old_width;
- bytes[x + y * width] = old_bytes[old_x + old_y * old_width];
+ for (y = 0; y < height; y++) {
+ old_y = y % old_height;
+ for (x = 0; x < width; x++) {
+ old_x = x % old_width;
+ bytes[x + y * width] = old_bytes[old_x + old_y * old_width];
+ }
}
- }
- return buffer;
+ return buffer;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/libply-splash-core/ply-pixel-buffer.h b/src/libply-splash-core/ply-pixel-buffer.h
index e0dffda9..7848a986 100644
--- a/src/libply-splash-core/ply-pixel-buffer.h
+++ b/src/libply-splash-core/ply-pixel-buffer.h
@@ -31,11 +31,11 @@
typedef struct _ply_pixel_buffer ply_pixel_buffer_t;
-#define PLY_PIXEL_BUFFER_COLOR_TO_PIXEL_VALUE(r,g,b,a) \
- (((uint8_t) (CLAMP (a * 255.0, 0.0, 255.0)) << 24) \
- | ((uint8_t) (CLAMP (r * 255.0, 0.0, 255.0)) << 16) \
- | ((uint8_t) (CLAMP (g * 255.0, 0.0, 255.0)) << 8) \
- | ((uint8_t) (CLAMP (b * 255.0, 0.0, 255.0))))
+#define PLY_PIXEL_BUFFER_COLOR_TO_PIXEL_VALUE(r, g, b, a) \
+ (((uint8_t) (CLAMP (a * 255.0, 0.0, 255.0)) << 24) \
+ | ((uint8_t) (CLAMP (r * 255.0, 0.0, 255.0)) << 16) \
+ | ((uint8_t) (CLAMP (g * 255.0, 0.0, 255.0)) << 8) \
+ | ((uint8_t) (CLAMP (b * 255.0, 0.0, 255.0))))
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_pixel_buffer_t *ply_pixel_buffer_new (unsigned long width,
diff --git a/src/libply-splash-core/ply-pixel-display.c b/src/libply-splash-core/ply-pixel-display.c
index 37151203..b061bfc3 100644
--- a/src/libply-splash-core/ply-pixel-display.c
+++ b/src/libply-splash-core/ply-pixel-display.c
@@ -44,81 +44,80 @@
struct _ply_pixel_display
{
- ply_event_loop_t *loop;
+ ply_event_loop_t *loop;
- ply_renderer_t *renderer;
- ply_renderer_head_t *head;
+ ply_renderer_t *renderer;
+ ply_renderer_head_t *head;
- unsigned long width;
- unsigned long height;
+ unsigned long width;
+ unsigned long height;
- ply_pixel_display_draw_handler_t draw_handler;
- void *draw_handler_user_data;
-
- int pause_count;
+ ply_pixel_display_draw_handler_t draw_handler;
+ void *draw_handler_user_data;
+ int pause_count;
};
ply_pixel_display_t *
ply_pixel_display_new (ply_renderer_t *renderer,
ply_renderer_head_t *head)
{
- ply_pixel_display_t *display;
- ply_pixel_buffer_t *pixel_buffer;
- ply_rectangle_t size;
+ ply_pixel_display_t *display;
+ ply_pixel_buffer_t *pixel_buffer;
+ ply_rectangle_t size;
- display = calloc (1, sizeof (ply_pixel_display_t));
+ display = calloc (1, sizeof(ply_pixel_display_t));
- display->loop = ply_event_loop_get_default ();
- display->renderer = renderer;
- display->head = head;
+ display->loop = ply_event_loop_get_default ();
+ display->renderer = renderer;
+ display->head = head;
- pixel_buffer = ply_renderer_get_buffer_for_head (renderer, head);
- ply_pixel_buffer_get_size (pixel_buffer, &size);
+ pixel_buffer = ply_renderer_get_buffer_for_head (renderer, head);
+ ply_pixel_buffer_get_size (pixel_buffer, &size);
- display->width = size.width;
- display->height = size.height;
+ display->width = size.width;
+ display->height = size.height;
- return display;
+ return display;
}
unsigned long
ply_pixel_display_get_width (ply_pixel_display_t *display)
{
- return display->width;
+ return display->width;
}
unsigned long
ply_pixel_display_get_height (ply_pixel_display_t *display)
{
- return display->height;
+ return display->height;
}
static void
ply_pixel_display_flush (ply_pixel_display_t *display)
{
- if (display->pause_count > 0)
- return;
+ if (display->pause_count > 0)
+ return;
- ply_renderer_flush_head (display->renderer, display->head);
+ ply_renderer_flush_head (display->renderer, display->head);
}
void
ply_pixel_display_pause_updates (ply_pixel_display_t *display)
{
- assert (display != NULL);
+ assert (display != NULL);
- display->pause_count++;
+ display->pause_count++;
}
void
ply_pixel_display_unpause_updates (ply_pixel_display_t *display)
{
- assert (display != NULL);
+ assert (display != NULL);
- display->pause_count--;
+ display->pause_count--;
- ply_pixel_display_flush (display);
+ ply_pixel_display_flush (display);
}
void
@@ -128,48 +127,46 @@ ply_pixel_display_draw_area (ply_pixel_display_t *display,
int width,
int height)
{
-
- ply_pixel_buffer_t *pixel_buffer;
-
- pixel_buffer = ply_renderer_get_buffer_for_head (display->renderer,
- display->head);
-
- if (display->draw_handler != NULL)
- {
- ply_rectangle_t clip_area;
-
- clip_area.x = x;
- clip_area.y = y;
- clip_area.width = width;
- clip_area.height = height;
- ply_pixel_buffer_push_clip_area (pixel_buffer, &clip_area);
- display->draw_handler (display->draw_handler_user_data,
- pixel_buffer,
- x, y, width, height, display);
- ply_pixel_buffer_pop_clip_area (pixel_buffer);
- }
-
- ply_pixel_display_flush (display);
+ ply_pixel_buffer_t *pixel_buffer;
+
+ pixel_buffer = ply_renderer_get_buffer_for_head (display->renderer,
+ display->head);
+
+ if (display->draw_handler != NULL) {
+ ply_rectangle_t clip_area;
+
+ clip_area.x = x;
+ clip_area.y = y;
+ clip_area.width = width;
+ clip_area.height = height;
+ ply_pixel_buffer_push_clip_area (pixel_buffer, &clip_area);
+ display->draw_handler (display->draw_handler_user_data,
+ pixel_buffer,
+ x, y, width, height, display);
+ ply_pixel_buffer_pop_clip_area (pixel_buffer);
+ }
+
+ ply_pixel_display_flush (display);
}
void
ply_pixel_display_free (ply_pixel_display_t *display)
{
- if (display == NULL)
- return;
+ if (display == NULL)
+ return;
- free (display);
+ free (display);
}
void
-ply_pixel_display_set_draw_handler (ply_pixel_display_t *display,
+ply_pixel_display_set_draw_handler (ply_pixel_display_t *display,
ply_pixel_display_draw_handler_t draw_handler,
- void *user_data)
+ void *user_data)
{
- assert (display != NULL);
+ assert (display != NULL);
- display->draw_handler = draw_handler;
- display->draw_handler_user_data = user_data;
+ display->draw_handler = draw_handler;
+ display->draw_handler_user_data = user_data;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/libply-splash-core/ply-pixel-display.h b/src/libply-splash-core/ply-pixel-display.h
index 98a6b3c8..62a36da2 100644
--- a/src/libply-splash-core/ply-pixel-display.h
+++ b/src/libply-splash-core/ply-pixel-display.h
@@ -32,13 +32,13 @@
typedef struct _ply_pixel_display ply_pixel_display_t;
-typedef void (* ply_pixel_display_draw_handler_t) (void *user_data,
- ply_pixel_buffer_t *pixel_buffer,
- int x,
- int y,
- int width,
- int height,
- ply_pixel_display_t *pixel_display);
+typedef void (*ply_pixel_display_draw_handler_t) (void *user_data,
+ ply_pixel_buffer_t *pixel_buffer,
+ int x,
+ int y,
+ int width,
+ int height,
+ ply_pixel_display_t *pixel_display);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_pixel_display_t *ply_pixel_display_new (ply_renderer_t *renderer,
@@ -46,12 +46,12 @@ ply_pixel_display_t *ply_pixel_display_new (ply_renderer_t *renderer,
void ply_pixel_display_free (ply_pixel_display_t *display);
-unsigned long ply_pixel_display_get_width (ply_pixel_display_t *display);
+unsigned long ply_pixel_display_get_width (ply_pixel_display_t *display);
unsigned long ply_pixel_display_get_height (ply_pixel_display_t *display);
-void ply_pixel_display_set_draw_handler (ply_pixel_display_t *display,
- ply_pixel_display_draw_handler_t draw_handler,
- void *user_data);
+void ply_pixel_display_set_draw_handler (ply_pixel_display_t *display,
+ ply_pixel_display_draw_handler_t draw_handler,
+ void *user_data);
void ply_pixel_display_draw_area (ply_pixel_display_t *display,
int x,
diff --git a/src/libply-splash-core/ply-renderer-plugin.h b/src/libply-splash-core/ply-renderer-plugin.h
index 68ac7e95..82ef9134 100644
--- a/src/libply-splash-core/ply-renderer-plugin.h
+++ b/src/libply-splash-core/ply-renderer-plugin.h
@@ -37,35 +37,35 @@ typedef struct _ply_renderer_backend ply_renderer_backend_t;
typedef struct
{
- ply_renderer_backend_t * (* create_backend) (const char *device_name,
- ply_terminal_t *terminal);
- void (* destroy_backend) (ply_renderer_backend_t *backend);
- bool (* open_device) (ply_renderer_backend_t *backend);
- void (* close_device) (ply_renderer_backend_t *backend);
- bool (* query_device) (ply_renderer_backend_t *backend);
- bool (* map_to_device) (ply_renderer_backend_t *backend);
- void (* unmap_from_device) (ply_renderer_backend_t *backend);
- void (* activate) (ply_renderer_backend_t *backend);
- void (* deactivate) (ply_renderer_backend_t *backend);
- void (* flush_head) (ply_renderer_backend_t *backend,
- ply_renderer_head_t *head);
+ ply_renderer_backend_t * (*create_backend)(const char *device_name,
+ ply_terminal_t * terminal);
+ void (*destroy_backend)(ply_renderer_backend_t *backend);
+ bool (*open_device)(ply_renderer_backend_t *backend);
+ void (*close_device)(ply_renderer_backend_t *backend);
+ bool (*query_device)(ply_renderer_backend_t *backend);
+ bool (*map_to_device)(ply_renderer_backend_t *backend);
+ void (*unmap_from_device)(ply_renderer_backend_t *backend);
+ void (*activate)(ply_renderer_backend_t *backend);
+ void (*deactivate)(ply_renderer_backend_t *backend);
+ void (*flush_head)(ply_renderer_backend_t *backend,
+ ply_renderer_head_t *head);
- ply_list_t * (* get_heads) (ply_renderer_backend_t *backend);
+ ply_list_t * (*get_heads)(ply_renderer_backend_t * backend);
- ply_pixel_buffer_t * (* get_buffer_for_head) (ply_renderer_backend_t *backend,
- ply_renderer_head_t *head);
+ ply_pixel_buffer_t * (*get_buffer_for_head)(ply_renderer_backend_t * backend,
+ ply_renderer_head_t * head);
- ply_renderer_input_source_t * (* get_input_source) (ply_renderer_backend_t *backend);
- bool (* open_input_source) (ply_renderer_backend_t *backend,
- ply_renderer_input_source_t *input_source);
+ ply_renderer_input_source_t * (*get_input_source)(ply_renderer_backend_t * backend);
+ bool (*open_input_source)(ply_renderer_backend_t *backend,
+ ply_renderer_input_source_t *input_source);
- void (* set_handler_for_input_source) (ply_renderer_backend_t *backend,
- ply_renderer_input_source_t *input_source,
- ply_renderer_input_source_handler_t handler,
- void *user_data);
+ void (*set_handler_for_input_source)(ply_renderer_backend_t *backend,
+ ply_renderer_input_source_t *input_source,
+ ply_renderer_input_source_handler_t handler,
+ void *user_data);
- void (* close_input_source) (ply_renderer_backend_t *backend,
- ply_renderer_input_source_t *input_source);
+ void (*close_input_source)(ply_renderer_backend_t *backend,
+ ply_renderer_input_source_t *input_source);
} ply_renderer_plugin_interface_t;
#endif /* PLY_RENDERER_PLUGIN_H */
diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c
index 04a99cef..f64eac54 100644
--- a/src/libply-splash-core/ply-renderer.c
+++ b/src/libply-splash-core/ply-renderer.c
@@ -44,357 +44,348 @@
struct _ply_renderer
{
- ply_event_loop_t *loop;
- ply_module_handle_t *module_handle;
- const ply_renderer_plugin_interface_t *plugin_interface;
- ply_renderer_backend_t *backend;
+ ply_event_loop_t *loop;
+ ply_module_handle_t *module_handle;
+ const ply_renderer_plugin_interface_t *plugin_interface;
+ ply_renderer_backend_t *backend;
- ply_renderer_type_t type;
- char *device_name;
- ply_terminal_t *terminal;
+ ply_renderer_type_t type;
+ char *device_name;
+ ply_terminal_t *terminal;
- uint32_t input_source_is_open : 1;
- uint32_t is_mapped : 1;
+ uint32_t input_source_is_open : 1;
+ uint32_t is_mapped : 1;
};
typedef const ply_renderer_plugin_interface_t *
- (* get_backend_interface_function_t) (void);
+(*get_backend_interface_function_t) (void);
static void ply_renderer_unload_plugin (ply_renderer_t *renderer);
ply_renderer_t *
-ply_renderer_new (ply_renderer_type_t renderer_type,
- const char *device_name,
- ply_terminal_t *terminal)
+ply_renderer_new (ply_renderer_type_t renderer_type,
+ const char *device_name,
+ ply_terminal_t *terminal)
{
- ply_renderer_t *renderer;
+ ply_renderer_t *renderer;
- renderer = calloc (1, sizeof (struct _ply_renderer));
+ renderer = calloc (1, sizeof(struct _ply_renderer));
- renderer->type = renderer_type;
+ renderer->type = renderer_type;
- if (device_name != NULL)
- renderer->device_name = strdup (device_name);
+ if (device_name != NULL)
+ renderer->device_name = strdup (device_name);
- renderer->terminal = terminal;
+ renderer->terminal = terminal;
- return renderer;
+ return renderer;
}
void
ply_renderer_free (ply_renderer_t *renderer)
{
- if (renderer == NULL)
- return;
+ if (renderer == NULL)
+ return;
- if (renderer->plugin_interface != NULL)
- {
- ply_trace ("Unloading renderer backend plugin");
- ply_renderer_unload_plugin (renderer);
- }
+ if (renderer->plugin_interface != NULL) {
+ ply_trace ("Unloading renderer backend plugin");
+ ply_renderer_unload_plugin (renderer);
+ }
- free (renderer->device_name);
- free (renderer);
+ free (renderer->device_name);
+ free (renderer);
}
const char *
ply_renderer_get_device_name (ply_renderer_t *renderer)
{
- return renderer->device_name;
+ return renderer->device_name;
}
static bool
ply_renderer_load_plugin (ply_renderer_t *renderer,
const char *module_path)
{
- assert (renderer != NULL);
-
- get_backend_interface_function_t get_renderer_backend_interface;
-
- renderer->module_handle = ply_open_module (module_path);
-
- if (renderer->module_handle == NULL)
- return false;
-
- get_renderer_backend_interface = (get_backend_interface_function_t)
- ply_module_look_up_function (renderer->module_handle,
- "ply_renderer_backend_get_interface");
-
- if (get_renderer_backend_interface == NULL)
- {
- ply_save_errno ();
- ply_trace ("module '%s' is not a renderer plugin",
- module_path);
- ply_close_module (renderer->module_handle);
- renderer->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
-
- renderer->plugin_interface = get_renderer_backend_interface ();
-
- if (renderer->plugin_interface == NULL)
- {
- ply_trace ("module '%s' is not a valid renderer plugin",
- module_path);
- ply_save_errno ();
- ply_close_module (renderer->module_handle);
- renderer->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
-
- renderer->backend = renderer->plugin_interface->create_backend (renderer->device_name,
- renderer->terminal);
-
- if (renderer->backend == NULL)
- {
- ply_save_errno ();
- ply_trace ("module '%s' renderer backend could not be created",
- module_path);
- ply_close_module (renderer->module_handle);
- renderer->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
-
- return true;
+ assert (renderer != NULL);
+
+ get_backend_interface_function_t get_renderer_backend_interface;
+
+ renderer->module_handle = ply_open_module (module_path);
+
+ if (renderer->module_handle == NULL)
+ return false;
+
+ get_renderer_backend_interface = (get_backend_interface_function_t)
+ ply_module_look_up_function (renderer->module_handle,
+ "ply_renderer_backend_get_interface");
+
+ if (get_renderer_backend_interface == NULL) {
+ ply_save_errno ();
+ ply_trace ("module '%s' is not a renderer plugin",
+ module_path);
+ ply_close_module (renderer->module_handle);
+ renderer->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
+
+ renderer->plugin_interface = get_renderer_backend_interface ();
+
+ if (renderer->plugin_interface == NULL) {
+ ply_trace ("module '%s' is not a valid renderer plugin",
+ module_path);
+ ply_save_errno ();
+ ply_close_module (renderer->module_handle);
+ renderer->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
+
+ renderer->backend = renderer->plugin_interface->create_backend (renderer->device_name,
+ renderer->terminal);
+
+ if (renderer->backend == NULL) {
+ ply_save_errno ();
+ ply_trace ("module '%s' renderer backend could not be created",
+ module_path);
+ ply_close_module (renderer->module_handle);
+ renderer->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
+
+ return true;
}
static void
ply_renderer_unload_plugin (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
- assert (renderer->module_handle != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
+ assert (renderer->module_handle != NULL);
- ply_close_module (renderer->module_handle);
- renderer->plugin_interface = NULL;
- renderer->module_handle = NULL;
+ ply_close_module (renderer->module_handle);
+ renderer->plugin_interface = NULL;
+ renderer->module_handle = NULL;
}
static bool
ply_renderer_open_device (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
- return renderer->plugin_interface->open_device (renderer->backend);
+ return renderer->plugin_interface->open_device (renderer->backend);
}
static void
ply_renderer_close_device (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
- renderer->plugin_interface->close_device (renderer->backend);
+ renderer->plugin_interface->close_device (renderer->backend);
}
static bool
ply_renderer_query_device (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
- return renderer->plugin_interface->query_device (renderer->backend);
+ return renderer->plugin_interface->query_device (renderer->backend);
}
static bool
ply_renderer_map_to_device (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
- if (renderer->is_mapped)
- return true;
+ if (renderer->is_mapped)
+ return true;
- renderer->is_mapped = renderer->plugin_interface->map_to_device (renderer->backend);
+ renderer->is_mapped = renderer->plugin_interface->map_to_device (renderer->backend);
- return renderer->is_mapped;
+ return renderer->is_mapped;
}
static void
ply_renderer_unmap_from_device (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
- if (!renderer->is_mapped)
- return;
+ if (!renderer->is_mapped)
+ return;
- renderer->plugin_interface->unmap_from_device (renderer->backend);
- renderer->is_mapped = false;
+ renderer->plugin_interface->unmap_from_device (renderer->backend);
+ renderer->is_mapped = false;
}
static bool
ply_renderer_open_plugin (ply_renderer_t *renderer,
const char *plugin_path)
{
- ply_trace ("trying to open renderer plugin %s", plugin_path);
-
- if (!ply_renderer_load_plugin (renderer, plugin_path))
- return false;
-
- if (!ply_renderer_open_device (renderer))
- {
- ply_trace ("could not open rendering device for plugin %s",
- plugin_path);
- ply_renderer_unload_plugin (renderer);
- return false;
- }
-
- if (!ply_renderer_query_device (renderer))
- {
- ply_trace ("could not query rendering device for plugin %s",
- plugin_path);
- ply_renderer_close_device (renderer);
- ply_renderer_unload_plugin (renderer);
- return false;
- }
-
- ply_trace ("opened renderer plugin %s", plugin_path);
- return true;
+ ply_trace ("trying to open renderer plugin %s", plugin_path);
+
+ if (!ply_renderer_load_plugin (renderer, plugin_path))
+ return false;
+
+ if (!ply_renderer_open_device (renderer)) {
+ ply_trace ("could not open rendering device for plugin %s",
+ plugin_path);
+ ply_renderer_unload_plugin (renderer);
+ return false;
+ }
+
+ if (!ply_renderer_query_device (renderer)) {
+ ply_trace ("could not query rendering device for plugin %s",
+ plugin_path);
+ ply_renderer_close_device (renderer);
+ ply_renderer_unload_plugin (renderer);
+ return false;
+ }
+
+ ply_trace ("opened renderer plugin %s", plugin_path);
+ return true;
}
bool
ply_renderer_open (ply_renderer_t *renderer)
{
- int i;
-
- struct
- {
- ply_renderer_type_t type;
- const char *path;
- } known_plugins[] =
- {
- { PLY_RENDERER_TYPE_X11, PLYMOUTH_PLUGIN_PATH "renderers/x11.so" },
- { PLY_RENDERER_TYPE_DRM, PLYMOUTH_PLUGIN_PATH "renderers/drm.so" },
- { PLY_RENDERER_TYPE_FRAME_BUFFER, PLYMOUTH_PLUGIN_PATH "renderers/frame-buffer.so" },
- { PLY_RENDERER_TYPE_NONE, NULL }
- };
-
- for (i = 0; known_plugins[i].type != PLY_RENDERER_TYPE_NONE; i++)
- {
- if (renderer->type == known_plugins[i].type ||
- renderer->type == PLY_RENDERER_TYPE_AUTO)
+ int i;
+
+ struct
+ {
+ ply_renderer_type_t type;
+ const char *path;
+ } known_plugins[] =
{
- if (ply_renderer_open_plugin (renderer, known_plugins[i].path))
- return true;
+ { PLY_RENDERER_TYPE_X11, PLYMOUTH_PLUGIN_PATH "renderers/x11.so" },
+ { PLY_RENDERER_TYPE_DRM, PLYMOUTH_PLUGIN_PATH "renderers/drm.so" },
+ { PLY_RENDERER_TYPE_FRAME_BUFFER, PLYMOUTH_PLUGIN_PATH "renderers/frame-buffer.so" },
+ { PLY_RENDERER_TYPE_NONE, NULL }
+ };
+
+ for (i = 0; known_plugins[i].type != PLY_RENDERER_TYPE_NONE; i++) {
+ if (renderer->type == known_plugins[i].type ||
+ renderer->type == PLY_RENDERER_TYPE_AUTO)
+ if (ply_renderer_open_plugin (renderer, known_plugins[i].path))
+ return true;
}
- }
- ply_trace ("could not find suitable rendering plugin");
- return false;
+ ply_trace ("could not find suitable rendering plugin");
+ return false;
}
void
ply_renderer_close (ply_renderer_t *renderer)
{
- ply_renderer_unmap_from_device (renderer);
- ply_renderer_close_device (renderer);
+ ply_renderer_unmap_from_device (renderer);
+ ply_renderer_close_device (renderer);
}
void
ply_renderer_activate (ply_renderer_t *renderer)
{
- assert (renderer->plugin_interface != NULL);
+ assert (renderer->plugin_interface != NULL);
- return renderer->plugin_interface->activate (renderer->backend);
+ return renderer->plugin_interface->activate (renderer->backend);
}
void
ply_renderer_deactivate (ply_renderer_t *renderer)
{
- assert (renderer->plugin_interface != NULL);
+ assert (renderer->plugin_interface != NULL);
- return renderer->plugin_interface->deactivate (renderer->backend);
+ return renderer->plugin_interface->deactivate (renderer->backend);
}
ply_list_t *
ply_renderer_get_heads (ply_renderer_t *renderer)
{
- assert (renderer->plugin_interface != NULL);
+ assert (renderer->plugin_interface != NULL);
- return renderer->plugin_interface->get_heads (renderer->backend);
+ return renderer->plugin_interface->get_heads (renderer->backend);
}
ply_pixel_buffer_t *
ply_renderer_get_buffer_for_head (ply_renderer_t *renderer,
ply_renderer_head_t *head)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
- assert (head != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
+ assert (head != NULL);
- return renderer->plugin_interface->get_buffer_for_head (renderer->backend,
- head);
+ return renderer->plugin_interface->get_buffer_for_head (renderer->backend,
+ head);
}
void
ply_renderer_flush_head (ply_renderer_t *renderer,
ply_renderer_head_t *head)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
- assert (head != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
+ assert (head != NULL);
- if (!ply_renderer_map_to_device (renderer))
- return;
+ if (!ply_renderer_map_to_device (renderer))
+ return;
- renderer->plugin_interface->flush_head (renderer->backend, head);
+ renderer->plugin_interface->flush_head (renderer->backend, head);
}
ply_renderer_input_source_t *
ply_renderer_get_input_source (ply_renderer_t *renderer)
{
- assert (renderer != NULL);
- assert (renderer->plugin_interface != NULL);
+ assert (renderer != NULL);
+ assert (renderer->plugin_interface != NULL);
- return renderer->plugin_interface->get_input_source (renderer->backend);
+ return renderer->plugin_interface->get_input_source (renderer->backend);
}
bool
ply_renderer_open_input_source (ply_renderer_t *renderer,
ply_renderer_input_source_t *input_source)
{
- assert (renderer != NULL);
- assert (input_source != NULL);
+ assert (renderer != NULL);
+ assert (input_source != NULL);
- renderer->input_source_is_open = renderer->plugin_interface->open_input_source (renderer->backend,
- input_source);
+ renderer->input_source_is_open = renderer->plugin_interface->open_input_source (renderer->backend,
+ input_source);
- return renderer->input_source_is_open;
+ return renderer->input_source_is_open;
}
void
-ply_renderer_set_handler_for_input_source (ply_renderer_t *renderer,
- ply_renderer_input_source_t *input_source,
- ply_renderer_input_source_handler_t handler,
- void *user_data)
+ply_renderer_set_handler_for_input_source (ply_renderer_t *renderer,
+ ply_renderer_input_source_t *input_source,
+ ply_renderer_input_source_handler_t handler,
+ void *user_data)
{
- assert (renderer != NULL);
- assert (input_source != NULL);
+ assert (renderer != NULL);
+ assert (input_source != NULL);
- renderer->plugin_interface->set_handler_for_input_source (renderer->backend,
- input_source,
- handler,
- user_data);
+ renderer->plugin_interface->set_handler_for_input_source (renderer->backend,
+ input_source,
+ handler,
+ user_data);
}
void
ply_renderer_close_input_source (ply_renderer_t *renderer,
ply_renderer_input_source_t *input_source)
{
- assert (renderer != NULL);
- assert (input_source != NULL);
+ assert (renderer != NULL);
+ assert (input_source != NULL);
- if (!renderer->input_source_is_open)
- return;
+ if (!renderer->input_source_is_open)
+ return;
- renderer->plugin_interface->close_input_source (renderer->backend,
- input_source);
- renderer->input_source_is_open = false;
+ renderer->plugin_interface->close_input_source (renderer->backend,
+ input_source);
+ renderer->input_source_is_open = false;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
index 3d483413..a019a4d7 100644
--- a/src/libply-splash-core/ply-renderer.h
+++ b/src/libply-splash-core/ply-renderer.h
@@ -37,21 +37,21 @@ typedef struct _ply_renderer_input_source ply_renderer_input_source_t;
typedef enum
{
- PLY_RENDERER_TYPE_NONE = -1,
- PLY_RENDERER_TYPE_AUTO,
- PLY_RENDERER_TYPE_DRM,
- PLY_RENDERER_TYPE_FRAME_BUFFER,
- PLY_RENDERER_TYPE_X11
+ PLY_RENDERER_TYPE_NONE = -1,
+ PLY_RENDERER_TYPE_AUTO,
+ PLY_RENDERER_TYPE_DRM,
+ PLY_RENDERER_TYPE_FRAME_BUFFER,
+ PLY_RENDERER_TYPE_X11
} ply_renderer_type_t;
-typedef void (* ply_renderer_input_source_handler_t) (void *user_data,
- ply_buffer_t *key_buffer,
- ply_renderer_input_source_t *input_source);
+typedef void (*ply_renderer_input_source_handler_t) (void *user_data,
+ ply_buffer_t *key_buffer,
+ ply_renderer_input_source_t *input_source);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_renderer_t *ply_renderer_new (ply_renderer_type_t renderer_type,
- const char *device_name,
- ply_terminal_t *terminal);
+ const char *device_name,
+ ply_terminal_t *terminal);
void ply_renderer_free (ply_renderer_t *renderer);
bool ply_renderer_open (ply_renderer_t *renderer);
void ply_renderer_close (ply_renderer_t *renderer);
@@ -68,10 +68,10 @@ void ply_renderer_flush_head (ply_renderer_t *renderer,
ply_renderer_input_source_t *ply_renderer_get_input_source (ply_renderer_t *renderer);
bool ply_renderer_open_input_source (ply_renderer_t *renderer,
ply_renderer_input_source_t *input_source);
-void ply_renderer_set_handler_for_input_source (ply_renderer_t *renderer,
- ply_renderer_input_source_t *input_source,
- ply_renderer_input_source_handler_t handler,
- void *user_data);
+void ply_renderer_set_handler_for_input_source (ply_renderer_t *renderer,
+ ply_renderer_input_source_t *input_source,
+ ply_renderer_input_source_handler_t handler,
+ void *user_data);
void ply_renderer_close_input_source (ply_renderer_t *renderer,
ply_renderer_input_source_t *input_source);
diff --git a/src/libply-splash-core/ply-seat.c b/src/libply-splash-core/ply-seat.c
index 2ac8bf76..04ae43ed 100644
--- a/src/libply-splash-core/ply-seat.c
+++ b/src/libply-splash-core/ply-seat.c
@@ -40,348 +40,333 @@
struct _ply_seat
{
- ply_event_loop_t *loop;
+ ply_event_loop_t *loop;
- ply_boot_splash_t *splash;
- ply_terminal_t *terminal;
- ply_renderer_t *renderer;
- ply_keyboard_t *keyboard;
- ply_list_t *text_displays;
- ply_list_t *pixel_displays;
+ ply_boot_splash_t *splash;
+ ply_terminal_t *terminal;
+ ply_renderer_t *renderer;
+ ply_keyboard_t *keyboard;
+ ply_list_t *text_displays;
+ ply_list_t *pixel_displays;
- uint32_t renderer_active : 1;
- uint32_t keyboard_active : 1;
+ uint32_t renderer_active : 1;
+ uint32_t keyboard_active : 1;
};
ply_seat_t *
ply_seat_new (ply_terminal_t *terminal)
{
- ply_seat_t *seat;
+ ply_seat_t *seat;
- seat = calloc (1, sizeof (ply_seat_t));
+ seat = calloc (1, sizeof(ply_seat_t));
- seat->loop = ply_event_loop_get_default ();
- seat->terminal = terminal;
- seat->text_displays = ply_list_new ();
- seat->pixel_displays = ply_list_new ();
+ seat->loop = ply_event_loop_get_default ();
+ seat->terminal = terminal;
+ seat->text_displays = ply_list_new ();
+ seat->pixel_displays = ply_list_new ();
- return seat;
+ return seat;
}
static void
add_pixel_displays (ply_seat_t *seat)
{
- ply_list_t *heads;
- ply_list_node_t *node;
+ ply_list_t *heads;
+ ply_list_node_t *node;
- heads = ply_renderer_get_heads (seat->renderer);
+ heads = ply_renderer_get_heads (seat->renderer);
- ply_trace ("Adding displays for %d heads",
- ply_list_get_length (heads));
+ ply_trace ("Adding displays for %d heads",
+ ply_list_get_length (heads));
- node = ply_list_get_first_node (heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
- ply_pixel_display_t *display;
+ node = ply_list_get_first_node (heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
+ ply_pixel_display_t *display;
- head = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (heads, node);
+ head = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (heads, node);
- display = ply_pixel_display_new (seat->renderer, head);
+ display = ply_pixel_display_new (seat->renderer, head);
- ply_list_append_data (seat->pixel_displays, display);
+ ply_list_append_data (seat->pixel_displays, display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
add_text_displays (ply_seat_t *seat)
{
- ply_text_display_t *display;
-
- if (!ply_terminal_is_open (seat->terminal))
- {
- if (!ply_terminal_open (seat->terminal))
- {
- ply_trace ("could not add terminal %s: %m",
- ply_terminal_get_name (seat->terminal));
- return;
+ ply_text_display_t *display;
+
+ if (!ply_terminal_is_open (seat->terminal)) {
+ if (!ply_terminal_open (seat->terminal)) {
+ ply_trace ("could not add terminal %s: %m",
+ ply_terminal_get_name (seat->terminal));
+ return;
+ }
}
- }
- ply_trace ("adding text display for terminal %s",
- ply_terminal_get_name (seat->terminal));
+ ply_trace ("adding text display for terminal %s",
+ ply_terminal_get_name (seat->terminal));
- display = ply_text_display_new (seat->terminal);
- ply_list_append_data (seat->text_displays, display);
+ display = ply_text_display_new (seat->terminal);
+ ply_list_append_data (seat->text_displays, display);
}
bool
-ply_seat_open (ply_seat_t *seat,
- ply_renderer_type_t renderer_type,
- const char *device)
+ply_seat_open (ply_seat_t *seat,
+ ply_renderer_type_t renderer_type,
+ const char *device)
{
- if (renderer_type != PLY_RENDERER_TYPE_NONE)
- {
- ply_renderer_t *renderer;
+ if (renderer_type != PLY_RENDERER_TYPE_NONE) {
+ ply_renderer_t *renderer;
- renderer = ply_renderer_new (renderer_type, device, seat->terminal);
+ renderer = ply_renderer_new (renderer_type, device, seat->terminal);
- if (!ply_renderer_open (renderer))
- {
- ply_trace ("could not open renderer for %s", device);
- ply_renderer_free (renderer);
+ if (!ply_renderer_open (renderer)) {
+ ply_trace ("could not open renderer for %s", device);
+ ply_renderer_free (renderer);
- seat->renderer = NULL;
- seat->renderer_active = false;
+ seat->renderer = NULL;
+ seat->renderer_active = false;
- if (renderer_type != PLY_RENDERER_TYPE_AUTO)
- return false;
- }
- else
- {
- seat->renderer = renderer;
- seat->renderer_active = true;
+ if (renderer_type != PLY_RENDERER_TYPE_AUTO)
+ return false;
+ } else {
+ seat->renderer = renderer;
+ seat->renderer_active = true;
+ }
}
- }
- if (seat->renderer != NULL)
- {
- seat->keyboard = ply_keyboard_new_for_renderer (seat->renderer);
- add_pixel_displays (seat);
-
- }
- else
- {
- seat->keyboard = ply_keyboard_new_for_terminal (seat->terminal);
- }
- add_text_displays (seat);
+ if (seat->renderer != NULL) {
+ seat->keyboard = ply_keyboard_new_for_renderer (seat->renderer);
+ add_pixel_displays (seat);
+ } else {
+ seat->keyboard = ply_keyboard_new_for_terminal (seat->terminal);
+ }
+ add_text_displays (seat);
- ply_keyboard_watch_for_input (seat->keyboard);
- seat->keyboard_active = true;
+ ply_keyboard_watch_for_input (seat->keyboard);
+ seat->keyboard_active = true;
- return true;
+ return true;
}
bool
ply_seat_is_open (ply_seat_t *seat)
{
- return ply_list_get_length (seat->pixel_displays) > 0 ||
- ply_list_get_length (seat->text_displays) > 0;
+ return ply_list_get_length (seat->pixel_displays) > 0 ||
+ ply_list_get_length (seat->text_displays) > 0;
}
void
ply_seat_deactivate_keyboard (ply_seat_t *seat)
{
- if (!seat->keyboard_active)
- return;
+ if (!seat->keyboard_active)
+ return;
- seat->keyboard_active = false;
+ seat->keyboard_active = false;
- if (seat->keyboard == NULL)
- return;
+ if (seat->keyboard == NULL)
+ return;
- ply_trace ("deactivating keybord");
- ply_keyboard_stop_watching_for_input (seat->keyboard);
+ ply_trace ("deactivating keybord");
+ ply_keyboard_stop_watching_for_input (seat->keyboard);
}
void
ply_seat_deactivate_renderer (ply_seat_t *seat)
{
- if (!seat->renderer_active)
- return;
+ if (!seat->renderer_active)
+ return;
- seat->renderer_active = false;
+ seat->renderer_active = false;
- if (seat->renderer == NULL)
- return;
+ if (seat->renderer == NULL)
+ return;
- ply_trace ("deactivating renderer");
- ply_renderer_deactivate (seat->renderer);
+ ply_trace ("deactivating renderer");
+ ply_renderer_deactivate (seat->renderer);
}
void
ply_seat_activate_keyboard (ply_seat_t *seat)
{
- if (seat->keyboard_active)
- return;
+ if (seat->keyboard_active)
+ return;
- if (seat->keyboard == NULL)
- return;
+ if (seat->keyboard == NULL)
+ return;
- ply_trace ("activating keyboard");
- ply_keyboard_watch_for_input (seat->keyboard);
+ ply_trace ("activating keyboard");
+ ply_keyboard_watch_for_input (seat->keyboard);
- seat->keyboard_active = true;
+ seat->keyboard_active = true;
}
void
ply_seat_activate_renderer (ply_seat_t *seat)
{
- if (seat->renderer_active)
- return;
+ if (seat->renderer_active)
+ return;
- if (seat->renderer == NULL)
- return;
+ if (seat->renderer == NULL)
+ return;
- ply_trace ("activating renderer");
- ply_renderer_activate (seat->renderer);
+ ply_trace ("activating renderer");
+ ply_renderer_activate (seat->renderer);
- seat->renderer_active = true;
+ seat->renderer_active = true;
}
void
ply_seat_refresh_displays (ply_seat_t *seat)
{
- ply_list_node_t *node;
-
- node = ply_list_get_first_node (seat->pixel_displays);
- while (node != NULL)
- {
- ply_pixel_display_t *display;
- ply_list_node_t *next_node;
- unsigned long width, height;
-
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (seat->pixel_displays, node);
-
- width = ply_pixel_display_get_width (display);
- height = ply_pixel_display_get_height (display);
-
- ply_pixel_display_draw_area (display, 0, 0, width, height);
- node = next_node;
- }
-
- node = ply_list_get_first_node (seat->text_displays);
- while (node != NULL)
- {
- ply_text_display_t *display;
- ply_list_node_t *next_node;
- int number_of_columns, number_of_rows;
-
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (seat->text_displays, node);
-
- number_of_columns = ply_text_display_get_number_of_columns (display);
- number_of_rows = ply_text_display_get_number_of_rows (display);
-
- ply_text_display_draw_area (display, 0, 0,
- number_of_columns,
- number_of_rows);
- node = next_node;
- }
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (seat->pixel_displays);
+ while (node != NULL) {
+ ply_pixel_display_t *display;
+ ply_list_node_t *next_node;
+ unsigned long width, height;
+
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (seat->pixel_displays, node);
+
+ width = ply_pixel_display_get_width (display);
+ height = ply_pixel_display_get_height (display);
+
+ ply_pixel_display_draw_area (display, 0, 0, width, height);
+ node = next_node;
+ }
+
+ node = ply_list_get_first_node (seat->text_displays);
+ while (node != NULL) {
+ ply_text_display_t *display;
+ ply_list_node_t *next_node;
+ int number_of_columns, number_of_rows;
+
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (seat->text_displays, node);
+
+ number_of_columns = ply_text_display_get_number_of_columns (display);
+ number_of_rows = ply_text_display_get_number_of_rows (display);
+
+ ply_text_display_draw_area (display, 0, 0,
+ number_of_columns,
+ number_of_rows);
+ node = next_node;
+ }
}
void
ply_seat_close (ply_seat_t *seat)
{
- if (seat->renderer == NULL)
- return;
+ if (seat->renderer == NULL)
+ return;
- ply_trace ("destroying renderer");
- ply_renderer_close (seat->renderer);
- ply_renderer_free (seat->renderer);
- seat->renderer = NULL;
+ ply_trace ("destroying renderer");
+ ply_renderer_close (seat->renderer);
+ ply_renderer_free (seat->renderer);
+ seat->renderer = NULL;
}
void
ply_seat_set_splash (ply_seat_t *seat,
ply_boot_splash_t *splash)
{
- if (seat->splash == splash)
- return;
+ if (seat->splash == splash)
+ return;
- if (seat->splash != NULL)
- ply_boot_splash_detach_from_seat (splash, seat);
+ if (seat->splash != NULL)
+ ply_boot_splash_detach_from_seat (splash, seat);
- if (splash != NULL)
- ply_boot_splash_attach_to_seat (splash, seat);
+ if (splash != NULL)
+ ply_boot_splash_attach_to_seat (splash, seat);
- seat->splash = splash;
+ seat->splash = splash;
}
static void
free_pixel_displays (ply_seat_t *seat)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("freeing %d pixel displays", ply_list_get_length (seat->pixel_displays));
- node = ply_list_get_first_node (seat->pixel_displays);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_pixel_display_t *display;
+ ply_trace ("freeing %d pixel displays", ply_list_get_length (seat->pixel_displays));
+ node = ply_list_get_first_node (seat->pixel_displays);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_pixel_display_t *display;
- next_node = ply_list_get_next_node (seat->pixel_displays, node);
- display = ply_list_node_get_data (node);
- ply_pixel_display_free (display);
+ next_node = ply_list_get_next_node (seat->pixel_displays, node);
+ display = ply_list_node_get_data (node);
+ ply_pixel_display_free (display);
- ply_list_remove_node (seat->pixel_displays, node);
+ ply_list_remove_node (seat->pixel_displays, node);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
free_text_displays (ply_seat_t *seat)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("freeing %d text displays", ply_list_get_length (seat->text_displays));
- node = ply_list_get_first_node (seat->text_displays);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_text_display_t *display;
+ ply_trace ("freeing %d text displays", ply_list_get_length (seat->text_displays));
+ node = ply_list_get_first_node (seat->text_displays);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_text_display_t *display;
- next_node = ply_list_get_next_node (seat->text_displays, node);
- display = ply_list_node_get_data (node);
- ply_text_display_free (display);
+ next_node = ply_list_get_next_node (seat->text_displays, node);
+ display = ply_list_node_get_data (node);
+ ply_text_display_free (display);
- ply_list_remove_node (seat->text_displays, node);
+ ply_list_remove_node (seat->text_displays, node);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_seat_free (ply_seat_t *seat)
{
- if (seat == NULL)
- return;
+ if (seat == NULL)
+ return;
- free_pixel_displays (seat);
- free_text_displays (seat);
- ply_keyboard_free (seat->keyboard);
+ free_pixel_displays (seat);
+ free_text_displays (seat);
+ ply_keyboard_free (seat->keyboard);
- free (seat);
+ free (seat);
}
ply_list_t *
ply_seat_get_pixel_displays (ply_seat_t *seat)
{
- return seat->pixel_displays;
+ return seat->pixel_displays;
}
ply_list_t *
ply_seat_get_text_displays (ply_seat_t *seat)
{
- return seat->text_displays;
+ return seat->text_displays;
}
ply_keyboard_t *
ply_seat_get_keyboard (ply_seat_t *seat)
{
- return seat->keyboard;
+ return seat->keyboard;
}
ply_renderer_t *
ply_seat_get_renderer (ply_seat_t *seat)
{
- return seat->renderer;
+ return seat->renderer;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/libply-splash-core/ply-seat.h b/src/libply-splash-core/ply-seat.h
index d5d33978..f9ed15de 100644
--- a/src/libply-splash-core/ply-seat.h
+++ b/src/libply-splash-core/ply-seat.h
@@ -43,9 +43,9 @@ typedef struct _ply_seat ply_seat_t;
ply_seat_t *ply_seat_new (ply_terminal_t *terminal);
void ply_seat_free (ply_seat_t *seat);
-bool ply_seat_open (ply_seat_t *seat,
- ply_renderer_type_t renderer_type,
- const char *device);
+bool ply_seat_open (ply_seat_t *seat,
+ ply_renderer_type_t renderer_type,
+ const char *device);
bool ply_seat_is_open (ply_seat_t *seat);
void ply_seat_deactivate_keyboard (ply_seat_t *seat);
void ply_seat_activate_keyboard (ply_seat_t *seat);
diff --git a/src/libply-splash-core/ply-terminal.c b/src/libply-splash-core/ply-terminal.c
index 992dd3f3..1bbeb426 100644
--- a/src/libply-splash-core/ply-terminal.c
+++ b/src/libply-splash-core/ply-terminal.c
@@ -60,56 +60,56 @@
typedef struct
{
- ply_terminal_input_handler_t handler;
- void *user_data;
+ ply_terminal_input_handler_t handler;
+ void *user_data;
} ply_terminal_input_closure_t;
typedef struct
{
- ply_terminal_active_vt_changed_handler_t handler;
- void *user_data;
+ ply_terminal_active_vt_changed_handler_t handler;
+ void *user_data;
} ply_terminal_active_vt_changed_closure_t;
struct _ply_terminal
{
- ply_event_loop_t *loop;
-
- struct termios original_term_attributes;
- struct termios original_locked_term_attributes;
-
- char *name;
- int fd;
- int vt_number;
- int initial_vt_number;
- int number_of_reopen_tries;
-
- ply_list_t *vt_change_closures;
- ply_list_t *input_closures;
- ply_fd_watch_t *fd_watch;
- ply_terminal_color_t foreground_color;
- ply_terminal_color_t background_color;
-
- uint8_t original_color_palette[TEXT_PALETTE_SIZE];
- uint8_t color_palette[TEXT_PALETTE_SIZE];
-
- int number_of_rows;
- int number_of_columns;
-
- uint32_t original_term_attributes_saved : 1;
- uint32_t original_locked_term_attributes_saved : 1;
- uint32_t supports_text_color : 1;
- uint32_t is_open : 1;
- uint32_t is_active : 1;
- uint32_t is_unbuffered : 1;
- uint32_t is_watching_for_vt_changes : 1;
- uint32_t should_ignore_mode_changes : 1;
+ ply_event_loop_t *loop;
+
+ struct termios original_term_attributes;
+ struct termios original_locked_term_attributes;
+
+ char *name;
+ int fd;
+ int vt_number;
+ int initial_vt_number;
+ int number_of_reopen_tries;
+
+ ply_list_t *vt_change_closures;
+ ply_list_t *input_closures;
+ ply_fd_watch_t *fd_watch;
+ ply_terminal_color_t foreground_color;
+ ply_terminal_color_t background_color;
+
+ uint8_t original_color_palette[TEXT_PALETTE_SIZE];
+ uint8_t color_palette[TEXT_PALETTE_SIZE];
+
+ int number_of_rows;
+ int number_of_columns;
+
+ uint32_t original_term_attributes_saved : 1;
+ uint32_t original_locked_term_attributes_saved : 1;
+ uint32_t supports_text_color : 1;
+ uint32_t is_open : 1;
+ uint32_t is_active : 1;
+ uint32_t is_unbuffered : 1;
+ uint32_t is_watching_for_vt_changes : 1;
+ uint32_t should_ignore_mode_changes : 1;
};
typedef enum
{
- PLY_TERMINAL_OPEN_RESULT_INCOMPLETE,
- PLY_TERMINAL_OPEN_RESULT_FAILURE,
- PLY_TERMINAL_OPEN_RESULT_SUCCESS,
+ PLY_TERMINAL_OPEN_RESULT_INCOMPLETE,
+ PLY_TERMINAL_OPEN_RESULT_FAILURE,
+ PLY_TERMINAL_OPEN_RESULT_SUCCESS,
} ply_terminal_open_result_t;
static ply_terminal_open_result_t ply_terminal_open_device (ply_terminal_t *terminal);
@@ -117,199 +117,191 @@ static ply_terminal_open_result_t ply_terminal_open_device (ply_terminal_t *term
ply_terminal_t *
ply_terminal_new (const char *device_name)
{
- ply_terminal_t *terminal;
+ ply_terminal_t *terminal;
- assert (device_name != NULL);
+ assert (device_name != NULL);
- terminal = calloc (1, sizeof (ply_terminal_t));
+ terminal = calloc (1, sizeof(ply_terminal_t));
- terminal->loop = ply_event_loop_get_default ();
- terminal->vt_change_closures = ply_list_new ();
- terminal->input_closures = ply_list_new ();
+ terminal->loop = ply_event_loop_get_default ();
+ terminal->vt_change_closures = ply_list_new ();
+ terminal->input_closures = ply_list_new ();
- if (strncmp (device_name, "/dev/", strlen ("/dev/")) == 0)
- terminal->name = strdup (device_name);
- else
- asprintf (&terminal->name, "/dev/%s", device_name);
+ if (strncmp (device_name, "/dev/", strlen ("/dev/")) == 0)
+ terminal->name = strdup (device_name);
+ else
+ asprintf (&terminal->name, "/dev/%s", device_name);
- terminal->fd = -1;
- terminal->vt_number = -1;
- terminal->initial_vt_number = -1;
+ terminal->fd = -1;
+ terminal->vt_number = -1;
+ terminal->initial_vt_number = -1;
- return terminal;
+ return terminal;
}
static void
ply_terminal_look_up_color_palette (ply_terminal_t *terminal)
{
- if (ioctl (terminal->fd, GIO_CMAP, terminal->color_palette) < 0)
- terminal->supports_text_color = false;
- else
- terminal->supports_text_color = true;
+ if (ioctl (terminal->fd, GIO_CMAP, terminal->color_palette) < 0)
+ terminal->supports_text_color = false;
+ else
+ terminal->supports_text_color = true;
}
static bool
ply_terminal_change_color_palette (ply_terminal_t *terminal)
{
- if (!terminal->supports_text_color)
- return true;
+ if (!terminal->supports_text_color)
+ return true;
- if (ioctl (terminal->fd, PIO_CMAP, terminal->color_palette) < 0)
- return false;
+ if (ioctl (terminal->fd, PIO_CMAP, terminal->color_palette) < 0)
+ return false;
- return true;
+ return true;
}
static void
ply_terminal_save_color_palette (ply_terminal_t *terminal)
{
- if (!terminal->supports_text_color)
- return;
+ if (!terminal->supports_text_color)
+ return;
- memcpy (terminal->original_color_palette, terminal->color_palette,
- TEXT_PALETTE_SIZE);
+ memcpy (terminal->original_color_palette, terminal->color_palette,
+ TEXT_PALETTE_SIZE);
}
static void
ply_terminal_restore_color_palette (ply_terminal_t *terminal)
{
- if (!terminal->supports_text_color)
- return;
+ if (!terminal->supports_text_color)
+ return;
- memcpy (terminal->color_palette, terminal->original_color_palette,
- TEXT_PALETTE_SIZE);
+ memcpy (terminal->color_palette, terminal->original_color_palette,
+ TEXT_PALETTE_SIZE);
- ply_terminal_change_color_palette (terminal);
+ ply_terminal_change_color_palette (terminal);
}
void
ply_terminal_reset_colors (ply_terminal_t *terminal)
{
- assert (terminal != NULL);
+ assert (terminal != NULL);
- ply_terminal_restore_color_palette (terminal);
+ ply_terminal_restore_color_palette (terminal);
}
static void
ply_terminal_unlock (ply_terminal_t *terminal)
{
- struct termios locked_term_attributes;
+ struct termios locked_term_attributes;
- assert (terminal != NULL);
+ assert (terminal != NULL);
- if (terminal->original_locked_term_attributes_saved)
- locked_term_attributes = terminal->original_locked_term_attributes;
- else
- memset (&locked_term_attributes, 0x0, sizeof (locked_term_attributes));
+ if (terminal->original_locked_term_attributes_saved)
+ locked_term_attributes = terminal->original_locked_term_attributes;
+ else
+ memset (&locked_term_attributes, 0x0, sizeof(locked_term_attributes));
- if (ioctl (terminal->fd, TIOCSLCKTRMIOS,
- &locked_term_attributes) < 0)
- {
- ply_trace ("couldn't unlock terminal settings: %m");
- }
+ if (ioctl (terminal->fd, TIOCSLCKTRMIOS,
+ &locked_term_attributes) < 0)
+ ply_trace ("couldn't unlock terminal settings: %m");
- terminal->original_locked_term_attributes_saved = false;
+ terminal->original_locked_term_attributes_saved = false;
}
static void
ply_terminal_lock (ply_terminal_t *terminal)
{
- struct termios locked_term_attributes;
+ struct termios locked_term_attributes;
- assert (terminal != NULL);
+ assert (terminal != NULL);
- if (!terminal->original_locked_term_attributes_saved &&
- ioctl (terminal->fd, TIOCGLCKTRMIOS, &locked_term_attributes) == 0)
- {
- terminal->original_locked_term_attributes = locked_term_attributes;
- terminal->original_locked_term_attributes_saved = true;
+ if (!terminal->original_locked_term_attributes_saved &&
+ ioctl (terminal->fd, TIOCGLCKTRMIOS, &locked_term_attributes) == 0) {
+ terminal->original_locked_term_attributes = locked_term_attributes;
+ terminal->original_locked_term_attributes_saved = true;
- memset (&locked_term_attributes, 0xff, sizeof (locked_term_attributes));
- if (ioctl (terminal->fd, TIOCSLCKTRMIOS, &locked_term_attributes) < 0)
- {
- ply_trace ("couldn't lock terminal settings: %m");
+ memset (&locked_term_attributes, 0xff, sizeof(locked_term_attributes));
+ if (ioctl (terminal->fd, TIOCSLCKTRMIOS, &locked_term_attributes) < 0)
+ ply_trace ("couldn't lock terminal settings: %m");
}
- }
}
bool
ply_terminal_set_unbuffered_input (ply_terminal_t *terminal)
{
- struct termios term_attributes;
+ struct termios term_attributes;
- ply_terminal_unlock (terminal);
+ ply_terminal_unlock (terminal);
- tcgetattr (terminal->fd, &term_attributes);
+ tcgetattr (terminal->fd, &term_attributes);
- if (!terminal->original_term_attributes_saved)
- {
- terminal->original_term_attributes = term_attributes;
- terminal->original_term_attributes_saved = true;
- }
+ if (!terminal->original_term_attributes_saved) {
+ terminal->original_term_attributes = term_attributes;
+ terminal->original_term_attributes_saved = true;
+ }
- cfmakeraw (&term_attributes);
+ cfmakeraw (&term_attributes);
- /* Make return output new line like canonical mode */
- term_attributes.c_iflag |= ICRNL;
+ /* Make return output new line like canonical mode */
+ term_attributes.c_iflag |= ICRNL;
- /* Make \n return go to the beginning of the next line */
- term_attributes.c_oflag |= ONLCR | OPOST;
+ /* Make \n return go to the beginning of the next line */
+ term_attributes.c_oflag |= ONLCR | OPOST;
- if (tcsetattr (terminal->fd, TCSANOW, &term_attributes) != 0)
- return false;
+ if (tcsetattr (terminal->fd, TCSANOW, &term_attributes) != 0)
+ return false;
- ply_terminal_lock (terminal);
+ ply_terminal_lock (terminal);
- terminal->is_unbuffered = true;
+ terminal->is_unbuffered = true;
- return true;
+ return true;
}
bool
ply_terminal_set_buffered_input (ply_terminal_t *terminal)
{
- struct termios term_attributes;
+ struct termios term_attributes;
- if (!terminal->is_unbuffered)
- return true;
+ if (!terminal->is_unbuffered)
+ return true;
- ply_terminal_unlock (terminal);
+ ply_terminal_unlock (terminal);
- tcgetattr (terminal->fd, &term_attributes);
+ tcgetattr (terminal->fd, &term_attributes);
- /* If someone already messed with the terminal settings,
- * and they seem good enough, bail
- */
- if (term_attributes.c_lflag & ICANON)
- {
- terminal->is_unbuffered = false;
+ /* If someone already messed with the terminal settings,
+ * and they seem good enough, bail
+ */
+ if (term_attributes.c_lflag & ICANON) {
+ terminal->is_unbuffered = false;
- return true;
- }
+ return true;
+ }
- /* If we don't know the original term attributes, or they were originally sucky,
- * then invent some that are probably good enough.
- */
- if (!terminal->original_term_attributes_saved || !(terminal->original_term_attributes.c_lflag & ICANON))
- {
- term_attributes.c_iflag |= BRKINT | IGNPAR | ICRNL | IXON;
- term_attributes.c_oflag |= OPOST;
- term_attributes.c_lflag |= ECHO | ICANON | ISIG | IEXTEN;
+ /* If we don't know the original term attributes, or they were originally sucky,
+ * then invent some that are probably good enough.
+ */
+ if (!terminal->original_term_attributes_saved || !(terminal->original_term_attributes.c_lflag & ICANON)) {
+ term_attributes.c_iflag |= BRKINT | IGNPAR | ICRNL | IXON;
+ term_attributes.c_oflag |= OPOST;
+ term_attributes.c_lflag |= ECHO | ICANON | ISIG | IEXTEN;
- if (tcsetattr (terminal->fd, TCSANOW, &term_attributes) != 0)
- return false;
+ if (tcsetattr (terminal->fd, TCSANOW, &term_attributes) != 0)
+ return false;
- terminal->is_unbuffered = false;
+ terminal->is_unbuffered = false;
- return true;
- }
+ return true;
+ }
- if (tcsetattr (terminal->fd, TCSANOW, &terminal->original_term_attributes) != 0)
- return false;
+ if (tcsetattr (terminal->fd, TCSANOW, &terminal->original_term_attributes) != 0)
+ return false;
- terminal->is_unbuffered = false;
+ terminal->is_unbuffered = false;
- return true;
+ return true;
}
void
@@ -317,777 +309,741 @@ ply_terminal_write (ply_terminal_t *terminal,
const char *format,
...)
{
- va_list args;
- char *string;
- int size;
+ va_list args;
+ char *string;
+ int size;
- assert (terminal != NULL);
- assert (format != NULL);
+ assert (terminal != NULL);
+ assert (format != NULL);
- string = NULL;
- va_start (args, format);
- size = vasprintf (&string, format, args);
- va_end (args);
+ string = NULL;
+ va_start (args, format);
+ size = vasprintf (&string, format, args);
+ va_end (args);
- write (terminal->fd, string, size);
- free (string);
+ write (terminal->fd, string, size);
+ free (string);
}
static void
ply_terminal_reopen_device (ply_terminal_t *terminal)
{
- ply_terminal_open_result_t open_result;
+ ply_terminal_open_result_t open_result;
- ply_trace ("trying to reopen terminal '%s' (attempt %d)",
- terminal->name,
- terminal->number_of_reopen_tries);
+ ply_trace ("trying to reopen terminal '%s' (attempt %d)",
+ terminal->name,
+ terminal->number_of_reopen_tries);
- terminal->number_of_reopen_tries++;
+ terminal->number_of_reopen_tries++;
- open_result = ply_terminal_open_device (terminal);
+ open_result = ply_terminal_open_device (terminal);
- if (open_result == PLY_TERMINAL_OPEN_RESULT_INCOMPLETE)
- {
- int total_retries;
+ if (open_result == PLY_TERMINAL_OPEN_RESULT_INCOMPLETE) {
+ int total_retries;
- total_retries = (int) (PLY_TERMINAL_REOPEN_TIMEOUT / PLY_TERMINAL_REOPEN_INTERVAL);
+ total_retries = (int) (PLY_TERMINAL_REOPEN_TIMEOUT / PLY_TERMINAL_REOPEN_INTERVAL);
- if (terminal->number_of_reopen_tries < total_retries)
- {
- ply_event_loop_watch_for_timeout (terminal->loop,
- PLY_TERMINAL_REOPEN_INTERVAL,
- (ply_event_loop_timeout_handler_t)
- ply_terminal_reopen_device,
- terminal);
+ if (terminal->number_of_reopen_tries < total_retries) {
+ ply_event_loop_watch_for_timeout (terminal->loop,
+ PLY_TERMINAL_REOPEN_INTERVAL,
+ (ply_event_loop_timeout_handler_t)
+ ply_terminal_reopen_device,
+ terminal);
+ } else {
+ ply_trace ("couldn't reopen tty, giving up");
+ terminal->number_of_reopen_tries = 0;
+ }
}
- else
- {
- ply_trace ("couldn't reopen tty, giving up");
- terminal->number_of_reopen_tries = 0;
- }
- }
}
static void
on_tty_input (ply_terminal_t *terminal)
{
+ ply_list_node_t *node;
- ply_list_node_t *node;
-
- node = ply_list_get_first_node (terminal->input_closures);
- while (node != NULL)
- {
- ply_terminal_input_closure_t *closure;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (terminal->input_closures);
+ while (node != NULL) {
+ ply_terminal_input_closure_t *closure;
+ ply_list_node_t *next_node;
- closure = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (terminal->input_closures, node);
+ closure = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (terminal->input_closures, node);
- if (closure->handler != NULL)
- closure->handler (closure->user_data, terminal);
+ if (closure->handler != NULL)
+ closure->handler (closure->user_data, terminal);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
on_tty_disconnected (ply_terminal_t *terminal)
{
- ply_trace ("tty disconnected (fd %d)", terminal->fd);
- terminal->fd_watch = NULL;
- terminal->fd = -1;
- terminal->number_of_reopen_tries = 0;
+ ply_trace ("tty disconnected (fd %d)", terminal->fd);
+ terminal->fd_watch = NULL;
+ terminal->fd = -1;
+ terminal->number_of_reopen_tries = 0;
- ply_terminal_reopen_device (terminal);
+ ply_terminal_reopen_device (terminal);
}
static bool
ply_terminal_look_up_geometry (ply_terminal_t *terminal)
{
- struct winsize terminal_size;
+ struct winsize terminal_size;
- ply_trace ("looking up terminal text geometry");
+ ply_trace ("looking up terminal text geometry");
- if (ioctl (terminal->fd, TIOCGWINSZ, &terminal_size) < 0)
- {
- ply_trace ("could not read terminal text geometry: %m");
- terminal->number_of_columns = 80;
- terminal->number_of_rows = 24;
- return false;
- }
+ if (ioctl (terminal->fd, TIOCGWINSZ, &terminal_size) < 0) {
+ ply_trace ("could not read terminal text geometry: %m");
+ terminal->number_of_columns = 80;
+ terminal->number_of_rows = 24;
+ return false;
+ }
- terminal->number_of_rows = terminal_size.ws_row;
- terminal->number_of_columns = terminal_size.ws_col;
+ terminal->number_of_rows = terminal_size.ws_row;
+ terminal->number_of_columns = terminal_size.ws_col;
- ply_trace ("terminal is now %dx%d text cells",
- terminal->number_of_columns,
- terminal->number_of_rows);
+ ply_trace ("terminal is now %dx%d text cells",
+ terminal->number_of_columns,
+ terminal->number_of_rows);
- return true;
+ return true;
}
static void
ply_terminal_check_for_vt (ply_terminal_t *terminal)
{
- int major_number, minor_number;
- struct stat file_attributes;
+ int major_number, minor_number;
+ struct stat file_attributes;
- assert (terminal != NULL);
- assert (terminal->fd >= 0);
+ assert (terminal != NULL);
+ assert (terminal->fd >= 0);
- if (fstat (terminal->fd, &file_attributes) != 0)
- return;
+ if (fstat (terminal->fd, &file_attributes) != 0)
+ return;
- major_number = major (file_attributes.st_rdev);
- minor_number = minor (file_attributes.st_rdev);
+ major_number = major (file_attributes.st_rdev);
+ minor_number = minor (file_attributes.st_rdev);
- if ((major_number == TTY_MAJOR) && (minor_number <= MAX_NR_CONSOLES))
- terminal->vt_number = minor_number;
- else
- terminal->vt_number = -1;
+ if ((major_number == TTY_MAJOR) && (minor_number <= MAX_NR_CONSOLES))
+ terminal->vt_number = minor_number;
+ else
+ terminal->vt_number = -1;
}
static int
get_active_vt (ply_terminal_t *terminal)
{
- struct vt_stat vt_state = { 0 };
+ struct vt_stat vt_state = { 0 };
- if (ioctl (terminal->fd, VT_GETSTATE, &vt_state) < 0)
- return -1;
+ if (ioctl (terminal->fd, VT_GETSTATE, &vt_state) < 0)
+ return -1;
- if (terminal->initial_vt_number < 0)
- {
- terminal->initial_vt_number = vt_state.v_active;
- ply_trace ("Remembering that initial vt is %d",
- terminal->initial_vt_number);
- }
+ if (terminal->initial_vt_number < 0) {
+ terminal->initial_vt_number = vt_state.v_active;
+ ply_trace ("Remembering that initial vt is %d",
+ terminal->initial_vt_number);
+ }
- return vt_state.v_active;
+ return vt_state.v_active;
}
static void
do_active_vt_changed (ply_terminal_t *terminal)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (terminal->vt_change_closures);
- while (node != NULL)
- {
- ply_terminal_active_vt_changed_closure_t *closure;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (terminal->vt_change_closures);
+ while (node != NULL) {
+ ply_terminal_active_vt_changed_closure_t *closure;
+ ply_list_node_t *next_node;
- closure = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (terminal->vt_change_closures, node);
+ closure = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (terminal->vt_change_closures, node);
- if (closure->handler != NULL)
- closure->handler (closure->user_data, terminal);
+ if (closure->handler != NULL)
+ closure->handler (closure->user_data, terminal);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
on_leave_vt (ply_terminal_t *terminal)
{
- ioctl (terminal->fd, VT_RELDISP, 1);
+ ioctl (terminal->fd, VT_RELDISP, 1);
- terminal->is_active = false;
- do_active_vt_changed (terminal);
+ terminal->is_active = false;
+ do_active_vt_changed (terminal);
}
static void
on_enter_vt (ply_terminal_t *terminal)
{
- ioctl (terminal->fd, VT_RELDISP, VT_ACKACQ);
+ ioctl (terminal->fd, VT_RELDISP, VT_ACKACQ);
- terminal->is_active = true;
- do_active_vt_changed (terminal);
+ terminal->is_active = true;
+ do_active_vt_changed (terminal);
}
void
ply_terminal_watch_for_vt_changes (ply_terminal_t *terminal)
{
- assert (terminal != NULL);
+ assert (terminal != NULL);
- struct vt_mode mode = { 0 };
+ struct vt_mode mode = { 0 };
- if (terminal->fd < 0)
- return;
+ if (terminal->fd < 0)
+ return;
- if (!ply_terminal_is_vt (terminal))
- return;
+ if (!ply_terminal_is_vt (terminal))
+ return;
- if (terminal->is_watching_for_vt_changes)
- return;
+ if (terminal->is_watching_for_vt_changes)
+ return;
- mode.mode = VT_PROCESS;
- mode.relsig = SIGUSR1;
- mode.acqsig = SIGUSR2;
+ mode.mode = VT_PROCESS;
+ mode.relsig = SIGUSR1;
+ mode.acqsig = SIGUSR2;
- if (ioctl (terminal->fd, VT_SETMODE, &mode) < 0)
- return;
+ if (ioctl (terminal->fd, VT_SETMODE, &mode) < 0)
+ return;
- ply_event_loop_watch_signal (terminal->loop,
- SIGUSR1,
- (ply_event_handler_t)
- on_leave_vt, terminal);
+ ply_event_loop_watch_signal (terminal->loop,
+ SIGUSR1,
+ (ply_event_handler_t)
+ on_leave_vt, terminal);
- ply_event_loop_watch_signal (terminal->loop,
- SIGUSR2,
- (ply_event_handler_t)
- on_enter_vt, terminal);
+ ply_event_loop_watch_signal (terminal->loop,
+ SIGUSR2,
+ (ply_event_handler_t)
+ on_enter_vt, terminal);
- terminal->is_watching_for_vt_changes = true;
+ terminal->is_watching_for_vt_changes = true;
}
void
ply_terminal_stop_watching_for_vt_changes (ply_terminal_t *terminal)
{
- struct vt_mode mode = { 0 };
+ struct vt_mode mode = { 0 };
- if (!ply_terminal_is_vt (terminal))
- return;
+ if (!ply_terminal_is_vt (terminal))
+ return;
- if (!terminal->is_watching_for_vt_changes)
- return;
+ if (!terminal->is_watching_for_vt_changes)
+ return;
- terminal->is_watching_for_vt_changes = false;
+ terminal->is_watching_for_vt_changes = false;
- ply_event_loop_stop_watching_signal (terminal->loop, SIGUSR1);
- ply_event_loop_stop_watching_signal (terminal->loop, SIGUSR2);
+ ply_event_loop_stop_watching_signal (terminal->loop, SIGUSR1);
+ ply_event_loop_stop_watching_signal (terminal->loop, SIGUSR2);
- mode.mode = VT_AUTO;
- ioctl (terminal->fd, VT_SETMODE, &mode);
+ mode.mode = VT_AUTO;
+ ioctl (terminal->fd, VT_SETMODE, &mode);
}
static ply_terminal_open_result_t
ply_terminal_open_device (ply_terminal_t *terminal)
{
- assert (terminal != NULL);
- assert (terminal->name != NULL);
- assert (terminal->fd < 0);
- assert (terminal->fd_watch == NULL);
-
- terminal->fd = open (terminal->name, O_RDWR | O_NOCTTY);
-
- if (terminal->fd < 0)
- {
- ply_trace ("Unable to open terminal device '%s': %m", terminal->name);
-
- /* The kernel will apparently return EIO spurriously when opening a tty that's
- * in the process of closing down. There's more information here:
- *
- * https://bugs.launchpad.net/ubuntu/+source/linux/+bug/554172/comments/245
- *
- * Work around it here.
- */
- if (errno == EIO)
- return PLY_TERMINAL_OPEN_RESULT_INCOMPLETE;
-
- terminal->number_of_reopen_tries = 0;
- return PLY_TERMINAL_OPEN_RESULT_FAILURE;
- }
-
- terminal->fd_watch = ply_event_loop_watch_fd (terminal->loop, terminal->fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t) on_tty_input,
- (ply_event_handler_t) on_tty_disconnected,
- terminal);
-
- ply_terminal_check_for_vt (terminal);
-
- if (!ply_terminal_set_unbuffered_input (terminal))
- ply_trace ("terminal '%s' will be line buffered", terminal->name);
-
- terminal->number_of_reopen_tries = 0;
- return PLY_TERMINAL_OPEN_RESULT_SUCCESS;
+ assert (terminal != NULL);
+ assert (terminal->name != NULL);
+ assert (terminal->fd < 0);
+ assert (terminal->fd_watch == NULL);
+
+ terminal->fd = open (terminal->name, O_RDWR | O_NOCTTY);
+
+ if (terminal->fd < 0) {
+ ply_trace ("Unable to open terminal device '%s': %m", terminal->name);
+
+ /* The kernel will apparently return EIO spurriously when opening a tty that's
+ * in the process of closing down. There's more information here:
+ *
+ * https://bugs.launchpad.net/ubuntu/+source/linux/+bug/554172/comments/245
+ *
+ * Work around it here.
+ */
+ if (errno == EIO)
+ return PLY_TERMINAL_OPEN_RESULT_INCOMPLETE;
+
+ terminal->number_of_reopen_tries = 0;
+ return PLY_TERMINAL_OPEN_RESULT_FAILURE;
+ }
+
+ terminal->fd_watch = ply_event_loop_watch_fd (terminal->loop, terminal->fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t) on_tty_input,
+ (ply_event_handler_t) on_tty_disconnected,
+ terminal);
+
+ ply_terminal_check_for_vt (terminal);
+
+ if (!ply_terminal_set_unbuffered_input (terminal))
+ ply_trace ("terminal '%s' will be line buffered", terminal->name);
+
+ terminal->number_of_reopen_tries = 0;
+ return PLY_TERMINAL_OPEN_RESULT_SUCCESS;
}
bool
ply_terminal_open (ply_terminal_t *terminal)
{
- ply_terminal_open_result_t open_result;
+ ply_terminal_open_result_t open_result;
- assert (terminal != NULL);
+ assert (terminal != NULL);
- if (terminal->is_open)
- {
- ply_trace ("terminal %s is already open", terminal->name);
- return true;
- }
+ if (terminal->is_open) {
+ ply_trace ("terminal %s is already open", terminal->name);
+ return true;
+ }
- ply_trace ("trying to open terminal '%s'", terminal->name);
+ ply_trace ("trying to open terminal '%s'", terminal->name);
- open_result = ply_terminal_open_device (terminal);
- if (open_result != PLY_TERMINAL_OPEN_RESULT_SUCCESS)
- {
- ply_trace ("could not open %s : %m", terminal->name);
- return false;
- }
+ open_result = ply_terminal_open_device (terminal);
+ if (open_result != PLY_TERMINAL_OPEN_RESULT_SUCCESS) {
+ ply_trace ("could not open %s : %m", terminal->name);
+ return false;
+ }
- ply_terminal_look_up_geometry (terminal);
+ ply_terminal_look_up_geometry (terminal);
- ply_terminal_look_up_color_palette (terminal);
- ply_terminal_save_color_palette (terminal);
+ ply_terminal_look_up_color_palette (terminal);
+ ply_terminal_save_color_palette (terminal);
- ply_event_loop_watch_signal (terminal->loop,
- SIGWINCH,
- (ply_event_handler_t)
- ply_terminal_look_up_geometry,
- terminal);
+ ply_event_loop_watch_signal (terminal->loop,
+ SIGWINCH,
+ (ply_event_handler_t)
+ ply_terminal_look_up_geometry,
+ terminal);
- if (ply_terminal_is_vt (terminal))
- {
- ply_terminal_watch_for_vt_changes (terminal);
+ if (ply_terminal_is_vt (terminal)) {
+ ply_terminal_watch_for_vt_changes (terminal);
- if (get_active_vt (terminal) == terminal->vt_number)
- terminal->is_active = true;
- else
- terminal->is_active = false;
- }
+ if (get_active_vt (terminal) == terminal->vt_number)
+ terminal->is_active = true;
+ else
+ terminal->is_active = false;
+ }
- terminal->is_open = true;
+ terminal->is_open = true;
- return true;
+ return true;
}
int
ply_terminal_get_fd (ply_terminal_t *terminal)
{
- return terminal->fd;
+ return terminal->fd;
}
bool
ply_terminal_is_vt (ply_terminal_t *terminal)
{
- return terminal->vt_number > 0;
+ return terminal->vt_number > 0;
}
bool
ply_terminal_is_open (ply_terminal_t *terminal)
{
- return terminal->is_open;
+ return terminal->is_open;
}
bool
ply_terminal_is_active (ply_terminal_t *terminal)
{
- return terminal->is_active;
+ return terminal->is_active;
}
void
ply_terminal_close (ply_terminal_t *terminal)
{
- if (!terminal->is_open)
- {
- ply_trace ("terminal %s is already closed", terminal->name);
- return;
- }
+ if (!terminal->is_open) {
+ ply_trace ("terminal %s is already closed", terminal->name);
+ return;
+ }
- terminal->is_open = false;
+ terminal->is_open = false;
- ply_terminal_stop_watching_for_vt_changes (terminal);
+ ply_terminal_stop_watching_for_vt_changes (terminal);
- ply_trace ("restoring color palette");
- ply_terminal_restore_color_palette (terminal);
+ ply_trace ("restoring color palette");
+ ply_terminal_restore_color_palette (terminal);
- if (terminal->fd_watch != NULL)
- {
- ply_trace ("stop watching tty fd");
- ply_event_loop_stop_watching_fd (terminal->loop, terminal->fd_watch);
- terminal->fd_watch = NULL;
- }
+ if (terminal->fd_watch != NULL) {
+ ply_trace ("stop watching tty fd");
+ ply_event_loop_stop_watching_fd (terminal->loop, terminal->fd_watch);
+ terminal->fd_watch = NULL;
+ }
- if (terminal->loop != NULL)
- {
- ply_trace ("stop watching SIGWINCH signal");
- ply_event_loop_stop_watching_signal (terminal->loop, SIGWINCH);
- }
+ if (terminal->loop != NULL) {
+ ply_trace ("stop watching SIGWINCH signal");
+ ply_event_loop_stop_watching_signal (terminal->loop, SIGWINCH);
+ }
- ply_trace ("setting buffered input");
- ply_terminal_set_buffered_input (terminal);
+ ply_trace ("setting buffered input");
+ ply_terminal_set_buffered_input (terminal);
- close (terminal->fd);
- terminal->fd = -1;
+ close (terminal->fd);
+ terminal->fd = -1;
}
int
ply_terminal_get_number_of_columns (ply_terminal_t *terminal)
{
- return terminal->number_of_columns;
+ return terminal->number_of_columns;
}
int
ply_terminal_get_number_of_rows (ply_terminal_t *terminal)
{
- return terminal->number_of_rows;
+ return terminal->number_of_rows;
}
uint32_t
-ply_terminal_get_color_hex_value (ply_terminal_t *terminal,
- ply_terminal_color_t color)
+ply_terminal_get_color_hex_value (ply_terminal_t *terminal,
+ ply_terminal_color_t color)
{
- uint8_t red, green, blue;
+ uint8_t red, green, blue;
- assert (terminal != NULL);
- assert (color <= PLY_TERMINAL_COLOR_WHITE);
+ assert (terminal != NULL);
+ assert (color <= PLY_TERMINAL_COLOR_WHITE);
- red = terminal->color_palette[3*color];
- green = terminal->color_palette[3*color+1];
- blue = terminal->color_palette[3*color+2];
+ red = terminal->color_palette[3 * color];
+ green = terminal->color_palette[3 * color + 1];
+ blue = terminal->color_palette[3 * color + 2];
- return red << 16 | green << 8 | blue;
+ return red << 16 | green << 8 | blue;
}
void
-ply_terminal_set_color_hex_value (ply_terminal_t *terminal,
- ply_terminal_color_t color,
- uint32_t hex_value)
+ply_terminal_set_color_hex_value (ply_terminal_t *terminal,
+ ply_terminal_color_t color,
+ uint32_t hex_value)
{
- assert (terminal != NULL);
- assert (color <= PLY_TERMINAL_COLOR_WHITE);
+ assert (terminal != NULL);
+ assert (color <= PLY_TERMINAL_COLOR_WHITE);
- terminal->color_palette[3*color] = (hex_value >> 16) & 0xff;
- terminal->color_palette[3*color+1] = (hex_value >> 8) & 0xff;
- terminal->color_palette[3*color+2] = hex_value & 0xff;
+ terminal->color_palette[3 * color] = (hex_value >> 16) & 0xff;
+ terminal->color_palette[3 * color + 1] = (hex_value >> 8) & 0xff;
+ terminal->color_palette[3 * color + 2] = hex_value & 0xff;
- ply_terminal_change_color_palette (terminal);
+ ply_terminal_change_color_palette (terminal);
}
bool
ply_terminal_supports_color (ply_terminal_t *terminal)
{
- return terminal->supports_text_color;
+ return terminal->supports_text_color;
}
void
ply_terminal_set_mode (ply_terminal_t *terminal,
ply_terminal_mode_t mode)
{
+ assert (terminal != NULL);
+ assert (mode == PLY_TERMINAL_MODE_TEXT || mode == PLY_TERMINAL_MODE_GRAPHICS);
- assert (terminal != NULL);
- assert (mode == PLY_TERMINAL_MODE_TEXT || mode == PLY_TERMINAL_MODE_GRAPHICS);
-
- if (!ply_terminal_is_vt (terminal))
- return;
+ if (!ply_terminal_is_vt (terminal))
+ return;
- if (terminal->should_ignore_mode_changes)
- return;
+ if (terminal->should_ignore_mode_changes)
+ return;
- switch (mode)
- {
- case PLY_TERMINAL_MODE_TEXT:
- if (ioctl (terminal->fd, KDSETMODE, KD_TEXT) < 0)
- return;
- break;
+ switch (mode) {
+ case PLY_TERMINAL_MODE_TEXT:
+ if (ioctl (terminal->fd, KDSETMODE, KD_TEXT) < 0)
+ return;
+ break;
- case PLY_TERMINAL_MODE_GRAPHICS:
- if (ioctl (terminal->fd, KDSETMODE, KD_GRAPHICS) < 0)
- return;
- break;
- }
+ case PLY_TERMINAL_MODE_GRAPHICS:
+ if (ioctl (terminal->fd, KDSETMODE, KD_GRAPHICS) < 0)
+ return;
+ break;
+ }
}
void
ply_terminal_ignore_mode_changes (ply_terminal_t *terminal,
bool should_ignore)
{
- if (!ply_terminal_is_vt (terminal))
- return;
+ if (!ply_terminal_is_vt (terminal))
+ return;
- terminal->should_ignore_mode_changes = should_ignore;
+ terminal->should_ignore_mode_changes = should_ignore;
}
static void
ply_terminal_detach_from_event_loop (ply_terminal_t *terminal)
{
- assert (terminal != NULL);
- terminal->loop = NULL;
- terminal->fd_watch = NULL;
+ assert (terminal != NULL);
+ terminal->loop = NULL;
+ terminal->fd_watch = NULL;
}
static void
free_vt_change_closures (ply_terminal_t *terminal)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (terminal->vt_change_closures);
- while (node != NULL)
- {
- ply_terminal_active_vt_changed_closure_t *closure;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (terminal->vt_change_closures);
+ while (node != NULL) {
+ ply_terminal_active_vt_changed_closure_t *closure;
+ ply_list_node_t *next_node;
- closure = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (terminal->vt_change_closures, node);
+ closure = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (terminal->vt_change_closures, node);
- free (closure);
- node = next_node;
- }
- ply_list_free (terminal->vt_change_closures);
+ free (closure);
+ node = next_node;
+ }
+ ply_list_free (terminal->vt_change_closures);
}
static void
free_input_closures (ply_terminal_t *terminal)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (terminal->input_closures);
- while (node != NULL)
- {
- ply_terminal_input_closure_t *closure;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (terminal->input_closures);
+ while (node != NULL) {
+ ply_terminal_input_closure_t *closure;
+ ply_list_node_t *next_node;
- closure = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (terminal->input_closures, node);
+ closure = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (terminal->input_closures, node);
- free (closure);
- node = next_node;
- }
- ply_list_free (terminal->input_closures);
+ free (closure);
+ node = next_node;
+ }
+ ply_list_free (terminal->input_closures);
}
void
ply_terminal_free (ply_terminal_t *terminal)
{
- if (terminal == NULL)
- return;
-
- if (terminal->loop != NULL)
- {
- ply_event_loop_stop_watching_for_exit (terminal->loop,
- (ply_event_loop_exit_handler_t)
- ply_terminal_detach_from_event_loop,
- terminal);
-
- if (terminal->number_of_reopen_tries > 0)
- {
- ply_event_loop_stop_watching_for_timeout (terminal->loop,
- (ply_event_loop_timeout_handler_t)
- ply_terminal_reopen_device, terminal);
+ if (terminal == NULL)
+ return;
+
+ if (terminal->loop != NULL) {
+ ply_event_loop_stop_watching_for_exit (terminal->loop,
+ (ply_event_loop_exit_handler_t)
+ ply_terminal_detach_from_event_loop,
+ terminal);
+
+ if (terminal->number_of_reopen_tries > 0) {
+ ply_event_loop_stop_watching_for_timeout (terminal->loop,
+ (ply_event_loop_timeout_handler_t)
+ ply_terminal_reopen_device, terminal);
+ }
}
- }
- if (terminal->is_open)
- ply_terminal_close (terminal);
+ if (terminal->is_open)
+ ply_terminal_close (terminal);
- free_vt_change_closures (terminal);
- free_input_closures (terminal);
- free (terminal->name);
- free (terminal);
+ free_vt_change_closures (terminal);
+ free_input_closures (terminal);
+ free (terminal->name);
+ free (terminal);
}
const char *
ply_terminal_get_name (ply_terminal_t *terminal)
{
- return terminal->name;
+ return terminal->name;
}
int
ply_terminal_get_vt_number (ply_terminal_t *terminal)
{
- return terminal->vt_number;
+ return terminal->vt_number;
}
static bool
set_active_vt (ply_terminal_t *terminal,
int vt_number)
{
- if (ioctl (terminal->fd, VT_ACTIVATE, vt_number) < 0)
- return false;
+ if (ioctl (terminal->fd, VT_ACTIVATE, vt_number) < 0)
+ return false;
- return true;
+ return true;
}
static bool
wait_for_vt_to_become_active (ply_terminal_t *terminal,
int vt_number)
{
- if (ioctl (terminal->fd, VT_WAITACTIVE, vt_number) < 0)
- return false;
+ if (ioctl (terminal->fd, VT_WAITACTIVE, vt_number) < 0)
+ return false;
- return true;
+ return true;
}
static bool
deallocate_vt (ply_terminal_t *terminal,
int vt_number)
{
- if (ioctl (terminal->fd, VT_DISALLOCATE, vt_number) < 0)
- return false;
+ if (ioctl (terminal->fd, VT_DISALLOCATE, vt_number) < 0)
+ return false;
- return true;
+ return true;
}
bool
ply_terminal_activate_vt (ply_terminal_t *terminal)
{
- assert (terminal != NULL);
+ assert (terminal != NULL);
- if (!ply_terminal_is_vt (terminal))
- return false;
+ if (!ply_terminal_is_vt (terminal))
+ return false;
- if (terminal->is_active)
- return true;
+ if (terminal->is_active)
+ return true;
- if (!set_active_vt (terminal, terminal->vt_number))
- {
- ply_trace ("unable to set active vt to %d: %m",
- terminal->vt_number);
- return false;
- }
+ if (!set_active_vt (terminal, terminal->vt_number)) {
+ ply_trace ("unable to set active vt to %d: %m",
+ terminal->vt_number);
+ return false;
+ }
- return true;
+ return true;
}
bool
ply_terminal_deactivate_vt (ply_terminal_t *terminal)
{
- int old_vt_number;
-
- assert (terminal != NULL);
-
- if (!ply_terminal_is_vt (terminal))
- {
- ply_trace ("terminal is not for a VT");
- return false;
- }
-
- if (terminal->initial_vt_number < 0)
- {
- ply_trace ("Don't know where to jump to");
- return false;
- }
-
- if (terminal->initial_vt_number == terminal->vt_number)
- {
- ply_trace ("can't deactivate initial VT");
- return false;
- }
-
- /* Otherwise we'd close and free the terminal before handling the
- * "leaving the VT" signal.
- */
- ply_terminal_stop_watching_for_vt_changes (terminal);
-
- old_vt_number = terminal->vt_number;
-
- if (ply_terminal_is_active (terminal))
- {
- ply_trace ("Attempting to set active vt back to %d from %d",
- terminal->initial_vt_number, old_vt_number);
- if (!set_active_vt (terminal, terminal->initial_vt_number))
- {
- ply_trace ("Couldn't move console to initial vt: %m");
- return false;
+ int old_vt_number;
+
+ assert (terminal != NULL);
+
+ if (!ply_terminal_is_vt (terminal)) {
+ ply_trace ("terminal is not for a VT");
+ return false;
+ }
+
+ if (terminal->initial_vt_number < 0) {
+ ply_trace ("Don't know where to jump to");
+ return false;
+ }
+
+ if (terminal->initial_vt_number == terminal->vt_number) {
+ ply_trace ("can't deactivate initial VT");
+ return false;
+ }
+
+ /* Otherwise we'd close and free the terminal before handling the
+ * "leaving the VT" signal.
+ */
+ ply_terminal_stop_watching_for_vt_changes (terminal);
+
+ old_vt_number = terminal->vt_number;
+
+ if (ply_terminal_is_active (terminal)) {
+ ply_trace ("Attempting to set active vt back to %d from %d",
+ terminal->initial_vt_number, old_vt_number);
+ if (!set_active_vt (terminal, terminal->initial_vt_number)) {
+ ply_trace ("Couldn't move console to initial vt: %m");
+ return false;
+ }
+
+ if (!wait_for_vt_to_become_active (terminal, terminal->initial_vt_number)) {
+ ply_trace ("Error while waiting for vt %d to become active: %m",
+ terminal->initial_vt_number);
+ return false;
+ }
+ } else {
+ ply_trace ("terminal for vt %d is inactive", terminal->vt_number);
}
- if (!wait_for_vt_to_become_active (terminal, terminal->initial_vt_number))
- {
- ply_trace ("Error while waiting for vt %d to become active: %m",
- terminal->initial_vt_number);
- return false;
+ if (!deallocate_vt (terminal, old_vt_number)) {
+ ply_trace ("couldn't deallocate vt %d: %m", old_vt_number);
+ return false;
}
- }
- else
- {
- ply_trace ("terminal for vt %d is inactive", terminal->vt_number);
- }
-
- if (!deallocate_vt (terminal, old_vt_number))
- {
- ply_trace ("couldn't deallocate vt %d: %m", old_vt_number);
- return false;
- }
-
- return true;
+
+ return true;
}
void
-ply_terminal_watch_for_active_vt_change (ply_terminal_t *terminal,
+ply_terminal_watch_for_active_vt_change (ply_terminal_t *terminal,
ply_terminal_active_vt_changed_handler_t active_vt_changed_handler,
- void *user_data)
+ void *user_data)
{
- ply_terminal_active_vt_changed_closure_t *closure;
+ ply_terminal_active_vt_changed_closure_t *closure;
- if (!ply_terminal_is_vt (terminal))
- return;
+ if (!ply_terminal_is_vt (terminal))
+ return;
- closure = calloc (1, sizeof (*closure));
- closure->handler = active_vt_changed_handler;
- closure->user_data = user_data;
+ closure = calloc (1, sizeof(*closure));
+ closure->handler = active_vt_changed_handler;
+ closure->user_data = user_data;
- ply_list_append_data (terminal->vt_change_closures, closure);
+ ply_list_append_data (terminal->vt_change_closures, closure);
}
void
-ply_terminal_stop_watching_for_active_vt_change (ply_terminal_t *terminal,
+ply_terminal_stop_watching_for_active_vt_change (ply_terminal_t *terminal,
ply_terminal_active_vt_changed_handler_t active_vt_changed_handler,
- void *user_data)
+ void *user_data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (!ply_terminal_is_vt (terminal))
- return;
+ if (!ply_terminal_is_vt (terminal))
+ return;
- node = ply_list_get_first_node (terminal->vt_change_closures);
- while (node != NULL)
- {
- ply_terminal_active_vt_changed_closure_t *closure;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (terminal->vt_change_closures);
+ while (node != NULL) {
+ ply_terminal_active_vt_changed_closure_t *closure;
+ ply_list_node_t *next_node;
- closure = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (terminal->vt_change_closures, node);
+ closure = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (terminal->vt_change_closures, node);
- if (closure->handler == active_vt_changed_handler &&
- closure->user_data == user_data)
- {
- free (closure);
- ply_list_remove_node (terminal->vt_change_closures, node);
- }
+ if (closure->handler == active_vt_changed_handler &&
+ closure->user_data == user_data) {
+ free (closure);
+ ply_list_remove_node (terminal->vt_change_closures, node);
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
void
-ply_terminal_watch_for_input (ply_terminal_t *terminal,
- ply_terminal_input_handler_t input_handler,
- void *user_data)
+ply_terminal_watch_for_input (ply_terminal_t *terminal,
+ ply_terminal_input_handler_t input_handler,
+ void *user_data)
{
- ply_terminal_input_closure_t *closure;
+ ply_terminal_input_closure_t *closure;
- closure = calloc (1, sizeof (*closure));
- closure->handler = input_handler;
- closure->user_data = user_data;
+ closure = calloc (1, sizeof(*closure));
+ closure->handler = input_handler;
+ closure->user_data = user_data;
- ply_list_append_data (terminal->input_closures, closure);
+ ply_list_append_data (terminal->input_closures, closure);
}
void
-ply_terminal_stop_watching_for_input (ply_terminal_t *terminal,
- ply_terminal_input_handler_t input_handler,
- void *user_data)
+ply_terminal_stop_watching_for_input (ply_terminal_t *terminal,
+ ply_terminal_input_handler_t input_handler,
+ void *user_data)
{
- ply_list_node_t *node;
-
- node = ply_list_get_first_node (terminal->input_closures);
- while (node != NULL)
- {
- ply_terminal_input_closure_t *closure;
- ply_list_node_t *next_node;
-
- closure = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (terminal->input_closures, node);
-
- if (closure->handler == input_handler &&
- closure->user_data == user_data)
- {
- free (closure);
- ply_list_remove_node (terminal->input_closures, node);
- }
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (terminal->input_closures);
+ while (node != NULL) {
+ ply_terminal_input_closure_t *closure;
+ ply_list_node_t *next_node;
+
+ closure = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (terminal->input_closures, node);
- node = next_node;
- }
+ if (closure->handler == input_handler &&
+ closure->user_data == user_data) {
+ free (closure);
+ ply_list_remove_node (terminal->input_closures, node);
+ }
+
+ node = next_node;
+ }
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/libply-splash-core/ply-terminal.h b/src/libply-splash-core/ply-terminal.h
index 48b4f77f..dc83ec32 100644
--- a/src/libply-splash-core/ply-terminal.h
+++ b/src/libply-splash-core/ply-terminal.h
@@ -31,27 +31,27 @@
#include "ply-event-loop.h"
typedef struct _ply_terminal ply_terminal_t;
-typedef void (* ply_terminal_active_vt_changed_handler_t) (void *user_data,
- ply_terminal_t *terminal);
-typedef void (* ply_terminal_input_handler_t) (void *user_data,
- ply_terminal_t *terminal);
+typedef void (*ply_terminal_active_vt_changed_handler_t) (void *user_data,
+ ply_terminal_t *terminal);
+typedef void (*ply_terminal_input_handler_t) (void *user_data,
+ ply_terminal_t *terminal);
typedef enum
{
- PLY_TERMINAL_COLOR_BLACK = 0,
- PLY_TERMINAL_COLOR_RED,
- PLY_TERMINAL_COLOR_GREEN,
- PLY_TERMINAL_COLOR_BROWN,
- PLY_TERMINAL_COLOR_BLUE,
- PLY_TERMINAL_COLOR_MAGENTA,
- PLY_TERMINAL_COLOR_CYAN,
- PLY_TERMINAL_COLOR_WHITE,
- PLY_TERMINAL_COLOR_DEFAULT = PLY_TERMINAL_COLOR_WHITE + 2
+ PLY_TERMINAL_COLOR_BLACK = 0,
+ PLY_TERMINAL_COLOR_RED,
+ PLY_TERMINAL_COLOR_GREEN,
+ PLY_TERMINAL_COLOR_BROWN,
+ PLY_TERMINAL_COLOR_BLUE,
+ PLY_TERMINAL_COLOR_MAGENTA,
+ PLY_TERMINAL_COLOR_CYAN,
+ PLY_TERMINAL_COLOR_WHITE,
+ PLY_TERMINAL_COLOR_DEFAULT = PLY_TERMINAL_COLOR_WHITE + 2
} ply_terminal_color_t;
typedef enum
{
- PLY_TERMINAL_MODE_TEXT,
- PLY_TERMINAL_MODE_GRAPHICS
+ PLY_TERMINAL_MODE_TEXT,
+ PLY_TERMINAL_MODE_GRAPHICS
} ply_terminal_mode_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
@@ -78,12 +78,12 @@ int ply_terminal_get_number_of_columns (ply_terminal_t *terminal);
int ply_terminal_get_number_of_rows (ply_terminal_t *terminal);
bool ply_terminal_supports_color (ply_terminal_t *terminal);
-uint32_t ply_terminal_get_color_hex_value (ply_terminal_t *terminal,
- ply_terminal_color_t color);
+uint32_t ply_terminal_get_color_hex_value (ply_terminal_t *terminal,
+ ply_terminal_color_t color);
-void ply_terminal_set_color_hex_value (ply_terminal_t *terminal,
- ply_terminal_color_t color,
- uint32_t hex_value);
+void ply_terminal_set_color_hex_value (ply_terminal_t *terminal,
+ ply_terminal_color_t color,
+ uint32_t hex_value);
void ply_terminal_set_mode (ply_terminal_t *terminal,
ply_terminal_mode_t mode);
@@ -99,19 +99,19 @@ bool ply_terminal_deactivate_vt (ply_terminal_t *terminal);
void ply_terminal_watch_for_vt_changes (ply_terminal_t *terminal);
void ply_terminal_stop_watching_for_vt_changes (ply_terminal_t *terminal);
-void ply_terminal_watch_for_active_vt_change (ply_terminal_t *terminal,
+void ply_terminal_watch_for_active_vt_change (ply_terminal_t *terminal,
ply_terminal_active_vt_changed_handler_t active_vt_changed_handler,
- void *user_data);
-void ply_terminal_stop_watching_for_active_vt_change (ply_terminal_t *terminal,
+ void *user_data);
+void ply_terminal_stop_watching_for_active_vt_change (ply_terminal_t *terminal,
ply_terminal_active_vt_changed_handler_t active_vt_changed_handler,
- void *user_data);
+ void *user_data);
-void ply_terminal_watch_for_input (ply_terminal_t *terminal,
+void ply_terminal_watch_for_input (ply_terminal_t *terminal,
ply_terminal_input_handler_t input_handler,
- void *user_data);
-void ply_terminal_stop_watching_for_input (ply_terminal_t *terminal,
+ void *user_data);
+void ply_terminal_stop_watching_for_input (ply_terminal_t *terminal,
ply_terminal_input_handler_t input_handler,
- void *user_data);
+ void *user_data);
#endif
diff --git a/src/libply-splash-core/ply-text-display.c b/src/libply-splash-core/ply-text-display.c
index 7cabd98f..83bf6025 100644
--- a/src/libply-splash-core/ply-text-display.c
+++ b/src/libply-splash-core/ply-text-display.c
@@ -92,40 +92,40 @@
struct _ply_text_display
{
- ply_event_loop_t *loop;
+ ply_event_loop_t *loop;
- ply_terminal_t *terminal;
+ ply_terminal_t *terminal;
- ply_terminal_color_t foreground_color;
- ply_terminal_color_t background_color;
+ ply_terminal_color_t foreground_color;
+ ply_terminal_color_t background_color;
- ply_text_display_draw_handler_t draw_handler;
- void *draw_handler_user_data;
+ ply_text_display_draw_handler_t draw_handler;
+ void *draw_handler_user_data;
};
ply_text_display_t *
ply_text_display_new (ply_terminal_t *terminal)
{
- ply_text_display_t *display;
+ ply_text_display_t *display;
- display = calloc (1, sizeof (ply_text_display_t));
+ display = calloc (1, sizeof(ply_text_display_t));
- display->loop = NULL;
- display->terminal = terminal;
+ display->loop = NULL;
+ display->terminal = terminal;
- return display;
+ return display;
}
int
ply_text_display_get_number_of_columns (ply_text_display_t *display)
{
- return ply_terminal_get_number_of_columns (display->terminal);
+ return ply_terminal_get_number_of_columns (display->terminal);
}
int
ply_text_display_get_number_of_rows (ply_text_display_t *display)
{
- return ply_terminal_get_number_of_rows (display->terminal);
+ return ply_terminal_get_number_of_rows (display->terminal);
}
void
@@ -133,80 +133,78 @@ ply_text_display_set_cursor_position (ply_text_display_t *display,
int column,
int row)
{
- int number_of_columns;
- int number_of_rows;
+ int number_of_columns;
+ int number_of_rows;
- number_of_columns = ply_text_display_get_number_of_columns (display);
- number_of_rows = ply_text_display_get_number_of_rows (display);
+ number_of_columns = ply_text_display_get_number_of_columns (display);
+ number_of_rows = ply_text_display_get_number_of_rows (display);
- column = CLAMP (column, 0, number_of_columns - 1);
- row = CLAMP (row, 0, number_of_rows - 1);
+ column = CLAMP (column, 0, number_of_columns - 1);
+ row = CLAMP (row, 0, number_of_rows - 1);
- ply_terminal_write (display->terminal,
- MOVE_CURSOR_SEQUENCE,
- row, column);
+ ply_terminal_write (display->terminal,
+ MOVE_CURSOR_SEQUENCE,
+ row, column);
}
void
ply_text_display_clear_screen (ply_text_display_t *display)
{
- if (ply_is_tracing ())
- return;
+ if (ply_is_tracing ())
+ return;
- ply_terminal_write (display->terminal,
- CLEAR_SCREEN_SEQUENCE);
+ ply_terminal_write (display->terminal,
+ CLEAR_SCREEN_SEQUENCE);
- ply_text_display_set_cursor_position (display, 0, 0);
+ ply_text_display_set_cursor_position (display, 0, 0);
}
void
ply_text_display_clear_line (ply_text_display_t *display)
{
-
- ply_terminal_write (display->terminal,
- CLEAR_LINE_SEQUENCE);
+ ply_terminal_write (display->terminal,
+ CLEAR_LINE_SEQUENCE);
}
void
ply_text_display_remove_character (ply_text_display_t *display)
{
- ply_terminal_write (display->terminal,
- BACKSPACE);
+ ply_terminal_write (display->terminal,
+ BACKSPACE);
}
void
-ply_text_display_set_background_color (ply_text_display_t *display,
- ply_terminal_color_t color)
+ply_text_display_set_background_color (ply_text_display_t *display,
+ ply_terminal_color_t color)
{
+ ply_terminal_write (display->terminal,
+ COLOR_SEQUENCE_FORMAT,
+ BACKGROUND_COLOR_BASE + color);
- ply_terminal_write (display->terminal,
- COLOR_SEQUENCE_FORMAT,
- BACKGROUND_COLOR_BASE + color);
-
- display->background_color = color;
+ display->background_color = color;
}
void
-ply_text_display_set_foreground_color (ply_text_display_t *display,
- ply_terminal_color_t color)
+ply_text_display_set_foreground_color (ply_text_display_t *display,
+ ply_terminal_color_t color)
{
- ply_terminal_write (display->terminal,
- COLOR_SEQUENCE_FORMAT,
- FOREGROUND_COLOR_BASE + color);
+ ply_terminal_write (display->terminal,
+ COLOR_SEQUENCE_FORMAT,
+ FOREGROUND_COLOR_BASE + color);
- display->foreground_color = color;
+ display->foreground_color = color;
}
ply_terminal_color_t
ply_text_display_get_background_color (ply_text_display_t *display)
{
- return display->background_color;
+ return display->background_color;
}
ply_terminal_color_t
ply_text_display_get_foreground_color (ply_text_display_t *display)
{
- return display->foreground_color;
+ return display->foreground_color;
}
void
@@ -216,17 +214,17 @@ ply_text_display_draw_area (ply_text_display_t *display,
int width,
int height)
{
- if (display->draw_handler != NULL)
- display->draw_handler (display->draw_handler_user_data,
- display->terminal,
- x, y, width, height);
+ if (display->draw_handler != NULL)
+ display->draw_handler (display->draw_handler_user_data,
+ display->terminal,
+ x, y, width, height);
}
void
ply_text_display_hide_cursor (ply_text_display_t *display)
{
- ply_terminal_write (display->terminal,
- HIDE_CURSOR_SEQUENCE);
+ ply_terminal_write (display->terminal,
+ HIDE_CURSOR_SEQUENCE);
}
void
@@ -234,104 +232,105 @@ ply_text_display_write (ply_text_display_t *display,
const char *format,
...)
{
- int fd;
+ int fd;
- va_list args;
- char *string;
+ va_list args;
+ char *string;
- assert (display != NULL);
- assert (format != NULL);
+ assert (display != NULL);
+ assert (format != NULL);
- fd = ply_terminal_get_fd (display->terminal);
+ fd = ply_terminal_get_fd (display->terminal);
- string = NULL;
- va_start (args, format);
- vasprintf (&string, format, args);
- va_end (args);
+ string = NULL;
+ va_start (args, format);
+ vasprintf (&string, format, args);
+ va_end (args);
- write (fd, string, strlen (string));
- free (string);
+ write (fd, string, strlen (string));
+ free (string);
}
void
ply_text_display_show_cursor (ply_text_display_t *display)
{
- ply_terminal_write (display->terminal,
- SHOW_CURSOR_SEQUENCE);
+ ply_terminal_write (display->terminal,
+ SHOW_CURSOR_SEQUENCE);
}
bool
ply_text_display_supports_color (ply_text_display_t *display)
{
- return ply_terminal_supports_color (display->terminal);
+ return ply_terminal_supports_color (display->terminal);
}
static void
ply_text_display_detach_from_event_loop (ply_text_display_t *display)
{
- assert (display != NULL);
- display->loop = NULL;
+ assert (display != NULL);
+ display->loop = NULL;
}
void
ply_text_display_free (ply_text_display_t *display)
{
- if (display == NULL)
- return;
+ if (display == NULL)
+ return;
- if (display->loop != NULL)
- ply_event_loop_stop_watching_for_exit (display->loop,
- (ply_event_loop_exit_handler_t)
- ply_text_display_detach_from_event_loop,
- display);
+ if (display->loop != NULL) {
+ ply_event_loop_stop_watching_for_exit (display->loop,
+ (ply_event_loop_exit_handler_t)
+ ply_text_display_detach_from_event_loop,
+ display);
+ }
- free (display);
+ free (display);
}
void
-ply_text_display_set_draw_handler (ply_text_display_t *display,
+ply_text_display_set_draw_handler (ply_text_display_t *display,
ply_text_display_draw_handler_t draw_handler,
- void *user_data)
+ void *user_data)
{
- assert (display != NULL);
+ assert (display != NULL);
- display->draw_handler = draw_handler;
- display->draw_handler_user_data = user_data;
+ display->draw_handler = draw_handler;
+ display->draw_handler_user_data = user_data;
}
void
ply_text_display_pause_updates (ply_text_display_t *display)
{
- ply_terminal_write (display->terminal,
- PAUSE_SEQUENCE);
+ ply_terminal_write (display->terminal,
+ PAUSE_SEQUENCE);
}
void
ply_text_display_unpause_updates (ply_text_display_t *display)
{
- ply_terminal_write (display->terminal,
- UNPAUSE_SEQUENCE);
+ ply_terminal_write (display->terminal,
+ UNPAUSE_SEQUENCE);
}
void
ply_text_display_attach_to_event_loop (ply_text_display_t *display,
ply_event_loop_t *loop)
{
- assert (display != NULL);
- assert (loop != NULL);
- assert (display->loop == NULL);
+ assert (display != NULL);
+ assert (loop != NULL);
+ assert (display->loop == NULL);
- display->loop = loop;
+ display->loop = loop;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- ply_text_display_detach_from_event_loop,
- display);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ ply_text_display_detach_from_event_loop,
+ display);
}
ply_terminal_t *
ply_text_display_get_terminal (ply_text_display_t *display)
{
- return display->terminal;
+ return display->terminal;
}
/* vim: set ts= 4 sw= 4 et ai ci cino= {.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/libply-splash-core/ply-text-display.h b/src/libply-splash-core/ply-text-display.h
index 3fd7dab2..4a56abaf 100644
--- a/src/libply-splash-core/ply-text-display.h
+++ b/src/libply-splash-core/ply-text-display.h
@@ -32,12 +32,12 @@
typedef struct _ply_text_display ply_text_display_t;
-typedef void (* ply_text_display_draw_handler_t) (void *user_data,
- ply_terminal_t *terminal,
- int column,
- int row,
- int number_of_columns,
- int number_of_rows);
+typedef void (*ply_text_display_draw_handler_t) (void *user_data,
+ ply_terminal_t *terminal,
+ int column,
+ int row,
+ int number_of_columns,
+ int number_of_rows);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_text_display_t *ply_text_display_new (ply_terminal_t *terminal);
@@ -64,22 +64,22 @@ void ply_text_display_clear_screen (ply_text_display_t *display);
void ply_text_display_clear_line (ply_text_display_t *display);
void ply_text_display_remove_character (ply_text_display_t *display);
bool ply_text_display_supports_color (ply_text_display_t *display);
-void ply_text_display_set_background_color (ply_text_display_t *display,
- ply_terminal_color_t color);
-void ply_text_display_set_foreground_color (ply_text_display_t *display,
- ply_terminal_color_t color);
+void ply_text_display_set_background_color (ply_text_display_t *display,
+ ply_terminal_color_t color);
+void ply_text_display_set_foreground_color (ply_text_display_t *display,
+ ply_terminal_color_t color);
ply_terminal_color_t ply_text_display_get_background_color (ply_text_display_t *display);
ply_terminal_color_t ply_text_display_get_foreground_color (ply_text_display_t *display);
void ply_text_display_draw_area (ply_text_display_t *display,
- int column,
- int row,
- int number_of_columns,
- int number_of_rows);
+ int column,
+ int row,
+ int number_of_columns,
+ int number_of_rows);
-void ply_text_display_set_draw_handler (ply_text_display_t *display,
- ply_text_display_draw_handler_t draw_handler,
- void *user_data);
+void ply_text_display_set_draw_handler (ply_text_display_t *display,
+ ply_text_display_draw_handler_t draw_handler,
+ void *user_data);
void ply_text_display_pause_updates (ply_text_display_t *display);
void ply_text_display_unpause_updates (ply_text_display_t *display);
diff --git a/src/libply-splash-core/ply-text-progress-bar.c b/src/libply-splash-core/ply-text-progress-bar.c
index 8c4e7592..dc275137 100644
--- a/src/libply-splash-core/ply-text-progress-bar.c
+++ b/src/libply-splash-core/ply-text-progress-bar.c
@@ -61,233 +61,229 @@ static char *os_string;
struct _ply_text_progress_bar
{
- ply_text_display_t *display;
+ ply_text_display_t *display;
- int column, row;
- int number_of_rows;
- int number_of_columns;
+ int column, row;
+ int number_of_rows;
+ int number_of_columns;
- double percent_done;
- uint32_t is_hidden : 1;
+ double percent_done;
+ uint32_t is_hidden : 1;
};
ply_text_progress_bar_t *
ply_text_progress_bar_new (void)
{
- ply_text_progress_bar_t *progress_bar;
+ ply_text_progress_bar_t *progress_bar;
- progress_bar = calloc (1, sizeof (ply_text_progress_bar_t));
+ progress_bar = calloc (1, sizeof(ply_text_progress_bar_t));
- progress_bar->row = 0;
- progress_bar->column = 0;
- progress_bar->number_of_columns = 0;
- progress_bar->number_of_rows = 0;
+ progress_bar->row = 0;
+ progress_bar->column = 0;
+ progress_bar->number_of_columns = 0;
+ progress_bar->number_of_rows = 0;
- return progress_bar;
+ return progress_bar;
}
void
ply_text_progress_bar_free (ply_text_progress_bar_t *progress_bar)
{
- if (progress_bar == NULL)
- return;
+ if (progress_bar == NULL)
+ return;
- free (progress_bar);
+ free (progress_bar);
}
static void
get_os_string (void)
{
- int fd;
- char *buf, *pos, *pos2;
- struct stat sbuf;
-
- buf = NULL;
-
- fd = open (RELEASE_FILE, O_RDONLY|O_CLOEXEC);
- if (fd == -1)
- goto out;
-
- if (fstat (fd, &sbuf) == -1) {
- close (fd);
- goto out;
- }
-
- buf = calloc (sbuf.st_size + 1, sizeof(char));
- read (fd, buf, sbuf.st_size);
- close (fd);
-
- if (strcmp (RELEASE_FILE, "/etc/os-release") == 0)
- {
- char key[] = "PRETTY_NAME=";
-
- for (pos = strstr (buf, key);
- pos != NULL;
- pos = strstr (pos, key))
- {
- if (pos == buf || pos[-1] == '\n')
- break;
+ int fd;
+ char *buf, *pos, *pos2;
+ struct stat sbuf;
+
+ buf = NULL;
+
+ fd = open (RELEASE_FILE, O_RDONLY | O_CLOEXEC);
+ if (fd == -1)
+ goto out;
+
+ if (fstat (fd, &sbuf) == -1) {
+ close (fd);
+ goto out;
}
- if (pos != NULL)
- {
- pos += strlen (key);
- pos2 = strstr (pos, "\n");
-
- if (pos2 != NULL)
- *pos2 = '\0';
- else
- pos2 = pos + strlen(pos) - 1;
-
- if ((*pos == '\"' && pos2[-1] == '\"') ||
- (*pos == '\'' && pos2[-1] == '\''))
- {
- pos++;
- pos2--;
-
- *pos2 = '\0';
- }
- asprintf (&os_string, " %s", pos);
+ buf = calloc (sbuf.st_size + 1, sizeof(char));
+ read (fd, buf, sbuf.st_size);
+ close (fd);
+
+ if (strcmp (RELEASE_FILE, "/etc/os-release") == 0) {
+ char key[] = "PRETTY_NAME=";
+
+ for (pos = strstr (buf, key);
+ pos != NULL;
+ pos = strstr (pos, key)) {
+ if (pos == buf || pos[-1] == '\n')
+ break;
+ }
+
+ if (pos != NULL) {
+ pos += strlen (key);
+ pos2 = strstr (pos, "\n");
+
+ if (pos2 != NULL)
+ *pos2 = '\0';
+ else
+ pos2 = pos + strlen (pos) - 1;
+
+ if ((*pos == '\"' && pos2[-1] == '\"') ||
+ (*pos == '\'' && pos2[-1] == '\'')) {
+ pos++;
+ pos2--;
+
+ *pos2 = '\0';
+ }
+ asprintf (&os_string, " %s", pos);
+ }
+ goto out;
}
- goto out;
- }
- pos = strstr (buf, " release ");
+ pos = strstr (buf, " release ");
- if (pos == NULL)
- goto out;
+ if (pos == NULL)
+ goto out;
- pos2 = strstr (pos, " (");
+ pos2 = strstr (pos, " (");
- if (pos2 == NULL)
- goto out;
+ if (pos2 == NULL)
+ goto out;
- *pos = '\0';
- pos += strlen (" release ");
+ *pos = '\0';
+ pos += strlen (" release ");
- *pos2 = '\0';
- asprintf (&os_string, " %s %s", buf, pos);
+ *pos2 = '\0';
+ asprintf (&os_string, " %s %s", buf, pos);
out:
- free (buf);
+ free (buf);
- if (os_string == NULL)
- os_string = strdup ("");
+ if (os_string == NULL)
+ os_string = strdup ("");
}
void
ply_text_progress_bar_draw (ply_text_progress_bar_t *progress_bar)
{
- int i, width;
- double brown_fraction, blue_fraction, white_fraction;
-
- if (progress_bar->is_hidden)
- return;
-
- width = progress_bar->number_of_columns - 2 - strlen (os_string);
-
- ply_text_display_set_cursor_position (progress_bar->display,
- progress_bar->column,
- progress_bar->row);
-
- brown_fraction = - (progress_bar->percent_done * progress_bar->percent_done) + 2 * progress_bar->percent_done;
- blue_fraction = progress_bar->percent_done;
- white_fraction = progress_bar->percent_done * progress_bar->percent_done;
-
- for (i = 0; i < width; i++) {
- double f;
-
- f = (double) i / (double) width;
- if (f < white_fraction)
- ply_text_display_set_background_color (progress_bar->display,
- PLY_TERMINAL_COLOR_WHITE);
- else if (f < blue_fraction)
- ply_text_display_set_background_color (progress_bar->display,
- PLY_TERMINAL_COLOR_BLUE);
- else if (f < brown_fraction)
- ply_text_display_set_background_color (progress_bar->display,
- PLY_TERMINAL_COLOR_BROWN);
- else
- break;
-
- ply_text_display_write (progress_bar->display, "%c", ' ');
- }
-
- ply_text_display_set_background_color (progress_bar->display,
- PLY_TERMINAL_COLOR_BLACK);
-
- if (brown_fraction > 0.5) {
- if (white_fraction > 0.875)
- ply_text_display_set_foreground_color (progress_bar->display,
- PLY_TERMINAL_COLOR_WHITE);
- else if (blue_fraction > 0.66)
- ply_text_display_set_foreground_color (progress_bar->display,
- PLY_TERMINAL_COLOR_BLUE);
- else
- ply_text_display_set_foreground_color (progress_bar->display,
- PLY_TERMINAL_COLOR_BROWN);
+ int i, width;
+ double brown_fraction, blue_fraction, white_fraction;
+
+ if (progress_bar->is_hidden)
+ return;
+
+ width = progress_bar->number_of_columns - 2 - strlen (os_string);
ply_text_display_set_cursor_position (progress_bar->display,
- progress_bar->column + width,
+ progress_bar->column,
progress_bar->row);
- ply_text_display_write (progress_bar->display, "%s", os_string);
+ brown_fraction = -(progress_bar->percent_done * progress_bar->percent_done) + 2 * progress_bar->percent_done;
+ blue_fraction = progress_bar->percent_done;
+ white_fraction = progress_bar->percent_done * progress_bar->percent_done;
+
+ for (i = 0; i < width; i++) {
+ double f;
+
+ f = (double) i / (double) width;
+ if (f < white_fraction)
+ ply_text_display_set_background_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_WHITE);
+ else if (f < blue_fraction)
+ ply_text_display_set_background_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_BLUE);
+ else if (f < brown_fraction)
+ ply_text_display_set_background_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_BROWN);
+ else
+ break;
+
+ ply_text_display_write (progress_bar->display, "%c", ' ');
+ }
- ply_text_display_set_foreground_color (progress_bar->display,
- PLY_TERMINAL_COLOR_DEFAULT);
- }
+ ply_text_display_set_background_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_BLACK);
+
+ if (brown_fraction > 0.5) {
+ if (white_fraction > 0.875)
+ ply_text_display_set_foreground_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_WHITE);
+ else if (blue_fraction > 0.66)
+ ply_text_display_set_foreground_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_BLUE);
+ else
+ ply_text_display_set_foreground_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_BROWN);
+
+ ply_text_display_set_cursor_position (progress_bar->display,
+ progress_bar->column + width,
+ progress_bar->row);
+
+ ply_text_display_write (progress_bar->display, "%s", os_string);
+
+ ply_text_display_set_foreground_color (progress_bar->display,
+ PLY_TERMINAL_COLOR_DEFAULT);
+ }
}
void
-ply_text_progress_bar_show (ply_text_progress_bar_t *progress_bar,
- ply_text_display_t *display)
+ply_text_progress_bar_show (ply_text_progress_bar_t *progress_bar,
+ ply_text_display_t *display)
{
- assert (progress_bar != NULL);
+ assert (progress_bar != NULL);
- progress_bar->display = display;
+ progress_bar->display = display;
- progress_bar->number_of_rows = ply_text_display_get_number_of_rows (display);
- progress_bar->row = progress_bar->number_of_rows - 1;
- progress_bar->number_of_columns = ply_text_display_get_number_of_columns (display);
- progress_bar->column = 2;
+ progress_bar->number_of_rows = ply_text_display_get_number_of_rows (display);
+ progress_bar->row = progress_bar->number_of_rows - 1;
+ progress_bar->number_of_columns = ply_text_display_get_number_of_columns (display);
+ progress_bar->column = 2;
- get_os_string ();
+ get_os_string ();
- progress_bar->is_hidden = false;
+ progress_bar->is_hidden = false;
- ply_text_progress_bar_draw (progress_bar);
+ ply_text_progress_bar_draw (progress_bar);
}
void
ply_text_progress_bar_hide (ply_text_progress_bar_t *progress_bar)
{
- progress_bar->display = NULL;
- progress_bar->is_hidden = true;
+ progress_bar->display = NULL;
+ progress_bar->is_hidden = true;
}
void
-ply_text_progress_bar_set_percent_done (ply_text_progress_bar_t *progress_bar,
- double percent_done)
+ply_text_progress_bar_set_percent_done (ply_text_progress_bar_t *progress_bar,
+ double percent_done)
{
- progress_bar->percent_done = percent_done;
+ progress_bar->percent_done = percent_done;
}
double
-ply_text_progress_bar_get_percent_done (ply_text_progress_bar_t *progress_bar)
+ply_text_progress_bar_get_percent_done (ply_text_progress_bar_t *progress_bar)
{
- return progress_bar->percent_done;
+ return progress_bar->percent_done;
}
int
ply_text_progress_bar_get_number_of_columns (ply_text_progress_bar_t *progress_bar)
{
- return progress_bar->number_of_columns;
+ return progress_bar->number_of_columns;
}
int
ply_text_progress_bar_get_number_of_rows (ply_text_progress_bar_t *progress_bar)
{
- return progress_bar->number_of_rows;
+ return progress_bar->number_of_rows;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-core/ply-text-progress-bar.h b/src/libply-splash-core/ply-text-progress-bar.h
index ebf0644b..10a127d9 100644
--- a/src/libply-splash-core/ply-text-progress-bar.h
+++ b/src/libply-splash-core/ply-text-progress-bar.h
@@ -38,14 +38,14 @@ ply_text_progress_bar_t *ply_text_progress_bar_new (void);
void ply_text_progress_bar_free (ply_text_progress_bar_t *progress_bar);
void ply_text_progress_bar_draw (ply_text_progress_bar_t *progress_bar);
-void ply_text_progress_bar_show (ply_text_progress_bar_t *progress_bar,
- ply_text_display_t *display);
+void ply_text_progress_bar_show (ply_text_progress_bar_t *progress_bar,
+ ply_text_display_t *display);
void ply_text_progress_bar_hide (ply_text_progress_bar_t *progress_bar);
-void ply_text_progress_bar_set_percent_done (ply_text_progress_bar_t *progress_bar,
- double percent_done);
+void ply_text_progress_bar_set_percent_done (ply_text_progress_bar_t *progress_bar,
+ double percent_done);
-double ply_text_progress_bar_get_percent_done (ply_text_progress_bar_t *progress_bar);
+double ply_text_progress_bar_get_percent_done (ply_text_progress_bar_t *progress_bar);
int ply_text_progress_bar_get_number_of_rows (ply_text_progress_bar_t *progress_bar);
int ply_text_progress_bar_get_number_of_columns (ply_text_progress_bar_t *progress_bar);
diff --git a/src/libply-splash-core/ply-text-step-bar.c b/src/libply-splash-core/ply-text-step-bar.c
index 7c77dd5f..d070e9a6 100644
--- a/src/libply-splash-core/ply-text-step-bar.c
+++ b/src/libply-splash-core/ply-text-step-bar.c
@@ -30,135 +30,130 @@
struct _ply_text_step_bar
{
- ply_text_display_t *display;
+ ply_text_display_t *display;
- int column;
- int row;
- int number_of_rows;
- int number_of_columns;
+ int column;
+ int row;
+ int number_of_rows;
+ int number_of_columns;
- double percent_done;
- uint32_t is_hidden : 1;
+ double percent_done;
+ uint32_t is_hidden : 1;
};
ply_text_step_bar_t *
ply_text_step_bar_new (void)
{
- ply_text_step_bar_t *step_bar;
+ ply_text_step_bar_t *step_bar;
- step_bar = calloc (1, sizeof (ply_text_step_bar_t));
+ step_bar = calloc (1, sizeof(ply_text_step_bar_t));
- step_bar->row = 0;
- step_bar->column = 0;
- step_bar->number_of_columns = 0;
- step_bar->number_of_rows = 0;
+ step_bar->row = 0;
+ step_bar->column = 0;
+ step_bar->number_of_columns = 0;
+ step_bar->number_of_rows = 0;
- return step_bar;
+ return step_bar;
}
void
ply_text_step_bar_free (ply_text_step_bar_t *step_bar)
{
- if (step_bar == NULL)
- return;
+ if (step_bar == NULL)
+ return;
- free (step_bar);
+ free (step_bar);
}
void
ply_text_step_bar_draw (ply_text_step_bar_t *step_bar)
{
- int i;
- int cur;
-
- if (step_bar->is_hidden)
- return;
-
- ply_text_display_set_background_color (step_bar->display,
- PLY_TERMINAL_COLOR_BLACK);
-
- ply_text_display_set_cursor_position (step_bar->display,
- step_bar->column,
- step_bar->row);
-
- cur = step_bar->percent_done * step_bar->number_of_columns;
- for (i = 0; i < step_bar->number_of_columns; i++)
- {
- if (i == cur)
- {
- ply_text_display_set_foreground_color (step_bar->display,
- PLY_TERMINAL_COLOR_WHITE);
+ int i;
+ int cur;
+
+ if (step_bar->is_hidden)
+ return;
+
+ ply_text_display_set_background_color (step_bar->display,
+ PLY_TERMINAL_COLOR_BLACK);
+
+ ply_text_display_set_cursor_position (step_bar->display,
+ step_bar->column,
+ step_bar->row);
+
+ cur = step_bar->percent_done * step_bar->number_of_columns;
+ for (i = 0; i < step_bar->number_of_columns; i++) {
+ if (i == cur)
+ ply_text_display_set_foreground_color (step_bar->display,
+ PLY_TERMINAL_COLOR_WHITE);
+ else
+ ply_text_display_set_foreground_color (step_bar->display,
+ PLY_TERMINAL_COLOR_BROWN);
+
+ /* U+25A0 BLACK SQUARE */
+ ply_text_display_write (step_bar->display, "%s", "\x25\x96\xa0");
+ ply_text_display_write (step_bar->display, "%c", ' ');
}
- else
- {
- ply_text_display_set_foreground_color (step_bar->display,
- PLY_TERMINAL_COLOR_BROWN);
- }
-
- /* U+25A0 BLACK SQUARE */
- ply_text_display_write (step_bar->display, "%s", "\x25\x96\xa0");
- ply_text_display_write (step_bar->display, "%c", ' ');
- }
- ply_text_display_set_foreground_color (step_bar->display,
- PLY_TERMINAL_COLOR_DEFAULT);
+ ply_text_display_set_foreground_color (step_bar->display,
+ PLY_TERMINAL_COLOR_DEFAULT);
}
void
-ply_text_step_bar_show (ply_text_step_bar_t *step_bar,
- ply_text_display_t *display)
+ply_text_step_bar_show (ply_text_step_bar_t *step_bar,
+ ply_text_display_t *display)
{
- int screen_rows;
- int screen_cols;
+ int screen_rows;
+ int screen_cols;
- assert (step_bar != NULL);
+ assert (step_bar != NULL);
- step_bar->display = display;
+ step_bar->display = display;
- screen_rows = ply_text_display_get_number_of_rows (display);
- screen_cols = ply_text_display_get_number_of_columns (display);
+ screen_rows = ply_text_display_get_number_of_rows (display);
+ screen_cols = ply_text_display_get_number_of_columns (display);
- step_bar->number_of_rows = 1;
- step_bar->row = screen_rows * .66;
- step_bar->number_of_columns = 3;
- step_bar->column = screen_cols / 2.0 - step_bar->number_of_columns / 2.0;
+ step_bar->number_of_rows = 1;
+ step_bar->row = screen_rows * .66;
+ step_bar->number_of_columns = 3;
+ step_bar->column = screen_cols / 2.0 - step_bar->number_of_columns / 2.0;
- step_bar->is_hidden = false;
+ step_bar->is_hidden = false;
- ply_text_step_bar_draw (step_bar);
+ ply_text_step_bar_draw (step_bar);
}
void
ply_text_step_bar_hide (ply_text_step_bar_t *step_bar)
{
- step_bar->display = NULL;
- step_bar->is_hidden = true;
+ step_bar->display = NULL;
+ step_bar->is_hidden = true;
}
void
-ply_text_step_bar_set_percent_done (ply_text_step_bar_t *step_bar,
- double percent_done)
+ply_text_step_bar_set_percent_done (ply_text_step_bar_t *step_bar,
+ double percent_done)
{
- step_bar->percent_done = percent_done;
+ step_bar->percent_done = percent_done;
}
double
-ply_text_step_bar_get_percent_done (ply_text_step_bar_t *step_bar)
+ply_text_step_bar_get_percent_done (ply_text_step_bar_t *step_bar)
{
- return step_bar->percent_done;
+ return step_bar->percent_done;
}
int
ply_text_step_bar_get_number_of_columns (ply_text_step_bar_t *step_bar)
{
- return step_bar->number_of_columns;
+ return step_bar->number_of_columns;
}
int
ply_text_step_bar_get_number_of_rows (ply_text_step_bar_t *step_bar)
{
- return step_bar->number_of_rows;
+ return step_bar->number_of_rows;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-core/ply-text-step-bar.h b/src/libply-splash-core/ply-text-step-bar.h
index 0a4733f1..e5dce91f 100644
--- a/src/libply-splash-core/ply-text-step-bar.h
+++ b/src/libply-splash-core/ply-text-step-bar.h
@@ -33,11 +33,11 @@ void ply_text_step_bar_free (ply_text_step_bar_t *step_bar);
void ply_text_step_bar_draw (ply_text_step_bar_t *step_bar);
void ply_text_step_bar_show (ply_text_step_bar_t *step_bar,
- ply_text_display_t *display);
+ ply_text_display_t *display);
void ply_text_step_bar_hide (ply_text_step_bar_t *step_bar);
void ply_text_step_bar_set_percent_done (ply_text_step_bar_t *step_bar,
- double percent_done);
+ double percent_done);
double ply_text_step_bar_get_percent_done (ply_text_step_bar_t *step_bar);
diff --git a/src/libply-splash-graphics/ply-animation.c b/src/libply-splash-graphics/ply-animation.c
index bba8490e..0d9561e5 100644
--- a/src/libply-splash-graphics/ply-animation.c
+++ b/src/libply-splash-graphics/ply-animation.c
@@ -56,21 +56,21 @@
struct _ply_animation
{
- ply_array_t *frames;
- ply_event_loop_t *loop;
- char *image_dir;
- char *frames_prefix;
-
- ply_pixel_display_t *display;
- ply_rectangle_t frame_area;
- ply_trigger_t *stop_trigger;
-
- int frame_number;
- long x, y;
- long width, height;
- double start_time, previous_time, now;
- uint32_t is_stopped : 1;
- uint32_t stop_requested : 1;
+ ply_array_t *frames;
+ ply_event_loop_t *loop;
+ char *image_dir;
+ char *frames_prefix;
+
+ ply_pixel_display_t *display;
+ ply_rectangle_t frame_area;
+ ply_trigger_t *stop_trigger;
+
+ int frame_number;
+ long x, y;
+ long width, height;
+ double start_time, previous_time, now;
+ uint32_t is_stopped : 1;
+ uint32_t stop_requested : 1;
};
static void ply_animation_stop_now (ply_animation_t *animation);
@@ -80,315 +80,298 @@ ply_animation_t *
ply_animation_new (const char *image_dir,
const char *frames_prefix)
{
- ply_animation_t *animation;
-
- assert (image_dir != NULL);
- assert (frames_prefix != NULL);
-
- animation = calloc (1, sizeof (ply_animation_t));
-
- animation->frames = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
- animation->frames_prefix = strdup (frames_prefix);
- animation->image_dir = strdup (image_dir);
- animation->frame_number = 0;
- animation->is_stopped = true;
- animation->stop_requested = false;
- animation->width = 0;
- animation->height = 0;
- animation->frame_area.width = 0;
- animation->frame_area.height = 0;
- animation->frame_area.x = 0;
- animation->frame_area.y = 0;
-
- return animation;
+ ply_animation_t *animation;
+
+ assert (image_dir != NULL);
+ assert (frames_prefix != NULL);
+
+ animation = calloc (1, sizeof(ply_animation_t));
+
+ animation->frames = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
+ animation->frames_prefix = strdup (frames_prefix);
+ animation->image_dir = strdup (image_dir);
+ animation->frame_number = 0;
+ animation->is_stopped = true;
+ animation->stop_requested = false;
+ animation->width = 0;
+ animation->height = 0;
+ animation->frame_area.width = 0;
+ animation->frame_area.height = 0;
+ animation->frame_area.x = 0;
+ animation->frame_area.y = 0;
+
+ return animation;
}
static void
ply_animation_remove_frames (ply_animation_t *animation)
{
- int i;
- ply_pixel_buffer_t **frames;
+ int i;
+ ply_pixel_buffer_t **frames;
- frames = (ply_pixel_buffer_t **) ply_array_steal_pointer_elements (animation->frames);
- for (i = 0; frames[i] != NULL; i++)
- ply_pixel_buffer_free (frames[i]);
- free (frames);
+ frames = (ply_pixel_buffer_t **) ply_array_steal_pointer_elements (animation->frames);
+ for (i = 0; frames[i] != NULL; i++) {
+ ply_pixel_buffer_free (frames[i]);
+ }
+ free (frames);
}
void
ply_animation_free (ply_animation_t *animation)
{
- if (animation == NULL)
- return;
+ if (animation == NULL)
+ return;
- if (!animation->is_stopped)
- ply_animation_stop_now (animation);
+ if (!animation->is_stopped)
+ ply_animation_stop_now (animation);
- ply_animation_remove_frames (animation);
- ply_array_free (animation->frames);
+ ply_animation_remove_frames (animation);
+ ply_array_free (animation->frames);
- free (animation->frames_prefix);
- free (animation->image_dir);
- free (animation);
+ free (animation->frames_prefix);
+ free (animation->image_dir);
+ free (animation);
}
static bool
animate_at_time (ply_animation_t *animation,
double time)
{
- int number_of_frames;
- ply_pixel_buffer_t * const * frames;
- bool should_continue;
+ int number_of_frames;
+ ply_pixel_buffer_t *const *frames;
+ bool should_continue;
- number_of_frames = ply_array_get_size (animation->frames);
+ number_of_frames = ply_array_get_size (animation->frames);
- if (number_of_frames == 0)
- return false;
+ if (number_of_frames == 0)
+ return false;
- should_continue = true;
+ should_continue = true;
- if (animation->frame_number > number_of_frames - 1)
- {
- ply_trace ("reached last frame of animation");
- return false;
- }
+ if (animation->frame_number > number_of_frames - 1) {
+ ply_trace ("reached last frame of animation");
+ return false;
+ }
- if (animation->stop_requested)
- {
- ply_trace ("stopping animation in the middle of sequence");
- should_continue = false;
- }
+ if (animation->stop_requested) {
+ ply_trace ("stopping animation in the middle of sequence");
+ should_continue = false;
+ }
- frames = (ply_pixel_buffer_t * const *) ply_array_get_pointer_elements (animation->frames);
- ply_pixel_buffer_get_size (frames[animation->frame_number], &animation->frame_area);
- animation->frame_area.x = animation->x;
- animation->frame_area.y = animation->y;
+ frames = (ply_pixel_buffer_t *const *) ply_array_get_pointer_elements (animation->frames);
+ ply_pixel_buffer_get_size (frames[animation->frame_number], &animation->frame_area);
+ animation->frame_area.x = animation->x;
+ animation->frame_area.y = animation->y;
- ply_pixel_display_draw_area (animation->display,
- animation->x, animation->y,
- animation->frame_area.width,
- animation->frame_area.height);
+ ply_pixel_display_draw_area (animation->display,
+ animation->x, animation->y,
+ animation->frame_area.width,
+ animation->frame_area.height);
- animation->frame_number++;
+ animation->frame_number++;
- return should_continue;
+ return should_continue;
}
static void
on_timeout (ply_animation_t *animation)
{
- double sleep_time;
- bool should_continue;
- animation->previous_time = animation->now;
- animation->now = ply_get_timestamp ();
-
- should_continue = animate_at_time (animation,
- animation->now - animation->start_time);
-
- sleep_time = 1.0 / FRAMES_PER_SECOND;
- sleep_time = MAX (sleep_time - (ply_get_timestamp () - animation->now),
- 0.005);
-
- if (!should_continue)
- {
- if (animation->stop_trigger != NULL)
- {
- ply_trace ("firing off stop trigger");
- ply_trigger_pull (animation->stop_trigger, NULL);
- animation->stop_trigger = NULL;
+ double sleep_time;
+ bool should_continue;
+
+ animation->previous_time = animation->now;
+ animation->now = ply_get_timestamp ();
+
+ should_continue = animate_at_time (animation,
+ animation->now - animation->start_time);
+
+ sleep_time = 1.0 / FRAMES_PER_SECOND;
+ sleep_time = MAX (sleep_time - (ply_get_timestamp () - animation->now),
+ 0.005);
+
+ if (!should_continue) {
+ if (animation->stop_trigger != NULL) {
+ ply_trace ("firing off stop trigger");
+ ply_trigger_pull (animation->stop_trigger, NULL);
+ animation->stop_trigger = NULL;
+ }
+ } else {
+ ply_event_loop_watch_for_timeout (animation->loop,
+ sleep_time,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, animation);
}
- }
- else
- {
- ply_event_loop_watch_for_timeout (animation->loop,
- sleep_time,
- (ply_event_loop_timeout_handler_t)
- on_timeout, animation);
- }
}
static bool
ply_animation_add_frame (ply_animation_t *animation,
const char *filename)
{
- ply_image_t *image;
- ply_pixel_buffer_t *frame;
+ ply_image_t *image;
+ ply_pixel_buffer_t *frame;
- image = ply_image_new (filename);
+ image = ply_image_new (filename);
- if (!ply_image_load (image))
- {
- ply_image_free (image);
- return false;
- }
+ if (!ply_image_load (image)) {
+ ply_image_free (image);
+ return false;
+ }
- frame = ply_image_convert_to_pixel_buffer (image);
+ frame = ply_image_convert_to_pixel_buffer (image);
- ply_array_add_pointer_element (animation->frames, frame);
+ ply_array_add_pointer_element (animation->frames, frame);
- animation->width = MAX (animation->width, (long) ply_pixel_buffer_get_width (frame));
- animation->height = MAX (animation->height, (long) ply_pixel_buffer_get_height (frame));
+ animation->width = MAX (animation->width, (long) ply_pixel_buffer_get_width (frame));
+ animation->height = MAX (animation->height, (long) ply_pixel_buffer_get_height (frame));
- return true;
+ return true;
}
static bool
ply_animation_add_frames (ply_animation_t *animation)
{
- struct dirent **entries;
- int number_of_entries;
- int number_of_frames;
- int i;
- bool load_finished;
+ struct dirent **entries;
+ int number_of_entries;
+ int number_of_frames;
+ int i;
+ bool load_finished;
- entries = NULL;
+ entries = NULL;
- number_of_entries = scandir (animation->image_dir, &entries, NULL, versionsort);
+ number_of_entries = scandir (animation->image_dir, &entries, NULL, versionsort);
- if (number_of_entries <= 0)
- return false;
+ if (number_of_entries <= 0)
+ return false;
- load_finished = false;
- for (i = 0; i < number_of_entries; i++)
- {
- if (strncmp (entries[i]->d_name,
- animation->frames_prefix,
- strlen (animation->frames_prefix)) == 0
- && (strlen (entries[i]->d_name) > 4)
- && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0)
- {
- char *filename;
+ load_finished = false;
+ for (i = 0; i < number_of_entries; i++) {
+ if (strncmp (entries[i]->d_name,
+ animation->frames_prefix,
+ strlen (animation->frames_prefix)) == 0
+ && (strlen (entries[i]->d_name) > 4)
+ && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0) {
+ char *filename;
- filename = NULL;
- asprintf (&filename, "%s/%s", animation->image_dir, entries[i]->d_name);
+ filename = NULL;
+ asprintf (&filename, "%s/%s", animation->image_dir, entries[i]->d_name);
- if (!ply_animation_add_frame (animation, filename))
- goto out;
+ if (!ply_animation_add_frame (animation, filename))
+ goto out;
- free (filename);
- }
+ free (filename);
+ }
- free (entries[i]);
- entries[i] = NULL;
- }
+ free (entries[i]);
+ entries[i] = NULL;
+ }
- number_of_frames = ply_array_get_size (animation->frames);
- if (number_of_frames == 0)
- {
- ply_trace ("%s directory had no files starting with %s\n",
- animation->image_dir, animation->frames_prefix);
- goto out;
- }
- else
- {
- ply_trace ("animation has %d frames\n", number_of_frames);
- }
+ number_of_frames = ply_array_get_size (animation->frames);
+ if (number_of_frames == 0) {
+ ply_trace ("%s directory had no files starting with %s\n",
+ animation->image_dir, animation->frames_prefix);
+ goto out;
+ } else {
+ ply_trace ("animation has %d frames\n", number_of_frames);
+ }
- load_finished = true;
+ load_finished = true;
out:
- if (!load_finished)
- {
- ply_animation_remove_frames (animation);
-
- while (i < number_of_entries)
- {
- free (entries[i]);
- i++;
+ if (!load_finished) {
+ ply_animation_remove_frames (animation);
+
+ while (i < number_of_entries) {
+ free (entries[i]);
+ i++;
+ }
}
- }
- free (entries);
+ free (entries);
- return load_finished;
+ return load_finished;
}
bool
ply_animation_load (ply_animation_t *animation)
{
- if (ply_array_get_size (animation->frames) != 0)
- {
- ply_animation_remove_frames (animation);
- ply_trace ("reloading animation with new set of frames");
- }
- else
- {
- ply_trace ("loading frames for animation");
- }
-
- if (!ply_animation_add_frames (animation))
- return false;
-
- return true;
+ if (ply_array_get_size (animation->frames) != 0) {
+ ply_animation_remove_frames (animation);
+ ply_trace ("reloading animation with new set of frames");
+ } else {
+ ply_trace ("loading frames for animation");
+ }
+
+ if (!ply_animation_add_frames (animation))
+ return false;
+
+ return true;
}
bool
-ply_animation_start (ply_animation_t *animation,
+ply_animation_start (ply_animation_t *animation,
ply_pixel_display_t *display,
- ply_trigger_t *stop_trigger,
- long x,
- long y)
+ ply_trigger_t *stop_trigger,
+ long x,
+ long y)
{
- assert (animation != NULL);
+ assert (animation != NULL);
- if (!animation->is_stopped)
- return true;
+ if (!animation->is_stopped)
+ return true;
- ply_trace ("starting animation");
+ ply_trace ("starting animation");
- animation->loop = ply_event_loop_get_default ();
- animation->display = display;
- animation->stop_trigger = stop_trigger;
- animation->is_stopped = false;
- animation->stop_requested = false;
+ animation->loop = ply_event_loop_get_default ();
+ animation->display = display;
+ animation->stop_trigger = stop_trigger;
+ animation->is_stopped = false;
+ animation->stop_requested = false;
- animation->x = x;
- animation->y = y;
+ animation->x = x;
+ animation->y = y;
- animation->start_time = ply_get_timestamp ();
+ animation->start_time = ply_get_timestamp ();
- ply_event_loop_watch_for_timeout (animation->loop,
- 1.0 / FRAMES_PER_SECOND,
- (ply_event_loop_timeout_handler_t)
- on_timeout, animation);
+ ply_event_loop_watch_for_timeout (animation->loop,
+ 1.0 / FRAMES_PER_SECOND,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, animation);
- return true;
+ return true;
}
static void
ply_animation_stop_now (ply_animation_t *animation)
{
- animation->is_stopped = true;
+ animation->is_stopped = true;
- ply_trace ("stopping animation now");
+ ply_trace ("stopping animation now");
- if (animation->loop != NULL)
- {
- ply_event_loop_stop_watching_for_timeout (animation->loop,
- (ply_event_loop_timeout_handler_t)
- on_timeout, animation);
- animation->loop = NULL;
- }
+ if (animation->loop != NULL) {
+ ply_event_loop_stop_watching_for_timeout (animation->loop,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, animation);
+ animation->loop = NULL;
+ }
- animation->display = NULL;
+ animation->display = NULL;
}
void
ply_animation_stop (ply_animation_t *animation)
{
- if (animation->stop_trigger == NULL)
- {
- ply_animation_stop_now (animation);
- return;
- }
-
- ply_trace ("stopping animation next time through the loop");
- animation->stop_requested = true;
+ if (animation->stop_trigger == NULL) {
+ ply_animation_stop_now (animation);
+ return;
+ }
+
+ ply_trace ("stopping animation next time through the loop");
+ animation->stop_requested = true;
}
bool
ply_animation_is_stopped (ply_animation_t *animation)
{
- return animation->is_stopped;
+ return animation->is_stopped;
}
void
@@ -399,33 +382,33 @@ ply_animation_draw_area (ply_animation_t *animation,
unsigned long width,
unsigned long height)
{
- ply_pixel_buffer_t * const * frames;
- int number_of_frames;
- int frame_index;
-
- if (animation->is_stopped)
- return;
-
- number_of_frames = ply_array_get_size (animation->frames);
- frame_index = MIN(animation->frame_number, number_of_frames - 1);
-
- frames = (ply_pixel_buffer_t * const *) ply_array_get_pointer_elements (animation->frames);
- ply_pixel_buffer_fill_with_buffer (buffer,
- frames[frame_index],
- animation->frame_area.x,
- animation->frame_area.y);
+ ply_pixel_buffer_t *const *frames;
+ int number_of_frames;
+ int frame_index;
+
+ if (animation->is_stopped)
+ return;
+
+ number_of_frames = ply_array_get_size (animation->frames);
+ frame_index = MIN (animation->frame_number, number_of_frames - 1);
+
+ frames = (ply_pixel_buffer_t *const *) ply_array_get_pointer_elements (animation->frames);
+ ply_pixel_buffer_fill_with_buffer (buffer,
+ frames[frame_index],
+ animation->frame_area.x,
+ animation->frame_area.y);
}
long
ply_animation_get_width (ply_animation_t *animation)
{
- return animation->width;
+ return animation->width;
}
long
ply_animation_get_height (ply_animation_t *animation)
{
- return animation->height;
+ return animation->height;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-animation.h b/src/libply-splash-graphics/ply-animation.h
index 7b905472..e91624be 100644
--- a/src/libply-splash-graphics/ply-animation.h
+++ b/src/libply-splash-graphics/ply-animation.h
@@ -38,11 +38,11 @@ ply_animation_t *ply_animation_new (const char *image_dir,
void ply_animation_free (ply_animation_t *animation);
bool ply_animation_load (ply_animation_t *animation);
-bool ply_animation_start (ply_animation_t *animation,
+bool ply_animation_start (ply_animation_t *animation,
ply_pixel_display_t *display,
- ply_trigger_t *stop_trigger,
- long x,
- long y);
+ ply_trigger_t *stop_trigger,
+ long x,
+ long y);
void ply_animation_stop (ply_animation_t *animation);
bool ply_animation_is_stopped (ply_animation_t *animation);
diff --git a/src/libply-splash-graphics/ply-entry.c b/src/libply-splash-graphics/ply-entry.c
index 028866a9..29b76a7f 100644
--- a/src/libply-splash-graphics/ply-entry.c
+++ b/src/libply-splash-graphics/ply-entry.c
@@ -58,103 +58,102 @@
struct _ply_entry
{
- ply_event_loop_t *loop;
+ ply_event_loop_t *loop;
- ply_pixel_display_t *display;
- ply_rectangle_t area;
- ply_image_t *text_field_image;
- ply_image_t *bullet_image;
- ply_label_t *label;
+ ply_pixel_display_t *display;
+ ply_rectangle_t area;
+ ply_image_t *text_field_image;
+ ply_image_t *bullet_image;
+ ply_label_t *label;
- char* text;
- int number_of_bullets;
- int max_number_of_visible_bullets;
+ char *text;
+ int number_of_bullets;
+ int max_number_of_visible_bullets;
- uint32_t is_hidden : 1;
- uint32_t is_password : 1;
+ uint32_t is_hidden : 1;
+ uint32_t is_password : 1;
};
ply_entry_t *
ply_entry_new (const char *image_dir)
{
- ply_entry_t *entry;
- char *image_path;
+ ply_entry_t *entry;
+ char *image_path;
- assert (image_dir != NULL);
+ assert (image_dir != NULL);
- entry = calloc (1, sizeof (ply_entry_t));
+ entry = calloc (1, sizeof(ply_entry_t));
- image_path = NULL;
- asprintf (&image_path, "%s/entry.png", image_dir);
- entry->text_field_image = ply_image_new (image_path);
- free (image_path);
+ image_path = NULL;
+ asprintf (&image_path, "%s/entry.png", image_dir);
+ entry->text_field_image = ply_image_new (image_path);
+ free (image_path);
- image_path = NULL;
- asprintf (&image_path, "%s/bullet.png", image_dir);
- entry->bullet_image = ply_image_new (image_path);
- free (image_path);
- entry->label = ply_label_new ();
- ply_label_set_color (entry->label, 0, 0, 0, 1);
+ image_path = NULL;
+ asprintf (&image_path, "%s/bullet.png", image_dir);
+ entry->bullet_image = ply_image_new (image_path);
+ free (image_path);
+ entry->label = ply_label_new ();
+ ply_label_set_color (entry->label, 0, 0, 0, 1);
- entry->number_of_bullets = 0;
- entry->text = strdup("");
-
- entry->is_hidden = true;
- entry->is_password = true;
+ entry->number_of_bullets = 0;
+ entry->text = strdup ("");
- return entry;
+ entry->is_hidden = true;
+ entry->is_password = true;
+
+ return entry;
}
void
ply_entry_free (ply_entry_t *entry)
{
- if (entry == NULL)
- return;
- ply_image_free (entry->text_field_image);
- ply_image_free (entry->bullet_image);
- ply_label_free (entry->label);
- free (entry->text);
-
- free (entry);
+ if (entry == NULL)
+ return;
+ ply_image_free (entry->text_field_image);
+ ply_image_free (entry->bullet_image);
+ ply_label_free (entry->label);
+ free (entry->text);
+
+ free (entry);
}
static int
get_max_number_of_visible_bullets (ply_entry_t *entry)
{
- long bullet_width, text_field_width;
+ long bullet_width, text_field_width;
- bullet_width = ply_image_get_width (entry->bullet_image);
- text_field_width = ply_image_get_width (entry->text_field_image);
+ bullet_width = ply_image_get_width (entry->bullet_image);
+ text_field_width = ply_image_get_width (entry->text_field_image);
- return (int) (text_field_width / bullet_width) - ((text_field_width % bullet_width) < (bullet_width / 2)? 1 : 0);
+ return (int) (text_field_width / bullet_width) - ((text_field_width % bullet_width) < (bullet_width / 2) ? 1 : 0);
}
bool
ply_entry_load (ply_entry_t *entry)
{
+ if (!ply_image_load (entry->text_field_image))
+ return false;
- if (!ply_image_load (entry->text_field_image))
- return false;
-
- if (!ply_image_load (entry->bullet_image))
- return false;
+ if (!ply_image_load (entry->bullet_image))
+ return false;
- entry->area.width = ply_image_get_width (entry->text_field_image);
- entry->area.height = ply_image_get_height (entry->text_field_image);
+ entry->area.width = ply_image_get_width (entry->text_field_image);
+ entry->area.height = ply_image_get_height (entry->text_field_image);
- entry->max_number_of_visible_bullets = get_max_number_of_visible_bullets (entry);
+ entry->max_number_of_visible_bullets = get_max_number_of_visible_bullets (entry);
- return true;
+ return true;
}
static void
ply_entry_draw (ply_entry_t *entry)
{
- ply_pixel_display_draw_area (entry->display,
- entry->area.x,
- entry->area.y,
- entry->area.width,
- entry->area.height);
+ ply_pixel_display_draw_area (entry->display,
+ entry->area.x,
+ entry->area.y,
+ entry->area.width,
+ entry->area.height);
}
void
@@ -165,118 +164,111 @@ ply_entry_draw_area (ply_entry_t *entry,
unsigned long width,
unsigned long height)
{
- ply_rectangle_t bullet_area;
- ply_rectangle_t clip_area;
- ply_pixel_buffer_t *bullet_buffer, *text_field_buffer;
- int i, number_of_visible_bullets;
-
- if (entry->is_hidden)
- return;
-
- text_field_buffer = ply_image_get_buffer (entry->text_field_image);
-
- ply_pixel_buffer_fill_with_buffer (pixel_buffer,
- text_field_buffer,
- entry->area.x,
- entry->area.y);
-
- if (entry->is_password)
- {
- bullet_buffer = ply_image_get_buffer (entry->bullet_image);
- ply_pixel_buffer_get_size (bullet_buffer, &bullet_area);
-
- if (entry->number_of_bullets <= entry->max_number_of_visible_bullets)
- number_of_visible_bullets = entry->number_of_bullets;
- else
- {
- number_of_visible_bullets = entry->max_number_of_visible_bullets;
-
- /* We've got more bullets than we can show in the available space, so
- * draw a little half bullet to indicate some bullets are offscreen
- */
- bullet_area.x = entry->area.x - bullet_area.width / 2.0;
- bullet_area.y = entry->area.y + entry->area.height / 2.0 - bullet_area.height / 2.0;
- clip_area = bullet_area;
- clip_area.x = entry->area.x;
-
- ply_pixel_buffer_fill_with_buffer_with_clip (pixel_buffer,
- bullet_buffer,
- bullet_area.x,
- bullet_area.y,
- &clip_area);
- }
-
- for (i = 0; i < number_of_visible_bullets; i++)
- {
- bullet_area.x = entry->area.x + i * bullet_area.width + bullet_area.width / 2.0;
- bullet_area.y = entry->area.y + entry->area.height / 2.0 - bullet_area.height / 2.0;
-
- ply_pixel_buffer_fill_with_buffer (pixel_buffer,
- bullet_buffer,
- bullet_area.x,
- bullet_area.y);
+ ply_rectangle_t bullet_area;
+ ply_rectangle_t clip_area;
+ ply_pixel_buffer_t *bullet_buffer, *text_field_buffer;
+ int i, number_of_visible_bullets;
+
+ if (entry->is_hidden)
+ return;
+
+ text_field_buffer = ply_image_get_buffer (entry->text_field_image);
+
+ ply_pixel_buffer_fill_with_buffer (pixel_buffer,
+ text_field_buffer,
+ entry->area.x,
+ entry->area.y);
+
+ if (entry->is_password) {
+ bullet_buffer = ply_image_get_buffer (entry->bullet_image);
+ ply_pixel_buffer_get_size (bullet_buffer, &bullet_area);
+
+ if (entry->number_of_bullets <= entry->max_number_of_visible_bullets) {
+ number_of_visible_bullets = entry->number_of_bullets;
+ } else {
+ number_of_visible_bullets = entry->max_number_of_visible_bullets;
+
+ /* We've got more bullets than we can show in the available space, so
+ * draw a little half bullet to indicate some bullets are offscreen
+ */
+ bullet_area.x = entry->area.x - bullet_area.width / 2.0;
+ bullet_area.y = entry->area.y + entry->area.height / 2.0 - bullet_area.height / 2.0;
+ clip_area = bullet_area;
+ clip_area.x = entry->area.x;
+
+ ply_pixel_buffer_fill_with_buffer_with_clip (pixel_buffer,
+ bullet_buffer,
+ bullet_area.x,
+ bullet_area.y,
+ &clip_area);
+ }
+
+ for (i = 0; i < number_of_visible_bullets; i++) {
+ bullet_area.x = entry->area.x + i * bullet_area.width + bullet_area.width / 2.0;
+ bullet_area.y = entry->area.y + entry->area.height / 2.0 - bullet_area.height / 2.0;
+
+ ply_pixel_buffer_fill_with_buffer (pixel_buffer,
+ bullet_buffer,
+ bullet_area.x,
+ bullet_area.y);
+ }
+ } else {
+ ply_label_set_text (entry->label, entry->text);
+ ply_label_show (entry->label,
+ NULL,
+ entry->area.x,
+ entry->area.y + entry->area.height / 2
+ - ply_label_get_height (entry->label) / 2);
+ ply_label_draw_area (entry->label, pixel_buffer,
+ entry->area.x, entry->area.y,
+ entry->area.width, entry->area.height);
}
- }
- else
- {
- ply_label_set_text (entry->label, entry->text);
- ply_label_show (entry->label,
- NULL,
- entry->area.x,
- entry->area.y + entry->area.height / 2
- - ply_label_get_height (entry->label) / 2);
- ply_label_draw_area (entry->label, pixel_buffer,
- entry->area.x, entry->area.y,
- entry->area.width, entry->area.height);
- }
}
void
ply_entry_set_bullet_count (ply_entry_t *entry, int count)
{
- count = MAX(0, count);
- if (!entry->is_password || entry->number_of_bullets != count)
- {
- entry->is_password = true;
- entry->number_of_bullets = count;
- ply_entry_draw (entry);
- }
+ count = MAX (0, count);
+ if (!entry->is_password || entry->number_of_bullets != count) {
+ entry->is_password = true;
+ entry->number_of_bullets = count;
+ ply_entry_draw (entry);
+ }
}
int
ply_entry_get_bullet_count (ply_entry_t *entry)
{
- return entry->number_of_bullets;
+ return entry->number_of_bullets;
}
void
ply_entry_add_bullet (ply_entry_t *entry)
{
- ply_entry_set_bullet_count (entry, ply_entry_get_bullet_count (entry)+1);
+ ply_entry_set_bullet_count (entry, ply_entry_get_bullet_count (entry) + 1);
}
void
ply_entry_remove_bullet (ply_entry_t *entry)
{
- ply_entry_set_bullet_count (entry, ply_entry_get_bullet_count (entry)-1);
+ ply_entry_set_bullet_count (entry, ply_entry_get_bullet_count (entry) - 1);
}
void
ply_entry_remove_all_bullets (ply_entry_t *entry)
{
- ply_entry_set_bullet_count (entry, 0);
+ ply_entry_set_bullet_count (entry, 0);
}
void
-ply_entry_set_text (ply_entry_t *entry, const char* text)
+ply_entry_set_text (ply_entry_t *entry, const char *text)
{
- if (entry->is_password || strcmp(entry->text, text) != 0)
- {
- entry->is_password = false;
- free(entry->text);
- entry->text = strdup(text);
- ply_entry_draw (entry);
- }
+ if (entry->is_password || strcmp (entry->text, text) != 0) {
+ entry->is_password = false;
+ free (entry->text);
+ entry->text = strdup (text);
+ ply_entry_draw (entry);
+ }
}
void
@@ -286,7 +278,7 @@ ply_entry_set_text_color (ply_entry_t *entry,
float blue,
float alpha)
{
- ply_label_set_color (entry->label, red, green, blue, alpha);
+ ply_label_set_color (entry->label, red, green, blue, alpha);
}
@@ -294,49 +286,49 @@ void
ply_entry_show (ply_entry_t *entry,
ply_event_loop_t *loop,
ply_pixel_display_t *display,
- long x,
- long y)
+ long x,
+ long y)
{
- assert (entry != NULL);
- assert (entry->loop == NULL);
+ assert (entry != NULL);
+ assert (entry->loop == NULL);
- entry->loop = loop;
- entry->display = display;
+ entry->loop = loop;
+ entry->display = display;
- entry->area.x = x;
- entry->area.y = y;
+ entry->area.x = x;
+ entry->area.y = y;
- entry->is_hidden = false;
+ entry->is_hidden = false;
- ply_entry_draw (entry);
+ ply_entry_draw (entry);
}
void
ply_entry_hide (ply_entry_t *entry)
{
- entry->is_hidden = true;
- ply_entry_draw (entry);
+ entry->is_hidden = true;
+ ply_entry_draw (entry);
- entry->display = NULL;
- entry->loop = NULL;
+ entry->display = NULL;
+ entry->loop = NULL;
}
bool
ply_entry_is_hidden (ply_entry_t *entry)
{
- return entry->is_hidden;
+ return entry->is_hidden;
}
long
ply_entry_get_width (ply_entry_t *entry)
{
- return entry->area.width;
+ return entry->area.width;
}
long
ply_entry_get_height (ply_entry_t *entry)
{
- return entry->area.height;
+ return entry->area.height;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-entry.h b/src/libply-splash-graphics/ply-entry.h
index 8a3e16e0..3c03293b 100644
--- a/src/libply-splash-graphics/ply-entry.h
+++ b/src/libply-splash-graphics/ply-entry.h
@@ -54,12 +54,14 @@ bool ply_entry_is_hidden (ply_entry_t *entry);
long ply_entry_get_width (ply_entry_t *entry);
long ply_entry_get_height (ply_entry_t *entry);
-void ply_entry_set_bullet_count (ply_entry_t *entry, int count);
+void ply_entry_set_bullet_count (ply_entry_t *entry,
+ int count);
int ply_entry_get_bullet_count (ply_entry_t *entry);
void ply_entry_add_bullet (ply_entry_t *entry);
void ply_entry_remove_bullet (ply_entry_t *entry);
void ply_entry_remove_all_bullets (ply_entry_t *entry);
-void ply_entry_set_text (ply_entry_t *entry, const char* text);
+void ply_entry_set_text (ply_entry_t *entry,
+ const char *text);
void ply_entry_set_text_color (ply_entry_t *entry,
float red,
float green,
diff --git a/src/libply-splash-graphics/ply-image.c b/src/libply-splash-graphics/ply-image.c
index 7d219463..f838601a 100644
--- a/src/libply-splash-graphics/ply-image.c
+++ b/src/libply-splash-graphics/ply-image.c
@@ -51,36 +51,36 @@
struct _ply_image
{
- char *filename;
- ply_pixel_buffer_t *buffer;
+ char *filename;
+ ply_pixel_buffer_t *buffer;
};
ply_image_t *
ply_image_new (const char *filename)
{
- ply_image_t *image;
+ ply_image_t *image;
- assert (filename != NULL);
+ assert (filename != NULL);
- image = calloc (1, sizeof (ply_image_t));
+ image = calloc (1, sizeof(ply_image_t));
- image->filename = strdup (filename);
- image->buffer = NULL;
+ image->filename = strdup (filename);
+ image->buffer = NULL;
- return image;
+ return image;
}
void
ply_image_free (ply_image_t *image)
{
- if (image == NULL)
- return;
-
- assert (image->filename != NULL);
-
- ply_pixel_buffer_free (image->buffer);
- free (image->filename);
- free (image);
+ if (image == NULL)
+ return;
+
+ assert (image->filename != NULL);
+
+ ply_pixel_buffer_free (image->buffer);
+ free (image->filename);
+ free (image);
}
static void
@@ -88,138 +88,137 @@ transform_to_argb32 (png_struct *png,
png_row_info *row_info,
png_byte *data)
{
- unsigned int i;
-
- for (i = 0; i < row_info->rowbytes; i += 4)
- {
- uint8_t red, green, blue, alpha;
- uint32_t pixel_value;
-
- red = data[i + 0];
- green = data[i + 1];
- blue = data[i + 2];
- alpha = data[i + 3];
-
- red = (uint8_t) CLAMP (((red / 255.0) * (alpha / 255.0)) * 255.0, 0, 255.0);
- green = (uint8_t) CLAMP (((green / 255.0) * (alpha / 255.0)) * 255.0,
- 0, 255.0);
- blue = (uint8_t) CLAMP (((blue / 255.0) * (alpha / 255.0)) * 255.0, 0, 255.0);
-
- pixel_value = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0);
- memcpy (data + i, &pixel_value, sizeof (uint32_t));
- }
+ unsigned int i;
+
+ for (i = 0; i < row_info->rowbytes; i += 4) {
+ uint8_t red, green, blue, alpha;
+ uint32_t pixel_value;
+
+ red = data[i + 0];
+ green = data[i + 1];
+ blue = data[i + 2];
+ alpha = data[i + 3];
+
+ red = (uint8_t) CLAMP (((red / 255.0) * (alpha / 255.0)) * 255.0, 0, 255.0);
+ green = (uint8_t) CLAMP (((green / 255.0) * (alpha / 255.0)) * 255.0,
+ 0, 255.0);
+ blue = (uint8_t) CLAMP (((blue / 255.0) * (alpha / 255.0)) * 255.0, 0, 255.0);
+
+ pixel_value = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0);
+ memcpy (data + i, &pixel_value, sizeof(uint32_t));
+ }
}
bool
ply_image_load (ply_image_t *image)
{
- png_struct *png;
- png_info *info;
- png_uint_32 width, height, row;
- int bits_per_pixel, color_type, interlace_method;
- png_byte **rows;
- uint32_t *bytes;
- FILE *fp;
-
- assert (image != NULL);
-
- fp = fopen (image->filename, "re");
- if (fp == NULL)
- return false;
-
- png = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- assert (png != NULL);
+ png_struct *png;
+ png_info *info;
+ png_uint_32 width, height, row;
+ int bits_per_pixel, color_type, interlace_method;
+ png_byte **rows;
+ uint32_t *bytes;
+ FILE *fp;
+
+ assert (image != NULL);
+
+ fp = fopen (image->filename, "re");
+ if (fp == NULL)
+ return false;
+
+ png = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ assert (png != NULL);
- info = png_create_info_struct (png);
- assert (info != NULL);
+ info = png_create_info_struct (png);
+ assert (info != NULL);
- png_init_io (png, fp);
+ png_init_io (png, fp);
- if (setjmp (png_jmpbuf (png)) != 0)
- {
- fclose (fp);
- return false;
- }
+ if (setjmp (png_jmpbuf (png)) != 0) {
+ fclose (fp);
+ return false;
+ }
- png_read_info (png, info);
- png_get_IHDR (png, info,
- &width, &height, &bits_per_pixel,
- &color_type, &interlace_method, NULL, NULL);
+ png_read_info (png, info);
+ png_get_IHDR (png, info,
+ &width, &height, &bits_per_pixel,
+ &color_type, &interlace_method, NULL, NULL);
- if (color_type == PNG_COLOR_TYPE_PALETTE)
- png_set_palette_to_rgb (png);
+ if (color_type == PNG_COLOR_TYPE_PALETTE)
+ png_set_palette_to_rgb (png);
- if ((color_type == PNG_COLOR_TYPE_GRAY) && (bits_per_pixel < 8))
- png_set_expand_gray_1_2_4_to_8 (png);
+ if ((color_type == PNG_COLOR_TYPE_GRAY) && (bits_per_pixel < 8))
+ png_set_expand_gray_1_2_4_to_8 (png);
- if (png_get_valid (png, info, PNG_INFO_tRNS))
- png_set_tRNS_to_alpha (png);
+ if (png_get_valid (png, info, PNG_INFO_tRNS))
+ png_set_tRNS_to_alpha (png);
- if (bits_per_pixel == 16)
- png_set_strip_16 (png);
+ if (bits_per_pixel == 16)
+ png_set_strip_16 (png);
- if (bits_per_pixel < 8)
- png_set_packing (png);
+ if (bits_per_pixel < 8)
+ png_set_packing (png);
- if ((color_type == PNG_COLOR_TYPE_GRAY)
- || (color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
- png_set_gray_to_rgb (png);
+ if ((color_type == PNG_COLOR_TYPE_GRAY)
+ || (color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
+ png_set_gray_to_rgb (png);
- if (interlace_method != PNG_INTERLACE_NONE)
- png_set_interlace_handling (png);
+ if (interlace_method != PNG_INTERLACE_NONE)
+ png_set_interlace_handling (png);
- png_set_filler (png, 0xff, PNG_FILLER_AFTER);
+ png_set_filler (png, 0xff, PNG_FILLER_AFTER);
- png_set_read_user_transform_fn (png, transform_to_argb32);
+ png_set_read_user_transform_fn (png, transform_to_argb32);
- png_read_update_info (png, info);
+ png_read_update_info (png, info);
- rows = malloc (height * sizeof (png_byte *));
- image->buffer = ply_pixel_buffer_new (width, height);
-
- bytes = ply_pixel_buffer_get_argb32_data (image->buffer);
+ rows = malloc (height * sizeof(png_byte *));
+ image->buffer = ply_pixel_buffer_new (width, height);
- for (row = 0; row < height; row++)
- rows[row] = (png_byte*) &bytes[row * width];
+ bytes = ply_pixel_buffer_get_argb32_data (image->buffer);
- png_read_image (png, rows);
+ for (row = 0; row < height; row++) {
+ rows[row] = (png_byte *) &bytes[row * width];
+ }
- free (rows);
- png_read_end (png, info);
- fclose (fp);
- png_destroy_read_struct (&png, &info, NULL);
+ png_read_image (png, rows);
- return true;
+ free (rows);
+ png_read_end (png, info);
+ fclose (fp);
+ png_destroy_read_struct (&png, &info, NULL);
+
+ return true;
}
uint32_t *
ply_image_get_data (ply_image_t *image)
{
- assert (image != NULL);
+ assert (image != NULL);
- return ply_pixel_buffer_get_argb32_data (image->buffer);
+ return ply_pixel_buffer_get_argb32_data (image->buffer);
}
long
ply_image_get_width (ply_image_t *image)
{
- ply_rectangle_t size;
-
- assert (image != NULL);
- ply_pixel_buffer_get_size (image->buffer, &size);
+ ply_rectangle_t size;
+
+ assert (image != NULL);
+ ply_pixel_buffer_get_size (image->buffer, &size);
- return size.width;
+ return size.width;
}
long
ply_image_get_height (ply_image_t *image)
{
- ply_rectangle_t size;
-
- assert (image != NULL);
- ply_pixel_buffer_get_size (image->buffer, &size);
+ ply_rectangle_t size;
- return size.height;
+ assert (image != NULL);
+ ply_pixel_buffer_get_size (image->buffer, &size);
+
+ return size.height;
}
ply_image_t *
@@ -227,14 +226,14 @@ ply_image_resize (ply_image_t *image,
long width,
long height)
{
- ply_image_t *new_image;
-
- new_image = ply_image_new (image->filename);
-
- new_image->buffer = ply_pixel_buffer_resize (image->buffer,
- width,
- height);
- return new_image;
+ ply_image_t *new_image;
+
+ new_image = ply_image_new (image->filename);
+
+ new_image->buffer = ply_pixel_buffer_resize (image->buffer,
+ width,
+ height);
+ return new_image;
}
ply_image_t *
@@ -243,15 +242,15 @@ ply_image_rotate (ply_image_t *image,
long center_y,
double theta_offset)
{
- ply_image_t *new_image;
-
- new_image = ply_image_new (image->filename);
-
- new_image->buffer = ply_pixel_buffer_rotate (image->buffer,
- center_x,
- center_y,
- theta_offset);
- return new_image;
+ ply_image_t *new_image;
+
+ new_image = ply_image_new (image->filename);
+
+ new_image->buffer = ply_pixel_buffer_rotate (image->buffer,
+ center_x,
+ center_y,
+ theta_offset);
+ return new_image;
}
ply_image_t *
@@ -259,36 +258,36 @@ ply_image_tile (ply_image_t *image,
long width,
long height)
{
- ply_image_t *new_image;
+ ply_image_t *new_image;
- new_image = ply_image_new (image->filename);
+ new_image = ply_image_new (image->filename);
- new_image->buffer = ply_pixel_buffer_tile (image->buffer,
- width,
- height);
- return new_image;
+ new_image->buffer = ply_pixel_buffer_tile (image->buffer,
+ width,
+ height);
+ return new_image;
}
ply_pixel_buffer_t *
ply_image_get_buffer (ply_image_t *image)
{
- assert (image != NULL);
+ assert (image != NULL);
- return image->buffer;
+ return image->buffer;
}
ply_pixel_buffer_t *
ply_image_convert_to_pixel_buffer (ply_image_t *image)
{
- ply_pixel_buffer_t *buffer;
+ ply_pixel_buffer_t *buffer;
+
+ assert (image != NULL);
- assert (image != NULL);
+ buffer = image->buffer;
+ image->buffer = NULL;
+ ply_image_free (image);
- buffer = image->buffer;
- image->buffer = NULL;
- ply_image_free (image);
-
- return buffer;
+ return buffer;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-image.h b/src/libply-splash-graphics/ply-image.h
index 5bda5674..fc2f45f7 100644
--- a/src/libply-splash-graphics/ply-image.h
+++ b/src/libply-splash-graphics/ply-image.h
@@ -1,4 +1,4 @@
-/* ply-image.h - png file loader
+/* ply-image.h - png file loader
*
* Copyright (C) 2007 Red Hat, Inc.
*
@@ -37,9 +37,16 @@ bool ply_image_load (ply_image_t *image);
uint32_t *ply_image_get_data (ply_image_t *image);
long ply_image_get_width (ply_image_t *image);
long ply_image_get_height (ply_image_t *image);
-ply_image_t *ply_image_resize (ply_image_t *image, long width, long height);
-ply_image_t *ply_image_rotate (ply_image_t *oldimage, long center_x, long center_y, double theta_offset);
-ply_image_t *ply_image_tile (ply_image_t *image, long width, long height);
+ply_image_t *ply_image_resize (ply_image_t *image,
+ long width,
+ long height);
+ply_image_t *ply_image_rotate (ply_image_t *oldimage,
+ long center_x,
+ long center_y,
+ double theta_offset);
+ply_image_t *ply_image_tile (ply_image_t *image,
+ long width,
+ long height);
ply_pixel_buffer_t *ply_image_get_buffer (ply_image_t *image);
ply_pixel_buffer_t *ply_image_convert_to_pixel_buffer (ply_image_t *image);
diff --git a/src/libply-splash-graphics/ply-label-plugin.h b/src/libply-splash-graphics/ply-label-plugin.h
index 9692d029..75bb9d7a 100644
--- a/src/libply-splash-graphics/ply-label-plugin.h
+++ b/src/libply-splash-graphics/ply-label-plugin.h
@@ -36,38 +36,38 @@ typedef struct _ply_label_plugin_control ply_label_plugin_control_t;
typedef struct
{
- ply_label_plugin_control_t * (* create_control) (void);
- void (* destroy_control) (ply_label_plugin_control_t *label);
- bool (* show_control) (ply_label_plugin_control_t *label,
- ply_pixel_display_t *display,
- long x,
- long y);
- void (* hide_control) (ply_label_plugin_control_t *label);
- void (* draw_control) (ply_label_plugin_control_t *label,
- ply_pixel_buffer_t *pixel_buffer,
- long x,
- long y,
- unsigned long width,
- unsigned long height);
- bool (* is_control_hidden) (ply_label_plugin_control_t *label);
+ ply_label_plugin_control_t * (*create_control)(void);
+ void (*destroy_control)(ply_label_plugin_control_t *label);
+ bool (*show_control)(ply_label_plugin_control_t *label,
+ ply_pixel_display_t *display,
+ long x,
+ long y);
+ void (*hide_control)(ply_label_plugin_control_t *label);
+ void (*draw_control)(ply_label_plugin_control_t *label,
+ ply_pixel_buffer_t *pixel_buffer,
+ long x,
+ long y,
+ unsigned long width,
+ unsigned long height);
+ bool (*is_control_hidden)(ply_label_plugin_control_t *label);
- void (* set_text_for_control) (ply_label_plugin_control_t *label,
- const char *text);
- void (* set_font_for_control) (ply_label_plugin_control_t *label,
- const char *fontdesc);
- void (* set_color_for_control) (ply_label_plugin_control_t *label,
- float red,
- float green,
- float blue,
- float alpha);
+ void (*set_text_for_control)(ply_label_plugin_control_t *label,
+ const char *text);
+ void (*set_font_for_control)(ply_label_plugin_control_t *label,
+ const char *fontdesc);
+ void (*set_color_for_control)(ply_label_plugin_control_t *label,
+ float red,
+ float green,
+ float blue,
+ float alpha);
- long (* get_width_of_control) (ply_label_plugin_control_t *label);
- long (* get_height_of_control) (ply_label_plugin_control_t *label);
+ long (*get_width_of_control)(ply_label_plugin_control_t *label);
+ long (*get_height_of_control)(ply_label_plugin_control_t *label);
- void (* set_alignment_for_control) (ply_label_plugin_control_t *label,
- ply_label_alignment_t alignment);
- void (* set_width_for_control) (ply_label_plugin_control_t *label,
- long width);
+ void (*set_alignment_for_control)(ply_label_plugin_control_t *label,
+ ply_label_alignment_t alignment);
+ void (*set_width_for_control)(ply_label_plugin_control_t *label,
+ long width);
} ply_label_plugin_interface_t;
#endif /* PLY_LABEL_PLUGIN_H */
diff --git a/src/libply-splash-graphics/ply-label.c b/src/libply-splash-graphics/ply-label.c
index c82a9d25..cfc8098b 100644
--- a/src/libply-splash-graphics/ply-label.c
+++ b/src/libply-splash-graphics/ply-label.c
@@ -40,147 +40,141 @@
struct _ply_label
{
- ply_event_loop_t *loop;
- ply_module_handle_t *module_handle;
- const ply_label_plugin_interface_t *plugin_interface;
- ply_label_plugin_control_t *control;
-
- char *text;
- ply_label_alignment_t alignment;
- long width;
- char *fontdesc;
- float red;
- float green;
- float blue;
- float alpha;
+ ply_event_loop_t *loop;
+ ply_module_handle_t *module_handle;
+ const ply_label_plugin_interface_t *plugin_interface;
+ ply_label_plugin_control_t *control;
+
+ char *text;
+ ply_label_alignment_t alignment;
+ long width;
+ char *fontdesc;
+ float red;
+ float green;
+ float blue;
+ float alpha;
};
typedef const ply_label_plugin_interface_t *
- (* get_plugin_interface_function_t) (void);
+(*get_plugin_interface_function_t) (void);
static void ply_label_unload_plugin (ply_label_t *label);
ply_label_t *
ply_label_new (void)
{
- ply_label_t *label;
-
- label = calloc (1, sizeof (struct _ply_label));
- label->red = 1;
- label->green = 1;
- label->blue = 1;
- label->alpha = 1;
- label->alignment = PLY_LABEL_ALIGN_LEFT;
- label->width = -1;
- return label;
+ ply_label_t *label;
+
+ label = calloc (1, sizeof(struct _ply_label));
+ label->red = 1;
+ label->green = 1;
+ label->blue = 1;
+ label->alpha = 1;
+ label->alignment = PLY_LABEL_ALIGN_LEFT;
+ label->width = -1;
+ return label;
}
void
ply_label_free (ply_label_t *label)
{
- if (label == NULL)
- return;
+ if (label == NULL)
+ return;
- if (label->plugin_interface != NULL)
- {
- ply_trace ("Unloading label control plugin");
- ply_label_unload_plugin (label);
- }
-
- free (label);
+ if (label->plugin_interface != NULL) {
+ ply_trace ("Unloading label control plugin");
+ ply_label_unload_plugin (label);
+ }
+ free (label);
}
static bool
ply_label_load_plugin (ply_label_t *label)
{
- assert (label != NULL);
-
- get_plugin_interface_function_t get_label_plugin_interface;
-
- label->module_handle = ply_open_module (PLYMOUTH_PLUGIN_PATH "label.so");
-
- if (label->module_handle == NULL)
- return false;
-
- get_label_plugin_interface = (get_plugin_interface_function_t)
- ply_module_look_up_function (label->module_handle,
- "ply_label_plugin_get_interface");
-
- if (get_label_plugin_interface == NULL)
- {
- ply_save_errno ();
- ply_close_module (label->module_handle);
- label->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
-
- label->plugin_interface = get_label_plugin_interface ();
-
- if (label->plugin_interface == NULL)
- {
- ply_save_errno ();
- ply_close_module (label->module_handle);
- label->module_handle = NULL;
- ply_restore_errno ();
- return false;
- }
-
- label->control = label->plugin_interface->create_control ();
-
- if (label->text != NULL)
- label->plugin_interface->set_text_for_control (label->control,
- label->text);
- label->plugin_interface->set_alignment_for_control (label->control,
- label->alignment);
- label->plugin_interface->set_width_for_control (label->control,
- label->width);
- if (label->fontdesc != NULL)
- label->plugin_interface->set_font_for_control (label->control,
- label->fontdesc);
-
- label->plugin_interface->set_color_for_control (label->control,
- label->red,
- label->green,
- label->blue,
- label->alpha);
- return true;
+ assert (label != NULL);
+
+ get_plugin_interface_function_t get_label_plugin_interface;
+
+ label->module_handle = ply_open_module (PLYMOUTH_PLUGIN_PATH "label.so");
+
+ if (label->module_handle == NULL)
+ return false;
+
+ get_label_plugin_interface = (get_plugin_interface_function_t)
+ ply_module_look_up_function (label->module_handle,
+ "ply_label_plugin_get_interface");
+
+ if (get_label_plugin_interface == NULL) {
+ ply_save_errno ();
+ ply_close_module (label->module_handle);
+ label->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
+
+ label->plugin_interface = get_label_plugin_interface ();
+
+ if (label->plugin_interface == NULL) {
+ ply_save_errno ();
+ ply_close_module (label->module_handle);
+ label->module_handle = NULL;
+ ply_restore_errno ();
+ return false;
+ }
+
+ label->control = label->plugin_interface->create_control ();
+
+ if (label->text != NULL)
+ label->plugin_interface->set_text_for_control (label->control,
+ label->text);
+ label->plugin_interface->set_alignment_for_control (label->control,
+ label->alignment);
+ label->plugin_interface->set_width_for_control (label->control,
+ label->width);
+ if (label->fontdesc != NULL)
+ label->plugin_interface->set_font_for_control (label->control,
+ label->fontdesc);
+
+ label->plugin_interface->set_color_for_control (label->control,
+ label->red,
+ label->green,
+ label->blue,
+ label->alpha);
+ return true;
}
static void
ply_label_unload_plugin (ply_label_t *label)
{
- assert (label != NULL);
- assert (label->plugin_interface != NULL);
- assert (label->module_handle != NULL);
+ assert (label != NULL);
+ assert (label->plugin_interface != NULL);
+ assert (label->module_handle != NULL);
- ply_close_module (label->module_handle);
- label->plugin_interface = NULL;
- label->module_handle = NULL;
+ ply_close_module (label->module_handle);
+ label->plugin_interface = NULL;
+ label->module_handle = NULL;
}
bool
-ply_label_show (ply_label_t *label,
+ply_label_show (ply_label_t *label,
ply_pixel_display_t *display,
- long x,
- long y)
+ long x,
+ long y)
{
- if (label->plugin_interface == NULL)
- {
- if (!ply_label_load_plugin (label))
- return false;
- }
-
- return label->plugin_interface->show_control (label->control,
- display, x, y);
+ if (label->plugin_interface == NULL)
+ if (!ply_label_load_plugin (label))
+ return false;
+
+ return label->plugin_interface->show_control (label->control,
+ display, x, y);
}
void
ply_label_draw (ply_label_t *label)
{
- if (label->plugin_interface == NULL)
- return;
+ if (label->plugin_interface == NULL)
+ return;
}
void
@@ -191,71 +185,70 @@ ply_label_draw_area (ply_label_t *label,
unsigned long width,
unsigned long height)
{
- if (label->plugin_interface == NULL)
- return;
+ if (label->plugin_interface == NULL)
+ return;
- label->plugin_interface->draw_control (label->control,
- buffer,
- x, y, width, height);
+ label->plugin_interface->draw_control (label->control,
+ buffer,
+ x, y, width, height);
}
void
ply_label_hide (ply_label_t *label)
{
- if (label->plugin_interface == NULL)
- return;
+ if (label->plugin_interface == NULL)
+ return;
- label->plugin_interface->hide_control (label->control);
+ label->plugin_interface->hide_control (label->control);
}
bool
ply_label_is_hidden (ply_label_t *label)
{
- if (label->plugin_interface == NULL)
- return true;
+ if (label->plugin_interface == NULL)
+ return true;
- return label->plugin_interface->is_control_hidden (label->control);
+ return label->plugin_interface->is_control_hidden (label->control);
}
void
ply_label_set_text (ply_label_t *label,
const char *text)
{
+ free (label->text);
+ label->text = strdup (text);
- free (label->text);
- label->text = strdup (text);
+ if (label->plugin_interface == NULL)
+ return;
- if (label->plugin_interface == NULL)
- return;
-
- label->plugin_interface->set_text_for_control (label->control,
- text);
+ label->plugin_interface->set_text_for_control (label->control,
+ text);
}
void
-ply_label_set_alignment (ply_label_t *label,
- ply_label_alignment_t alignment)
+ply_label_set_alignment (ply_label_t *label,
+ ply_label_alignment_t alignment)
{
- label->alignment = alignment;
+ label->alignment = alignment;
- if (label->plugin_interface == NULL)
- return;
+ if (label->plugin_interface == NULL)
+ return;
- label->plugin_interface->set_alignment_for_control (label->control,
- alignment);
+ label->plugin_interface->set_alignment_for_control (label->control,
+ alignment);
}
void
-ply_label_set_width (ply_label_t *label,
- long width)
+ply_label_set_width (ply_label_t *label,
+ long width)
{
- label->width = width;
+ label->width = width;
- if (label->plugin_interface == NULL)
- return;
+ if (label->plugin_interface == NULL)
+ return;
- label->plugin_interface->set_width_for_control (label->control,
- width);
+ label->plugin_interface->set_width_for_control (label->control,
+ width);
}
/*
@@ -267,18 +260,17 @@ void
ply_label_set_font (ply_label_t *label,
const char *fontdesc)
{
+ free (label->fontdesc);
+ if (fontdesc)
+ label->fontdesc = strdup (fontdesc);
+ else
+ label->fontdesc = NULL;
- free (label->fontdesc);
- if (fontdesc)
- label->fontdesc = strdup (fontdesc);
- else
- label->fontdesc = NULL;
-
- if (label->plugin_interface == NULL)
- return;
+ if (label->plugin_interface == NULL)
+ return;
- label->plugin_interface->set_font_for_control (label->control,
- fontdesc);
+ label->plugin_interface->set_font_for_control (label->control,
+ fontdesc);
}
void
@@ -288,36 +280,36 @@ ply_label_set_color (ply_label_t *label,
float blue,
float alpha)
{
- label->red = red;
- label->green = green;
- label->blue = blue;
- label->alpha = alpha;
-
- if (label->plugin_interface == NULL)
- return;
-
- label->plugin_interface->set_color_for_control (label->control,
- red,
- green,
- blue,
- alpha);
+ label->red = red;
+ label->green = green;
+ label->blue = blue;
+ label->alpha = alpha;
+
+ if (label->plugin_interface == NULL)
+ return;
+
+ label->plugin_interface->set_color_for_control (label->control,
+ red,
+ green,
+ blue,
+ alpha);
}
long
ply_label_get_width (ply_label_t *label)
{
- if (label->plugin_interface == NULL)
- return 0;
+ if (label->plugin_interface == NULL)
+ return 0;
- return label->plugin_interface->get_width_of_control (label->control);
+ return label->plugin_interface->get_width_of_control (label->control);
}
long
ply_label_get_height (ply_label_t *label)
{
- if (label->plugin_interface == NULL)
- return 0;
+ if (label->plugin_interface == NULL)
+ return 0;
- return label->plugin_interface->get_height_of_control (label->control);
+ return label->plugin_interface->get_height_of_control (label->control);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-label.h b/src/libply-splash-graphics/ply-label.h
index ecafb713..05061bbc 100644
--- a/src/libply-splash-graphics/ply-label.h
+++ b/src/libply-splash-graphics/ply-label.h
@@ -32,23 +32,24 @@
typedef struct _ply_label ply_label_t;
-typedef enum {
- PLY_LABEL_ALIGN_LEFT,
- PLY_LABEL_ALIGN_CENTER,
- PLY_LABEL_ALIGN_RIGHT
+typedef enum
+{
+ PLY_LABEL_ALIGN_LEFT,
+ PLY_LABEL_ALIGN_CENTER,
+ PLY_LABEL_ALIGN_RIGHT
} ply_label_alignment_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_label_t *ply_label_new (void);
void ply_label_free (ply_label_t *label);
-bool ply_label_show (ply_label_t *label,
+bool ply_label_show (ply_label_t *label,
ply_pixel_display_t *display,
- long x,
- long y);
+ long x,
+ long y);
void ply_label_hide (ply_label_t *label);
-void ply_label_draw (ply_label_t *label);
+void ply_label_draw (ply_label_t *label);
void ply_label_draw_area (ply_label_t *label,
ply_pixel_buffer_t *buffer,
long x,
@@ -59,10 +60,10 @@ bool ply_label_is_hidden (ply_label_t *label);
void ply_label_set_text (ply_label_t *label,
const char *text);
-void ply_label_set_alignment (ply_label_t *label,
- ply_label_alignment_t alignment);
-void ply_label_set_width (ply_label_t *label,
- long width);
+void ply_label_set_alignment (ply_label_t *label,
+ ply_label_alignment_t alignment);
+void ply_label_set_width (ply_label_t *label,
+ long width);
void ply_label_set_font (ply_label_t *label,
const char *fontdesc);
void ply_label_set_color (ply_label_t *label,
diff --git a/src/libply-splash-graphics/ply-progress-animation.c b/src/libply-splash-graphics/ply-progress-animation.c
index 2605f6d2..bcbca3fc 100644
--- a/src/libply-splash-graphics/ply-progress-animation.c
+++ b/src/libply-splash-graphics/ply-progress-animation.c
@@ -51,138 +51,136 @@
struct _ply_progress_animation
{
- ply_array_t *frames;
- char *image_dir;
- char *frames_prefix;
+ ply_array_t *frames;
+ char *image_dir;
+ char *frames_prefix;
- ply_progress_animation_transition_t transition;
- double transition_duration;
+ ply_progress_animation_transition_t transition;
+ double transition_duration;
- ply_pixel_display_t *display;
- ply_rectangle_t area;
- ply_rectangle_t frame_area;
+ ply_pixel_display_t *display;
+ ply_rectangle_t area;
+ ply_rectangle_t frame_area;
- double percent_done;
- int previous_frame_number;
+ double percent_done;
+ int previous_frame_number;
- double transition_start_time;
+ double transition_start_time;
- ply_pixel_buffer_t *last_rendered_frame;
+ ply_pixel_buffer_t *last_rendered_frame;
- uint32_t is_hidden : 1;
- uint32_t is_transitioning : 1;
+ uint32_t is_hidden : 1;
+ uint32_t is_transitioning : 1;
};
ply_progress_animation_t *
ply_progress_animation_new (const char *image_dir,
const char *frames_prefix)
{
- ply_progress_animation_t *progress_animation;
-
- assert (image_dir != NULL);
- assert (frames_prefix != NULL);
-
- progress_animation = calloc (1, sizeof (ply_progress_animation_t));
-
- progress_animation->frames = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
- progress_animation->frames_prefix = strdup (frames_prefix);
- progress_animation->image_dir = strdup (image_dir);
- progress_animation->is_hidden = true;
- progress_animation->percent_done = 0.0;
- progress_animation->area.x = 0;
- progress_animation->area.y = 0;
- progress_animation->area.width = 0;
- progress_animation->area.height = 0;
- progress_animation->frame_area.x = 0;
- progress_animation->frame_area.y = 0;
- progress_animation->frame_area.width = 0;
- progress_animation->frame_area.height = 0;
- progress_animation->previous_frame_number = 0;
- progress_animation->last_rendered_frame = NULL;
-
- return progress_animation;
+ ply_progress_animation_t *progress_animation;
+
+ assert (image_dir != NULL);
+ assert (frames_prefix != NULL);
+
+ progress_animation = calloc (1, sizeof(ply_progress_animation_t));
+
+ progress_animation->frames = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
+ progress_animation->frames_prefix = strdup (frames_prefix);
+ progress_animation->image_dir = strdup (image_dir);
+ progress_animation->is_hidden = true;
+ progress_animation->percent_done = 0.0;
+ progress_animation->area.x = 0;
+ progress_animation->area.y = 0;
+ progress_animation->area.width = 0;
+ progress_animation->area.height = 0;
+ progress_animation->frame_area.x = 0;
+ progress_animation->frame_area.y = 0;
+ progress_animation->frame_area.width = 0;
+ progress_animation->frame_area.height = 0;
+ progress_animation->previous_frame_number = 0;
+ progress_animation->last_rendered_frame = NULL;
+
+ return progress_animation;
}
void
-ply_progress_animation_set_transition (ply_progress_animation_t *progress_animation,
+ply_progress_animation_set_transition (ply_progress_animation_t *progress_animation,
ply_progress_animation_transition_t transition,
- double duration)
+ double duration)
{
- progress_animation->transition = transition;
- progress_animation->transition_duration = duration;
+ progress_animation->transition = transition;
+ progress_animation->transition_duration = duration;
}
static void
ply_progress_animation_remove_frames (ply_progress_animation_t *progress_animation)
{
- int i;
- ply_image_t **frames;
+ int i;
+ ply_image_t **frames;
- frames = (ply_image_t **) ply_array_steal_pointer_elements (progress_animation->frames);
- for (i = 0; frames[i] != NULL; i++)
- ply_image_free (frames[i]);
- free (frames);
+ frames = (ply_image_t **) ply_array_steal_pointer_elements (progress_animation->frames);
+ for (i = 0; frames[i] != NULL; i++) {
+ ply_image_free (frames[i]);
+ }
+ free (frames);
}
void
ply_progress_animation_free (ply_progress_animation_t *progress_animation)
{
- if (progress_animation == NULL)
- return;
+ if (progress_animation == NULL)
+ return;
- ply_progress_animation_remove_frames (progress_animation);
- ply_array_free (progress_animation->frames);
+ ply_progress_animation_remove_frames (progress_animation);
+ ply_array_free (progress_animation->frames);
- free (progress_animation->frames_prefix);
- free (progress_animation->image_dir);
- free (progress_animation);
+ free (progress_animation->frames_prefix);
+ free (progress_animation->image_dir);
+ free (progress_animation);
}
static void
-image_fade_merge (ply_image_t* frame0,
- ply_image_t* frame1,
+image_fade_merge (ply_image_t *frame0,
+ ply_image_t *frame1,
float fade,
int width,
int height,
uint32_t *reply_data)
{
- int frame0_width = ply_image_get_width (frame0);
- int frame0_height = ply_image_get_height (frame0);
- int frame1_width = ply_image_get_width (frame1);
- int frame1_height = ply_image_get_height (frame1);
-
- uint32_t *frame0_data = ply_image_get_data (frame0);
- uint32_t *frame1_data = ply_image_get_data (frame1);
-
- int x, y, i;
-
- for (y = 0; y < height; y++)
- {
- for (x = 0; x < width; x++)
- {
- uint32_t pixel0, pixel1, pixelout;
-
- if (y < frame0_height && x < frame0_width)
- pixel0 = frame0_data[y*frame0_width+x];
- else
- pixel0 = 0;
-
- if (y < frame1_height && x < frame1_width)
- pixel1 = frame1_data[y*frame1_width+x];
- else
- pixel1 = 0;
-
- pixelout = 0;
- for (i = 0; i < 4; i++)
- {
- int subval0 = (pixel0 >> (i * 8)) & 0xFF;
- int subval1 = (pixel1 >> (i * 8)) & 0xFF;
- int subvalout = subval0 * (1-fade) + subval1 * fade;
- pixelout |= (subvalout & 0xFF) << (i * 8);
- }
- reply_data[y*width+x] = pixelout;
+ int frame0_width = ply_image_get_width (frame0);
+ int frame0_height = ply_image_get_height (frame0);
+ int frame1_width = ply_image_get_width (frame1);
+ int frame1_height = ply_image_get_height (frame1);
+
+ uint32_t *frame0_data = ply_image_get_data (frame0);
+ uint32_t *frame1_data = ply_image_get_data (frame1);
+
+ int x, y, i;
+
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ uint32_t pixel0, pixel1, pixelout;
+
+ if (y < frame0_height && x < frame0_width)
+ pixel0 = frame0_data[y * frame0_width + x];
+ else
+ pixel0 = 0;
+
+ if (y < frame1_height && x < frame1_width)
+ pixel1 = frame1_data[y * frame1_width + x];
+ else
+ pixel1 = 0;
+
+ pixelout = 0;
+ for (i = 0; i < 4; i++) {
+ int subval0 = (pixel0 >> (i * 8)) & 0xFF;
+ int subval1 = (pixel1 >> (i * 8)) & 0xFF;
+ int subvalout = subval0 * (1 - fade) + subval1 * fade;
+ pixelout |= (subvalout & 0xFF) << (i * 8);
+ }
+ reply_data[y * width + x] = pixelout;
+ }
}
- }
}
void
@@ -193,234 +191,216 @@ ply_progress_animation_draw_area (ply_progress_animation_t *progress_animation,
unsigned long width,
unsigned long height)
{
- if (progress_animation->is_hidden)
- return;
+ if (progress_animation->is_hidden)
+ return;
- ply_pixel_buffer_fill_with_buffer (buffer,
- progress_animation->last_rendered_frame,
- progress_animation->frame_area.x,
- progress_animation->frame_area.y);
+ ply_pixel_buffer_fill_with_buffer (buffer,
+ progress_animation->last_rendered_frame,
+ progress_animation->frame_area.x,
+ progress_animation->frame_area.y);
}
void
ply_progress_animation_draw (ply_progress_animation_t *progress_animation)
{
- int number_of_frames;
- int frame_number;
- ply_image_t * const * frames;
- ply_pixel_buffer_t *previous_frame_buffer, *current_frame_buffer;
-
- if (progress_animation->is_hidden)
- return;
-
- number_of_frames = ply_array_get_size (progress_animation->frames);
-
- if (number_of_frames == 0)
- return;
-
- frame_number = progress_animation->percent_done * (number_of_frames - 1);
-
- if (progress_animation->previous_frame_number != frame_number &&
- progress_animation->transition != PLY_PROGRESS_ANIMATION_TRANSITION_NONE &&
- progress_animation->transition_duration > 0.0)
- {
- progress_animation->is_transitioning = true;
- progress_animation->transition_start_time = ply_get_timestamp ();
- }
-
- frames = (ply_image_t * const *) ply_array_get_pointer_elements (progress_animation->frames);
-
- progress_animation->frame_area.x = progress_animation->area.x;
- progress_animation->frame_area.y = progress_animation->area.y;
- current_frame_buffer = ply_image_get_buffer (frames[frame_number]);
-
- if (progress_animation->is_transitioning)
- {
- double now;
- double fade_percentage;
- double fade_out_opacity;
- int width, height;
- uint32_t* faded_data;
- now = ply_get_timestamp ();
-
- fade_percentage = (now - progress_animation->transition_start_time) / progress_animation->transition_duration;
-
- if (fade_percentage >= 1.0)
- progress_animation->is_transitioning = false;
- fade_percentage = CLAMP (fade_percentage, 0.0, 1.0);
-
- if (progress_animation->transition == PLY_PROGRESS_ANIMATION_TRANSITION_MERGE_FADE)
- {
- width = MAX(ply_image_get_width (frames[frame_number]), ply_image_get_width (frames[frame_number - 1]));
- height = MAX(ply_image_get_height (frames[frame_number]), ply_image_get_height (frames[frame_number - 1]));
- progress_animation->frame_area.width = width;
- progress_animation->frame_area.height = height;
-
- ply_pixel_buffer_free (progress_animation->last_rendered_frame);
- progress_animation->last_rendered_frame = ply_pixel_buffer_new (width, height);
- faded_data = ply_pixel_buffer_get_argb32_data (progress_animation->last_rendered_frame);
-
- image_fade_merge (frames[frame_number - 1], frames[frame_number], fade_percentage, width, height, faded_data);
+ int number_of_frames;
+ int frame_number;
+ ply_image_t *const *frames;
+ ply_pixel_buffer_t *previous_frame_buffer, *current_frame_buffer;
+
+ if (progress_animation->is_hidden)
+ return;
+
+ number_of_frames = ply_array_get_size (progress_animation->frames);
+
+ if (number_of_frames == 0)
+ return;
+
+ frame_number = progress_animation->percent_done * (number_of_frames - 1);
+
+ if (progress_animation->previous_frame_number != frame_number &&
+ progress_animation->transition != PLY_PROGRESS_ANIMATION_TRANSITION_NONE &&
+ progress_animation->transition_duration > 0.0) {
+ progress_animation->is_transitioning = true;
+ progress_animation->transition_start_time = ply_get_timestamp ();
}
- else
- {
- previous_frame_buffer = ply_image_get_buffer (frames[frame_number - 1]);
- if (progress_animation->transition == PLY_PROGRESS_ANIMATION_TRANSITION_FADE_OVER)
- {
- ply_pixel_buffer_free (progress_animation->last_rendered_frame);
- progress_animation->last_rendered_frame = ply_pixel_buffer_new (ply_image_get_width (frames[frame_number - 1]),
- ply_image_get_height (frames[frame_number - 1]));
- ply_pixel_buffer_fill_with_buffer (progress_animation->last_rendered_frame,
- previous_frame_buffer,
- 0,
- 0);
- }
- else
- {
- fade_out_opacity = 1.0 - fade_percentage;
- ply_pixel_buffer_fill_with_buffer_at_opacity (progress_animation->last_rendered_frame,
- previous_frame_buffer,
- 0,
- 0,
- fade_out_opacity);
- }
-
- ply_pixel_buffer_fill_with_buffer_at_opacity (progress_animation->last_rendered_frame,
- current_frame_buffer,
- 0,
- 0,
- fade_percentage);
-
- width = MAX(ply_image_get_width (frames[frame_number]), ply_image_get_width (frames[frame_number - 1]));
- height = MAX(ply_image_get_height (frames[frame_number]), ply_image_get_height (frames[frame_number - 1]));
- progress_animation->frame_area.width = width;
- progress_animation->frame_area.height = height;
+
+ frames = (ply_image_t *const *) ply_array_get_pointer_elements (progress_animation->frames);
+
+ progress_animation->frame_area.x = progress_animation->area.x;
+ progress_animation->frame_area.y = progress_animation->area.y;
+ current_frame_buffer = ply_image_get_buffer (frames[frame_number]);
+
+ if (progress_animation->is_transitioning) {
+ double now;
+ double fade_percentage;
+ double fade_out_opacity;
+ int width, height;
+ uint32_t *faded_data;
+ now = ply_get_timestamp ();
+
+ fade_percentage = (now - progress_animation->transition_start_time) / progress_animation->transition_duration;
+
+ if (fade_percentage >= 1.0)
+ progress_animation->is_transitioning = false;
+ fade_percentage = CLAMP (fade_percentage, 0.0, 1.0);
+
+ if (progress_animation->transition == PLY_PROGRESS_ANIMATION_TRANSITION_MERGE_FADE) {
+ width = MAX (ply_image_get_width (frames[frame_number]), ply_image_get_width (frames[frame_number - 1]));
+ height = MAX (ply_image_get_height (frames[frame_number]), ply_image_get_height (frames[frame_number - 1]));
+ progress_animation->frame_area.width = width;
+ progress_animation->frame_area.height = height;
+
+ ply_pixel_buffer_free (progress_animation->last_rendered_frame);
+ progress_animation->last_rendered_frame = ply_pixel_buffer_new (width, height);
+ faded_data = ply_pixel_buffer_get_argb32_data (progress_animation->last_rendered_frame);
+
+ image_fade_merge (frames[frame_number - 1], frames[frame_number], fade_percentage, width, height, faded_data);
+ } else {
+ previous_frame_buffer = ply_image_get_buffer (frames[frame_number - 1]);
+ if (progress_animation->transition == PLY_PROGRESS_ANIMATION_TRANSITION_FADE_OVER) {
+ ply_pixel_buffer_free (progress_animation->last_rendered_frame);
+ progress_animation->last_rendered_frame = ply_pixel_buffer_new (ply_image_get_width (frames[frame_number - 1]),
+ ply_image_get_height (frames[frame_number - 1]));
+ ply_pixel_buffer_fill_with_buffer (progress_animation->last_rendered_frame,
+ previous_frame_buffer,
+ 0,
+ 0);
+ } else {
+ fade_out_opacity = 1.0 - fade_percentage;
+ ply_pixel_buffer_fill_with_buffer_at_opacity (progress_animation->last_rendered_frame,
+ previous_frame_buffer,
+ 0,
+ 0,
+ fade_out_opacity);
+ }
+
+ ply_pixel_buffer_fill_with_buffer_at_opacity (progress_animation->last_rendered_frame,
+ current_frame_buffer,
+ 0,
+ 0,
+ fade_percentage);
+
+ width = MAX (ply_image_get_width (frames[frame_number]), ply_image_get_width (frames[frame_number - 1]));
+ height = MAX (ply_image_get_height (frames[frame_number]), ply_image_get_height (frames[frame_number - 1]));
+ progress_animation->frame_area.width = width;
+ progress_animation->frame_area.height = height;
+ }
+ } else {
+ ply_pixel_buffer_free (progress_animation->last_rendered_frame);
+ progress_animation->frame_area.width = ply_image_get_width (frames[frame_number]);
+ progress_animation->frame_area.height = ply_image_get_height (frames[frame_number]);
+ progress_animation->last_rendered_frame = ply_pixel_buffer_new (progress_animation->frame_area.width,
+ progress_animation->frame_area.height);
+
+ ply_pixel_buffer_fill_with_buffer (progress_animation->last_rendered_frame,
+ current_frame_buffer,
+ 0,
+ 0);
}
- }
- else
- {
- ply_pixel_buffer_free (progress_animation->last_rendered_frame);
- progress_animation->frame_area.width = ply_image_get_width (frames[frame_number]);
- progress_animation->frame_area.height = ply_image_get_height (frames[frame_number]);
- progress_animation->last_rendered_frame = ply_pixel_buffer_new (progress_animation->frame_area.width,
- progress_animation->frame_area.height);
-
- ply_pixel_buffer_fill_with_buffer (progress_animation->last_rendered_frame,
- current_frame_buffer,
- 0,
- 0);
- }
-
- progress_animation->previous_frame_number = frame_number;
-
- ply_pixel_display_draw_area (progress_animation->display,
- progress_animation->frame_area.x,
- progress_animation->frame_area.y,
- progress_animation->frame_area.width,
- progress_animation->frame_area.height);
+
+ progress_animation->previous_frame_number = frame_number;
+
+ ply_pixel_display_draw_area (progress_animation->display,
+ progress_animation->frame_area.x,
+ progress_animation->frame_area.y,
+ progress_animation->frame_area.width,
+ progress_animation->frame_area.height);
}
static bool
ply_progress_animation_add_frame (ply_progress_animation_t *progress_animation,
const char *filename)
{
- ply_image_t *image;
+ ply_image_t *image;
- image = ply_image_new (filename);
+ image = ply_image_new (filename);
- if (!ply_image_load (image))
- {
- ply_image_free (image);
- return false;
- }
+ if (!ply_image_load (image)) {
+ ply_image_free (image);
+ return false;
+ }
- ply_array_add_pointer_element (progress_animation->frames, image);
+ ply_array_add_pointer_element (progress_animation->frames, image);
- progress_animation->area.width = MAX (progress_animation->area.width, (size_t) ply_image_get_width (image));
- progress_animation->area.height = MAX (progress_animation->area.height, (size_t) ply_image_get_height (image));
+ progress_animation->area.width = MAX (progress_animation->area.width, (size_t) ply_image_get_width (image));
+ progress_animation->area.height = MAX (progress_animation->area.height, (size_t) ply_image_get_height (image));
- return true;
+ return true;
}
static bool
ply_progress_animation_add_frames (ply_progress_animation_t *progress_animation)
{
- struct dirent **entries;
- int number_of_entries;
- int number_of_frames;
- int i;
- bool load_finished;
-
- entries = NULL;
-
- number_of_entries = scandir (progress_animation->image_dir, &entries, NULL, versionsort);
-
- if (number_of_entries < 0)
- return false;
-
- load_finished = false;
- for (i = 0; i < number_of_entries; i++)
- {
- if (strncmp (entries[i]->d_name,
- progress_animation->frames_prefix,
- strlen (progress_animation->frames_prefix)) == 0
- && (strlen (entries[i]->d_name) > 4)
- && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0)
- {
- char *filename;
- bool r;
-
- filename = NULL;
- asprintf (&filename, "%s/%s", progress_animation->image_dir, entries[i]->d_name);
-
- r = ply_progress_animation_add_frame (progress_animation, filename);
- free (filename);
- if (!r)
- goto out;
+ struct dirent **entries;
+ int number_of_entries;
+ int number_of_frames;
+ int i;
+ bool load_finished;
+
+ entries = NULL;
+
+ number_of_entries = scandir (progress_animation->image_dir, &entries, NULL, versionsort);
+
+ if (number_of_entries < 0)
+ return false;
+
+ load_finished = false;
+ for (i = 0; i < number_of_entries; i++) {
+ if (strncmp (entries[i]->d_name,
+ progress_animation->frames_prefix,
+ strlen (progress_animation->frames_prefix)) == 0
+ && (strlen (entries[i]->d_name) > 4)
+ && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0) {
+ char *filename;
+ bool r;
+
+ filename = NULL;
+ asprintf (&filename, "%s/%s", progress_animation->image_dir, entries[i]->d_name);
+
+ r = ply_progress_animation_add_frame (progress_animation, filename);
+ free (filename);
+ if (!r)
+ goto out;
+ }
+
+ free (entries[i]);
+ entries[i] = NULL;
}
- free (entries[i]);
- entries[i] = NULL;
- }
-
- number_of_frames = ply_array_get_size (progress_animation->frames);
- if (number_of_frames == 0)
- {
- ply_trace ("could not find any progress animation frames");
- load_finished = false;
- }
- else
- {
- ply_trace ("found %d progress animation frames", number_of_frames);
- load_finished = true;
- }
+ number_of_frames = ply_array_get_size (progress_animation->frames);
+ if (number_of_frames == 0) {
+ ply_trace ("could not find any progress animation frames");
+ load_finished = false;
+ } else {
+ ply_trace ("found %d progress animation frames", number_of_frames);
+ load_finished = true;
+ }
out:
- if (!load_finished)
- {
- ply_progress_animation_remove_frames (progress_animation);
-
- while (i < number_of_entries)
- {
- free (entries[i]);
- i++;
+ if (!load_finished) {
+ ply_progress_animation_remove_frames (progress_animation);
+
+ while (i < number_of_entries) {
+ free (entries[i]);
+ i++;
+ }
}
- }
- free (entries);
+ free (entries);
- return load_finished;
+ return load_finished;
}
bool
ply_progress_animation_load (ply_progress_animation_t *progress_animation)
{
- if (ply_array_get_size (progress_animation->frames) != 0)
- ply_progress_animation_remove_frames (progress_animation);
+ if (ply_array_get_size (progress_animation->frames) != 0)
+ ply_progress_animation_remove_frames (progress_animation);
- if (!ply_progress_animation_add_frames (progress_animation))
- return false;
+ if (!ply_progress_animation_add_frames (progress_animation))
+ return false;
- return true;
+ return true;
}
void
@@ -429,65 +409,64 @@ ply_progress_animation_show (ply_progress_animation_t *progress_animation,
long x,
long y)
{
- assert (progress_animation != NULL);
+ assert (progress_animation != NULL);
- progress_animation->display = display;
+ progress_animation->display = display;
- progress_animation->area.x = x;
- progress_animation->area.y = y;
+ progress_animation->area.x = x;
+ progress_animation->area.y = y;
- progress_animation->is_hidden = false;
- ply_progress_animation_draw (progress_animation);
+ progress_animation->is_hidden = false;
+ ply_progress_animation_draw (progress_animation);
}
void
ply_progress_animation_hide (ply_progress_animation_t *progress_animation)
{
- if (progress_animation->is_hidden)
- return;
-
- progress_animation->is_hidden = true;
- if (progress_animation->frame_area.width > 0)
- {
- ply_pixel_display_draw_area (progress_animation->display,
- progress_animation->area.x, progress_animation->area.y,
- progress_animation->frame_area.width,
- progress_animation->frame_area.height);
- }
-
- progress_animation->display = NULL;
+ if (progress_animation->is_hidden)
+ return;
+
+ progress_animation->is_hidden = true;
+ if (progress_animation->frame_area.width > 0) {
+ ply_pixel_display_draw_area (progress_animation->display,
+ progress_animation->area.x, progress_animation->area.y,
+ progress_animation->frame_area.width,
+ progress_animation->frame_area.height);
+ }
+
+ progress_animation->display = NULL;
}
bool
ply_progress_animation_is_hidden (ply_progress_animation_t *progress_animation)
{
- return progress_animation->is_hidden;
+ return progress_animation->is_hidden;
}
long
ply_progress_animation_get_width (ply_progress_animation_t *progress_animation)
{
- return progress_animation->area.width;
+ return progress_animation->area.width;
}
long
ply_progress_animation_get_height (ply_progress_animation_t *progress_animation)
{
- return progress_animation->area.height;
+ return progress_animation->area.height;
}
void
ply_progress_animation_set_percent_done (ply_progress_animation_t *progress_animation,
- double percent_done)
+ double percent_done)
{
- progress_animation->percent_done = percent_done;
- ply_progress_animation_draw (progress_animation);
+ progress_animation->percent_done = percent_done;
+ ply_progress_animation_draw (progress_animation);
}
double
ply_progress_animation_get_percent_done (ply_progress_animation_t *progress_animation)
{
- return progress_animation->percent_done;
+ return progress_animation->percent_done;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-progress-animation.h b/src/libply-splash-graphics/ply-progress-animation.h
index 274bd1c5..d10c5172 100644
--- a/src/libply-splash-graphics/ply-progress-animation.h
+++ b/src/libply-splash-graphics/ply-progress-animation.h
@@ -32,10 +32,10 @@ typedef struct _ply_progress_animation ply_progress_animation_t;
typedef enum
{
- PLY_PROGRESS_ANIMATION_TRANSITION_NONE,
- PLY_PROGRESS_ANIMATION_TRANSITION_FADE_OVER,
- PLY_PROGRESS_ANIMATION_TRANSITION_CROSS_FADE,
- PLY_PROGRESS_ANIMATION_TRANSITION_MERGE_FADE,
+ PLY_PROGRESS_ANIMATION_TRANSITION_NONE,
+ PLY_PROGRESS_ANIMATION_TRANSITION_FADE_OVER,
+ PLY_PROGRESS_ANIMATION_TRANSITION_CROSS_FADE,
+ PLY_PROGRESS_ANIMATION_TRANSITION_MERGE_FADE,
} ply_progress_animation_transition_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
@@ -44,9 +44,9 @@ ply_progress_animation_t *ply_progress_animation_new (const char *image_dir,
void ply_progress_animation_free (ply_progress_animation_t *progress_animation);
bool ply_progress_animation_load (ply_progress_animation_t *progress_animation);
-void ply_progress_animation_set_transition (ply_progress_animation_t *progress_animation,
+void ply_progress_animation_set_transition (ply_progress_animation_t *progress_animation,
ply_progress_animation_transition_t transition,
- double duration);
+ double duration);
void ply_progress_animation_show (ply_progress_animation_t *progress_animation,
ply_pixel_display_t *display,
long x,
diff --git a/src/libply-splash-graphics/ply-progress-bar.c b/src/libply-splash-graphics/ply-progress-bar.c
index 12ca46a9..c0b5f9a0 100644
--- a/src/libply-splash-graphics/ply-progress-bar.c
+++ b/src/libply-splash-graphics/ply-progress-bar.c
@@ -60,37 +60,37 @@
struct _ply_progress_bar
{
- ply_pixel_display_t *display;
- ply_rectangle_t area;
+ ply_pixel_display_t *display;
+ ply_rectangle_t area;
- double percent_done;
+ double percent_done;
- uint32_t is_hidden : 1;
+ uint32_t is_hidden : 1;
};
ply_progress_bar_t *
ply_progress_bar_new (void)
{
- ply_progress_bar_t *progress_bar;
+ ply_progress_bar_t *progress_bar;
- progress_bar = calloc (1, sizeof (ply_progress_bar_t));
+ progress_bar = calloc (1, sizeof(ply_progress_bar_t));
- progress_bar->is_hidden = true;
- progress_bar->percent_done = 0.0;
- progress_bar->area.x = 0;
- progress_bar->area.y = 0;
- progress_bar->area.width = 0;
- progress_bar->area.height = BAR_HEIGHT;
+ progress_bar->is_hidden = true;
+ progress_bar->percent_done = 0.0;
+ progress_bar->area.x = 0;
+ progress_bar->area.y = 0;
+ progress_bar->area.width = 0;
+ progress_bar->area.height = BAR_HEIGHT;
- return progress_bar;
+ return progress_bar;
}
void
ply_progress_bar_free (ply_progress_bar_t *progress_bar)
{
- if (progress_bar == NULL)
- return;
- free (progress_bar);
+ if (progress_bar == NULL)
+ return;
+ free (progress_bar);
}
static void
@@ -98,14 +98,14 @@ ply_progress_bar_update_area (ply_progress_bar_t *progress_bar,
long x,
long y)
{
- unsigned long display_width;
+ unsigned long display_width;
- progress_bar->area.x = x;
- progress_bar->area.y = y;
- progress_bar->area.height = BAR_HEIGHT;
+ progress_bar->area.x = x;
+ progress_bar->area.y = y;
+ progress_bar->area.height = BAR_HEIGHT;
- display_width = ply_pixel_display_get_width (progress_bar->display);
- progress_bar->area.width = (long) (display_width * progress_bar->percent_done);
+ display_width = ply_pixel_display_get_width (progress_bar->display);
+ progress_bar->area.width = (long) (display_width * progress_bar->percent_done);
}
void
@@ -116,34 +116,34 @@ ply_progress_bar_draw_area (ply_progress_bar_t *progress_bar,
unsigned long width,
unsigned long height)
{
- ply_rectangle_t paint_area;
+ ply_rectangle_t paint_area;
- if (progress_bar->is_hidden)
- return;
+ if (progress_bar->is_hidden)
+ return;
- paint_area.x = x;
- paint_area.y = y;
- paint_area.width = width;
- paint_area.height = height;
+ paint_area.x = x;
+ paint_area.y = y;
+ paint_area.width = width;
+ paint_area.height = height;
- ply_rectangle_intersect (&progress_bar->area, &paint_area, &paint_area);
- ply_pixel_buffer_fill_with_hex_color (buffer,
- &paint_area,
- 0xffffff); /* white */
+ ply_rectangle_intersect (&progress_bar->area, &paint_area, &paint_area);
+ ply_pixel_buffer_fill_with_hex_color (buffer,
+ &paint_area,
+ 0xffffff); /* white */
}
void
ply_progress_bar_draw (ply_progress_bar_t *progress_bar)
{
- if (progress_bar->is_hidden)
- return;
-
- ply_progress_bar_update_area (progress_bar, progress_bar->area.x, progress_bar->area.y);
- ply_pixel_display_draw_area (progress_bar->display,
- progress_bar->area.x,
- progress_bar->area.y,
- progress_bar->area.width,
- progress_bar->area.height);
+ if (progress_bar->is_hidden)
+ return;
+
+ ply_progress_bar_update_area (progress_bar, progress_bar->area.x, progress_bar->area.y);
+ ply_pixel_display_draw_area (progress_bar->display,
+ progress_bar->area.x,
+ progress_bar->area.y,
+ progress_bar->area.width,
+ progress_bar->area.height);
}
void
@@ -152,60 +152,59 @@ ply_progress_bar_show (ply_progress_bar_t *progress_bar,
long x,
long y)
{
- assert (progress_bar != NULL);
+ assert (progress_bar != NULL);
- progress_bar->display = display;
+ progress_bar->display = display;
- ply_progress_bar_update_area (progress_bar, x, y);
+ ply_progress_bar_update_area (progress_bar, x, y);
- progress_bar->is_hidden = false;
- ply_progress_bar_draw (progress_bar);
+ progress_bar->is_hidden = false;
+ ply_progress_bar_draw (progress_bar);
}
void
ply_progress_bar_hide (ply_progress_bar_t *progress_bar)
{
- if (progress_bar->is_hidden)
- return;
+ if (progress_bar->is_hidden)
+ return;
- progress_bar->is_hidden = true;
- ply_pixel_display_draw_area (progress_bar->display,
- progress_bar->area.x, progress_bar->area.y,
- progress_bar->area.width, progress_bar->area.height);
-
- progress_bar->display = NULL;
+ progress_bar->is_hidden = true;
+ ply_pixel_display_draw_area (progress_bar->display,
+ progress_bar->area.x, progress_bar->area.y,
+ progress_bar->area.width, progress_bar->area.height);
+ progress_bar->display = NULL;
}
bool
ply_progress_bar_is_hidden (ply_progress_bar_t *progress_bar)
{
- return progress_bar->is_hidden;
+ return progress_bar->is_hidden;
}
long
ply_progress_bar_get_width (ply_progress_bar_t *progress_bar)
{
- return progress_bar->area.width;
+ return progress_bar->area.width;
}
long
ply_progress_bar_get_height (ply_progress_bar_t *progress_bar)
{
- return progress_bar->area.height;
+ return progress_bar->area.height;
}
void
ply_progress_bar_set_percent_done (ply_progress_bar_t *progress_bar,
double percent_done)
{
- progress_bar->percent_done = percent_done;
+ progress_bar->percent_done = percent_done;
}
double
ply_progress_bar_get_percent_done (ply_progress_bar_t *progress_bar)
{
- return progress_bar->percent_done;
+ return progress_bar->percent_done;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-throbber.c b/src/libply-splash-graphics/ply-throbber.c
index 42044baf..64537fb5 100644
--- a/src/libply-splash-graphics/ply-throbber.c
+++ b/src/libply-splash-graphics/ply-throbber.c
@@ -61,306 +61,294 @@
struct _ply_throbber
{
- ply_array_t *frames;
- ply_event_loop_t *loop;
- char *image_dir;
- char *frames_prefix;
+ ply_array_t *frames;
+ ply_event_loop_t *loop;
+ char *image_dir;
+ char *frames_prefix;
- ply_pixel_display_t *display;
- ply_rectangle_t frame_area;
- ply_trigger_t *stop_trigger;
+ ply_pixel_display_t *display;
+ ply_rectangle_t frame_area;
+ ply_trigger_t *stop_trigger;
- long x, y;
- long width, height;
- double start_time, now;
+ long x, y;
+ long width, height;
+ double start_time, now;
- int frame_number;
- uint32_t is_stopped : 1;
+ int frame_number;
+ uint32_t is_stopped : 1;
};
static void ply_throbber_stop_now (ply_throbber_t *throbber);
ply_throbber_t *
ply_throbber_new (const char *image_dir,
- const char *frames_prefix)
+ const char *frames_prefix)
{
- ply_throbber_t *throbber;
-
- assert (image_dir != NULL);
- assert (frames_prefix != NULL);
-
- throbber = calloc (1, sizeof (ply_throbber_t));
-
- throbber->frames = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
- throbber->frames_prefix = strdup (frames_prefix);
- throbber->image_dir = strdup (image_dir);
- throbber->is_stopped = true;
- throbber->width = 0;
- throbber->height = 0;
- throbber->frame_area.width = 0;
- throbber->frame_area.height = 0;
- throbber->frame_area.x = 0;
- throbber->frame_area.y = 0;
- throbber->frame_number = 0;
-
- return throbber;
+ ply_throbber_t *throbber;
+
+ assert (image_dir != NULL);
+ assert (frames_prefix != NULL);
+
+ throbber = calloc (1, sizeof(ply_throbber_t));
+
+ throbber->frames = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_POINTER);
+ throbber->frames_prefix = strdup (frames_prefix);
+ throbber->image_dir = strdup (image_dir);
+ throbber->is_stopped = true;
+ throbber->width = 0;
+ throbber->height = 0;
+ throbber->frame_area.width = 0;
+ throbber->frame_area.height = 0;
+ throbber->frame_area.x = 0;
+ throbber->frame_area.y = 0;
+ throbber->frame_number = 0;
+
+ return throbber;
}
static void
ply_throbber_remove_frames (ply_throbber_t *throbber)
{
- int i;
- ply_pixel_buffer_t **frames;
+ int i;
+ ply_pixel_buffer_t **frames;
- frames = (ply_pixel_buffer_t **) ply_array_steal_pointer_elements (throbber->frames);
- for (i = 0; frames[i] != NULL; i++)
- ply_pixel_buffer_free (frames[i]);
- free (frames);
+ frames = (ply_pixel_buffer_t **) ply_array_steal_pointer_elements (throbber->frames);
+ for (i = 0; frames[i] != NULL; i++) {
+ ply_pixel_buffer_free (frames[i]);
+ }
+ free (frames);
}
void
ply_throbber_free (ply_throbber_t *throbber)
{
- if (throbber == NULL)
- return;
+ if (throbber == NULL)
+ return;
- if (!throbber->is_stopped)
- ply_throbber_stop_now (throbber);
+ if (!throbber->is_stopped)
+ ply_throbber_stop_now (throbber);
- ply_throbber_remove_frames (throbber);
- ply_array_free (throbber->frames);
+ ply_throbber_remove_frames (throbber);
+ ply_array_free (throbber->frames);
- free (throbber->frames_prefix);
- free (throbber->image_dir);
- free (throbber);
+ free (throbber->frames_prefix);
+ free (throbber->image_dir);
+ free (throbber);
}
static bool
animate_at_time (ply_throbber_t *throbber,
- double time)
+ double time)
{
- int number_of_frames;
- ply_pixel_buffer_t * const * frames;
- bool should_continue;
- double percent_in_sequence;
-
- number_of_frames = ply_array_get_size (throbber->frames);
-
- if (number_of_frames == 0)
- return true;
-
- should_continue = true;
- percent_in_sequence = fmod (time, THROBBER_DURATION) / THROBBER_DURATION;
- throbber->frame_number = (int) (number_of_frames * percent_in_sequence);
-
- if (throbber->stop_trigger != NULL)
- {
- if (throbber->frame_number == number_of_frames - 1)
- should_continue = false;
- }
-
- frames = (ply_pixel_buffer_t * const *) ply_array_get_pointer_elements (throbber->frames);
- ply_pixel_buffer_get_size (frames[throbber->frame_number], &throbber->frame_area);
- throbber->frame_area.x = throbber->x;
- throbber->frame_area.y = throbber->y;
- ply_pixel_display_draw_area (throbber->display,
- throbber->x, throbber->y,
- throbber->frame_area.width,
- throbber->frame_area.height);
-
- return should_continue;
+ int number_of_frames;
+ ply_pixel_buffer_t *const *frames;
+ bool should_continue;
+ double percent_in_sequence;
+
+ number_of_frames = ply_array_get_size (throbber->frames);
+
+ if (number_of_frames == 0)
+ return true;
+
+ should_continue = true;
+ percent_in_sequence = fmod (time, THROBBER_DURATION) / THROBBER_DURATION;
+ throbber->frame_number = (int) (number_of_frames * percent_in_sequence);
+
+ if (throbber->stop_trigger != NULL)
+ if (throbber->frame_number == number_of_frames - 1)
+ should_continue = false;
+
+ frames = (ply_pixel_buffer_t *const *) ply_array_get_pointer_elements (throbber->frames);
+ ply_pixel_buffer_get_size (frames[throbber->frame_number], &throbber->frame_area);
+ throbber->frame_area.x = throbber->x;
+ throbber->frame_area.y = throbber->y;
+ ply_pixel_display_draw_area (throbber->display,
+ throbber->x, throbber->y,
+ throbber->frame_area.width,
+ throbber->frame_area.height);
+
+ return should_continue;
}
static void
on_timeout (ply_throbber_t *throbber)
{
- double sleep_time;
- bool should_continue;
- throbber->now = ply_get_timestamp ();
-
- should_continue = animate_at_time (throbber,
- throbber->now - throbber->start_time);
-
- sleep_time = 1.0 / FRAMES_PER_SECOND;
- sleep_time = MAX (sleep_time - (ply_get_timestamp () - throbber->now),
- 0.005);
-
- if (!should_continue)
- {
- throbber->is_stopped = true;
- if (throbber->stop_trigger != NULL)
- {
- ply_trigger_pull (throbber->stop_trigger, NULL);
- throbber->stop_trigger = NULL;
+ double sleep_time;
+ bool should_continue;
+
+ throbber->now = ply_get_timestamp ();
+
+ should_continue = animate_at_time (throbber,
+ throbber->now - throbber->start_time);
+
+ sleep_time = 1.0 / FRAMES_PER_SECOND;
+ sleep_time = MAX (sleep_time - (ply_get_timestamp () - throbber->now),
+ 0.005);
+
+ if (!should_continue) {
+ throbber->is_stopped = true;
+ if (throbber->stop_trigger != NULL) {
+ ply_trigger_pull (throbber->stop_trigger, NULL);
+ throbber->stop_trigger = NULL;
+ }
+ } else {
+ ply_event_loop_watch_for_timeout (throbber->loop,
+ sleep_time,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, throbber);
}
- }
- else
- {
- ply_event_loop_watch_for_timeout (throbber->loop,
- sleep_time,
- (ply_event_loop_timeout_handler_t)
- on_timeout, throbber);
- }
}
static bool
ply_throbber_add_frame (ply_throbber_t *throbber,
const char *filename)
{
- ply_image_t *image;
- ply_pixel_buffer_t *frame;
+ ply_image_t *image;
+ ply_pixel_buffer_t *frame;
- image = ply_image_new (filename);
+ image = ply_image_new (filename);
- if (!ply_image_load (image))
- {
- ply_image_free (image);
- return false;
- }
+ if (!ply_image_load (image)) {
+ ply_image_free (image);
+ return false;
+ }
- frame = ply_image_convert_to_pixel_buffer (image);
+ frame = ply_image_convert_to_pixel_buffer (image);
- ply_array_add_pointer_element (throbber->frames, frame);
+ ply_array_add_pointer_element (throbber->frames, frame);
- throbber->width = MAX (throbber->width, (long) ply_pixel_buffer_get_width (frame));
- throbber->height = MAX (throbber->height, (long)ply_pixel_buffer_get_height (frame));
+ throbber->width = MAX (throbber->width, (long) ply_pixel_buffer_get_width (frame));
+ throbber->height = MAX (throbber->height, (long) ply_pixel_buffer_get_height (frame));
- return true;
+ return true;
}
static bool
ply_throbber_add_frames (ply_throbber_t *throbber)
{
- struct dirent **entries;
- int number_of_entries;
- int i;
- bool load_finished;
+ struct dirent **entries;
+ int number_of_entries;
+ int i;
+ bool load_finished;
- entries = NULL;
+ entries = NULL;
- number_of_entries = scandir (throbber->image_dir, &entries, NULL, versionsort);
+ number_of_entries = scandir (throbber->image_dir, &entries, NULL, versionsort);
- if (number_of_entries < 0)
- return false;
+ if (number_of_entries < 0)
+ return false;
- load_finished = false;
- for (i = 0; i < number_of_entries; i++)
- {
- if (strncmp (entries[i]->d_name,
- throbber->frames_prefix,
- strlen (throbber->frames_prefix)) == 0
- && (strlen (entries[i]->d_name) > 4)
- && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0)
- {
- char *filename;
+ load_finished = false;
+ for (i = 0; i < number_of_entries; i++) {
+ if (strncmp (entries[i]->d_name,
+ throbber->frames_prefix,
+ strlen (throbber->frames_prefix)) == 0
+ && (strlen (entries[i]->d_name) > 4)
+ && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0) {
+ char *filename;
- filename = NULL;
- asprintf (&filename, "%s/%s", throbber->image_dir, entries[i]->d_name);
+ filename = NULL;
+ asprintf (&filename, "%s/%s", throbber->image_dir, entries[i]->d_name);
- if (!ply_throbber_add_frame (throbber, filename))
- goto out;
+ if (!ply_throbber_add_frame (throbber, filename))
+ goto out;
- free (filename);
- }
+ free (filename);
+ }
- free (entries[i]);
- entries[i] = NULL;
- }
- load_finished = true;
+ free (entries[i]);
+ entries[i] = NULL;
+ }
+ load_finished = true;
out:
- if (!load_finished)
- {
- ply_throbber_remove_frames (throbber);
-
- while (entries[i] != NULL)
- {
- free (entries[i]);
- i++;
+ if (!load_finished) {
+ ply_throbber_remove_frames (throbber);
+
+ while (entries[i] != NULL) {
+ free (entries[i]);
+ i++;
+ }
}
- }
- free (entries);
+ free (entries);
- return load_finished;
+ return load_finished;
}
bool
ply_throbber_load (ply_throbber_t *throbber)
{
- if (ply_array_get_size (throbber->frames) != 0)
- ply_throbber_remove_frames (throbber);
+ if (ply_array_get_size (throbber->frames) != 0)
+ ply_throbber_remove_frames (throbber);
- if (!ply_throbber_add_frames (throbber))
- return false;
+ if (!ply_throbber_add_frames (throbber))
+ return false;
- return true;
+ return true;
}
bool
-ply_throbber_start (ply_throbber_t *throbber,
- ply_event_loop_t *loop,
- ply_pixel_display_t *display,
- long x,
- long y)
+ply_throbber_start (ply_throbber_t *throbber,
+ ply_event_loop_t *loop,
+ ply_pixel_display_t *display,
+ long x,
+ long y)
{
- assert (throbber != NULL);
- assert (throbber->loop == NULL);
+ assert (throbber != NULL);
+ assert (throbber->loop == NULL);
- throbber->loop = loop;
- throbber->display = display;
- throbber->is_stopped = false;
+ throbber->loop = loop;
+ throbber->display = display;
+ throbber->is_stopped = false;
- throbber->x = x;
- throbber->y = y;
+ throbber->x = x;
+ throbber->y = y;
- throbber->start_time = ply_get_timestamp ();
+ throbber->start_time = ply_get_timestamp ();
- ply_event_loop_watch_for_timeout (throbber->loop,
- 1.0 / FRAMES_PER_SECOND,
- (ply_event_loop_timeout_handler_t)
- on_timeout, throbber);
+ ply_event_loop_watch_for_timeout (throbber->loop,
+ 1.0 / FRAMES_PER_SECOND,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, throbber);
- return true;
+ return true;
}
static void
ply_throbber_stop_now (ply_throbber_t *throbber)
{
- throbber->is_stopped = true;
-
- ply_pixel_display_draw_area (throbber->display,
- throbber->x,
- throbber->y,
- throbber->frame_area.width,
- throbber->frame_area.height);
- if (throbber->loop != NULL)
- {
- ply_event_loop_stop_watching_for_timeout (throbber->loop,
- (ply_event_loop_timeout_handler_t)
- on_timeout, throbber);
- throbber->loop = NULL;
- }
- throbber->display = NULL;
+ throbber->is_stopped = true;
+
+ ply_pixel_display_draw_area (throbber->display,
+ throbber->x,
+ throbber->y,
+ throbber->frame_area.width,
+ throbber->frame_area.height);
+ if (throbber->loop != NULL) {
+ ply_event_loop_stop_watching_for_timeout (throbber->loop,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, throbber);
+ throbber->loop = NULL;
+ }
+ throbber->display = NULL;
}
void
ply_throbber_stop (ply_throbber_t *throbber,
ply_trigger_t *stop_trigger)
{
+ if (stop_trigger == NULL) {
+ ply_throbber_stop_now (throbber);
+ return;
+ }
- if (stop_trigger == NULL)
- {
- ply_throbber_stop_now (throbber);
- return;
- }
-
- throbber->stop_trigger = stop_trigger;
+ throbber->stop_trigger = stop_trigger;
}
bool
ply_throbber_is_stopped (ply_throbber_t *throbber)
{
- return throbber->is_stopped;
+ return throbber->is_stopped;
}
void
@@ -371,28 +359,28 @@ ply_throbber_draw_area (ply_throbber_t *throbber,
unsigned long width,
unsigned long height)
{
- ply_pixel_buffer_t * const * frames;
+ ply_pixel_buffer_t *const *frames;
- if (throbber->is_stopped)
- return;
+ if (throbber->is_stopped)
+ return;
- frames = (ply_pixel_buffer_t * const *) ply_array_get_pointer_elements (throbber->frames);
- ply_pixel_buffer_fill_with_buffer (buffer,
- frames[throbber->frame_number],
- throbber->x,
- throbber->y);
+ frames = (ply_pixel_buffer_t *const *) ply_array_get_pointer_elements (throbber->frames);
+ ply_pixel_buffer_fill_with_buffer (buffer,
+ frames[throbber->frame_number],
+ throbber->x,
+ throbber->y);
}
long
ply_throbber_get_width (ply_throbber_t *throbber)
{
- return throbber->width;
+ return throbber->width;
}
long
ply_throbber_get_height (ply_throbber_t *throbber)
{
- return throbber->height;
+ return throbber->height;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply-splash-graphics/ply-throbber.h b/src/libply-splash-graphics/ply-throbber.h
index 272a7d92..21233339 100644
--- a/src/libply-splash-graphics/ply-throbber.h
+++ b/src/libply-splash-graphics/ply-throbber.h
@@ -39,7 +39,7 @@ ply_throbber_t *ply_throbber_new (const char *image_dir,
void ply_throbber_free (ply_throbber_t *throbber);
bool ply_throbber_load (ply_throbber_t *throbber);
-bool ply_throbber_start (ply_throbber_t *throbber,
+bool ply_throbber_start (ply_throbber_t *throbber,
ply_event_loop_t *loop,
ply_pixel_display_t *display,
long x,
diff --git a/src/libply/ply-array.c b/src/libply/ply-array.c
index 999c86e5..7d239534 100644
--- a/src/libply/ply-array.c
+++ b/src/libply/ply-array.c
@@ -34,141 +34,139 @@ static const uint32_t uint32_terminator = 0;
struct _ply_array
{
- ply_buffer_t *buffer;
- ply_array_element_type_t element_type;
+ ply_buffer_t *buffer;
+ ply_array_element_type_t element_type;
};
ply_array_t *
ply_array_new (ply_array_element_type_t element_type)
{
- ply_array_t *array;
+ ply_array_t *array;
- array = calloc (1, sizeof (ply_array_t));
+ array = calloc (1, sizeof(ply_array_t));
- array->buffer = ply_buffer_new ();
- array->element_type = element_type;
+ array->buffer = ply_buffer_new ();
+ array->element_type = element_type;
- switch (array->element_type)
- {
- case PLY_ARRAY_ELEMENT_TYPE_POINTER:
- ply_buffer_append_bytes (array->buffer, &pointer_terminator, sizeof (pointer_terminator));
- break;
+ switch (array->element_type) {
+ case PLY_ARRAY_ELEMENT_TYPE_POINTER:
+ ply_buffer_append_bytes (array->buffer, &pointer_terminator, sizeof(pointer_terminator));
+ break;
- case PLY_ARRAY_ELEMENT_TYPE_UINT32:
- ply_buffer_append_bytes (array->buffer, &uint32_terminator, sizeof (uint32_terminator));
- break;
- }
+ case PLY_ARRAY_ELEMENT_TYPE_UINT32:
+ ply_buffer_append_bytes (array->buffer, &uint32_terminator, sizeof(uint32_terminator));
+ break;
+ }
- return array;
+ return array;
}
void
ply_array_free (ply_array_t *array)
{
- if (array == NULL)
- return;
+ if (array == NULL)
+ return;
- ply_buffer_free (array->buffer);
+ ply_buffer_free (array->buffer);
- free (array);
+ free (array);
}
int
ply_array_get_size (ply_array_t *array)
{
- int size;
+ int size;
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER ||
- array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER ||
+ array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
- switch (array->element_type)
- {
- case PLY_ARRAY_ELEMENT_TYPE_POINTER:
- size = (ply_buffer_get_size (array->buffer) / sizeof (const void *)) - 1;
- break;
+ switch (array->element_type) {
+ case PLY_ARRAY_ELEMENT_TYPE_POINTER:
+ size = (ply_buffer_get_size (array->buffer) / sizeof(const void *)) - 1;
+ break;
- case PLY_ARRAY_ELEMENT_TYPE_UINT32:
- size = (ply_buffer_get_size (array->buffer) / sizeof (const uint32_t)) - 1;
- break;
- }
+ case PLY_ARRAY_ELEMENT_TYPE_UINT32:
+ size = (ply_buffer_get_size (array->buffer) / sizeof(const uint32_t)) - 1;
+ break;
+ }
- return size;
+ return size;
}
void
ply_array_add_pointer_element (ply_array_t *array,
const void *data)
{
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER);
- /* Temporarily remove NULL terminator
- */
- ply_buffer_remove_bytes_at_end (array->buffer, sizeof (pointer_terminator));
+ /* Temporarily remove NULL terminator
+ */
+ ply_buffer_remove_bytes_at_end (array->buffer, sizeof(pointer_terminator));
- ply_buffer_append_bytes (array->buffer, &data, sizeof (const void *));
+ ply_buffer_append_bytes (array->buffer, &data, sizeof(const void *));
- /* Add NULL terminator back
- */
- ply_buffer_append_bytes (array->buffer, &pointer_terminator, sizeof (pointer_terminator));
+ /* Add NULL terminator back
+ */
+ ply_buffer_append_bytes (array->buffer, &pointer_terminator, sizeof(pointer_terminator));
}
void
-ply_array_add_uint32_element (ply_array_t *array,
- const uint32_t data)
+ply_array_add_uint32_element (ply_array_t *array,
+ const uint32_t data)
{
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
- /* Temporarily remove 0 terminator
- */
- ply_buffer_remove_bytes_at_end (array->buffer, sizeof (uint32_terminator));
+ /* Temporarily remove 0 terminator
+ */
+ ply_buffer_remove_bytes_at_end (array->buffer, sizeof(uint32_terminator));
- ply_buffer_append_bytes (array->buffer, &data, sizeof (const uint32_t));
+ ply_buffer_append_bytes (array->buffer, &data, sizeof(const uint32_t));
- /* Add 0 terminator back
- */
- ply_buffer_append_bytes (array->buffer, &uint32_terminator, sizeof (uint32_terminator));
+ /* Add 0 terminator back
+ */
+ ply_buffer_append_bytes (array->buffer, &uint32_terminator, sizeof(uint32_terminator));
}
-void * const *
+void *const *
ply_array_get_pointer_elements (ply_array_t *array)
{
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER);
- return (void * const *) ply_buffer_get_bytes (array->buffer);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER);
+ return (void *const *) ply_buffer_get_bytes (array->buffer);
}
uint32_t const *
ply_array_get_uint32_elements (ply_array_t *array)
{
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
- return (uint32_t const *) ply_buffer_get_bytes (array->buffer);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
+ return (uint32_t const *) ply_buffer_get_bytes (array->buffer);
}
void **
ply_array_steal_pointer_elements (ply_array_t *array)
{
- void **data;
+ void **data;
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_POINTER);
- data = (void **) ply_buffer_steal_bytes (array->buffer);
+ data = (void **) ply_buffer_steal_bytes (array->buffer);
- ply_buffer_append_bytes (array->buffer, &pointer_terminator, sizeof (const void *));
+ ply_buffer_append_bytes (array->buffer, &pointer_terminator, sizeof(const void *));
- return data;
+ return data;
}
uint32_t *
ply_array_steal_uint32_elements (ply_array_t *array)
{
- uint32_t *data;
+ uint32_t *data;
- assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
+ assert (array->element_type == PLY_ARRAY_ELEMENT_TYPE_UINT32);
- data = (uint32_t *) ply_buffer_steal_bytes (array->buffer);
+ data = (uint32_t *) ply_buffer_steal_bytes (array->buffer);
- ply_buffer_append_bytes (array->buffer, &uint32_terminator, sizeof (const uint32_t));
+ ply_buffer_append_bytes (array->buffer, &uint32_terminator, sizeof(const uint32_t));
- return data;
+ return data;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-array.h b/src/libply/ply-array.h
index 4e3635dc..777485cc 100644
--- a/src/libply/ply-array.h
+++ b/src/libply/ply-array.h
@@ -29,8 +29,8 @@ typedef enum _ply_array_element_type ply_array_element_type_t;
enum _ply_array_element_type
{
- PLY_ARRAY_ELEMENT_TYPE_POINTER,
- PLY_ARRAY_ELEMENT_TYPE_UINT32
+ PLY_ARRAY_ELEMENT_TYPE_POINTER,
+ PLY_ARRAY_ELEMENT_TYPE_UINT32
};
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
@@ -39,9 +39,9 @@ void ply_array_free (ply_array_t *array);
int ply_array_get_size (ply_array_t *array);
void ply_array_add_pointer_element (ply_array_t *array,
const void *element);
-void ply_array_add_uint32_element (ply_array_t *array,
- const uint32_t element);
-void * const *ply_array_get_pointer_elements (ply_array_t *array);
+void ply_array_add_uint32_element (ply_array_t *array,
+ const uint32_t element);
+void *const *ply_array_get_pointer_elements (ply_array_t *array);
uint32_t const *ply_array_get_uint32_elements (ply_array_t *array);
void **ply_array_steal_pointer_elements (ply_array_t *array);
diff --git a/src/libply/ply-bitarray.c b/src/libply/ply-bitarray.c
index 3d0cdd0c..a988e920 100644
--- a/src/libply/ply-bitarray.c
+++ b/src/libply/ply-bitarray.c
@@ -34,12 +34,13 @@ int
ply_bitarray_count (ply_bitarray_t *bitarray,
int size)
{
- int count = 0;
- int i;
- for (i = 0; i < size; i++){
- count += ply_bitarray_lookup(bitarray, i);
- }
- return count;
+ int count = 0;
+ int i;
+
+ for (i = 0; i < size; i++) {
+ count += ply_bitarray_lookup (bitarray, i);
+ }
+ return count;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-bitarray.h b/src/libply/ply-bitarray.h
index 4cdf03a1..9c3b1292 100644
--- a/src/libply/ply-bitarray.h
+++ b/src/libply/ply-bitarray.h
@@ -26,12 +26,12 @@
#include <stdbool.h>
#define PLY_BITARRAY_BASE_SIZE 32
-#define PLY_BITARRAY_BASE_MASK (PLY_BITARRAY_BASE_SIZE-1)
+#define PLY_BITARRAY_BASE_MASK (PLY_BITARRAY_BASE_SIZE - 1)
typedef uint32_t ply_bitarray_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
-#define ply_bitarray_new(size) calloc ((size + PLY_BITARRAY_BASE_SIZE - 1) / PLY_BITARRAY_BASE_SIZE, sizeof (ply_bitarray_t))
+#define ply_bitarray_new(size) calloc ((size + PLY_BITARRAY_BASE_SIZE - 1) / PLY_BITARRAY_BASE_SIZE, sizeof(ply_bitarray_t))
#define ply_bitarray_free(bitarray) free (bitarray)
#define ply_bitarray_lookup(bitarray, index) ((bitarray[index / PLY_BITARRAY_BASE_SIZE] >> (index & PLY_BITARRAY_BASE_MASK)) & 1)
#define ply_bitarray_set(bitarray, index) (bitarray[index / PLY_BITARRAY_BASE_SIZE] |= 1 << (index & PLY_BITARRAY_BASE_MASK))
diff --git a/src/libply/ply-buffer.c b/src/libply/ply-buffer.c
index 0d0406ff..26eaaa02 100644
--- a/src/libply/ply-buffer.c
+++ b/src/libply/ply-buffer.c
@@ -48,132 +48,130 @@
struct _ply_buffer
{
- char *data;
- size_t size;
- size_t capacity;
+ char *data;
+ size_t size;
+ size_t capacity;
};
static bool
ply_buffer_increase_capacity (ply_buffer_t *buffer)
{
- assert (buffer != NULL);
+ assert (buffer != NULL);
- if ((buffer->capacity * 2) > PLY_BUFFER_MAX_BUFFER_CAPACITY)
- return false;
+ if ((buffer->capacity * 2) > PLY_BUFFER_MAX_BUFFER_CAPACITY)
+ return false;
- buffer->capacity *= 2;
+ buffer->capacity *= 2;
- buffer->data = realloc (buffer->data, buffer->capacity);
- return true;
+ buffer->data = realloc (buffer->data, buffer->capacity);
+ return true;
}
void
ply_buffer_remove_bytes (ply_buffer_t *buffer,
size_t bytes_to_remove)
{
- assert (buffer != NULL);
-
- bytes_to_remove = MIN (buffer->size, bytes_to_remove);
-
- if (bytes_to_remove == buffer->size)
- buffer->size = 0;
- else
- {
- memmove (buffer->data, buffer->data + bytes_to_remove,
- buffer->size - bytes_to_remove);
- buffer->size -= bytes_to_remove;
- }
- buffer->data[buffer->size] = '\0';
+ assert (buffer != NULL);
+
+ bytes_to_remove = MIN (buffer->size, bytes_to_remove);
+
+ if (bytes_to_remove == buffer->size) {
+ buffer->size = 0;
+ } else {
+ memmove (buffer->data, buffer->data + bytes_to_remove,
+ buffer->size - bytes_to_remove);
+ buffer->size -= bytes_to_remove;
+ }
+ buffer->data[buffer->size] = '\0';
}
void
ply_buffer_remove_bytes_at_end (ply_buffer_t *buffer,
size_t bytes_to_remove)
{
- assert (buffer != NULL);
+ assert (buffer != NULL);
- bytes_to_remove = MIN (buffer->size, bytes_to_remove);
+ bytes_to_remove = MIN (buffer->size, bytes_to_remove);
- buffer->size -= bytes_to_remove;
- buffer->data[buffer->size] = '\0';
+ buffer->size -= bytes_to_remove;
+ buffer->data[buffer->size] = '\0';
}
ply_buffer_t *
ply_buffer_new (void)
{
- ply_buffer_t *buffer;
+ ply_buffer_t *buffer;
- buffer = calloc (1, sizeof (ply_buffer_t));
+ buffer = calloc (1, sizeof(ply_buffer_t));
- buffer->capacity = 4096;
- buffer->data = calloc (1, buffer->capacity);
- buffer->size = 0;
+ buffer->capacity = 4096;
+ buffer->data = calloc (1, buffer->capacity);
+ buffer->size = 0;
- return buffer;
+ return buffer;
}
void
ply_buffer_free (ply_buffer_t *buffer)
{
- if (buffer == NULL)
- return;
+ if (buffer == NULL)
+ return;
- free (buffer->data);
- free (buffer);
+ free (buffer->data);
+ free (buffer);
}
static bool
-ply_buffer_validate_format_string (ply_buffer_t *buffer,
- const char *format)
+ply_buffer_validate_format_string (ply_buffer_t *buffer,
+ const char *format)
{
- char *n, *p;
+ char *n, *p;
- p = (char *) format;
+ p = (char *) format;
- /* lame checks to limit the damage
- * of some potential exploits.
- */
- while ((n = strstr (p, "%n")) != NULL)
- {
- if (n == format)
- return false;
+ /* lame checks to limit the damage
+ * of some potential exploits.
+ */
+ while ((n = strstr (p, "%n")) != NULL) {
+ if (n == format)
+ return false;
- if (n[-1] != '%')
- return false;
+ if (n[-1] != '%')
+ return false;
- p = n + 1;
- }
+ p = n + 1;
+ }
- return true;
+ return true;
}
void
-ply_buffer_append_with_non_literal_format_string (ply_buffer_t *buffer,
- const char *format,
+ply_buffer_append_with_non_literal_format_string (ply_buffer_t *buffer,
+ const char *format,
...)
{
- va_list args;
- size_t string_size;
- char write_buffer[PLY_BUFFER_MAX_APPEND_SIZE] = "";
+ va_list args;
+ size_t string_size;
+ char write_buffer[PLY_BUFFER_MAX_APPEND_SIZE] = "";
- assert (buffer != NULL);
+ assert (buffer != NULL);
- if (!ply_buffer_validate_format_string (buffer, format))
- return;
+ if (!ply_buffer_validate_format_string (buffer, format))
+ return;
- va_start (args, format);
- string_size = vsnprintf (write_buffer, 0, format, args) + 1;
- va_end (args);
+ va_start (args, format);
+ string_size = vsnprintf (write_buffer, 0, format, args) + 1;
+ va_end (args);
- if (string_size > PLY_BUFFER_MAX_APPEND_SIZE)
- return;
+ if (string_size > PLY_BUFFER_MAX_APPEND_SIZE)
+ return;
- va_start (args, format);
- vsnprintf (write_buffer, PLY_BUFFER_MAX_APPEND_SIZE,
- format, args);
- va_end (args);
+ va_start (args, format);
+ vsnprintf (write_buffer, PLY_BUFFER_MAX_APPEND_SIZE,
+ format, args);
+ va_end (args);
- ply_buffer_append_bytes (buffer, write_buffer, string_size - 1);
+ ply_buffer_append_bytes (buffer, write_buffer, string_size - 1);
}
void
@@ -181,86 +179,83 @@ ply_buffer_append_bytes (ply_buffer_t *buffer,
const void *bytes_in,
size_t length)
{
- assert (buffer != NULL);
- assert (bytes_in != NULL);
- assert (length != 0);
-
- const uint8_t *bytes = bytes_in;
-
- if (length >PLY_BUFFER_MAX_BUFFER_CAPACITY){
- bytes += length - (PLY_BUFFER_MAX_BUFFER_CAPACITY-1);
- length = (PLY_BUFFER_MAX_BUFFER_CAPACITY-1);
- }
-
- while ((buffer->size + length) >= buffer->capacity)
- {
- if (!ply_buffer_increase_capacity (buffer))
- {
- ply_buffer_remove_bytes (buffer, length);
+ assert (buffer != NULL);
+ assert (bytes_in != NULL);
+ assert (length != 0);
+
+ const uint8_t *bytes = bytes_in;
+
+ if (length > PLY_BUFFER_MAX_BUFFER_CAPACITY) {
+ bytes += length - (PLY_BUFFER_MAX_BUFFER_CAPACITY - 1);
+ length = (PLY_BUFFER_MAX_BUFFER_CAPACITY - 1);
+ }
+
+ while ((buffer->size + length) >= buffer->capacity) {
+ if (!ply_buffer_increase_capacity (buffer))
+ ply_buffer_remove_bytes (buffer, length);
}
- }
- assert (buffer->size + length < buffer->capacity);
+ assert (buffer->size + length < buffer->capacity);
- memcpy (buffer->data + buffer->size,
- bytes, length);
+ memcpy (buffer->data + buffer->size,
+ bytes, length);
- buffer->size += length;
- buffer->data[buffer->size] = '\0';
+ buffer->size += length;
+ buffer->data[buffer->size] = '\0';
}
void
ply_buffer_append_from_fd (ply_buffer_t *buffer,
int fd)
{
+ char bytes[PLY_BUFFER_MAX_APPEND_SIZE] = "";
+ ssize_t bytes_read;
- char bytes[PLY_BUFFER_MAX_APPEND_SIZE] = "";
- ssize_t bytes_read;
+ assert (buffer != NULL);
+ assert (fd >= 0);
- assert (buffer != NULL);
- assert (fd >= 0);
+ if (!ply_fd_has_data (fd))
+ return;
- if (!ply_fd_has_data (fd))
- return;
+ bytes_read = read (fd, bytes, sizeof(bytes));
- bytes_read = read (fd, bytes, sizeof (bytes));
-
- if (bytes_read > 0)
- ply_buffer_append_bytes (buffer, bytes, bytes_read);
+ if (bytes_read > 0)
+ ply_buffer_append_bytes (buffer, bytes, bytes_read);
}
const char *
ply_buffer_get_bytes (ply_buffer_t *buffer)
{
- assert (buffer != NULL);
- return buffer->data;
+ assert (buffer != NULL);
+ return buffer->data;
}
char *
ply_buffer_steal_bytes (ply_buffer_t *buffer)
{
- char *bytes;
- assert (buffer != NULL);
+ char *bytes;
+
+ assert (buffer != NULL);
- bytes = buffer->data;
+ bytes = buffer->data;
- buffer->data = calloc (1, buffer->capacity);
- buffer->size = 0;
+ buffer->data = calloc (1, buffer->capacity);
+ buffer->size = 0;
- return bytes;
+ return bytes;
}
size_t
ply_buffer_get_size (ply_buffer_t *buffer)
{
- return buffer->size;
+ return buffer->size;
}
void
ply_buffer_clear (ply_buffer_t *buffer)
{
- memset (buffer->data, '\0', buffer->capacity);
- buffer->size = 0;
+ memset (buffer->data, '\0', buffer->capacity);
+ buffer->size = 0;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-buffer.h b/src/libply/ply-buffer.h
index cfda2369..3d848db2 100644
--- a/src/libply/ply-buffer.h
+++ b/src/libply/ply-buffer.h
@@ -33,16 +33,17 @@ ply_buffer_t *ply_buffer_new (void);
void ply_buffer_free (ply_buffer_t *buffer);
void ply_buffer_append_bytes (ply_buffer_t *buffer,
const void *bytes,
- size_t number_of_bytes);
+ size_t number_of_bytes);
void ply_buffer_append_from_fd (ply_buffer_t *buffer,
int fd);
-#define ply_buffer_append(buffer, format, args...) \
+#define ply_buffer_append(buffer, format, args ...) \
ply_buffer_append_with_non_literal_format_string (buffer, \
- format "", ##args)
+ format "", ## args)
__attribute__((__format__ (__printf__, 2, 3)))
-void ply_buffer_append_with_non_literal_format_string (ply_buffer_t *buffer,
- const char *format, ...);
+void ply_buffer_append_with_non_literal_format_string (ply_buffer_t *buffer,
+ const char *format,
+ ...);
void ply_buffer_remove_bytes (ply_buffer_t *buffer,
size_t number_of_bytes);
void ply_buffer_remove_bytes_at_end (ply_buffer_t *buffer,
diff --git a/src/libply/ply-command-parser.c b/src/libply/ply-command-parser.c
index 2768668a..f1ddcffd 100644
--- a/src/libply/ply-command-parser.c
+++ b/src/libply/ply-command-parser.c
@@ -35,383 +35,372 @@
typedef union
{
- bool as_boolean;
- char *as_string;
- int as_integer;
+ bool as_boolean;
+ char *as_string;
+ int as_integer;
} ply_command_option_result_t;
typedef struct
{
- char *name;
- char *description;
- ply_command_option_type_t type;
- uint32_t was_set : 1;
- ply_command_option_result_t result;
+ char *name;
+ char *description;
+ ply_command_option_type_t type;
+ uint32_t was_set : 1;
+ ply_command_option_result_t result;
} ply_command_option_t;
typedef struct
{
- char *name;
- ply_list_t *aliases;
- char *description;
- ply_list_t *options;
+ char *name;
+ ply_list_t *aliases;
+ char *description;
+ ply_list_t *options;
- size_t longest_option_length;
+ size_t longest_option_length;
- ply_command_handler_t handler;
- void *handler_data;
+ ply_command_handler_t handler;
+ void *handler_data;
} ply_command_t;
struct _ply_command_parser
{
- ply_event_loop_t *loop;
- ply_command_t *main_command;
+ ply_event_loop_t *loop;
+ ply_command_t *main_command;
- ply_list_t *available_subcommands;
- ply_list_t *read_subcommands;
+ ply_list_t *available_subcommands;
+ ply_list_t *read_subcommands;
- ply_list_t *arguments;
- size_t longest_command_length;
+ ply_list_t *arguments;
+ size_t longest_command_length;
- uint32_t dispatch_is_queued : 1;
+ uint32_t dispatch_is_queued : 1;
};
static ply_command_option_t *
-ply_command_option_new (const char *name,
- const char *description,
- ply_command_option_type_t type)
+ply_command_option_new (const char *name,
+ const char *description,
+ ply_command_option_type_t type)
{
- ply_command_option_t *option;
+ ply_command_option_t *option;
- option = calloc (1, sizeof (ply_command_option_t));
+ option = calloc (1, sizeof(ply_command_option_t));
- option->name = strdup (name);
- option->description = strdup (description);
- option->type = type;
+ option->name = strdup (name);
+ option->description = strdup (description);
+ option->type = type;
- return option;
+ return option;
}
static void
ply_command_option_free (ply_command_option_t *option)
{
- if (option == NULL)
- return;
+ if (option == NULL)
+ return;
- free (option->name);
- free (option->description);
- free (option);
+ free (option->name);
+ free (option->description);
+ free (option);
}
static ply_command_t *
-ply_command_new (const char *name,
- const char *description,
+ply_command_new (const char *name,
+ const char *description,
ply_command_handler_t handler,
- void *data)
+ void *data)
{
- ply_command_t *command;
+ ply_command_t *command;
- command = calloc (1, sizeof (ply_command_t));
+ command = calloc (1, sizeof(ply_command_t));
- command->options = ply_list_new ();
- command->name = strdup (name);
- command->aliases = ply_list_new ();
- command->description = strdup (description);
- command->handler = handler;
- command->handler_data = data;
+ command->options = ply_list_new ();
+ command->name = strdup (name);
+ command->aliases = ply_list_new ();
+ command->description = strdup (description);
+ command->handler = handler;
+ command->handler_data = data;
- return command;
+ return command;
}
static void
ply_command_free (ply_command_t *command)
{
- ply_list_node_t *option_node;
- ply_list_node_t *alias_node;
+ ply_list_node_t *option_node;
+ ply_list_node_t *alias_node;
- if (command == NULL)
- return;
+ if (command == NULL)
+ return;
- while ((alias_node = ply_list_get_first_node (command->aliases)) != NULL)
- {
- free (ply_list_node_get_data (alias_node));
- ply_list_remove_node (command->aliases, alias_node);
- }
+ while ((alias_node = ply_list_get_first_node (command->aliases)) != NULL) {
+ free (ply_list_node_get_data (alias_node));
+ ply_list_remove_node (command->aliases, alias_node);
+ }
- option_node = ply_list_get_first_node (command->options);
- while (option_node != NULL)
- {
- ply_command_option_t *option;
+ option_node = ply_list_get_first_node (command->options);
+ while (option_node != NULL) {
+ ply_command_option_t *option;
- option = (ply_command_option_t *) ply_list_node_get_data (option_node);
- ply_command_option_free (option);
+ option = (ply_command_option_t *) ply_list_node_get_data (option_node);
+ ply_command_option_free (option);
- option_node = ply_list_get_next_node (command->options, option_node);
- }
- ply_list_free (command->options);
- free (command);
+ option_node = ply_list_get_next_node (command->options, option_node);
+ }
+ ply_list_free (command->options);
+ free (command);
}
static void
append_usage_line_to_buffer (ply_command_parser_t *parser,
- ply_buffer_t *buffer)
+ ply_buffer_t *buffer)
{
- ply_buffer_append (buffer, "%s\n",
- parser->main_command->description);
- ply_buffer_append (buffer, "USAGE: %s [OPTION...]", parser->main_command->name);
+ ply_buffer_append (buffer, "%s\n",
+ parser->main_command->description);
+ ply_buffer_append (buffer, "USAGE: %s [OPTION...]", parser->main_command->name);
- if (ply_list_get_length (parser->available_subcommands) > 0)
- ply_buffer_append (buffer, " [COMMAND [OPTION...]...]\n");
+ if (ply_list_get_length (parser->available_subcommands) > 0)
+ ply_buffer_append (buffer, " [COMMAND [OPTION...]...]\n");
}
static const char *
get_type_string (int type)
{
- const char *option_type_string;
-
- switch (type)
- {
- case PLY_COMMAND_OPTION_TYPE_FLAG:
- option_type_string = "";
- break;
- case PLY_COMMAND_OPTION_TYPE_BOOLEAN:
- option_type_string = "={true|false}";
- break;
- case PLY_COMMAND_OPTION_TYPE_STRING:
- option_type_string = "=<string>";
- break;
- case PLY_COMMAND_OPTION_TYPE_INTEGER:
- option_type_string = "=<integer>";
- break;
- default:
- option_type_string = "";
- break;
- }
-
- return option_type_string;
+ const char *option_type_string;
+
+ switch (type) {
+ case PLY_COMMAND_OPTION_TYPE_FLAG:
+ option_type_string = "";
+ break;
+ case PLY_COMMAND_OPTION_TYPE_BOOLEAN:
+ option_type_string = "={true|false}";
+ break;
+ case PLY_COMMAND_OPTION_TYPE_STRING:
+ option_type_string = "=<string>";
+ break;
+ case PLY_COMMAND_OPTION_TYPE_INTEGER:
+ option_type_string = "=<integer>";
+ break;
+ default:
+ option_type_string = "";
+ break;
+ }
+
+ return option_type_string;
}
static void
append_command_options_to_buffer (ply_command_parser_t *parser,
- ply_command_t *command,
- ply_buffer_t *buffer)
+ ply_command_t *command,
+ ply_buffer_t *buffer)
{
- ply_list_node_t *option_node;
+ ply_list_node_t *option_node;
- option_node = ply_list_get_first_node (command->options);
+ option_node = ply_list_get_first_node (command->options);
- while (option_node != NULL)
- {
- ply_command_option_t *option;
- int option_width;
- const char *option_type_string;
+ while (option_node != NULL) {
+ ply_command_option_t *option;
+ int option_width;
+ const char *option_type_string;
- option = (ply_command_option_t *) ply_list_node_get_data (option_node);
+ option = (ply_command_option_t *) ply_list_node_get_data (option_node);
- option_type_string = get_type_string (option->type);
+ option_type_string = get_type_string (option->type);
- option_width = command->longest_option_length + 2 -
- (strlen(option->name) + strlen(option_type_string));
+ option_width = command->longest_option_length + 2 -
+ (strlen (option->name) + strlen (option_type_string));
- ply_buffer_append (buffer,
- " --%s%s",
- option->name,
- option_type_string);
+ ply_buffer_append (buffer,
+ " --%s%s",
+ option->name,
+ option_type_string);
- ply_buffer_append (buffer, "%*s %s\n",
- option_width,
- "",
- option->description ? option->description : "");
+ ply_buffer_append (buffer, "%*s %s\n",
+ option_width,
+ "",
+ option->description ? option->description : "");
- option_node = ply_list_get_next_node (command->options, option_node);
- }
+ option_node = ply_list_get_next_node (command->options, option_node);
+ }
}
char *
ply_command_parser_get_help_string (ply_command_parser_t *parser)
{
- ply_buffer_t *buffer;
- ply_list_node_t *command_node;
- char *help_string;
- int longest_subcommand;
-
- buffer = ply_buffer_new ();
-
- append_usage_line_to_buffer (parser, buffer);
- ply_buffer_append (buffer, "\n");
- ply_buffer_append (buffer, "Options:\n");
- append_command_options_to_buffer (parser, parser->main_command, buffer);
- ply_buffer_append (buffer, "\n");
-
- if (ply_list_get_length (parser->available_subcommands) > 0)
- ply_buffer_append (buffer, "Available commands:\n");
-
- /* get longest subcommand */
- longest_subcommand = -1;
- command_node = ply_list_get_first_node (parser->available_subcommands);
- while (command_node != NULL)
- {
- ply_command_t *command;
- command = (ply_command_t *) ply_list_node_get_data (command_node);
- longest_subcommand = MAX (longest_subcommand, (int)strlen (command->name));
- command_node = ply_list_get_next_node (parser->available_subcommands,
- command_node);
- }
- command_node = ply_list_get_first_node (parser->available_subcommands);
- while (command_node != NULL)
- {
- ply_command_t *command;
-
- command = (ply_command_t *) ply_list_node_get_data (command_node);
-
- ply_buffer_append (buffer, " %s%*s %s\n",
- command->name,
- (int) (longest_subcommand + 2 - strlen (command->name)),
- "",
- command->description);
-
- command_node = ply_list_get_next_node (parser->available_subcommands,
- command_node);
- }
-
- command_node = ply_list_get_first_node (parser->available_subcommands);
- while (command_node != NULL)
- {
- ply_command_t *command;
-
- command = (ply_command_t *) ply_list_node_get_data (command_node);
-
- if (ply_list_get_first_node (command->options) != NULL)
- {
- ply_buffer_append (buffer, "\nOptions for %s command:\n", command->name);
+ ply_buffer_t *buffer;
+ ply_list_node_t *command_node;
+ char *help_string;
+ int longest_subcommand;
+
+ buffer = ply_buffer_new ();
+
+ append_usage_line_to_buffer (parser, buffer);
+ ply_buffer_append (buffer, "\n");
+ ply_buffer_append (buffer, "Options:\n");
+ append_command_options_to_buffer (parser, parser->main_command, buffer);
+ ply_buffer_append (buffer, "\n");
+
+ if (ply_list_get_length (parser->available_subcommands) > 0)
+ ply_buffer_append (buffer, "Available commands:\n");
+
+ /* get longest subcommand */
+ longest_subcommand = -1;
+ command_node = ply_list_get_first_node (parser->available_subcommands);
+ while (command_node != NULL) {
+ ply_command_t *command;
+ command = (ply_command_t *) ply_list_node_get_data (command_node);
+ longest_subcommand = MAX (longest_subcommand, (int) strlen (command->name));
+ command_node = ply_list_get_next_node (parser->available_subcommands,
+ command_node);
+ }
+ command_node = ply_list_get_first_node (parser->available_subcommands);
+ while (command_node != NULL) {
+ ply_command_t *command;
+
+ command = (ply_command_t *) ply_list_node_get_data (command_node);
- append_command_options_to_buffer (parser, command, buffer);
+ ply_buffer_append (buffer, " %s%*s %s\n",
+ command->name,
+ (int) (longest_subcommand + 2 - strlen (command->name)),
+ "",
+ command->description);
+
+ command_node = ply_list_get_next_node (parser->available_subcommands,
+ command_node);
}
- command_node = ply_list_get_next_node (parser->available_subcommands,
- command_node);
- }
+ command_node = ply_list_get_first_node (parser->available_subcommands);
+ while (command_node != NULL) {
+ ply_command_t *command;
+
+ command = (ply_command_t *) ply_list_node_get_data (command_node);
- help_string = ply_buffer_steal_bytes (buffer);
- ply_buffer_free (buffer);
+ if (ply_list_get_first_node (command->options) != NULL) {
+ ply_buffer_append (buffer, "\nOptions for %s command:\n", command->name);
- return help_string;
+ append_command_options_to_buffer (parser, command, buffer);
+ }
+
+ command_node = ply_list_get_next_node (parser->available_subcommands,
+ command_node);
+ }
+
+ help_string = ply_buffer_steal_bytes (buffer);
+ ply_buffer_free (buffer);
+
+ return help_string;
}
static void
-ply_command_add_option (ply_command_t *command,
- const char *name,
- const char *description,
+ply_command_add_option (ply_command_t *command,
+ const char *name,
+ const char *description,
ply_command_option_type_t type)
{
- ply_command_option_t *option;
+ ply_command_option_t *option;
- option = ply_command_option_new (name, description, type);
+ option = ply_command_option_new (name, description, type);
- ply_list_append_data (command->options, option);
+ ply_list_append_data (command->options, option);
- command->longest_option_length = MAX (command->longest_option_length,
- strlen (name)
- + 1
- + strlen (get_type_string (type)));
+ command->longest_option_length = MAX (command->longest_option_length,
+ strlen (name)
+ + 1
+ + strlen (get_type_string (type)));
}
static ply_command_option_t *
ply_command_get_option (ply_command_t *command,
const char *option_name)
{
- ply_command_option_t *option;
- ply_list_node_t *node;
+ ply_command_option_t *option;
+ ply_list_node_t *node;
- option = NULL;
- node = ply_list_get_first_node (command->options);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
+ option = NULL;
+ node = ply_list_get_first_node (command->options);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
- option = (ply_command_option_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (command->options, node);
+ option = (ply_command_option_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (command->options, node);
- if (strcmp (option_name, option->name) == 0)
- break;
+ if (strcmp (option_name, option->name) == 0)
+ break;
- node = next_node;
- }
+ node = next_node;
+ }
- if (node == NULL)
- return NULL;
+ if (node == NULL)
+ return NULL;
- return option;
+ return option;
}
ply_command_parser_t *
ply_command_parser_new (const char *name,
const char *description)
{
- ply_command_parser_t *command_parser;
+ ply_command_parser_t *command_parser;
- command_parser = calloc (1, sizeof (ply_command_parser_t));
+ command_parser = calloc (1, sizeof(ply_command_parser_t));
- command_parser->main_command = ply_command_new (name, description, NULL, NULL);
- command_parser->available_subcommands = ply_list_new ();
- command_parser->read_subcommands = ply_list_new ();
+ command_parser->main_command = ply_command_new (name, description, NULL, NULL);
+ command_parser->available_subcommands = ply_list_new ();
+ command_parser->read_subcommands = ply_list_new ();
- return command_parser;
+ return command_parser;
}
void
ply_command_parser_free (ply_command_parser_t *command_parser)
{
- ply_list_node_t *command_node;
+ ply_list_node_t *command_node;
- if (command_parser == NULL)
- return;
+ if (command_parser == NULL)
+ return;
- command_node = ply_list_get_first_node (command_parser->available_subcommands);
- while (command_node != NULL)
- {
- ply_command_t *command;
+ command_node = ply_list_get_first_node (command_parser->available_subcommands);
+ while (command_node != NULL) {
+ ply_command_t *command;
- command = (ply_command_t *) ply_list_node_get_data (command_node);
- ply_command_free (command);
+ command = (ply_command_t *) ply_list_node_get_data (command_node);
+ ply_command_free (command);
- command_node = ply_list_get_next_node (command_parser->available_subcommands, command_node);
- }
- ply_list_free (command_parser->available_subcommands);
- ply_list_free (command_parser->read_subcommands);
+ command_node = ply_list_get_next_node (command_parser->available_subcommands, command_node);
+ }
+ ply_list_free (command_parser->available_subcommands);
+ ply_list_free (command_parser->read_subcommands);
- ply_command_free (command_parser->main_command);
+ ply_command_free (command_parser->main_command);
- free (command_parser);
+ free (command_parser);
}
void
ply_command_parser_add_options (ply_command_parser_t *parser,
- const char *first_variadic_argument, /*
- const char *option_description,
- ply_option_argument_type_t option_type */
+ const char *first_variadic_argument, /*
+ * const char *option_description,
+ * ply_option_argument_type_t option_type */
...)
{
- va_list args;
- const char *option_name;
- const char *option_description;
- ply_command_option_type_t option_type;
+ va_list args;
+ const char *option_name;
+ const char *option_description;
+ ply_command_option_type_t option_type;
- assert (parser != NULL);
+ assert (parser != NULL);
- option_name = first_variadic_argument;
- va_start (args, first_variadic_argument);
- while (option_name != NULL)
- {
- option_description = va_arg (args, const char *);
- option_type = va_arg (args, ply_command_option_type_t);
+ option_name = first_variadic_argument;
+ va_start (args, first_variadic_argument);
+ while (option_name != NULL) {
+ option_description = va_arg (args, const char *);
+ option_type = va_arg (args, ply_command_option_type_t);
- ply_command_add_option (parser->main_command,
- option_name, option_description, option_type);
+ ply_command_add_option (parser->main_command,
+ option_name, option_description, option_type);
- option_name = va_arg (args, const char *);
- }
- va_end (args);
+ option_name = va_arg (args, const char *);
+ }
+ va_end (args);
}
void
@@ -420,104 +409,102 @@ ply_command_parser_add_command (ply_command_parser_t *parser,
ply_command_handler_t handler,
void *handler_data,
const char *first_variadic_argument, /*
- const char *option_description,
- ply_command_option_type_t option_type */
+ * const char *option_description,
+ * ply_command_option_type_t option_type */
...)
{
- ply_command_t *command;
- va_list args;
- const char *option_name;
- const char *option_description;
- ply_command_option_type_t option_type;
+ ply_command_t *command;
+ va_list args;
+ const char *option_name;
+ const char *option_description;
+ ply_command_option_type_t option_type;
- assert (parser != NULL);
- assert (name != NULL);
+ assert (parser != NULL);
+ assert (name != NULL);
- command = ply_command_new (name, description, handler, handler_data);
+ command = ply_command_new (name, description, handler, handler_data);
- option_name = first_variadic_argument;
- va_start (args, first_variadic_argument);
- while (option_name != NULL)
- {
- option_description = va_arg (args, const char *);
- option_type = va_arg (args, ply_command_option_type_t);
+ option_name = first_variadic_argument;
+ va_start (args, first_variadic_argument);
+ while (option_name != NULL) {
+ option_description = va_arg (args, const char *);
+ option_type = va_arg (args, ply_command_option_type_t);
- ply_command_add_option (command, option_name, option_description, option_type);
+ ply_command_add_option (command, option_name, option_description, option_type);
- option_name = va_arg (args, const char *);
- }
- va_end (args);
+ option_name = va_arg (args, const char *);
+ }
+ va_end (args);
- ply_list_append_data (parser->available_subcommands, command);
+ ply_list_append_data (parser->available_subcommands, command);
- parser->longest_command_length = MAX (parser->longest_command_length, strlen (name));
+ parser->longest_command_length = MAX (parser->longest_command_length, strlen (name));
}
static void
ply_command_parser_set_arguments (ply_command_parser_t *parser,
- char * const *arguments,
+ char *const *arguments,
int number_of_arguments)
{
- int i;
+ int i;
- assert (parser != NULL);
- assert (arguments != NULL);
+ assert (parser != NULL);
+ assert (arguments != NULL);
- ply_list_free (parser->arguments);
- parser->arguments = ply_list_new ();
+ ply_list_free (parser->arguments);
+ parser->arguments = ply_list_new ();
- for (i = 0; arguments[i] != NULL; i++)
- ply_list_append_data (parser->arguments, arguments[i]);
+ for (i = 0; arguments[i] != NULL; i++) {
+ ply_list_append_data (parser->arguments, arguments[i]);
+ }
}
static ply_command_t *
ply_command_parser_get_command (ply_command_parser_t *parser,
const char *command_name)
{
- ply_command_t *command;
- ply_list_node_t *node;
+ ply_command_t *command;
+ ply_list_node_t *node;
- command = NULL;
- node = ply_list_get_first_node (parser->available_subcommands);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_list_node_t *alias_node;
- char *alias_name;
+ command = NULL;
+ node = ply_list_get_first_node (parser->available_subcommands);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_list_node_t *alias_node;
+ char *alias_name;
- command = (ply_command_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (parser->available_subcommands, node);
+ command = (ply_command_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (parser->available_subcommands, node);
- if (strcmp (command_name, command->name) == 0)
- return command;
- alias_node = ply_list_get_first_node (command->aliases);
- while (alias_node)
- {
- alias_name = (char *) ply_list_node_get_data (alias_node);
- if (strcmp (command_name, alias_name) == 0)
- return command;
-
- alias_node = ply_list_get_next_node (command->aliases, alias_node);
- }
+ if (strcmp (command_name, command->name) == 0)
+ return command;
+ alias_node = ply_list_get_first_node (command->aliases);
+ while (alias_node) {
+ alias_name = (char *) ply_list_node_get_data (alias_node);
+ if (strcmp (command_name, alias_name) == 0)
+ return command;
+
+ alias_node = ply_list_get_next_node (command->aliases, alias_node);
+ }
- node = next_node;
- }
+ node = next_node;
+ }
- return NULL;
+ return NULL;
}
void ply_command_parser_add_command_alias (ply_command_parser_t *parser,
const char *name,
const char *alias)
{
- ply_command_t *command;
+ ply_command_t *command;
- assert (parser != NULL);
- assert (name != NULL);
- assert (alias != NULL);
+ assert (parser != NULL);
+ assert (name != NULL);
+ assert (alias != NULL);
- command = ply_command_parser_get_command (parser, name);
- ply_list_append_data (command->aliases, strdup(alias));
+ command = ply_command_parser_get_command (parser, name);
+ ply_list_append_data (command->aliases, strdup (alias));
}
static void
@@ -527,70 +514,66 @@ ply_command_parser_get_option_for_command (ply_command_parser_t *parser,
void *option_result,
bool *option_is_set)
{
- ply_command_option_t *option;
-
- option = ply_command_get_option (command, option_name);
-
- if (option == NULL)
- return;
-
- if (option_result != NULL)
- {
- switch (option->type)
- {
- case PLY_COMMAND_OPTION_TYPE_FLAG:
- case PLY_COMMAND_OPTION_TYPE_BOOLEAN:
- {
- *(bool *)option_result = option->result.as_boolean;
- }
- break;
-
- case PLY_COMMAND_OPTION_TYPE_STRING:
- {
- if (option->result.as_string != NULL)
- *(char **)option_result = strdup (option->result.as_string);
- else
- *(char **)option_result = NULL;
- }
- break;
-
- case PLY_COMMAND_OPTION_TYPE_INTEGER:
- {
- *(int *)option_result = option->result.as_integer;
- }
- break;
+ ply_command_option_t *option;
+
+ option = ply_command_get_option (command, option_name);
+
+ if (option == NULL)
+ return;
+
+ if (option_result != NULL) {
+ switch (option->type) {
+ case PLY_COMMAND_OPTION_TYPE_FLAG:
+ case PLY_COMMAND_OPTION_TYPE_BOOLEAN:
+ {
+ *(bool *) option_result = option->result.as_boolean;
+ }
+ break;
+
+ case PLY_COMMAND_OPTION_TYPE_STRING:
+ {
+ if (option->result.as_string != NULL)
+ *(char **) option_result = strdup (option->result.as_string);
+ else
+ *(char **) option_result = NULL;
+ }
+ break;
+
+ case PLY_COMMAND_OPTION_TYPE_INTEGER:
+ {
+ *(int *) option_result = option->result.as_integer;
+ }
+ break;
+ }
}
- }
- if (option_is_set != NULL)
- *option_is_set = option->was_set;
+ if (option_is_set != NULL)
+ *option_is_set = option->was_set;
}
static void
ply_command_parser_get_options_for_command (ply_command_parser_t *parser,
- ply_command_t *command,
- const char *option_name,
- va_list args)
+ ply_command_t *command,
+ const char *option_name,
+ va_list args)
{
+ assert (parser != NULL);
+ assert (command != NULL);
+ assert (option_name != NULL);
- assert (parser != NULL);
- assert (command != NULL);
- assert (option_name != NULL);
-
- while (option_name != NULL)
- {
- void *option_result;
+ while (option_name != NULL) {
+ void *option_result;
- option_result = va_arg (args, void *);
+ option_result = va_arg (args, void *);
- ply_command_parser_get_option_for_command (parser,
- command,
- option_name,
- option_result,
- NULL);
+ ply_command_parser_get_option_for_command (parser,
+ command,
+ option_name,
+ option_result,
+ NULL);
- option_name = va_arg (args, const char *);
- }
+ option_name = va_arg (args, const char *);
+ }
}
void
@@ -599,31 +582,31 @@ ply_command_parser_get_option (ply_command_parser_t *parser,
void *option_result,
bool *option_is_set)
{
- assert (parser != NULL);
- assert (option_name != NULL);
+ assert (parser != NULL);
+ assert (option_name != NULL);
- ply_command_parser_get_option_for_command (parser,
- parser->main_command,
- option_name,
- option_result,
- option_is_set);
+ ply_command_parser_get_option_for_command (parser,
+ parser->main_command,
+ option_name,
+ option_result,
+ option_is_set);
}
void
ply_command_parser_get_options (ply_command_parser_t *parser,
- const char *option_name, /*
- void * option_result,
- bool * option_was_set */
+ const char *option_name, /*
+ * void * option_result,
+ * bool * option_was_set */
...)
{
- va_list args;
+ va_list args;
- assert (parser != NULL);
- assert (option_name != NULL);
+ assert (parser != NULL);
+ assert (option_name != NULL);
- va_start (args, option_name);
- ply_command_parser_get_options_for_command (parser, parser->main_command, option_name, args);
- va_end (args);
+ va_start (args, option_name);
+ ply_command_parser_get_options_for_command (parser, parser->main_command, option_name, args);
+ va_end (args);
}
void
@@ -633,76 +616,76 @@ ply_command_parser_get_command_option (ply_command_parser_t *parser,
void *option_result,
bool *option_is_set)
{
- ply_command_t *command;
+ ply_command_t *command;
- assert (parser != NULL);
- assert (command_name != NULL);
- assert (option_name != NULL);
+ assert (parser != NULL);
+ assert (command_name != NULL);
+ assert (option_name != NULL);
- command = ply_command_parser_get_command (parser, command_name);
+ command = ply_command_parser_get_command (parser, command_name);
- if (command == NULL)
- return;
+ if (command == NULL)
+ return;
- ply_command_parser_get_option_for_command (parser,
- parser->main_command,
- option_name,
- option_result,
- option_is_set);
+ ply_command_parser_get_option_for_command (parser,
+ parser->main_command,
+ option_name,
+ option_result,
+ option_is_set);
}
void
ply_command_parser_get_command_options (ply_command_parser_t *parser,
- const char *command_name,
- const char *option_name, /*
- void * option_result,
- bool * option_was_set */
+ const char *command_name,
+ const char *option_name, /*
+ * void * option_result,
+ * bool * option_was_set */
...)
{
- ply_command_t *command;
- va_list args;
+ ply_command_t *command;
+ va_list args;
- assert (parser != NULL);
- assert (command_name != NULL);
- assert (option_name != NULL);
+ assert (parser != NULL);
+ assert (command_name != NULL);
+ assert (option_name != NULL);
- command = ply_command_parser_get_command (parser, command_name);
+ command = ply_command_parser_get_command (parser, command_name);
- if (command == NULL)
- return;
+ if (command == NULL)
+ return;
- va_start (args, option_name);
- ply_command_parser_get_options_for_command (parser, command, option_name, args);
- va_end (args);
+ va_start (args, option_name);
+ ply_command_parser_get_options_for_command (parser, command, option_name, args);
+ va_end (args);
- ply_list_append_data (parser->available_subcommands, command);
+ ply_list_append_data (parser->available_subcommands, command);
}
static void
ply_command_parser_detach_from_event_loop (ply_command_parser_t *parser)
{
- parser->loop = NULL;
+ parser->loop = NULL;
}
void
ply_command_parser_stop_parsing_arguments (ply_command_parser_t *parser)
{
- assert (parser != NULL);
+ assert (parser != NULL);
- if (parser->loop == NULL)
- return;
+ if (parser->loop == NULL)
+ return;
- ply_event_loop_stop_watching_for_exit (parser->loop,
- (ply_event_loop_exit_handler_t)
- ply_command_parser_detach_from_event_loop,
- parser);
+ ply_event_loop_stop_watching_for_exit (parser->loop,
+ (ply_event_loop_exit_handler_t)
+ ply_command_parser_detach_from_event_loop,
+ parser);
}
static bool
argument_is_option (const char *argument)
{
- return argument[0] == '-' && argument[1] == '-';
+ return argument[0] == '-' && argument[1] == '-';
}
static bool
@@ -710,262 +693,255 @@ ply_command_option_read_arguments (ply_command_option_t *option,
ply_list_t *arguments)
{
- ply_list_node_t *node;
- const char *argument;
+ ply_list_node_t *node;
+ const char *argument;
- assert (option != NULL);
+ assert (option != NULL);
- node = ply_list_get_first_node (arguments);
+ node = ply_list_get_first_node (arguments);
- if (node == NULL)
- {
- if (option->type == PLY_COMMAND_OPTION_TYPE_BOOLEAN ||
- option->type == PLY_COMMAND_OPTION_TYPE_FLAG)
- {
- option->result.as_boolean = true;
- return true;
+ if (node == NULL) {
+ if (option->type == PLY_COMMAND_OPTION_TYPE_BOOLEAN ||
+ option->type == PLY_COMMAND_OPTION_TYPE_FLAG) {
+ option->result.as_boolean = true;
+ return true;
+ }
+
+ return false;
}
- return false;
- }
+ argument = (const char *) ply_list_node_get_data (node);
- argument = (const char *) ply_list_node_get_data (node);
+ assert (argument != NULL);
- assert (argument != NULL);
+ if (argument_is_option (argument)) {
+ if (option->type == PLY_COMMAND_OPTION_TYPE_BOOLEAN ||
+ option->type == PLY_COMMAND_OPTION_TYPE_FLAG) {
+ option->result.as_boolean = true;
+ return true;
+ }
- if (argument_is_option (argument))
- {
- if (option->type == PLY_COMMAND_OPTION_TYPE_BOOLEAN ||
- option->type == PLY_COMMAND_OPTION_TYPE_FLAG)
- {
- option->result.as_boolean = true;
- return true;
+ return false;
}
- return false;
- }
-
- switch (option->type)
- {
- case PLY_COMMAND_OPTION_TYPE_FLAG:
- case PLY_COMMAND_OPTION_TYPE_BOOLEAN:
-
- /* next argument isn't ours, so treat it like an unqualified
- * flag
- */
- if (rpmatch (argument) < 0)
- {
- option->result.as_boolean = true;
- return true;
- }
-
- option->result.as_boolean = (bool) rpmatch (argument);
- ply_list_remove_node (arguments, node);
- return true;
-
- case PLY_COMMAND_OPTION_TYPE_STRING:
- option->result.as_string = strdup (argument);
- ply_list_remove_node (arguments, node);
- return true;
+ switch (option->type) {
+ case PLY_COMMAND_OPTION_TYPE_FLAG:
+ case PLY_COMMAND_OPTION_TYPE_BOOLEAN:
+
+ /* next argument isn't ours, so treat it like an unqualified
+ * flag
+ */
+ if (rpmatch (argument) < 0) {
+ option->result.as_boolean = true;
+ return true;
+ }
+
+ option->result.as_boolean = (bool) rpmatch (argument);
+ ply_list_remove_node (arguments, node);
+ return true;
+
+ case PLY_COMMAND_OPTION_TYPE_STRING:
+ option->result.as_string = strdup (argument);
+ ply_list_remove_node (arguments, node);
+ return true;
- case PLY_COMMAND_OPTION_TYPE_INTEGER:
+ case PLY_COMMAND_OPTION_TYPE_INTEGER:
{
- char *end;
- long argument_as_long;
+ char *end;
+ long argument_as_long;
- if (argument[0] == '\0')
- return false;
+ if (argument[0] == '\0')
+ return false;
- argument_as_long = strtol (argument, &end, 0);
+ argument_as_long = strtol (argument, &end, 0);
- if (*end != '\0')
- return false;
+ if (*end != '\0')
+ return false;
- if (argument_as_long == LONG_MIN &&
- errno == ERANGE)
- return false;
+ if (argument_as_long == LONG_MIN &&
+ errno == ERANGE)
+ return false;
- if (argument_as_long > INT_MAX)
- return false;
+ if (argument_as_long > INT_MAX)
+ return false;
- option->result.as_integer = (int) argument_as_long;
- ply_list_remove_node (arguments, node);
- return true;
+ option->result.as_integer = (int) argument_as_long;
+ ply_list_remove_node (arguments, node);
+ return true;
+ }
}
- }
- return option;
+ return option;
}
static ply_command_option_t *
ply_command_read_option (ply_command_t *command,
ply_list_t *arguments)
{
- ply_list_node_t *node;
- const char *argument;
- char *option_name;
- char *option_separator;
- ply_command_option_t *option;
+ ply_list_node_t *node;
+ const char *argument;
+ char *option_name;
+ char *option_separator;
+ ply_command_option_t *option;
- node = ply_list_get_first_node (arguments);
+ node = ply_list_get_first_node (arguments);
- if (node == NULL)
- return NULL;
+ if (node == NULL)
+ return NULL;
- argument = (const char *) ply_list_node_get_data (node);
+ argument = (const char *) ply_list_node_get_data (node);
- assert (argument != NULL);
+ assert (argument != NULL);
- if (!argument_is_option (argument))
- return NULL;
+ if (!argument_is_option (argument))
+ return NULL;
- option_name = strdup (argument + strlen ("--"));
- option_separator = strchr (option_name, '=');
+ option_name = strdup (argument + strlen ("--"));
+ option_separator = strchr (option_name, '=');
- if (option_separator != NULL)
- {
- *option_separator = '\0';
- ply_list_insert_data (arguments,
- (void *) (argument +
- ((ptrdiff_t) (option_separator - option_name + 1)) +
- strlen ("=") + 1),
- node);
- }
+ if (option_separator != NULL) {
+ *option_separator = '\0';
+ ply_list_insert_data (arguments,
+ (void *) (argument +
+ ((ptrdiff_t) (option_separator - option_name + 1)) +
+ strlen ("=") + 1),
+ node);
+ }
- option = ply_command_get_option (command, option_name);
- free (option_name);
+ option = ply_command_get_option (command, option_name);
+ free (option_name);
- if (option == NULL)
- return NULL;
+ if (option == NULL)
+ return NULL;
- ply_list_remove_node (arguments, node);
+ ply_list_remove_node (arguments, node);
- if (ply_command_option_read_arguments (option, arguments))
- option->was_set = true;
+ if (ply_command_option_read_arguments (option, arguments))
+ option->was_set = true;
- return option;
+ return option;
}
static bool
argument_is_command (const char *argument)
{
- return !argument_is_option (argument);
+ return !argument_is_option (argument);
}
static ply_command_t *
ply_command_parser_read_command (ply_command_parser_t *parser)
{
- ply_list_node_t *node;
- const char *argument;
- ply_command_t *command;
+ ply_list_node_t *node;
+ const char *argument;
+ ply_command_t *command;
- node = ply_list_get_first_node (parser->arguments);
+ node = ply_list_get_first_node (parser->arguments);
- if (node == NULL)
- return NULL;
+ if (node == NULL)
+ return NULL;
- argument = (const char *) ply_list_node_get_data (node);
+ argument = (const char *) ply_list_node_get_data (node);
- assert (argument != NULL);
+ assert (argument != NULL);
- if (!argument_is_command (argument))
- return NULL;
+ if (!argument_is_command (argument))
+ return NULL;
- command = ply_command_parser_get_command (parser, argument);
+ command = ply_command_parser_get_command (parser, argument);
- if (command == NULL)
- return NULL;
+ if (command == NULL)
+ return NULL;
- ply_list_remove_node (parser->arguments, node);
+ ply_list_remove_node (parser->arguments, node);
- while (ply_command_read_option (command, parser->arguments) != NULL);
+ while (ply_command_read_option (command, parser->arguments) != NULL) {
+ }
- return command;
+ return command;
}
static void
on_command_dispatch_timeout (ply_command_parser_t *parser)
{
+ ply_command_t *command;
+ ply_list_node_t *node;
- ply_command_t *command;
- ply_list_node_t *node;
-
- command = NULL;
- node = ply_list_get_first_node (parser->read_subcommands);
+ command = NULL;
+ node = ply_list_get_first_node (parser->read_subcommands);
- if (node == NULL)
- {
- parser->dispatch_is_queued = false;
- return;
- }
+ if (node == NULL) {
+ parser->dispatch_is_queued = false;
+ return;
+ }
- command = (ply_command_t *) ply_list_node_get_data (node);
+ command = (ply_command_t *) ply_list_node_get_data (node);
- assert (command != NULL);
+ assert (command != NULL);
- ply_event_loop_watch_for_timeout (parser->loop, 0.01,
- (ply_event_loop_timeout_handler_t)
- on_command_dispatch_timeout,
- parser);
+ ply_event_loop_watch_for_timeout (parser->loop, 0.01,
+ (ply_event_loop_timeout_handler_t)
+ on_command_dispatch_timeout,
+ parser);
- if (command->handler != NULL)
- command->handler (command->handler_data, command->name);
+ if (command->handler != NULL)
+ command->handler (command->handler_data, command->name);
- ply_list_remove_node (parser->read_subcommands, node);
+ ply_list_remove_node (parser->read_subcommands, node);
}
static void
ply_command_parser_queue_command_dispatch (ply_command_parser_t *parser)
{
- if (parser->dispatch_is_queued)
- return;
+ if (parser->dispatch_is_queued)
+ return;
- ply_event_loop_watch_for_timeout (parser->loop, 0.01,
- (ply_event_loop_timeout_handler_t)
- on_command_dispatch_timeout,
- parser);
+ ply_event_loop_watch_for_timeout (parser->loop, 0.01,
+ (ply_event_loop_timeout_handler_t)
+ on_command_dispatch_timeout,
+ parser);
}
bool
ply_command_parser_parse_arguments (ply_command_parser_t *parser,
ply_event_loop_t *loop,
- char * const *arguments,
+ char *const *arguments,
int number_of_arguments)
{
- ply_command_t *command;
- bool parsed_arguments;
+ ply_command_t *command;
+ bool parsed_arguments;
- assert (parser != NULL);
- assert (loop != NULL);
- assert (parser->loop == NULL);
- assert (number_of_arguments >= 1);
+ assert (parser != NULL);
+ assert (loop != NULL);
+ assert (parser->loop == NULL);
+ assert (number_of_arguments >= 1);
- parsed_arguments = false;
+ parsed_arguments = false;
- if (number_of_arguments == 1)
- return true;
+ if (number_of_arguments == 1)
+ return true;
- ply_command_parser_set_arguments (parser, arguments + 1, number_of_arguments - 1);
+ ply_command_parser_set_arguments (parser, arguments + 1, number_of_arguments - 1);
- while (ply_command_read_option (parser->main_command, parser->arguments) != NULL)
- parsed_arguments = true;
+ while (ply_command_read_option (parser->main_command, parser->arguments) != NULL) {
+ parsed_arguments = true;
+ }
- parser->loop = loop;
+ parser->loop = loop;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- ply_command_parser_detach_from_event_loop,
- parser);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ ply_command_parser_detach_from_event_loop,
+ parser);
- while ((command = ply_command_parser_read_command (parser)) != NULL)
- ply_list_append_data (parser->read_subcommands, command);
+ while ((command = ply_command_parser_read_command (parser)) != NULL) {
+ ply_list_append_data (parser->read_subcommands, command);
+ }
- if (ply_list_get_length (parser->read_subcommands) > 0)
- {
- ply_command_parser_queue_command_dispatch (parser);
- parsed_arguments = true;
- }
+ if (ply_list_get_length (parser->read_subcommands) > 0) {
+ ply_command_parser_queue_command_dispatch (parser);
+ parsed_arguments = true;
+ }
- return parsed_arguments;
+ return parsed_arguments;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-command-parser.h b/src/libply/ply-command-parser.h
index 8af00578..33f2efbc 100644
--- a/src/libply/ply-command-parser.h
+++ b/src/libply/ply-command-parser.h
@@ -27,15 +27,15 @@
#include "ply-event-loop.h"
typedef struct _ply_command_parser ply_command_parser_t;
-typedef void (* ply_command_handler_t) (void *data,
- const char *command);
+typedef void (*ply_command_handler_t) (void *data,
+ const char *command);
typedef enum
{
- PLY_COMMAND_OPTION_TYPE_FLAG = 0,
- PLY_COMMAND_OPTION_TYPE_BOOLEAN,
- PLY_COMMAND_OPTION_TYPE_STRING,
- PLY_COMMAND_OPTION_TYPE_INTEGER
+ PLY_COMMAND_OPTION_TYPE_FLAG = 0,
+ PLY_COMMAND_OPTION_TYPE_BOOLEAN,
+ PLY_COMMAND_OPTION_TYPE_STRING,
+ PLY_COMMAND_OPTION_TYPE_INTEGER
} ply_command_option_type_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
@@ -43,34 +43,35 @@ ply_command_parser_t *ply_command_parser_new (const char *name,
const char *description);
void ply_command_parser_add_options (ply_command_parser_t *parser,
- const char *option_name, /*
- const char *option_description,
- ply_option_argument_type_t option_type */
+ const char *option_name, /*
+ * const char *option_description,
+ * ply_option_argument_type_t option_type */
...);
void ply_command_parser_add_command (ply_command_parser_t *parser,
- const char *name, const char *description,
+ const char *name,
+ const char *description,
ply_command_handler_t handler,
- void *handler_data,
- const char *option_name, /*
- const char *option_description,
- ply_option_argument_type_t option_type */
+ void *handler_data,
+ const char *option_name, /*
+ * const char *option_description,
+ * ply_option_argument_type_t option_type */
...);
void ply_command_parser_add_command_alias (ply_command_parser_t *parser,
const char *name,
const char *alias);
void ply_command_parser_get_options (ply_command_parser_t *parser,
- const char *option_name, /*
- void * option_result */
+ const char *option_name, /*
+ * void * option_result */
...);
void ply_command_parser_get_option (ply_command_parser_t *parser,
const char *option_name,
void *option_result,
bool *option_is_set);
void ply_command_parser_get_command_options (ply_command_parser_t *parser,
- const char *command_name,
- const char *option_name, /*
- void * option_result,
- bool * option_was_set */
+ const char *command_name,
+ const char *option_name, /*
+ * void * option_result,
+ * bool * option_was_set */
...);
void ply_command_parser_get_command_option (ply_command_parser_t *parser,
const char *command_name,
@@ -83,7 +84,7 @@ char *ply_command_parser_get_help_string (ply_command_parser_t *parser);
bool ply_command_parser_parse_arguments (ply_command_parser_t *parser,
ply_event_loop_t *loop,
- char * const *arguments,
+ char *const *arguments,
int number_of_arguments);
void ply_command_parser_free (ply_command_parser_t *command_parser);
#endif
diff --git a/src/libply/ply-event-loop.c b/src/libply/ply-event-loop.c
index 71ba852d..9736dae9 100644
--- a/src/libply/ply-event-loop.c
+++ b/src/libply/ply-event-loop.c
@@ -51,36 +51,36 @@
typedef struct
{
- int fd;
- ply_list_t *destinations;
- ply_list_t *fd_watches;
- uint32_t is_getting_polled : 1;
- uint32_t is_disconnected : 1;
- int reference_count;
+ int fd;
+ ply_list_t *destinations;
+ ply_list_t *fd_watches;
+ uint32_t is_getting_polled : 1;
+ uint32_t is_disconnected : 1;
+ int reference_count;
} ply_event_source_t;
typedef struct
{
- ply_event_source_t *source;
+ ply_event_source_t *source;
- ply_event_loop_fd_status_t status;
- ply_event_handler_t status_met_handler;
- ply_event_handler_t disconnected_handler;
- void *user_data;
+ ply_event_loop_fd_status_t status;
+ ply_event_handler_t status_met_handler;
+ ply_event_handler_t disconnected_handler;
+ void *user_data;
} ply_event_destination_t;
struct _ply_fd_watch
{
- ply_event_destination_t *destination;
+ ply_event_destination_t *destination;
};
typedef struct
{
- int signal_number;
- ply_event_handler_t handler;
- void *user_data;
+ int signal_number;
+ ply_event_handler_t handler;
+ void *user_data;
- sighandler_t old_posix_signal_handler;
+ sighandler_t old_posix_signal_handler;
} ply_signal_source_t;
static int ply_signal_dispatcher_sender_fd = -1,
@@ -88,38 +88,38 @@ static int ply_signal_dispatcher_sender_fd = -1,
typedef struct
{
- ply_list_t *sources;
+ ply_list_t *sources;
} ply_signal_dispatcher_t;
typedef struct
{
- ply_event_loop_exit_handler_t handler;
- void *user_data;
+ ply_event_loop_exit_handler_t handler;
+ void *user_data;
} ply_event_loop_exit_closure_t;
typedef struct
{
- double timeout;
- ply_event_loop_timeout_handler_t handler;
- void *user_data;
+ double timeout;
+ ply_event_loop_timeout_handler_t handler;
+ void *user_data;
} ply_event_loop_timeout_watch_t;
struct _ply_event_loop
{
- int epoll_fd;
- int exit_code;
- double wakeup_time;
+ int epoll_fd;
+ int exit_code;
+ double wakeup_time;
- ply_list_t *sources;
- ply_list_t *exit_closures;
- ply_list_t *timeout_watches;
+ ply_list_t *sources;
+ ply_list_t *exit_closures;
+ ply_list_t *timeout_watches;
- ply_signal_dispatcher_t *signal_dispatcher;
+ ply_signal_dispatcher_t *signal_dispatcher;
- uint32_t should_exit : 1;
+ uint32_t should_exit : 1;
};
-static void ply_event_loop_remove_source (ply_event_loop_t *loop,
+static void ply_event_loop_remove_source (ply_event_loop_t *loop,
ply_event_source_t *source);
static ply_list_node_t *ply_event_loop_find_source_node (ply_event_loop_t *loop,
int fd);
@@ -130,292 +130,283 @@ ply_signal_dispatcher_find_source_node (ply_signal_dispatcher_t *dispatcher,
static ply_signal_source_t *
-ply_signal_source_new (int signal_number,
- ply_event_handler_t signal_handler,
- void *user_data)
+ply_signal_source_new (int signal_number,
+ ply_event_handler_t signal_handler,
+ void *user_data)
{
- ply_signal_source_t *source;
+ ply_signal_source_t *source;
- source = calloc (1, sizeof (ply_signal_source_t));
- source->signal_number = signal_number;
- source->handler = signal_handler;
- source->user_data = user_data;
- source->old_posix_signal_handler = NULL;
+ source = calloc (1, sizeof(ply_signal_source_t));
+ source->signal_number = signal_number;
+ source->handler = signal_handler;
+ source->user_data = user_data;
+ source->old_posix_signal_handler = NULL;
- return source;
+ return source;
}
static void
ply_signal_source_free (ply_signal_source_t *handler)
{
- if (handler == NULL)
- return;
+ if (handler == NULL)
+ return;
- free (handler);
+ free (handler);
}
static ply_signal_dispatcher_t *
ply_signal_dispatcher_new (void)
{
- ply_signal_dispatcher_t *dispatcher;
+ ply_signal_dispatcher_t *dispatcher;
- if (!ply_open_unidirectional_pipe (&ply_signal_dispatcher_sender_fd,
- &ply_signal_dispatcher_receiver_fd))
- return NULL;
+ if (!ply_open_unidirectional_pipe (&ply_signal_dispatcher_sender_fd,
+ &ply_signal_dispatcher_receiver_fd))
+ return NULL;
- dispatcher = calloc (1, sizeof (ply_signal_dispatcher_t));
+ dispatcher = calloc (1, sizeof(ply_signal_dispatcher_t));
- dispatcher->sources = ply_list_new ();
+ dispatcher->sources = ply_list_new ();
- return dispatcher;
+ return dispatcher;
}
static void
ply_signal_dispatcher_free (ply_signal_dispatcher_t *dispatcher)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (dispatcher == NULL)
- return;
+ if (dispatcher == NULL)
+ return;
- close (ply_signal_dispatcher_receiver_fd);
- ply_signal_dispatcher_receiver_fd = -1;
- close (ply_signal_dispatcher_sender_fd);
- ply_signal_dispatcher_sender_fd = -1;
+ close (ply_signal_dispatcher_receiver_fd);
+ ply_signal_dispatcher_receiver_fd = -1;
+ close (ply_signal_dispatcher_sender_fd);
+ ply_signal_dispatcher_sender_fd = -1;
- node = ply_list_get_first_node (dispatcher->sources);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_signal_source_t *source;
+ node = ply_list_get_first_node (dispatcher->sources);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_signal_source_t *source;
- source = (ply_signal_source_t *) ply_list_node_get_data (node);
+ source = (ply_signal_source_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (dispatcher->sources, node);
+ next_node = ply_list_get_next_node (dispatcher->sources, node);
- ply_signal_source_free (source);
+ ply_signal_source_free (source);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (dispatcher->sources);
+ ply_list_free (dispatcher->sources);
- free (dispatcher);
+ free (dispatcher);
}
static void
ply_signal_dispatcher_posix_signal_handler (int signal_number)
{
- if (ply_signal_dispatcher_sender_fd < 0)
- return;
+ if (ply_signal_dispatcher_sender_fd < 0)
+ return;
- ply_write (ply_signal_dispatcher_sender_fd, &signal_number,
- sizeof (signal_number));
+ ply_write (ply_signal_dispatcher_sender_fd, &signal_number,
+ sizeof(signal_number));
}
static int
ply_signal_dispatcher_get_next_signal_from_pipe (ply_signal_dispatcher_t *dispatcher)
{
- int signal_number;
+ int signal_number;
- if (!ply_read (ply_signal_dispatcher_receiver_fd, &signal_number,
- sizeof (signal_number)))
- signal_number = 0;
+ if (!ply_read (ply_signal_dispatcher_receiver_fd, &signal_number,
+ sizeof(signal_number)))
+ signal_number = 0;
- return signal_number;
+ return signal_number;
}
static void
ply_signal_dispatcher_dispatch_signal (ply_signal_dispatcher_t *dispatcher,
int fd)
{
- ply_list_node_t *node;
- int signal_number;
+ ply_list_node_t *node;
+ int signal_number;
- assert (fd == ply_signal_dispatcher_receiver_fd);
+ assert (fd == ply_signal_dispatcher_receiver_fd);
- signal_number = ply_signal_dispatcher_get_next_signal_from_pipe (dispatcher);
+ signal_number = ply_signal_dispatcher_get_next_signal_from_pipe (dispatcher);
- node = ply_list_get_first_node (dispatcher->sources);
- while (node != NULL)
- {
- ply_signal_source_t *source;
+ node = ply_list_get_first_node (dispatcher->sources);
+ while (node != NULL) {
+ ply_signal_source_t *source;
- source = (ply_signal_source_t *) ply_list_node_get_data (node);
+ source = (ply_signal_source_t *) ply_list_node_get_data (node);
- if (source->signal_number == signal_number)
- {
- if (source->handler != NULL)
- source->handler (source->user_data, signal_number);
- }
+ if (source->signal_number == signal_number)
+ if (source->handler != NULL)
+ source->handler (source->user_data, signal_number);
- node = ply_list_get_next_node (dispatcher->sources, node);
- }
+ node = ply_list_get_next_node (dispatcher->sources, node);
+ }
}
static void
ply_signal_dispatcher_reset_signal_sources (ply_signal_dispatcher_t *dispatcher,
int fd)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (dispatcher->sources);
- while (node != NULL)
- {
- ply_signal_source_t *handler;
+ node = ply_list_get_first_node (dispatcher->sources);
+ while (node != NULL) {
+ ply_signal_source_t *handler;
- handler = (ply_signal_source_t *) ply_list_node_get_data (node);
+ handler = (ply_signal_source_t *) ply_list_node_get_data (node);
- signal (handler->signal_number,
- handler->old_posix_signal_handler != NULL?
- handler->old_posix_signal_handler : SIG_DFL);
+ signal (handler->signal_number,
+ handler->old_posix_signal_handler != NULL ?
+ handler->old_posix_signal_handler : SIG_DFL);
- node = ply_list_get_next_node (dispatcher->sources, node);
- }
+ node = ply_list_get_next_node (dispatcher->sources, node);
+ }
}
static ply_event_destination_t *
-ply_event_destination_new (ply_event_loop_fd_status_t status,
- ply_event_handler_t status_met_handler,
- ply_event_handler_t disconnected_handler,
- void *user_data)
+ply_event_destination_new (ply_event_loop_fd_status_t status,
+ ply_event_handler_t status_met_handler,
+ ply_event_handler_t disconnected_handler,
+ void *user_data)
{
- ply_event_destination_t *destination;
+ ply_event_destination_t *destination;
- destination = calloc (1, sizeof (ply_event_destination_t));
+ destination = calloc (1, sizeof(ply_event_destination_t));
- destination->source = NULL;
- destination->status = status;
- destination->status_met_handler = status_met_handler;
- destination->disconnected_handler = disconnected_handler;
- destination->user_data = user_data;
+ destination->source = NULL;
+ destination->status = status;
+ destination->status_met_handler = status_met_handler;
+ destination->disconnected_handler = disconnected_handler;
+ destination->user_data = user_data;
- return destination;
+ return destination;
}
static void
ply_event_destination_free (ply_event_destination_t *destination)
{
- if (destination == NULL)
- return;
+ if (destination == NULL)
+ return;
- free (destination);
+ free (destination);
}
static ply_fd_watch_t *
ply_fd_watch_new (ply_event_destination_t *destination)
{
- ply_fd_watch_t *watch;
+ ply_fd_watch_t *watch;
- watch = calloc (1, sizeof (ply_fd_watch_t));
- watch->destination = destination;
+ watch = calloc (1, sizeof(ply_fd_watch_t));
+ watch->destination = destination;
- return watch;
+ return watch;
}
static void
ply_fd_watch_free (ply_fd_watch_t *watch)
{
- watch->destination = NULL;
- free (watch);
+ watch->destination = NULL;
+ free (watch);
}
static void
ply_event_source_take_reference (ply_event_source_t *source)
{
- source->reference_count++;
+ source->reference_count++;
}
static ply_event_source_t *
ply_event_source_new (int fd)
{
- ply_event_source_t *source;
+ ply_event_source_t *source;
- source = calloc (1, sizeof (ply_event_source_t));
+ source = calloc (1, sizeof(ply_event_source_t));
- source->fd = fd;
- source->destinations = ply_list_new ();
- source->fd_watches = ply_list_new ();
- source->is_getting_polled = false;
- source->is_disconnected = false;
- source->reference_count = 0;
+ source->fd = fd;
+ source->destinations = ply_list_new ();
+ source->fd_watches = ply_list_new ();
+ source->is_getting_polled = false;
+ source->is_disconnected = false;
+ source->reference_count = 0;
- return source;
+ return source;
}
static void
ply_event_source_free (ply_event_source_t *source)
{
- if (source == NULL)
- return;
+ if (source == NULL)
+ return;
- assert (ply_list_get_length (source->destinations) == 0);
+ assert (ply_list_get_length (source->destinations) == 0);
- ply_list_free (source->destinations);
- ply_list_free (source->fd_watches);
- free (source);
+ ply_list_free (source->destinations);
+ ply_list_free (source->fd_watches);
+ free (source);
}
static void
ply_event_source_drop_reference (ply_event_source_t *source)
{
- if (source == NULL)
- return;
+ if (source == NULL)
+ return;
- source->reference_count--;
+ source->reference_count--;
- assert (source->reference_count >= 0);
+ assert (source->reference_count >= 0);
- if (source->reference_count == 0)
- {
- ply_event_source_free (source);
- }
+ if (source->reference_count == 0)
+ ply_event_source_free (source);
}
static void
ply_event_loop_update_source_event_mask (ply_event_loop_t *loop,
ply_event_source_t *source)
{
- ply_list_node_t *node;
- struct epoll_event event = { 0 };
+ ply_list_node_t *node;
+ struct epoll_event event = { 0 };
- assert (loop != NULL);
- assert (source != NULL);
- assert (source->destinations != NULL);
+ assert (loop != NULL);
+ assert (source != NULL);
+ assert (source->destinations != NULL);
- event.events = EPOLLERR | EPOLLHUP;
+ event.events = EPOLLERR | EPOLLHUP;
- node = ply_list_get_first_node (source->destinations);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_destination_t *destination;
+ node = ply_list_get_first_node (source->destinations);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_destination_t *destination;
- destination = (ply_event_destination_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (source->destinations, node);
+ destination = (ply_event_destination_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (source->destinations, node);
- if (destination->status & PLY_EVENT_LOOP_FD_STATUS_HAS_DATA)
- event.events |= EPOLLIN;
+ if (destination->status & PLY_EVENT_LOOP_FD_STATUS_HAS_DATA)
+ event.events |= EPOLLIN;
- if (destination->status & PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA)
- event.events |= EPOLLPRI;
+ if (destination->status & PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA)
+ event.events |= EPOLLPRI;
- if (destination->status & PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA)
- event.events |= EPOLLOUT;
+ if (destination->status & PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA)
+ event.events |= EPOLLOUT;
- node = next_node;
- }
- event.data.ptr = source;
+ node = next_node;
+ }
+ event.data.ptr = source;
- if (source->is_getting_polled)
- {
- int status;
+ if (source->is_getting_polled) {
+ int status;
- status = epoll_ctl (loop->epoll_fd, EPOLL_CTL_MOD, source->fd, &event);
+ status = epoll_ctl (loop->epoll_fd, EPOLL_CTL_MOD, source->fd, &event);
- if (status < 0)
- ply_trace ("failed to modify epoll event mask for fd %d: %m", source->fd);
- }
+ if (status < 0)
+ ply_trace ("failed to modify epoll event mask for fd %d: %m", source->fd);
+ }
}
static ply_fd_watch_t *
@@ -423,948 +414,909 @@ ply_event_loop_add_destination_for_source (ply_event_loop_t *loop,
ply_event_destination_t *destination,
ply_event_source_t *source)
{
- ply_list_node_t *destination_node;
- ply_fd_watch_t *watch;
+ ply_list_node_t *destination_node;
+ ply_fd_watch_t *watch;
- assert (loop != NULL);
- assert (destination != NULL);
- assert (destination->source == NULL);
- assert (source != NULL);
+ assert (loop != NULL);
+ assert (destination != NULL);
+ assert (destination->source == NULL);
+ assert (source != NULL);
- destination->source = source;
- ply_event_source_take_reference (source);
- destination_node = ply_list_append_data (source->destinations, destination);
- assert (destination_node != NULL);
- assert (destination->source == source);
+ destination->source = source;
+ ply_event_source_take_reference (source);
+ destination_node = ply_list_append_data (source->destinations, destination);
+ assert (destination_node != NULL);
+ assert (destination->source == source);
- ply_event_loop_update_source_event_mask (loop, source);
+ ply_event_loop_update_source_event_mask (loop, source);
- watch = ply_fd_watch_new (destination);
+ watch = ply_fd_watch_new (destination);
- ply_event_source_take_reference (source);
- ply_list_append_data (source->fd_watches, watch);
+ ply_event_source_take_reference (source);
+ ply_list_append_data (source->fd_watches, watch);
- return watch;
+ return watch;
}
static ply_event_destination_t *
ply_event_loop_get_destination_from_fd_watch (ply_event_loop_t *loop,
ply_fd_watch_t *watch)
{
- ply_event_destination_t *destination;
+ ply_event_destination_t *destination;
- assert (loop != NULL);
- assert (watch != NULL);
- assert (watch->destination != NULL);
+ assert (loop != NULL);
+ assert (watch != NULL);
+ assert (watch->destination != NULL);
- destination = watch->destination;
+ destination = watch->destination;
- return destination;
+ return destination;
}
static void
ply_event_loop_remove_destination_by_fd_watch (ply_event_loop_t *loop,
ply_fd_watch_t *watch)
{
- ply_event_destination_t *destination;
- ply_event_source_t *source;
+ ply_event_destination_t *destination;
+ ply_event_source_t *source;
- assert (loop != NULL);
- assert (watch != NULL);
+ assert (loop != NULL);
+ assert (watch != NULL);
- destination = ply_event_loop_get_destination_from_fd_watch (loop, watch);
- assert (destination != NULL);
+ destination = ply_event_loop_get_destination_from_fd_watch (loop, watch);
+ assert (destination != NULL);
- source = destination->source;
- assert (source != NULL);
+ source = destination->source;
+ assert (source != NULL);
- ply_list_remove_data (source->destinations, destination);
- ply_event_source_drop_reference (source);
- assert (ply_list_find_node (source->destinations, destination) == NULL);
- ply_event_loop_update_source_event_mask (loop, source);
+ ply_list_remove_data (source->destinations, destination);
+ ply_event_source_drop_reference (source);
+ assert (ply_list_find_node (source->destinations, destination) == NULL);
+ ply_event_loop_update_source_event_mask (loop, source);
}
ply_event_loop_t *
ply_event_loop_new (void)
{
- ply_event_loop_t *loop;
+ ply_event_loop_t *loop;
- loop = calloc (1, sizeof (ply_event_loop_t));
+ loop = calloc (1, sizeof(ply_event_loop_t));
- loop->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
- loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
+ loop->epoll_fd = epoll_create1 (EPOLL_CLOEXEC);
+ loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
- assert (loop->epoll_fd >= 0);
+ assert (loop->epoll_fd >= 0);
- loop->should_exit = false;
- loop->exit_code = 0;
+ loop->should_exit = false;
+ loop->exit_code = 0;
- loop->sources = ply_list_new ();
- loop->exit_closures = ply_list_new ();
- loop->timeout_watches = ply_list_new ();
+ loop->sources = ply_list_new ();
+ loop->exit_closures = ply_list_new ();
+ loop->timeout_watches = ply_list_new ();
- loop->signal_dispatcher = ply_signal_dispatcher_new ();
+ loop->signal_dispatcher = ply_signal_dispatcher_new ();
- if (loop->signal_dispatcher == NULL)
- return NULL;
+ if (loop->signal_dispatcher == NULL)
+ return NULL;
- ply_event_loop_watch_fd (loop,
- ply_signal_dispatcher_receiver_fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- ply_signal_dispatcher_dispatch_signal,
- (ply_event_handler_t)
- ply_signal_dispatcher_reset_signal_sources,
- loop->signal_dispatcher);
+ ply_event_loop_watch_fd (loop,
+ ply_signal_dispatcher_receiver_fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ ply_signal_dispatcher_dispatch_signal,
+ (ply_event_handler_t)
+ ply_signal_dispatcher_reset_signal_sources,
+ loop->signal_dispatcher);
- return loop;
+ return loop;
}
ply_event_loop_t *
ply_event_loop_get_default (void)
{
- static ply_event_loop_t *loop = NULL;
+ static ply_event_loop_t *loop = NULL;
- if (loop == NULL)
- loop = ply_event_loop_new ();
+ if (loop == NULL)
+ loop = ply_event_loop_new ();
- return loop;
+ return loop;
}
static void
ply_event_loop_free_exit_closures (ply_event_loop_t *loop)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (loop->exit_closures);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_loop_exit_closure_t *closure;
+ node = ply_list_get_first_node (loop->exit_closures);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_loop_exit_closure_t *closure;
- closure = (ply_event_loop_exit_closure_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (loop->exit_closures, node);
- free (closure);
+ closure = (ply_event_loop_exit_closure_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (loop->exit_closures, node);
+ free (closure);
- node = next_node;
- }
- ply_list_free (loop->exit_closures);
+ node = next_node;
+ }
+ ply_list_free (loop->exit_closures);
}
static void
ply_event_loop_run_exit_closures (ply_event_loop_t *loop)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (loop->exit_closures);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_loop_exit_closure_t *closure;
+ node = ply_list_get_first_node (loop->exit_closures);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_loop_exit_closure_t *closure;
- closure = (ply_event_loop_exit_closure_t *) ply_list_node_get_data (node);
+ closure = (ply_event_loop_exit_closure_t *) ply_list_node_get_data (node);
- assert (closure->handler != NULL);
- next_node = ply_list_get_next_node (loop->exit_closures, node);
+ assert (closure->handler != NULL);
+ next_node = ply_list_get_next_node (loop->exit_closures, node);
- closure->handler (closure->user_data, loop->exit_code, loop);
+ closure->handler (closure->user_data, loop->exit_code, loop);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_event_loop_free (ply_event_loop_t *loop)
{
- if (loop == NULL)
- return;
+ if (loop == NULL)
+ return;
- assert (ply_list_get_length (loop->sources) == 0);
- assert (ply_list_get_length (loop->timeout_watches) == 0);
+ assert (ply_list_get_length (loop->sources) == 0);
+ assert (ply_list_get_length (loop->timeout_watches) == 0);
- ply_signal_dispatcher_free (loop->signal_dispatcher);
- ply_event_loop_free_exit_closures (loop);
+ ply_signal_dispatcher_free (loop->signal_dispatcher);
+ ply_event_loop_free_exit_closures (loop);
- ply_list_free (loop->sources);
- ply_list_free (loop->timeout_watches);
+ ply_list_free (loop->sources);
+ ply_list_free (loop->timeout_watches);
- close (loop->epoll_fd);
- free (loop);
+ close (loop->epoll_fd);
+ free (loop);
}
static ply_list_node_t *
ply_event_loop_find_source_node (ply_event_loop_t *loop,
int fd)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (loop->sources);
- while (node != NULL)
- {
- ply_event_source_t *source;
+ node = ply_list_get_first_node (loop->sources);
+ while (node != NULL) {
+ ply_event_source_t *source;
- source = (ply_event_source_t *) ply_list_node_get_data (node);
+ source = (ply_event_source_t *) ply_list_node_get_data (node);
- if (source->fd == fd)
- break;
+ if (source->fd == fd)
+ break;
- node = ply_list_get_next_node (loop->sources, node);
- }
+ node = ply_list_get_next_node (loop->sources, node);
+ }
- return node;
+ return node;
}
static void
-ply_event_loop_add_source (ply_event_loop_t *loop,
- ply_event_source_t *source)
+ply_event_loop_add_source (ply_event_loop_t *loop,
+ ply_event_source_t *source)
{
- struct epoll_event event = { 0 };
- int status;
+ struct epoll_event event = { 0 };
+ int status;
- assert (ply_event_loop_find_source_node (loop, source->fd) == NULL);
- assert (source->is_getting_polled == false);
+ assert (ply_event_loop_find_source_node (loop, source->fd) == NULL);
+ assert (source->is_getting_polled == false);
- event.events = EPOLLERR | EPOLLHUP;
- event.data.ptr = source;
+ event.events = EPOLLERR | EPOLLHUP;
+ event.data.ptr = source;
- status = epoll_ctl (loop->epoll_fd, EPOLL_CTL_ADD, source->fd, &event);
- assert (status == 0);
+ status = epoll_ctl (loop->epoll_fd, EPOLL_CTL_ADD, source->fd, &event);
+ assert (status == 0);
- source->is_getting_polled = true;
+ source->is_getting_polled = true;
- ply_event_source_take_reference (source);
- ply_list_append_data (loop->sources, source);
+ ply_event_source_take_reference (source);
+ ply_list_append_data (loop->sources, source);
}
static void
ply_event_loop_remove_source_node (ply_event_loop_t *loop,
ply_list_node_t *source_node)
{
- ply_event_source_t *source;
+ ply_event_source_t *source;
- source = (ply_event_source_t *) ply_list_node_get_data (source_node);
+ source = (ply_event_source_t *) ply_list_node_get_data (source_node);
- assert (source != NULL);
+ assert (source != NULL);
- if (source->is_getting_polled)
- {
- int status;
+ if (source->is_getting_polled) {
+ int status;
- status = epoll_ctl (loop->epoll_fd, EPOLL_CTL_DEL, source->fd, NULL);
+ status = epoll_ctl (loop->epoll_fd, EPOLL_CTL_DEL, source->fd, NULL);
- if (status < 0)
- ply_trace ("failed to delete fd %d from epoll watch list: %m", source->fd);
- source->is_getting_polled = false;
- }
+ if (status < 0)
+ ply_trace ("failed to delete fd %d from epoll watch list: %m", source->fd);
+ source->is_getting_polled = false;
+ }
- ply_list_remove_node (loop->sources, source_node);
- ply_event_source_drop_reference (source);
+ ply_list_remove_node (loop->sources, source_node);
+ ply_event_source_drop_reference (source);
}
static void
ply_event_loop_remove_source (ply_event_loop_t *loop,
ply_event_source_t *source)
{
- ply_list_node_t *source_node;
- assert (ply_list_get_length (source->destinations) == 0);
+ ply_list_node_t *source_node;
+
+ assert (ply_list_get_length (source->destinations) == 0);
- source_node = ply_list_find_node (loop->sources, source);
+ source_node = ply_list_find_node (loop->sources, source);
- assert (source_node != NULL);
+ assert (source_node != NULL);
- ply_event_loop_remove_source_node (loop, source_node);
+ ply_event_loop_remove_source_node (loop, source_node);
}
static void
ply_event_loop_free_sources (ply_event_loop_t *loop)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (loop->sources);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (loop->sources);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
- next_node = ply_list_get_next_node (loop->sources, node);
- ply_event_loop_remove_source_node (loop, node);
- node = next_node;
- }
+ next_node = ply_list_get_next_node (loop->sources, node);
+ ply_event_loop_remove_source_node (loop, node);
+ node = next_node;
+ }
}
static bool
ply_event_loop_fd_status_is_valid (ply_event_loop_fd_status_t status)
{
- return (status & ~(PLY_EVENT_LOOP_FD_STATUS_NONE
- | PLY_EVENT_LOOP_FD_STATUS_HAS_DATA
- | PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA
- | PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA)) == 0;
-
+ return (status & ~(PLY_EVENT_LOOP_FD_STATUS_NONE
+ | PLY_EVENT_LOOP_FD_STATUS_HAS_DATA
+ | PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA
+ | PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA)) == 0;
}
static ply_event_source_t *
ply_event_loop_get_source_from_fd (ply_event_loop_t *loop,
int fd)
{
- ply_list_node_t *source_node;
- ply_event_source_t *source;
+ ply_list_node_t *source_node;
+ ply_event_source_t *source;
- source_node = ply_event_loop_find_source_node (loop, fd);
+ source_node = ply_event_loop_find_source_node (loop, fd);
- if (source_node == NULL)
- {
- source = ply_event_source_new (fd);
- ply_event_loop_add_source (loop, source);
+ if (source_node == NULL) {
+ source = ply_event_source_new (fd);
+ ply_event_loop_add_source (loop, source);
- source_node = ply_list_get_last_node (loop->sources);
- assert (source_node != NULL);
- }
+ source_node = ply_list_get_last_node (loop->sources);
+ assert (source_node != NULL);
+ }
- source = (ply_event_source_t *) ply_list_node_get_data (source_node);
- assert (source->fd == fd);
+ source = (ply_event_source_t *) ply_list_node_get_data (source_node);
+ assert (source->fd == fd);
- return source;
+ return source;
}
ply_fd_watch_t *
-ply_event_loop_watch_fd (ply_event_loop_t *loop,
- int fd,
- ply_event_loop_fd_status_t status,
- ply_event_handler_t status_met_handler,
- ply_event_handler_t disconnected_handler,
- void *user_data)
+ply_event_loop_watch_fd (ply_event_loop_t *loop,
+ int fd,
+ ply_event_loop_fd_status_t status,
+ ply_event_handler_t status_met_handler,
+ ply_event_handler_t disconnected_handler,
+ void *user_data)
{
+ ply_event_source_t *source;
+ ply_event_destination_t *destination;
+ ply_fd_watch_t *watch;
- ply_event_source_t *source;
- ply_event_destination_t *destination;
- ply_fd_watch_t *watch;
-
- assert (loop != NULL);
- assert (fd >= 0);
- assert (ply_event_loop_fd_status_is_valid (status));
- assert (status != PLY_EVENT_LOOP_FD_STATUS_NONE || status_met_handler == NULL);
+ assert (loop != NULL);
+ assert (fd >= 0);
+ assert (ply_event_loop_fd_status_is_valid (status));
+ assert (status != PLY_EVENT_LOOP_FD_STATUS_NONE || status_met_handler == NULL);
- source = ply_event_loop_get_source_from_fd (loop, fd);
- assert (source != NULL);
+ source = ply_event_loop_get_source_from_fd (loop, fd);
+ assert (source != NULL);
- destination = ply_event_destination_new (status, status_met_handler,
- disconnected_handler, user_data);
- watch = ply_event_loop_add_destination_for_source (loop, destination, source);
+ destination = ply_event_destination_new (status, status_met_handler,
+ disconnected_handler, user_data);
+ watch = ply_event_loop_add_destination_for_source (loop, destination, source);
- return watch;
+ return watch;
}
void
ply_event_loop_stop_watching_fd (ply_event_loop_t *loop,
ply_fd_watch_t *watch)
{
- ply_event_destination_t *destination;
- ply_event_source_t *source;
-
- assert (loop != NULL);
- assert (watch != NULL);
-
- destination = ply_event_loop_get_destination_from_fd_watch (loop, watch);
-
- assert (destination != NULL);
-
- source = destination->source;
-
- if (source == NULL)
- ply_trace ("NULL source when stopping watching fd");
- else
- ply_trace ("stopping watching fd %d", source->fd);
-
- assert (source != NULL);
- assert (source->fd >= 0);
-
- /* if we're already disconnected then the watch is already scheduled
- * to be removed by ply_event_loop_disconnect_source
- */
- if (source->is_disconnected)
- {
- ply_trace ("source for fd %d is already disconnected", source->fd);
- ply_list_remove_data (source->fd_watches, watch);
- ply_event_source_drop_reference (source);
- ply_fd_watch_free (watch);
- return;
- }
-
- ply_trace ("removing destination for fd %d", source->fd);
- ply_event_loop_remove_destination_by_fd_watch (loop, watch);
-
- ply_list_remove_data (source->fd_watches, watch);
- ply_event_source_drop_reference (source);
- ply_fd_watch_free (watch);
- ply_event_destination_free (destination);
-
- if (ply_list_get_length (source->destinations) == 0)
- {
- ply_trace ("no more destinations remaing for fd %d, removing source", source->fd);
- ply_event_loop_remove_source (loop, source);
- }
+ ply_event_destination_t *destination;
+ ply_event_source_t *source;
+
+ assert (loop != NULL);
+ assert (watch != NULL);
+
+ destination = ply_event_loop_get_destination_from_fd_watch (loop, watch);
+
+ assert (destination != NULL);
+
+ source = destination->source;
+
+ if (source == NULL)
+ ply_trace ("NULL source when stopping watching fd");
+ else
+ ply_trace ("stopping watching fd %d", source->fd);
+
+ assert (source != NULL);
+ assert (source->fd >= 0);
+
+ /* if we're already disconnected then the watch is already scheduled
+ * to be removed by ply_event_loop_disconnect_source
+ */
+ if (source->is_disconnected) {
+ ply_trace ("source for fd %d is already disconnected", source->fd);
+ ply_list_remove_data (source->fd_watches, watch);
+ ply_event_source_drop_reference (source);
+ ply_fd_watch_free (watch);
+ return;
+ }
+
+ ply_trace ("removing destination for fd %d", source->fd);
+ ply_event_loop_remove_destination_by_fd_watch (loop, watch);
+
+ ply_list_remove_data (source->fd_watches, watch);
+ ply_event_source_drop_reference (source);
+ ply_fd_watch_free (watch);
+ ply_event_destination_free (destination);
+
+ if (ply_list_get_length (source->destinations) == 0) {
+ ply_trace ("no more destinations remaing for fd %d, removing source", source->fd);
+ ply_event_loop_remove_source (loop, source);
+ }
}
static ply_list_node_t *
ply_signal_dispatcher_find_source_node (ply_signal_dispatcher_t *dispatcher,
- int signal_number)
+ int signal_number)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (dispatcher->sources);
- while (node != NULL)
- {
- ply_signal_source_t *handler;
+ node = ply_list_get_first_node (dispatcher->sources);
+ while (node != NULL) {
+ ply_signal_source_t *handler;
- handler = (ply_signal_source_t *) ply_list_node_get_data (node);
+ handler = (ply_signal_source_t *) ply_list_node_get_data (node);
- assert (handler != NULL);
+ assert (handler != NULL);
- if (handler->signal_number == signal_number)
- break;
+ if (handler->signal_number == signal_number)
+ break;
- node = ply_list_get_next_node (dispatcher->sources, node);
- }
+ node = ply_list_get_next_node (dispatcher->sources, node);
+ }
- return node;
+ return node;
}
void
ply_event_loop_watch_signal (ply_event_loop_t *loop,
- int signal_number,
- ply_event_handler_t signal_handler,
- void *user_data)
+ int signal_number,
+ ply_event_handler_t signal_handler,
+ void *user_data)
{
- ply_signal_source_t *source;
+ ply_signal_source_t *source;
- source = ply_signal_source_new (signal_number,
- signal_handler,
- user_data);
+ source = ply_signal_source_new (signal_number,
+ signal_handler,
+ user_data);
- source->old_posix_signal_handler =
- signal (signal_number, ply_signal_dispatcher_posix_signal_handler);
- ply_list_append_data (loop->signal_dispatcher->sources, source);
+ source->old_posix_signal_handler =
+ signal (signal_number, ply_signal_dispatcher_posix_signal_handler);
+ ply_list_append_data (loop->signal_dispatcher->sources, source);
}
static void
-ply_signal_dispatcher_remove_source_node (ply_signal_dispatcher_t *dispatcher,
- ply_list_node_t *node)
+ply_signal_dispatcher_remove_source_node (ply_signal_dispatcher_t *dispatcher,
+ ply_list_node_t *node)
{
- ply_signal_source_t *source;
+ ply_signal_source_t *source;
- source = (ply_signal_source_t *) ply_list_node_get_data (node);
+ source = (ply_signal_source_t *) ply_list_node_get_data (node);
- signal (source->signal_number,
- source->old_posix_signal_handler != NULL?
- source->old_posix_signal_handler : SIG_DFL);
+ signal (source->signal_number,
+ source->old_posix_signal_handler != NULL ?
+ source->old_posix_signal_handler : SIG_DFL);
- ply_list_remove_node (dispatcher->sources, node);
+ ply_list_remove_node (dispatcher->sources, node);
}
void
ply_event_loop_stop_watching_signal (ply_event_loop_t *loop,
int signal_number)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_signal_dispatcher_find_source_node (loop->signal_dispatcher,
- signal_number);
+ node = ply_signal_dispatcher_find_source_node (loop->signal_dispatcher,
+ signal_number);
- if (node == NULL)
- return;
+ if (node == NULL)
+ return;
- ply_signal_dispatcher_remove_source_node (loop->signal_dispatcher, node);
+ ply_signal_dispatcher_remove_source_node (loop->signal_dispatcher, node);
}
void
-ply_event_loop_watch_for_exit (ply_event_loop_t *loop,
- ply_event_loop_exit_handler_t exit_handler,
- void *user_data)
+ply_event_loop_watch_for_exit (ply_event_loop_t *loop,
+ ply_event_loop_exit_handler_t exit_handler,
+ void *user_data)
{
- ply_event_loop_exit_closure_t *closure;
+ ply_event_loop_exit_closure_t *closure;
- assert (loop != NULL);
- assert (exit_handler != NULL);
+ assert (loop != NULL);
+ assert (exit_handler != NULL);
- closure = calloc (1, sizeof (ply_event_loop_exit_closure_t));
- closure->handler = exit_handler;
- closure->user_data = user_data;
+ closure = calloc (1, sizeof(ply_event_loop_exit_closure_t));
+ closure->handler = exit_handler;
+ closure->user_data = user_data;
- ply_list_append_data (loop->exit_closures, closure);
+ ply_list_append_data (loop->exit_closures, closure);
}
void
-ply_event_loop_stop_watching_for_exit (ply_event_loop_t *loop,
+ply_event_loop_stop_watching_for_exit (ply_event_loop_t *loop,
ply_event_loop_exit_handler_t exit_handler,
- void *user_data)
+ void *user_data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (loop->exit_closures);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_loop_exit_closure_t *closure;
+ node = ply_list_get_first_node (loop->exit_closures);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_loop_exit_closure_t *closure;
- closure = (ply_event_loop_exit_closure_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (loop->exit_closures, node);
+ closure = (ply_event_loop_exit_closure_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (loop->exit_closures, node);
- if (closure->handler == exit_handler &&
- closure->user_data == user_data) {
- ply_list_remove_node (loop->exit_closures, node);
- free (closure);
- }
+ if (closure->handler == exit_handler &&
+ closure->user_data == user_data) {
+ ply_list_remove_node (loop->exit_closures, node);
+ free (closure);
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
void
-ply_event_loop_watch_for_timeout (ply_event_loop_t *loop,
- double seconds,
+ply_event_loop_watch_for_timeout (ply_event_loop_t *loop,
+ double seconds,
ply_event_loop_timeout_handler_t timeout_handler,
- void *user_data)
+ void *user_data)
{
- ply_event_loop_timeout_watch_t *timeout_watch;
+ ply_event_loop_timeout_watch_t *timeout_watch;
- assert (loop != NULL);
- assert (timeout_handler != NULL);
- assert (seconds > 0.0);
+ assert (loop != NULL);
+ assert (timeout_handler != NULL);
+ assert (seconds > 0.0);
- timeout_watch = calloc (1, sizeof (ply_event_loop_timeout_watch_t));
- timeout_watch->timeout = ply_get_timestamp () + seconds;
- timeout_watch->handler = timeout_handler;
- timeout_watch->user_data = user_data;
+ timeout_watch = calloc (1, sizeof(ply_event_loop_timeout_watch_t));
+ timeout_watch->timeout = ply_get_timestamp () + seconds;
+ timeout_watch->handler = timeout_handler;
+ timeout_watch->user_data = user_data;
- if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
- loop->wakeup_time = timeout_watch->timeout;
- else
- loop->wakeup_time = MIN (loop->wakeup_time, timeout_watch->timeout);
+ if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
+ loop->wakeup_time = timeout_watch->timeout;
+ else
+ loop->wakeup_time = MIN (loop->wakeup_time, timeout_watch->timeout);
- ply_list_append_data (loop->timeout_watches, timeout_watch);
+ ply_list_append_data (loop->timeout_watches, timeout_watch);
}
void
-ply_event_loop_stop_watching_for_timeout (ply_event_loop_t *loop,
+ply_event_loop_stop_watching_for_timeout (ply_event_loop_t *loop,
ply_event_loop_timeout_handler_t timeout_handler,
- void *user_data)
+ void *user_data)
{
- ply_list_node_t *node;
- bool timeout_removed;
+ ply_list_node_t *node;
+ bool timeout_removed;
- loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
+ loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
- timeout_removed = false;
- node = ply_list_get_first_node (loop->timeout_watches);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_loop_timeout_watch_t *timeout_watch;
+ timeout_removed = false;
+ node = ply_list_get_first_node (loop->timeout_watches);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_loop_timeout_watch_t *timeout_watch;
- timeout_watch = (ply_event_loop_timeout_watch_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (loop->timeout_watches, node);
+ timeout_watch = (ply_event_loop_timeout_watch_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (loop->timeout_watches, node);
- if (timeout_watch->handler == timeout_handler &&
- timeout_watch->user_data == user_data)
- {
- ply_list_remove_node (loop->timeout_watches, node);
- free (timeout_watch);
+ if (timeout_watch->handler == timeout_handler &&
+ timeout_watch->user_data == user_data) {
+ ply_list_remove_node (loop->timeout_watches, node);
+ free (timeout_watch);
- if (timeout_removed)
- ply_trace ("multiple matching timeouts found for removal");
+ if (timeout_removed)
+ ply_trace ("multiple matching timeouts found for removal");
- timeout_removed = true;
- }
- else
- {
- if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
- loop->wakeup_time = timeout_watch->timeout;
- else
- loop->wakeup_time = MIN (loop->wakeup_time, timeout_watch->timeout);
- }
+ timeout_removed = true;
+ } else {
+ if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
+ loop->wakeup_time = timeout_watch->timeout;
+ else
+ loop->wakeup_time = MIN (loop->wakeup_time, timeout_watch->timeout);
+ }
- node = next_node;
- }
+ node = next_node;
+ }
- if (!timeout_removed)
- ply_trace ("no matching timeout found for removal");
+ if (!timeout_removed)
+ ply_trace ("no matching timeout found for removal");
}
static ply_event_loop_fd_status_t
ply_event_loop_get_fd_status_from_poll_mask (uint32_t mask)
{
- ply_event_loop_fd_status_t status;
+ ply_event_loop_fd_status_t status;
- status = PLY_EVENT_LOOP_FD_STATUS_NONE;
+ status = PLY_EVENT_LOOP_FD_STATUS_NONE;
- if (mask & EPOLLIN)
- status |= PLY_EVENT_LOOP_FD_STATUS_HAS_DATA;
+ if (mask & EPOLLIN)
+ status |= PLY_EVENT_LOOP_FD_STATUS_HAS_DATA;
- if (mask & EPOLLPRI)
- status |= PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA;
+ if (mask & EPOLLPRI)
+ status |= PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA;
- if (mask & EPOLLOUT)
- status |= PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA;
+ if (mask & EPOLLOUT)
+ status |= PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA;
- return status;
+ return status;
}
static bool
-ply_event_loop_source_has_met_status (ply_event_source_t *source,
- ply_event_loop_fd_status_t status)
+ply_event_loop_source_has_met_status (ply_event_source_t *source,
+ ply_event_loop_fd_status_t status)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (source != NULL);
- assert (ply_event_loop_fd_status_is_valid (status));
+ assert (source != NULL);
+ assert (ply_event_loop_fd_status_is_valid (status));
- node = ply_list_get_first_node (source->destinations);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_destination_t *destination;
+ node = ply_list_get_first_node (source->destinations);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_destination_t *destination;
- destination = (ply_event_destination_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (source->destinations, node);
+ destination = (ply_event_destination_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (source->destinations, node);
- if (((destination->status & status) != 0)
- && (destination->status_met_handler != NULL))
- return true;
+ if (((destination->status & status) != 0)
+ && (destination->status_met_handler != NULL))
+ return true;
- node = next_node;
- }
- return false;
+ node = next_node;
+ }
+ return false;
}
static void
-ply_event_loop_handle_met_status_for_source (ply_event_loop_t *loop,
- ply_event_source_t *source,
- ply_event_loop_fd_status_t status)
+ply_event_loop_handle_met_status_for_source (ply_event_loop_t *loop,
+ ply_event_source_t *source,
+ ply_event_loop_fd_status_t status)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (loop != NULL);
- assert (source != NULL);
- assert (ply_event_loop_fd_status_is_valid (status));
+ assert (loop != NULL);
+ assert (source != NULL);
+ assert (ply_event_loop_fd_status_is_valid (status));
- node = ply_list_get_first_node (source->destinations);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_destination_t *destination;
+ node = ply_list_get_first_node (source->destinations);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_destination_t *destination;
- destination = (ply_event_destination_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (source->destinations, node);
+ destination = (ply_event_destination_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (source->destinations, node);
- if (((destination->status & status) != 0)
- && (destination->status_met_handler != NULL))
- destination->status_met_handler (destination->user_data, source->fd);
+ if (((destination->status & status) != 0)
+ && (destination->status_met_handler != NULL))
+ destination->status_met_handler (destination->user_data, source->fd);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
ply_event_loop_handle_disconnect_for_source (ply_event_loop_t *loop,
ply_event_source_t *source)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (loop != NULL);
- assert (source != NULL);
+ assert (loop != NULL);
+ assert (source != NULL);
- source->is_disconnected = true;
- node = ply_list_get_first_node (source->destinations);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_destination_t *destination;
+ source->is_disconnected = true;
+ node = ply_list_get_first_node (source->destinations);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_destination_t *destination;
- destination = (ply_event_destination_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (source->destinations, node);
+ destination = (ply_event_destination_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (source->destinations, node);
- if (destination->disconnected_handler != NULL)
- {
- ply_trace ("calling disconnected_handler %p for fd %d",
- destination->disconnected_handler, source->fd);
- destination->disconnected_handler (destination->user_data, source->fd);
+ if (destination->disconnected_handler != NULL) {
+ ply_trace ("calling disconnected_handler %p for fd %d",
+ destination->disconnected_handler, source->fd);
+ destination->disconnected_handler (destination->user_data, source->fd);
- ply_trace ("done calling disconnected_handler %p for fd %d",
- destination->disconnected_handler, source->fd);
- }
+ ply_trace ("done calling disconnected_handler %p for fd %d",
+ destination->disconnected_handler, source->fd);
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
ply_event_loop_free_watches_for_source (ply_event_loop_t *loop,
ply_event_source_t *source)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (loop != NULL);
- assert (source != NULL);
+ assert (loop != NULL);
+ assert (source != NULL);
- node = ply_list_get_first_node (source->fd_watches);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_fd_watch_t *watch;
+ node = ply_list_get_first_node (source->fd_watches);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_fd_watch_t *watch;
- next_node = ply_list_get_next_node (source->fd_watches, node);
+ next_node = ply_list_get_next_node (source->fd_watches, node);
- watch = (ply_fd_watch_t *) ply_list_node_get_data (node);
+ watch = (ply_fd_watch_t *) ply_list_node_get_data (node);
- assert (watch != NULL);
- ply_fd_watch_free (watch);
- ply_list_remove_node (source->fd_watches, node);
- ply_event_source_drop_reference (source);
- node = next_node;
- }
+ assert (watch != NULL);
+ ply_fd_watch_free (watch);
+ ply_list_remove_node (source->fd_watches, node);
+ ply_event_source_drop_reference (source);
+ node = next_node;
+ }
}
static void
ply_event_loop_free_timeout_watches (ply_event_loop_t *loop)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (loop != NULL);
+ assert (loop != NULL);
- node = ply_list_get_first_node (loop->timeout_watches);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_loop_timeout_watch_t *watch;
+ node = ply_list_get_first_node (loop->timeout_watches);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_loop_timeout_watch_t *watch;
- watch = (ply_event_loop_timeout_watch_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (loop->timeout_watches, node);
+ watch = (ply_event_loop_timeout_watch_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (loop->timeout_watches, node);
- free (watch);
- ply_list_remove_node (loop->timeout_watches, node);
+ free (watch);
+ ply_list_remove_node (loop->timeout_watches, node);
- node = next_node;
- }
+ node = next_node;
+ }
- assert (ply_list_get_length (loop->timeout_watches) == 0);
- loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
+ assert (ply_list_get_length (loop->timeout_watches) == 0);
+ loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
}
static void
ply_event_loop_free_destinations_for_source (ply_event_loop_t *loop,
ply_event_source_t *source)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (loop != NULL);
- assert (source != NULL);
+ assert (loop != NULL);
+ assert (source != NULL);
- node = ply_list_get_first_node (source->destinations);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_destination_t *destination;
+ node = ply_list_get_first_node (source->destinations);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_destination_t *destination;
- next_node = ply_list_get_next_node (source->destinations, node);
+ next_node = ply_list_get_next_node (source->destinations, node);
- destination =
- (ply_event_destination_t *) ply_list_node_get_data (node);
+ destination =
+ (ply_event_destination_t *) ply_list_node_get_data (node);
- assert (destination != NULL);
- ply_trace ("freeing destination (%u, %p, %p) of fd %d",
- destination->status, destination->status_met_handler,
- destination->disconnected_handler, source->fd);
- ply_event_destination_free (destination);
+ assert (destination != NULL);
+ ply_trace ("freeing destination (%u, %p, %p) of fd %d",
+ destination->status, destination->status_met_handler,
+ destination->disconnected_handler, source->fd);
+ ply_event_destination_free (destination);
- ply_list_remove_node (source->destinations, node);
- ply_event_source_drop_reference (source);
- node = next_node;
- }
+ ply_list_remove_node (source->destinations, node);
+ ply_event_source_drop_reference (source);
+ node = next_node;
+ }
}
static void
-ply_event_loop_disconnect_source (ply_event_loop_t *loop,
- ply_event_source_t *source)
+ply_event_loop_disconnect_source (ply_event_loop_t *loop,
+ ply_event_source_t *source)
{
- ply_event_loop_handle_disconnect_for_source (loop, source);
-
- /* at this point, we've told the event loop users about the
- * fd disconnection, so we can invalidate any outstanding
- * watches and free the destinations.
- */
- ply_event_loop_free_watches_for_source (loop, source);
- ply_event_loop_free_destinations_for_source (loop, source);
- assert (ply_list_get_length (source->destinations) == 0);
- ply_event_loop_remove_source (loop, source);
+ ply_event_loop_handle_disconnect_for_source (loop, source);
+
+ /* at this point, we've told the event loop users about the
+ * fd disconnection, so we can invalidate any outstanding
+ * watches and free the destinations.
+ */
+ ply_event_loop_free_watches_for_source (loop, source);
+ ply_event_loop_free_destinations_for_source (loop, source);
+ assert (ply_list_get_length (source->destinations) == 0);
+ ply_event_loop_remove_source (loop, source);
}
static void
ply_event_loop_handle_timeouts (ply_event_loop_t *loop)
{
- ply_list_node_t *node;
- double now;
+ ply_list_node_t *node;
+ double now;
- assert (loop != NULL);
+ assert (loop != NULL);
- now = ply_get_timestamp ();
- node = ply_list_get_first_node (loop->timeout_watches);
- loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_event_loop_timeout_watch_t *watch;
+ now = ply_get_timestamp ();
+ node = ply_list_get_first_node (loop->timeout_watches);
+ loop->wakeup_time = PLY_EVENT_LOOP_NO_TIMED_WAKEUP;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_event_loop_timeout_watch_t *watch;
- watch = (ply_event_loop_timeout_watch_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (loop->timeout_watches, node);
+ watch = (ply_event_loop_timeout_watch_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (loop->timeout_watches, node);
- if (watch->timeout <= now)
- {
- assert (watch->handler != NULL);
+ if (watch->timeout <= now) {
+ assert (watch->handler != NULL);
- ply_list_remove_node (loop->timeout_watches, node);
+ ply_list_remove_node (loop->timeout_watches, node);
- watch->handler (watch->user_data, loop);
- free (watch);
-
- /* start over in case the handler invalidated the list
- */
- next_node = ply_list_get_first_node (loop->timeout_watches);
- }
- else
- {
- if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
- loop->wakeup_time = watch->timeout;
- else
- loop->wakeup_time = MIN (loop->wakeup_time, watch->timeout);
- }
+ watch->handler (watch->user_data, loop);
+ free (watch);
- node = next_node;
- }
+ /* start over in case the handler invalidated the list
+ */
+ next_node = ply_list_get_first_node (loop->timeout_watches);
+ } else {
+ if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
+ loop->wakeup_time = watch->timeout;
+ else
+ loop->wakeup_time = MIN (loop->wakeup_time, watch->timeout);
+ }
+ node = next_node;
+ }
}
void
ply_event_loop_process_pending_events (ply_event_loop_t *loop)
{
- int number_of_received_events, i;
- static struct epoll_event events[PLY_EVENT_LOOP_NUM_EVENT_HANDLERS];
-
- assert (loop != NULL);
-
- memset (events, -1,
- PLY_EVENT_LOOP_NUM_EVENT_HANDLERS * sizeof (struct epoll_event));
-
- do
- {
- int timeout;
-
- if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0)
- timeout = -1;
- else
- {
- timeout = (int) ((loop->wakeup_time - ply_get_timestamp ()) * 1000);
- timeout = MAX (timeout, 0);
- }
-
- number_of_received_events = epoll_wait (loop->epoll_fd, events,
- PLY_EVENT_LOOP_NUM_EVENT_HANDLERS,
- timeout);
- if (number_of_received_events < 0)
- {
- if (errno != EINTR && errno != EAGAIN)
- {
- ply_event_loop_exit (loop, 255);
- return;
- }
- }
- else
- {
- /* Reference all sources, so they stay alive for the duration of this
- * iteration of the loop.
- */
- for (i = 0; i < number_of_received_events; i++)
- {
- ply_event_source_t *source;
- source = (ply_event_source_t *) (events[i].data.ptr);
-
- ply_event_source_take_reference (source);
- }
- }
-
- /* First handle timeouts */
- ply_event_loop_handle_timeouts (loop);
- }
- while (number_of_received_events < 0);
-
- /* Then process the incoming events
- */
- for (i = 0; i < number_of_received_events; i++)
- {
- ply_event_source_t *source;
- ply_event_loop_fd_status_t status;
- bool is_disconnected;
-
- source = (ply_event_source_t *) (events[i].data.ptr);
- status = ply_event_loop_get_fd_status_from_poll_mask (events[i].events);
-
- is_disconnected = false;
- if ((events[i].events & EPOLLHUP) || (events[i].events & EPOLLERR))
- {
- int bytes_ready;
-
- bytes_ready = 0;
- if (ioctl (source->fd, FIONREAD, &bytes_ready) < 0)
- bytes_ready = 0;
-
- if (bytes_ready <= 0)
- is_disconnected = true;
- }
-
- if (is_disconnected)
- {
- ply_event_loop_disconnect_source (loop, source);
+ int number_of_received_events, i;
+ static struct epoll_event events[PLY_EVENT_LOOP_NUM_EVENT_HANDLERS];
+
+ assert (loop != NULL);
+
+ memset (events, -1,
+ PLY_EVENT_LOOP_NUM_EVENT_HANDLERS * sizeof(struct epoll_event));
+
+ do {
+ int timeout;
+
+ if (fabs (loop->wakeup_time - PLY_EVENT_LOOP_NO_TIMED_WAKEUP) <= 0) {
+ timeout = -1;
+ } else {
+ timeout = (int) ((loop->wakeup_time - ply_get_timestamp ()) * 1000);
+ timeout = MAX (timeout, 0);
+ }
+
+ number_of_received_events = epoll_wait (loop->epoll_fd, events,
+ PLY_EVENT_LOOP_NUM_EVENT_HANDLERS,
+ timeout);
+ if (number_of_received_events < 0) {
+ if (errno != EINTR && errno != EAGAIN) {
+ ply_event_loop_exit (loop, 255);
+ return;
+ }
+ } else {
+ /* Reference all sources, so they stay alive for the duration of this
+ * iteration of the loop.
+ */
+ for (i = 0; i < number_of_received_events; i++) {
+ ply_event_source_t *source;
+ source = (ply_event_source_t *) (events[i].data.ptr);
+
+ ply_event_source_take_reference (source);
+ }
+ }
+
+ /* First handle timeouts */
+ ply_event_loop_handle_timeouts (loop);
+ } while (number_of_received_events < 0);
+
+ /* Then process the incoming events
+ */
+ for (i = 0; i < number_of_received_events; i++) {
+ ply_event_source_t *source;
+ ply_event_loop_fd_status_t status;
+ bool is_disconnected;
+
+ source = (ply_event_source_t *) (events[i].data.ptr);
+ status = ply_event_loop_get_fd_status_from_poll_mask (events[i].events);
+
+ is_disconnected = false;
+ if ((events[i].events & EPOLLHUP) || (events[i].events & EPOLLERR)) {
+ int bytes_ready;
+
+ bytes_ready = 0;
+ if (ioctl (source->fd, FIONREAD, &bytes_ready) < 0)
+ bytes_ready = 0;
+
+ if (bytes_ready <= 0)
+ is_disconnected = true;
+ }
+
+ if (is_disconnected)
+ ply_event_loop_disconnect_source (loop, source);
+ else if (ply_event_loop_source_has_met_status (source, status))
+ ply_event_loop_handle_met_status_for_source (loop, source, status);
+
+ if (loop->should_exit)
+ break;
}
- else if (ply_event_loop_source_has_met_status (source, status))
- ply_event_loop_handle_met_status_for_source (loop, source, status);
- if (loop->should_exit)
- break;
- }
+ /* Finally, kill off any unused sources
+ */
+ for (i = 0; i < number_of_received_events; i++) {
+ ply_event_source_t *source;
- /* Finally, kill off any unused sources
- */
- for (i = 0; i < number_of_received_events; i++)
- {
- ply_event_source_t *source;
+ source = (ply_event_source_t *) (events[i].data.ptr);
- source = (ply_event_source_t *) (events[i].data.ptr);
-
- ply_event_source_drop_reference (source);
- }
+ ply_event_source_drop_reference (source);
+ }
}
void
ply_event_loop_exit (ply_event_loop_t *loop,
int exit_code)
{
- assert (loop != NULL);
+ assert (loop != NULL);
- loop->should_exit = true;
- loop->exit_code = exit_code;
+ loop->should_exit = true;
+ loop->exit_code = exit_code;
}
int
ply_event_loop_run (ply_event_loop_t *loop)
{
- while (!loop->should_exit)
- ply_event_loop_process_pending_events (loop);
+ while (!loop->should_exit) {
+ ply_event_loop_process_pending_events (loop);
+ }
- ply_event_loop_run_exit_closures (loop);
- ply_event_loop_free_sources (loop);
- ply_event_loop_free_timeout_watches (loop);
+ ply_event_loop_run_exit_closures (loop);
+ ply_event_loop_free_sources (loop);
+ ply_event_loop_free_timeout_watches (loop);
- loop->should_exit = false;
+ loop->should_exit = false;
- return loop->exit_code;
+ return loop->exit_code;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-event-loop.h b/src/libply/ply-event-loop.h
index ae29d285..d26b1ab0 100644
--- a/src/libply/ply-event-loop.h
+++ b/src/libply/ply-event-loop.h
@@ -29,55 +29,56 @@
typedef struct _ply_event_loop ply_event_loop_t;
typedef struct _ply_fd_watch ply_fd_watch_t;
-typedef enum {
- PLY_EVENT_LOOP_FD_STATUS_NONE = 0,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA = 0x1,
- PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA = 0x2,
- PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA = 0x4,
+typedef enum
+{
+ PLY_EVENT_LOOP_FD_STATUS_NONE = 0,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA = 0x1,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_CONTROL_DATA = 0x2,
+ PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA = 0x4,
} ply_event_loop_fd_status_t;
-typedef void (* ply_event_handler_t) (void *user_data,
- int source_fd);
+typedef void (*ply_event_handler_t) (void *user_data,
+ int source_fd);
-typedef void (* ply_event_loop_exit_handler_t) (void *user_data,
- int exit_code,
- ply_event_loop_t *loop);
-typedef void (* ply_event_loop_timeout_handler_t) (void *user_data,
- ply_event_loop_t *loop);
+typedef void (*ply_event_loop_exit_handler_t) (void *user_data,
+ int exit_code,
+ ply_event_loop_t *loop);
+typedef void (*ply_event_loop_timeout_handler_t) (void *user_data,
+ ply_event_loop_t *loop);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_event_loop_t *ply_event_loop_new (void);
void ply_event_loop_free (ply_event_loop_t *loop);
ply_event_loop_t *ply_event_loop_get_default (void);
-ply_fd_watch_t *ply_event_loop_watch_fd (ply_event_loop_t *loop,
- int fd,
+ply_fd_watch_t *ply_event_loop_watch_fd (ply_event_loop_t *loop,
+ int fd,
ply_event_loop_fd_status_t status,
- ply_event_handler_t status_met_handler,
- ply_event_handler_t disconnected_handler,
- void *user_data);
-void ply_event_loop_stop_watching_fd (ply_event_loop_t *loop,
+ ply_event_handler_t status_met_handler,
+ ply_event_handler_t disconnected_handler,
+ void *user_data);
+void ply_event_loop_stop_watching_fd (ply_event_loop_t *loop,
ply_fd_watch_t *watch);
-void ply_event_loop_watch_signal (ply_event_loop_t *loop,
- int signal_number,
- ply_event_handler_t signal_handler,
- void *user_data);
+void ply_event_loop_watch_signal (ply_event_loop_t *loop,
+ int signal_number,
+ ply_event_handler_t signal_handler,
+ void *user_data);
void ply_event_loop_stop_watching_signal (ply_event_loop_t *loop,
int signal_number);
-void ply_event_loop_watch_for_exit (ply_event_loop_t *loop,
- ply_event_loop_exit_handler_t exit_handler,
- void *user_data);
-void ply_event_loop_stop_watching_for_exit (ply_event_loop_t *loop,
- ply_event_loop_exit_handler_t exit_handler,
- void *user_data);
-void ply_event_loop_watch_for_timeout (ply_event_loop_t *loop,
- double seconds,
+void ply_event_loop_watch_for_exit (ply_event_loop_t *loop,
+ ply_event_loop_exit_handler_t exit_handler,
+ void *user_data);
+void ply_event_loop_stop_watching_for_exit (ply_event_loop_t *loop,
+ ply_event_loop_exit_handler_t exit_handler,
+ void *user_data);
+void ply_event_loop_watch_for_timeout (ply_event_loop_t *loop,
+ double seconds,
ply_event_loop_timeout_handler_t timeout_handler,
- void *user_data);
+ void *user_data);
-void ply_event_loop_stop_watching_for_timeout (ply_event_loop_t *loop,
+void ply_event_loop_stop_watching_for_timeout (ply_event_loop_t *loop,
ply_event_loop_timeout_handler_t timeout_handler,
- void *user_data);
+ void *user_data);
int ply_event_loop_run (ply_event_loop_t *loop);
void ply_event_loop_exit (ply_event_loop_t *loop,
diff --git a/src/libply/ply-hashtable.c b/src/libply/ply-hashtable.c
index 7b03d876..c9aa3d88 100644
--- a/src/libply/ply-hashtable.c
+++ b/src/libply/ply-hashtable.c
@@ -31,95 +31,91 @@
#include <stdbool.h>
#include <string.h>
-#define MASKGEN(x) {x |= x >> 16; x |= x >> 8; x |= x >> 4; x |= x >> 2; x |= x >> 1;}
+#define MASKGEN(x) { x |= x >> 16; x |= x >> 8; x |= x >> 4; x |= x >> 2; x |= x >> 1; }
struct _ply_hashtable_node
{
- void *data;
- void *key;
+ void *data;
+ void *key;
};
struct _ply_hashtable
{
- struct _ply_hashtable_node *nodes;
- unsigned int total_node_count; /* must be a 2^X */
- ply_bitarray_t *dirty_node_bitmap;
- unsigned int dirty_node_count; /* live + dead nodes */
- ply_bitarray_t *live_node_bitmap;
- unsigned int live_node_count;
- ply_hashtable_compare_func_t *compare_func;
- ply_hashtable_hash_func_t *hash_func;
+ struct _ply_hashtable_node *nodes;
+ unsigned int total_node_count; /* must be a 2^X */
+ ply_bitarray_t *dirty_node_bitmap;
+ unsigned int dirty_node_count; /* live + dead nodes */
+ ply_bitarray_t *live_node_bitmap;
+ unsigned int live_node_count;
+ ply_hashtable_compare_func_t *compare_func;
+ ply_hashtable_hash_func_t *hash_func;
};
unsigned int
ply_hashtable_direct_hash (void *element)
{
- return (unsigned int) (intptr_t) element;
+ return (unsigned int) (intptr_t) element;
}
int
ply_hashtable_direct_compare (void *elementa,
void *elementb)
{
- return (int) ((intptr_t) elementa - (intptr_t) elementb);
+ return (int) ((intptr_t) elementa - (intptr_t) elementb);
}
unsigned int
ply_hashtable_string_hash (void *element)
{
- char* strptr;
- unsigned int hash = 0;
- for (strptr = element; *strptr; strptr++)
- {
- hash ^= *strptr;
- hash ^= hash << 1;
- }
- return hash;
+ char *strptr;
+ unsigned int hash = 0;
+
+ for (strptr = element; *strptr; strptr++) {
+ hash ^= *strptr;
+ hash ^= hash << 1;
+ }
+ return hash;
}
int
ply_hashtable_string_compare (void *elementa,
void *elementb)
{
- return strcmp (elementa, elementb);
+ return strcmp (elementa, elementb);
}
ply_hashtable_t *
ply_hashtable_new (ply_hashtable_hash_func_t *hash_func,
ply_hashtable_compare_func_t *compare_func)
{
- ply_hashtable_t *hashtable;
-
- hashtable = malloc (sizeof (ply_hashtable_t));
- hashtable->total_node_count = 0;
- hashtable->dirty_node_count = 0;
- hashtable->live_node_count = 0;
- hashtable->nodes = NULL;
- hashtable->dirty_node_bitmap = NULL;
- hashtable->live_node_bitmap = NULL;
- hashtable->compare_func = compare_func;
- hashtable->hash_func = hash_func;
-
- if (hashtable->compare_func == NULL)
- {
- hashtable->compare_func = ply_hashtable_direct_compare;
- }
- if (hashtable->hash_func == NULL)
- {
- hashtable->hash_func = ply_hashtable_direct_hash;
- }
- ply_hashtable_resize (hashtable);
- return hashtable;
+ ply_hashtable_t *hashtable;
+
+ hashtable = malloc (sizeof(ply_hashtable_t));
+ hashtable->total_node_count = 0;
+ hashtable->dirty_node_count = 0;
+ hashtable->live_node_count = 0;
+ hashtable->nodes = NULL;
+ hashtable->dirty_node_bitmap = NULL;
+ hashtable->live_node_bitmap = NULL;
+ hashtable->compare_func = compare_func;
+ hashtable->hash_func = hash_func;
+
+ if (hashtable->compare_func == NULL)
+ hashtable->compare_func = ply_hashtable_direct_compare;
+ if (hashtable->hash_func == NULL)
+ hashtable->hash_func = ply_hashtable_direct_hash;
+ ply_hashtable_resize (hashtable);
+ return hashtable;
}
void
ply_hashtable_free (ply_hashtable_t *hashtable)
{
- if (hashtable == NULL) return;
- ply_bitarray_free (hashtable->dirty_node_bitmap);
- ply_bitarray_free (hashtable->live_node_bitmap);
- free(hashtable->nodes);
- free(hashtable);
+ if (hashtable == NULL) return;
+ ply_bitarray_free (hashtable->dirty_node_bitmap);
+ ply_bitarray_free (hashtable->live_node_bitmap);
+ free (hashtable->nodes);
+ free (hashtable);
}
@@ -128,65 +124,63 @@ ply_hashtable_insert_internal (ply_hashtable_t *hashtable,
void *key,
void *data)
{
- unsigned int hash_index;
- int step = 0;
-
- hash_index = hashtable->hash_func (key);
- hash_index &= hashtable->total_node_count - 1;
-
- while (ply_bitarray_lookup (hashtable->dirty_node_bitmap, hash_index))
- {
- step++;
- hash_index += step;
- hash_index &= hashtable->total_node_count - 1;
- }
- ply_bitarray_set (hashtable->dirty_node_bitmap, hash_index);
- ply_bitarray_set (hashtable->live_node_bitmap, hash_index);
- hashtable->nodes[hash_index].key = key;
- hashtable->nodes[hash_index].data = data;
-
- hashtable->live_node_count++;
- hashtable->dirty_node_count++;
+ unsigned int hash_index;
+ int step = 0;
+
+ hash_index = hashtable->hash_func (key);
+ hash_index &= hashtable->total_node_count - 1;
+
+ while (ply_bitarray_lookup (hashtable->dirty_node_bitmap, hash_index)) {
+ step++;
+ hash_index += step;
+ hash_index &= hashtable->total_node_count - 1;
+ }
+ ply_bitarray_set (hashtable->dirty_node_bitmap, hash_index);
+ ply_bitarray_set (hashtable->live_node_bitmap, hash_index);
+ hashtable->nodes[hash_index].key = key;
+ hashtable->nodes[hash_index].data = data;
+
+ hashtable->live_node_count++;
+ hashtable->dirty_node_count++;
}
void
ply_hashtable_resize (ply_hashtable_t *hashtable)
{
- unsigned int newsize, oldsize;
- unsigned int i;
- struct _ply_hashtable_node *oldnodes;
- ply_bitarray_t *old_live_node_bitmap;
-
- newsize = (hashtable->live_node_count + 1) * 4; /* make table 4x to 8x the number of live elements (at least 8) */
- MASKGEN (newsize);
- newsize++;
- oldsize = hashtable->total_node_count;
- oldnodes = hashtable->nodes;
-
- hashtable->total_node_count = newsize;
- hashtable->nodes = malloc (newsize * sizeof (struct _ply_hashtable_node));
- ply_bitarray_free (hashtable->dirty_node_bitmap);
- hashtable->dirty_node_bitmap = ply_bitarray_new(newsize);
- old_live_node_bitmap = hashtable->live_node_bitmap;
- hashtable->live_node_bitmap = ply_bitarray_new(newsize);
- hashtable->dirty_node_count = 0;
- hashtable->live_node_count = 0;
-
- for (i=0; i<oldsize; i++)
- {
- if (ply_bitarray_lookup (old_live_node_bitmap, i))
- ply_hashtable_insert_internal (hashtable, oldnodes[i].key, oldnodes[i].data);
- }
- ply_bitarray_free (old_live_node_bitmap);
- free (oldnodes);
+ unsigned int newsize, oldsize;
+ unsigned int i;
+ struct _ply_hashtable_node *oldnodes;
+ ply_bitarray_t *old_live_node_bitmap;
+
+ newsize = (hashtable->live_node_count + 1) * 4; /* make table 4x to 8x the number of live elements (at least 8) */
+ MASKGEN (newsize);
+ newsize++;
+ oldsize = hashtable->total_node_count;
+ oldnodes = hashtable->nodes;
+
+ hashtable->total_node_count = newsize;
+ hashtable->nodes = malloc (newsize * sizeof(struct _ply_hashtable_node));
+ ply_bitarray_free (hashtable->dirty_node_bitmap);
+ hashtable->dirty_node_bitmap = ply_bitarray_new (newsize);
+ old_live_node_bitmap = hashtable->live_node_bitmap;
+ hashtable->live_node_bitmap = ply_bitarray_new (newsize);
+ hashtable->dirty_node_count = 0;
+ hashtable->live_node_count = 0;
+
+ for (i = 0; i < oldsize; i++) {
+ if (ply_bitarray_lookup (old_live_node_bitmap, i))
+ ply_hashtable_insert_internal (hashtable, oldnodes[i].key, oldnodes[i].data);
+ }
+ ply_bitarray_free (old_live_node_bitmap);
+ free (oldnodes);
}
static inline void
ply_hashtable_resize_check (ply_hashtable_t *hashtable)
{
- if (hashtable->total_node_count < (hashtable->dirty_node_count * 2))
- ply_hashtable_resize (hashtable); /* hash tables work best below 50% occupancy */
+ if (hashtable->total_node_count < (hashtable->dirty_node_count * 2))
+ ply_hashtable_resize (hashtable); /* hash tables work best below 50% occupancy */
}
void
@@ -194,55 +188,56 @@ ply_hashtable_insert (ply_hashtable_t *hashtable,
void *key,
void *data)
{
- ply_hashtable_resize_check (hashtable);
- ply_hashtable_insert_internal (hashtable, key, data);
+ ply_hashtable_resize_check (hashtable);
+ ply_hashtable_insert_internal (hashtable, key, data);
}
static int
ply_hashtable_lookup_index (ply_hashtable_t *hashtable,
void *key)
{
- unsigned int hash_index;
- int step = 0;
-
- hash_index = hashtable->hash_func (key);
- while (1)
- {
- hash_index &= hashtable->total_node_count - 1;
- if (!ply_bitarray_lookup (hashtable->dirty_node_bitmap, hash_index))
- break;
- if (ply_bitarray_lookup (hashtable->live_node_bitmap, hash_index))
- if (!hashtable->compare_func (hashtable->nodes[hash_index].key, key))
- return hash_index;
- hash_index += step;
- step++;
- }
- return -1;
+ unsigned int hash_index;
+ int step = 0;
+
+ hash_index = hashtable->hash_func (key);
+ while (1) {
+ hash_index &= hashtable->total_node_count - 1;
+ if (!ply_bitarray_lookup (hashtable->dirty_node_bitmap, hash_index))
+ break;
+ if (ply_bitarray_lookup (hashtable->live_node_bitmap, hash_index))
+ if (!hashtable->compare_func (hashtable->nodes[hash_index].key, key))
+ return hash_index;
+ hash_index += step;
+ step++;
+ }
+ return -1;
}
void *
ply_hashtable_remove (ply_hashtable_t *hashtable,
void *key)
{
- int index;
- index = ply_hashtable_lookup_index (hashtable, key);
- if (index < 0)
- return NULL;
-
- ply_bitarray_clear (hashtable->live_node_bitmap, index);
- hashtable->live_node_count--;
- return hashtable->nodes[index].data;
+ int index;
+
+ index = ply_hashtable_lookup_index (hashtable, key);
+ if (index < 0)
+ return NULL;
+
+ ply_bitarray_clear (hashtable->live_node_bitmap, index);
+ hashtable->live_node_count--;
+ return hashtable->nodes[index].data;
}
void *
ply_hashtable_lookup (ply_hashtable_t *hashtable,
void *key)
{
- int index;
- index = ply_hashtable_lookup_index (hashtable, key);
- if (index < 0)
- return NULL;
- return hashtable->nodes[index].data;
+ int index;
+
+ index = ply_hashtable_lookup_index (hashtable, key);
+ if (index < 0)
+ return NULL;
+ return hashtable->nodes[index].data;
}
int
@@ -251,32 +246,33 @@ ply_hashtable_lookup_full (ply_hashtable_t *hashtable,
void **reply_key,
void **reply_data)
{
- int index;
- index = ply_hashtable_lookup_index (hashtable, key);
- if (index < 0)
- return false;
- *reply_key = hashtable->nodes[index].key;
- *reply_data = hashtable->nodes[index].data;
- return true;
+ int index;
+
+ index = ply_hashtable_lookup_index (hashtable, key);
+ if (index < 0)
+ return false;
+ *reply_key = hashtable->nodes[index].key;
+ *reply_data = hashtable->nodes[index].data;
+ return true;
}
void
-ply_hashtable_foreach (ply_hashtable_t *hashtable,
- ply_hashtable_foreach_func_t func,
- void *user_data)
+ply_hashtable_foreach (ply_hashtable_t *hashtable,
+ ply_hashtable_foreach_func_t func,
+ void *user_data)
{
- unsigned int i;
- for (i = 0; i < hashtable->total_node_count; i++)
- {
- if (ply_bitarray_lookup (hashtable->live_node_bitmap, i))
- func(hashtable->nodes[i].key, hashtable->nodes[i].data, user_data);
- }
+ unsigned int i;
+
+ for (i = 0; i < hashtable->total_node_count; i++) {
+ if (ply_bitarray_lookup (hashtable->live_node_bitmap, i))
+ func (hashtable->nodes[i].key, hashtable->nodes[i].data, user_data);
+ }
}
int
ply_hashtable_get_size (ply_hashtable_t *hashtable)
{
- return hashtable->live_node_count;
+ return hashtable->live_node_count;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-hashtable.h b/src/libply/ply-hashtable.h
index e7e1a6eb..6ff20048 100644
--- a/src/libply/ply-hashtable.h
+++ b/src/libply/ply-hashtable.h
@@ -34,7 +34,7 @@ typedef void (ply_hashtable_foreach_func_t) (void *key,
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
int ply_hashtable_direct_compare (void *elementa,
- void *elementb);
+ void *elementb);
unsigned int ply_hashtable_direct_hash (void *element);
unsigned int ply_hashtable_string_hash (void *element);
int ply_hashtable_string_compare (void *elementa,
@@ -44,19 +44,19 @@ ply_hashtable_t *ply_hashtable_new (ply_hashtable_hash_func_t *hash_func,
void ply_hashtable_free (ply_hashtable_t *hashtable);
void ply_hashtable_resize (ply_hashtable_t *hashtable);
void ply_hashtable_insert (ply_hashtable_t *hashtable,
- void *key,
- void *data);
+ void *key,
+ void *data);
void *ply_hashtable_remove (ply_hashtable_t *hashtable,
- void *key);
+ void *key);
void *ply_hashtable_lookup (ply_hashtable_t *hashtable,
- void *key);
+ void *key);
int ply_hashtable_lookup_full (ply_hashtable_t *hashtable,
- void *key,
- void **reply_key,
- void **reply_data);
-void ply_hashtable_foreach (ply_hashtable_t *hashtable,
- ply_hashtable_foreach_func_t func,
- void *user_data);
+ void *key,
+ void **reply_key,
+ void **reply_data);
+void ply_hashtable_foreach (ply_hashtable_t *hashtable,
+ ply_hashtable_foreach_func_t func,
+ void *user_data);
int ply_hashtable_get_size (ply_hashtable_t *hashtable);
#endif
diff --git a/src/libply/ply-key-file.c b/src/libply/ply-key-file.c
index c62551e4..862d6d59 100644
--- a/src/libply/ply-key-file.c
+++ b/src/libply/ply-key-file.c
@@ -43,29 +43,29 @@
typedef struct
{
- char *key;
- char *value;
+ char *key;
+ char *value;
} ply_key_file_entry_t;
typedef struct
{
- char *name;
- ply_hashtable_t *entries;
+ char *name;
+ ply_hashtable_t *entries;
} ply_key_file_group_t;
struct _ply_key_file
{
- char *filename;
- FILE *fp;
+ char *filename;
+ FILE *fp;
- ply_hashtable_t *groups;
+ ply_hashtable_t *groups;
};
typedef struct
{
- ply_key_file_foreach_func_t *func;
- void *user_data;
- char *group_name;
+ ply_key_file_foreach_func_t *func;
+ void *user_data;
+ char *group_name;
} ply_key_file_foreach_func_data_t;
static bool ply_key_file_open_file (ply_key_file_t *key_file);
@@ -74,249 +74,235 @@ static void ply_key_file_close_file (ply_key_file_t *key_file);
static bool
ply_key_file_open_file (ply_key_file_t *key_file)
{
- assert (key_file != NULL);
+ assert (key_file != NULL);
- key_file->fp = fopen (key_file->filename, "re");
+ key_file->fp = fopen (key_file->filename, "re");
- if (key_file->fp == NULL)
- {
- ply_trace ("Failed to open key file %s: %m",
- key_file->filename);
- return false;
- }
- return true;
+ if (key_file->fp == NULL) {
+ ply_trace ("Failed to open key file %s: %m",
+ key_file->filename);
+ return false;
+ }
+ return true;
}
static void
ply_key_file_close_file (ply_key_file_t *key_file)
{
- assert (key_file != NULL);
+ assert (key_file != NULL);
- if (key_file->fp == NULL)
- return;
- fclose (key_file->fp);
- key_file->fp = NULL;
+ if (key_file->fp == NULL)
+ return;
+ fclose (key_file->fp);
+ key_file->fp = NULL;
}
ply_key_file_t *
ply_key_file_new (const char *filename)
{
- ply_key_file_t *key_file;
+ ply_key_file_t *key_file;
- assert (filename != NULL);
+ assert (filename != NULL);
- key_file = calloc (1, sizeof (ply_key_file_t));
+ key_file = calloc (1, sizeof(ply_key_file_t));
- key_file->filename = strdup (filename);
- key_file->fp = NULL;
- key_file->groups = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare);
+ key_file->filename = strdup (filename);
+ key_file->fp = NULL;
+ key_file->groups = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare);
- return key_file;
+ return key_file;
}
static void
-ply_key_file_free_entry_foreach (void *key,
+ply_key_file_free_entry_foreach (void *key,
void *data,
void *user_data)
{
- ply_key_file_entry_t *entry = data;
- free (entry->key);
- free (entry->value);
- free (entry);
+ ply_key_file_entry_t *entry = data;
+
+ free (entry->key);
+ free (entry->value);
+ free (entry);
}
static void
-ply_key_file_free_group (void *key,
+ply_key_file_free_group (void *key,
void *data,
void *user_data)
{
- ply_key_file_group_t *group = data;
-
- ply_hashtable_foreach (group->entries,
- ply_key_file_free_entry_foreach,
- NULL);
- ply_hashtable_free (group->entries);
- free (group->name);
- free (group);
+ ply_key_file_group_t *group = data;
+
+ ply_hashtable_foreach (group->entries,
+ ply_key_file_free_entry_foreach,
+ NULL);
+ ply_hashtable_free (group->entries);
+ free (group->name);
+ free (group);
}
void
ply_key_file_free (ply_key_file_t *key_file)
{
- if (key_file == NULL)
- return;
-
- assert (key_file->filename != NULL);
- ply_hashtable_foreach (key_file->groups,
- ply_key_file_free_group,
- NULL);
-
-
- ply_hashtable_free (key_file->groups);
- free (key_file->filename);
- free (key_file);
+ if (key_file == NULL)
+ return;
+
+ assert (key_file->filename != NULL);
+ ply_hashtable_foreach (key_file->groups,
+ ply_key_file_free_group,
+ NULL);
+
+
+ ply_hashtable_free (key_file->groups);
+ free (key_file->filename);
+ free (key_file);
}
static ply_key_file_group_t *
ply_key_file_load_group (ply_key_file_t *key_file,
const char *group_name)
{
- int items_matched;
- ply_key_file_group_t *group;
-
- group = calloc (1, sizeof (ply_key_file_group_t));
- group->name = strdup (group_name);
- group->entries = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare);
-
- ply_trace ("trying to load group %s", group_name);
- do
- {
- ply_key_file_entry_t *entry;
- char *key;
- char *value;
- off_t offset;
- int first_byte;
-
- key = NULL;
- value = NULL;
-
- do
- {
- first_byte = fgetc (key_file->fp);
- }
- while (isspace (first_byte));
+ int items_matched;
+ ply_key_file_group_t *group;
- if (first_byte == '#')
- {
- char *line_to_toss;
- size_t number_of_bytes;
+ group = calloc (1, sizeof(ply_key_file_group_t));
+ group->name = strdup (group_name);
+ group->entries = ply_hashtable_new (ply_hashtable_string_hash, ply_hashtable_string_compare);
- line_to_toss = NULL;
- number_of_bytes = 0;
+ ply_trace ("trying to load group %s", group_name);
+ do {
+ ply_key_file_entry_t *entry;
+ char *key;
+ char *value;
+ off_t offset;
+ int first_byte;
- getline (&line_to_toss, &number_of_bytes,
- key_file->fp);
- free (line_to_toss);
- items_matched = 0;
- continue;
- }
- ungetc (first_byte, key_file->fp);
+ key = NULL;
+ value = NULL;
- offset = ftello (key_file->fp);
- items_matched = fscanf (key_file->fp, " %m[^= \t\n] = %m[^\n] ", &key, &value);
+ do {
+ first_byte = fgetc (key_file->fp);
+ } while (isspace (first_byte));
- if (items_matched != 2)
- {
- if (items_matched == 1)
- fseeko (key_file->fp, offset, SEEK_SET);
+ if (first_byte == '#') {
+ char *line_to_toss;
+ size_t number_of_bytes;
- free (key);
- free (value);
- break;
- }
+ line_to_toss = NULL;
+ number_of_bytes = 0;
+
+ getline (&line_to_toss, &number_of_bytes,
+ key_file->fp);
+ free (line_to_toss);
+ items_matched = 0;
+ continue;
+ }
+ ungetc (first_byte, key_file->fp);
+
+ offset = ftello (key_file->fp);
+ items_matched = fscanf (key_file->fp, " %m[^= \t\n] = %m[^\n] ", &key, &value);
+
+ if (items_matched != 2) {
+ if (items_matched == 1)
+ fseeko (key_file->fp, offset, SEEK_SET);
- entry = calloc (1, sizeof (ply_key_file_entry_t));
+ free (key);
+ free (value);
+ break;
+ }
- entry->key = key;
- entry->value = value;
+ entry = calloc (1, sizeof(ply_key_file_entry_t));
- ply_hashtable_insert (group->entries, entry->key, entry);
- }
- while (items_matched != EOF);
+ entry->key = key;
+ entry->value = value;
- return group;
+ ply_hashtable_insert (group->entries, entry->key, entry);
+ } while (items_matched != EOF);
+
+ return group;
}
static bool
ply_key_file_load_groups (ply_key_file_t *key_file)
{
- int items_matched;
- bool added_group = false;
- bool has_comments = false;
-
- do
- {
- char *group_name;
- int first_byte;
-
- ply_key_file_group_t *group;
-
- first_byte = fgetc (key_file->fp);
- if (first_byte == '#')
- {
- char *line_to_toss;
- size_t number_of_bytes;
-
- line_to_toss = NULL;
- number_of_bytes = 0;
-
- getline (&line_to_toss, &number_of_bytes,
- key_file->fp);
- free (line_to_toss);
- has_comments = true;
- items_matched = 0;
- continue;
- }
- ungetc (first_byte, key_file->fp);
+ int items_matched;
+ bool added_group = false;
+ bool has_comments = false;
- group_name = NULL;
- items_matched = fscanf (key_file->fp, " [ %m[^]] ] ", &group_name);
+ do {
+ char *group_name;
+ int first_byte;
- if (items_matched <= 0)
- {
- ply_trace ("key file has no %sgroups",
- added_group? "more " : "");
- break;
- }
+ ply_key_file_group_t *group;
+
+ first_byte = fgetc (key_file->fp);
+ if (first_byte == '#') {
+ char *line_to_toss;
+ size_t number_of_bytes;
+
+ line_to_toss = NULL;
+ number_of_bytes = 0;
- assert (group_name != NULL);
- group = ply_key_file_load_group (key_file, group_name);
+ getline (&line_to_toss, &number_of_bytes,
+ key_file->fp);
+ free (line_to_toss);
+ has_comments = true;
+ items_matched = 0;
+ continue;
+ }
+ ungetc (first_byte, key_file->fp);
- free (group_name);
+ group_name = NULL;
+ items_matched = fscanf (key_file->fp, " [ %m[^]] ] ", &group_name);
- if (group == NULL)
- break;
+ if (items_matched <= 0) {
+ ply_trace ("key file has no %sgroups",
+ added_group ? "more " : "");
+ break;
+ }
- ply_hashtable_insert (key_file->groups, group->name, group);
- added_group = true;
- }
- while (items_matched != EOF);
+ assert (group_name != NULL);
+ group = ply_key_file_load_group (key_file, group_name);
- if (!added_group && has_comments)
- {
- ply_trace ("key file has comments but no groups");
- }
+ free (group_name);
- return added_group;
+ if (group == NULL)
+ break;
+
+ ply_hashtable_insert (key_file->groups, group->name, group);
+ added_group = true;
+ } while (items_matched != EOF);
+
+ if (!added_group && has_comments)
+ ply_trace ("key file has comments but no groups");
+
+ return added_group;
}
bool
ply_key_file_load (ply_key_file_t *key_file)
{
- bool was_loaded;
+ bool was_loaded;
- assert (key_file != NULL);
+ assert (key_file != NULL);
- if (!ply_key_file_open_file (key_file))
- return false;
+ if (!ply_key_file_open_file (key_file))
+ return false;
- was_loaded = ply_key_file_load_groups (key_file);
+ was_loaded = ply_key_file_load_groups (key_file);
- if (!was_loaded)
- {
- ply_trace ("was unable to load any groups");
- }
+ if (!was_loaded)
+ ply_trace ("was unable to load any groups");
- ply_key_file_close_file (key_file);
+ ply_key_file_close_file (key_file);
- return was_loaded;
+ return was_loaded;
}
static ply_key_file_group_t *
ply_key_file_find_group (ply_key_file_t *key_file,
const char *group_name)
{
- return ply_hashtable_lookup (key_file->groups, (void *) group_name);
+ return ply_hashtable_lookup (key_file->groups, (void *) group_name);
}
static ply_key_file_entry_t *
@@ -324,7 +310,7 @@ ply_key_file_find_entry (ply_key_file_t *key_file,
ply_key_file_group_t *group,
const char *key)
{
- return ply_hashtable_lookup (group->entries, (void *) key);
+ return ply_hashtable_lookup (group->entries, (void *) key);
}
bool
@@ -332,17 +318,17 @@ ply_key_file_has_key (ply_key_file_t *key_file,
const char *group_name,
const char *key)
{
- ply_key_file_group_t *group;
- ply_key_file_entry_t *entry;
+ ply_key_file_group_t *group;
+ ply_key_file_entry_t *entry;
- group = ply_key_file_find_group (key_file, group_name);
+ group = ply_key_file_find_group (key_file, group_name);
- if (group == NULL)
- return false;
+ if (group == NULL)
+ return false;
- entry = ply_key_file_find_entry (key_file, group, key);
+ entry = ply_key_file_find_entry (key_file, group, key);
- return entry != NULL;
+ return entry != NULL;
}
char *
@@ -350,26 +336,24 @@ ply_key_file_get_value (ply_key_file_t *key_file,
const char *group_name,
const char *key)
{
- ply_key_file_group_t *group;
- ply_key_file_entry_t *entry;
+ ply_key_file_group_t *group;
+ ply_key_file_entry_t *entry;
- group = ply_key_file_find_group (key_file, group_name);
+ group = ply_key_file_find_group (key_file, group_name);
- if (group == NULL)
- {
- ply_trace ("key file does not have group '%s'", group_name);
- return NULL;
- }
+ if (group == NULL) {
+ ply_trace ("key file does not have group '%s'", group_name);
+ return NULL;
+ }
- entry = ply_key_file_find_entry (key_file, group, key);
+ entry = ply_key_file_find_entry (key_file, group, key);
- if (entry == NULL)
- {
- ply_trace ("key file does not have entry for key '%s'", key);
- return NULL;
- }
+ if (entry == NULL) {
+ ply_trace ("key file does not have entry for key '%s'", key);
+ return NULL;
+ }
- return strdup (entry->value);
+ return strdup (entry->value);
}
static void
@@ -377,16 +361,16 @@ ply_key_file_foreach_entry_entries (void *key,
void *data,
void *user_data)
{
- ply_key_file_entry_t *entry;
- ply_key_file_foreach_func_data_t *func_data;
+ ply_key_file_entry_t *entry;
+ ply_key_file_foreach_func_data_t *func_data;
- func_data = user_data;
- entry = data;
+ func_data = user_data;
+ entry = data;
- func_data->func(func_data->group_name,
- entry->key,
- entry->value,
- func_data->user_data);
+ func_data->func (func_data->group_name,
+ entry->key,
+ entry->value,
+ func_data->user_data);
}
static void
@@ -394,30 +378,30 @@ ply_key_file_foreach_entry_groups (void *key,
void *data,
void *user_data)
{
- ply_key_file_group_t *group;
- ply_key_file_foreach_func_data_t *func_data;
+ ply_key_file_group_t *group;
+ ply_key_file_foreach_func_data_t *func_data;
- func_data = user_data;
- group = data;
- func_data->group_name = group->name;
+ func_data = user_data;
+ group = data;
+ func_data->group_name = group->name;
- ply_hashtable_foreach (group->entries,
- ply_key_file_foreach_entry_entries,
- func_data);
+ ply_hashtable_foreach (group->entries,
+ ply_key_file_foreach_entry_entries,
+ func_data);
}
void
-ply_key_file_foreach_entry (ply_key_file_t *key_file,
- ply_key_file_foreach_func_t func,
- void *user_data)
+ply_key_file_foreach_entry (ply_key_file_t *key_file,
+ ply_key_file_foreach_func_t func,
+ void *user_data)
{
- ply_key_file_foreach_func_data_t func_data;
+ ply_key_file_foreach_func_data_t func_data;
- func_data.func = func;
- func_data.user_data = user_data;
- ply_hashtable_foreach (key_file->groups,
- ply_key_file_foreach_entry_groups,
- &func_data);
+ func_data.func = func;
+ func_data.user_data = user_data;
+ ply_hashtable_foreach (key_file->groups,
+ ply_key_file_foreach_entry_groups,
+ &func_data);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-key-file.h b/src/libply/ply-key-file.h
index 8f6c8918..e69d14a8 100644
--- a/src/libply/ply-key-file.h
+++ b/src/libply/ply-key-file.h
@@ -1,4 +1,4 @@
-/* ply-key-file.h - key file loader
+/* ply-key-file.h - key file loader
*
* Copyright (C) 2009 Red Hat, Inc.
*
@@ -42,9 +42,9 @@ bool ply_key_file_has_key (ply_key_file_t *key_file,
char *ply_key_file_get_value (ply_key_file_t *key_file,
const char *group_name,
const char *key);
-void ply_key_file_foreach_entry (ply_key_file_t *key_file,
- ply_key_file_foreach_func_t func,
- void *user_data);
+void ply_key_file_foreach_entry (ply_key_file_t *key_file,
+ ply_key_file_foreach_func_t func,
+ void *user_data);
#endif
#endif /* PLY_KEY_FILE_H */
diff --git a/src/libply/ply-list.c b/src/libply/ply-list.c
index 8c589c21..da907934 100644
--- a/src/libply/ply-list.c
+++ b/src/libply/ply-list.c
@@ -31,83 +31,82 @@
struct _ply_list
{
- ply_list_node_t *first_node;
- ply_list_node_t *last_node;
+ ply_list_node_t *first_node;
+ ply_list_node_t *last_node;
- int number_of_nodes;
+ int number_of_nodes;
};
struct _ply_list_node
{
- void *data;
- struct _ply_list_node *previous;
- struct _ply_list_node *next;
+ void *data;
+ struct _ply_list_node *previous;
+ struct _ply_list_node *next;
};
ply_list_t *
ply_list_new (void)
{
- ply_list_t *list;
+ ply_list_t *list;
- list = calloc (1, sizeof (ply_list_t));
+ list = calloc (1, sizeof(ply_list_t));
- list->first_node = NULL;
- list->last_node = NULL;
- list->number_of_nodes = 0;
+ list->first_node = NULL;
+ list->last_node = NULL;
+ list->number_of_nodes = 0;
- return list;
+ return list;
}
void
ply_list_free (ply_list_t *list)
{
- ply_list_remove_all_nodes (list);
- free (list);
+ ply_list_remove_all_nodes (list);
+ free (list);
}
static ply_list_node_t *
ply_list_node_new (void *data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = calloc (1, sizeof (ply_list_node_t));
- node->data = data;
+ node = calloc (1, sizeof(ply_list_node_t));
+ node->data = data;
- return node;
+ return node;
}
static void
ply_list_node_free (ply_list_node_t *node)
{
- if (node == NULL)
- return;
+ if (node == NULL)
+ return;
- assert ((node->previous == NULL) && (node->next == NULL));
+ assert ((node->previous == NULL) && (node->next == NULL));
- free (node);
+ free (node);
}
int
ply_list_get_length (ply_list_t *list)
{
- return list->number_of_nodes;
+ return list->number_of_nodes;
}
ply_list_node_t *
ply_list_find_node (ply_list_t *list,
void *data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = list->first_node;
- while (node != NULL)
- {
- if (node->data == data)
- break;
+ node = list->first_node;
+ while (node != NULL) {
+ if (node->data == data)
+ break;
- node = node->next;
- }
- return node;
+ node = node->next;
+ }
+ return node;
}
static void
@@ -115,39 +114,32 @@ ply_list_insert_node (ply_list_t *list,
ply_list_node_t *node_before,
ply_list_node_t *new_node)
{
-
- if (new_node == NULL)
- return;
-
- if (node_before == NULL)
- {
- if (list->first_node == NULL)
- {
- assert (list->last_node == NULL);
-
- list->first_node = new_node;
- list->last_node = new_node;
+ if (new_node == NULL)
+ return;
+
+ if (node_before == NULL) {
+ if (list->first_node == NULL) {
+ assert (list->last_node == NULL);
+
+ list->first_node = new_node;
+ list->last_node = new_node;
+ } else {
+ list->first_node->previous = new_node;
+ new_node->next = list->first_node;
+ list->first_node = new_node;
+ }
+ } else {
+ new_node->next = node_before->next;
+ if (node_before->next != NULL)
+ node_before->next->previous = new_node;
+ node_before->next = new_node;
+ new_node->previous = node_before;
+
+ if (node_before == list->last_node)
+ list->last_node = new_node;
}
- else
- {
- list->first_node->previous = new_node;
- new_node->next = list->first_node;
- list->first_node = new_node;
- }
- }
- else
- {
- new_node->next = node_before->next;
- if (node_before->next != NULL)
- node_before->next->previous = new_node;
- node_before->next = new_node;
- new_node->previous = node_before;
-
- if (node_before == list->last_node)
- list->last_node = new_node;
- }
-
- list->number_of_nodes++;
+
+ list->number_of_nodes++;
}
ply_list_node_t *
@@ -155,224 +147,217 @@ ply_list_insert_data (ply_list_t *list,
void *data,
ply_list_node_t *node_before)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_node_new (data);
+ node = ply_list_node_new (data);
- ply_list_insert_node (list, node_before, node);
+ ply_list_insert_node (list, node_before, node);
- return node;
+ return node;
}
ply_list_node_t *
ply_list_append_data (ply_list_t *list,
void *data)
{
- return ply_list_insert_data (list, data, list->last_node);
+ return ply_list_insert_data (list, data, list->last_node);
}
ply_list_node_t *
ply_list_prepend_data (ply_list_t *list,
void *data)
{
- return ply_list_insert_data (list, data, NULL);
+ return ply_list_insert_data (list, data, NULL);
}
void
ply_list_remove_data (ply_list_t *list,
void *data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (data == NULL)
- return;
+ if (data == NULL)
+ return;
- node = ply_list_find_node (list, data);
+ node = ply_list_find_node (list, data);
- if (node != NULL)
- ply_list_remove_node (list, node);
+ if (node != NULL)
+ ply_list_remove_node (list, node);
}
static void
ply_list_unlink_node (ply_list_t *list,
ply_list_node_t *node)
{
- ply_list_node_t *node_before, *node_after;
+ ply_list_node_t *node_before, *node_after;
- assert (list != NULL);
+ assert (list != NULL);
- if (node == NULL)
- return;
+ if (node == NULL)
+ return;
- node_before = node->previous;
- node_after = node->next;
+ node_before = node->previous;
+ node_after = node->next;
- if (node_before != NULL)
- node_before->next = node_after;
+ if (node_before != NULL)
+ node_before->next = node_after;
- if (node_after != NULL)
- node_after->previous = node_before;
+ if (node_after != NULL)
+ node_after->previous = node_before;
- if (list->first_node == node)
- list->first_node = node_after;
+ if (list->first_node == node)
+ list->first_node = node_after;
- if (list->last_node == node)
- list->last_node = node_before;
+ if (list->last_node == node)
+ list->last_node = node_before;
- node->previous = NULL;
- node->next = NULL;
+ node->previous = NULL;
+ node->next = NULL;
- list->number_of_nodes--;
- assert (ply_list_find_node (list, node->data) != node);
+ list->number_of_nodes--;
+ assert (ply_list_find_node (list, node->data) != node);
}
void
ply_list_remove_node (ply_list_t *list,
ply_list_node_t *node)
{
- ply_list_unlink_node (list, node);
- ply_list_node_free (node);
+ ply_list_unlink_node (list, node);
+ ply_list_node_free (node);
}
void
ply_list_remove_all_nodes (ply_list_t *list)
{
- ply_list_node_t *node;
-
- if (list == NULL)
- return;
-
- node = list->first_node;
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- next_node = node->next;
- ply_list_remove_node (list, node);
- node = next_node;
- }
+ ply_list_node_t *node;
+
+ if (list == NULL)
+ return;
+
+ node = list->first_node;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ next_node = node->next;
+ ply_list_remove_node (list, node);
+ node = next_node;
+ }
}
ply_list_node_t *
ply_list_get_first_node (ply_list_t *list)
{
- return list->first_node;
+ return list->first_node;
}
ply_list_node_t *
ply_list_get_last_node (ply_list_t *list)
{
- return list->last_node;
+ return list->last_node;
}
ply_list_node_t *
ply_list_get_nth_node (ply_list_t *list,
int index)
{
- ply_list_node_t *node;
- node = list->first_node;
- if (index < 0)
- return NULL;
- if (index >= list->number_of_nodes)
- return NULL;
- while (index--)
- {
- node = node->next;
- }
- return node;
+ ply_list_node_t *node;
+
+ node = list->first_node;
+ if (index < 0)
+ return NULL;
+ if (index >= list->number_of_nodes)
+ return NULL;
+ while (index--) {
+ node = node->next;
+ }
+ return node;
}
ply_list_node_t *
-ply_list_get_next_node (ply_list_t *list,
- ply_list_node_t *node)
+ply_list_get_next_node (ply_list_t *list,
+ ply_list_node_t *node)
{
- return node->next;
+ return node->next;
}
-static void
+static void
ply_list_sort_swap (void **element_a,
void **element_b)
{
- void *temp;
- temp = *element_a;
- *element_a = *element_b;
- *element_b = temp;
+ void *temp;
+
+ temp = *element_a;
+ *element_a = *element_b;
+ *element_b = temp;
}
-static void
+static void
ply_list_sort_body (ply_list_node_t *node_start,
ply_list_node_t *node_end,
ply_list_compare_func_t *compare)
{
- if (node_start == node_end) return;
- ply_list_node_t *cur_node = node_start;
- ply_list_node_t *top_node = node_end;
- ply_list_node_t *next_node = cur_node->next;
- while (cur_node != top_node)
- {
- int diff = compare(cur_node->data, next_node->data);
- if (diff > 0)
- {
- ply_list_sort_swap (&next_node->data,
- &cur_node->data);
- cur_node = next_node;
- next_node = cur_node->next;
- }
- else
- {
- ply_list_sort_swap (&next_node->data,
- &top_node->data);
- top_node = top_node->previous;
+ if (node_start == node_end) return;
+ ply_list_node_t *cur_node = node_start;
+ ply_list_node_t *top_node = node_end;
+ ply_list_node_t *next_node = cur_node->next;
+ while (cur_node != top_node) {
+ int diff = compare (cur_node->data, next_node->data);
+ if (diff > 0) {
+ ply_list_sort_swap (&next_node->data,
+ &cur_node->data);
+ cur_node = next_node;
+ next_node = cur_node->next;
+ } else {
+ ply_list_sort_swap (&next_node->data,
+ &top_node->data);
+ top_node = top_node->previous;
+ }
}
- }
-
- if (cur_node != node_end)
- ply_list_sort_body (cur_node->next,
- node_end,
- compare);
- if (cur_node != node_start)
- ply_list_sort_body (node_start,
- cur_node->previous,
- compare);
+
+ if (cur_node != node_end)
+ ply_list_sort_body (cur_node->next,
+ node_end,
+ compare);
+ if (cur_node != node_start)
+ ply_list_sort_body (node_start,
+ cur_node->previous,
+ compare);
}
void
ply_list_sort (ply_list_t *list,
ply_list_compare_func_t *compare)
{
- ply_list_sort_body (ply_list_get_first_node (list),
- ply_list_get_last_node (list),
- compare);
+ ply_list_sort_body (ply_list_get_first_node (list),
+ ply_list_get_last_node (list),
+ compare);
}
void
ply_list_sort_stable (ply_list_t *list,
ply_list_compare_func_t *compare)
{
- ply_list_node_t *top_node;
- ply_list_node_t *cur_node;
-
- top_node = ply_list_get_first_node (list);
- if (top_node == NULL) return;
- top_node = top_node->next;
-
- while (top_node)
- {
- cur_node = top_node->previous;
- while (cur_node && compare(cur_node->data, cur_node->next->data) > 0)
- {
- ply_list_sort_swap (&cur_node->data,
- &cur_node->next->data);
- cur_node = cur_node->previous;
+ ply_list_node_t *top_node;
+ ply_list_node_t *cur_node;
+
+ top_node = ply_list_get_first_node (list);
+ if (top_node == NULL) return;
+ top_node = top_node->next;
+
+ while (top_node) {
+ cur_node = top_node->previous;
+ while (cur_node && compare (cur_node->data, cur_node->next->data) > 0) {
+ ply_list_sort_swap (&cur_node->data,
+ &cur_node->next->data);
+ cur_node = cur_node->previous;
+ }
+ top_node = top_node->next;
}
- top_node = top_node->next;
- }
-
}
void *
ply_list_node_get_data (ply_list_node_t *node)
{
- return node->data;
+ return node->data;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-list.h b/src/libply/ply-list.h
index 4f54bb58..2a3e187b 100644
--- a/src/libply/ply-list.h
+++ b/src/libply/ply-list.h
@@ -24,7 +24,8 @@
typedef struct _ply_list_node ply_list_node_t;
typedef struct _ply_list ply_list_t;
-typedef int (ply_list_compare_func_t) (void *elementa, void *elementb);
+typedef int (ply_list_compare_func_t) (void *elementa,
+ void *elementb);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_list_t *ply_list_new (void);
@@ -32,15 +33,15 @@ void ply_list_free (ply_list_t *list);
int ply_list_get_length (ply_list_t *list);
ply_list_node_t *ply_list_find_node (ply_list_t *list,
void *data);
-ply_list_node_t *ply_list_insert_data (ply_list_t *list,
- void *data,
- ply_list_node_t *node_before);
+ply_list_node_t *ply_list_insert_data (ply_list_t *list,
+ void *data,
+ ply_list_node_t *node_before);
ply_list_node_t *ply_list_append_data (ply_list_t *list,
void *data);
ply_list_node_t *ply_list_prepend_data (ply_list_t *list,
void *data);
void ply_list_remove_data (ply_list_t *list,
- void *data);
+ void *data);
void ply_list_remove_node (ply_list_t *list,
ply_list_node_t *node);
void ply_list_remove_all_nodes (ply_list_t *list);
diff --git a/src/libply/ply-logger.c b/src/libply/ply-logger.c
index 740c30ea..789ad4ef 100644
--- a/src/libply/ply-logger.c
+++ b/src/libply/ply-logger.c
@@ -53,70 +53,70 @@
typedef struct
{
- ply_logger_filter_handler_t handler;
- void *user_data;
+ ply_logger_filter_handler_t handler;
+ void *user_data;
} ply_logger_filter_t;
struct _ply_logger
{
- int output_fd;
- char *filename;
+ int output_fd;
+ char *filename;
- char *buffer;
- size_t buffer_size;
- size_t buffer_capacity;
+ char *buffer;
+ size_t buffer_size;
+ size_t buffer_capacity;
- ply_logger_flush_policy_t flush_policy;
- ply_list_t *filters;
+ ply_logger_flush_policy_t flush_policy;
+ ply_list_t *filters;
- uint32_t is_enabled : 1;
- uint32_t tracing_is_enabled : 1;
+ uint32_t is_enabled : 1;
+ uint32_t tracing_is_enabled : 1;
};
static bool ply_text_is_loggable (const char *string,
ssize_t length);
-static void ply_logger_write_exception (ply_logger_t *logger,
- const char *string);
-static bool ply_logger_write (ply_logger_t *logger,
- const char *string,
- size_t length,
- bool should_report_failures);
-
-static bool ply_logger_buffer (ply_logger_t *logger,
- const char *string,
- size_t length);
+static void ply_logger_write_exception (ply_logger_t *logger,
+ const char *string);
+static bool ply_logger_write (ply_logger_t *logger,
+ const char *string,
+ size_t length,
+ bool should_report_failures);
+
+static bool ply_logger_buffer (ply_logger_t *logger,
+ const char *string,
+ size_t length);
static bool ply_logger_flush_buffer (ply_logger_t *logger);
static bool
ply_text_is_loggable (const char *string,
ssize_t length)
{
- /* I guess we should let everything through since there
- * isn't really any specified encoding
- */
+ /* I guess we should let everything through since there
+ * isn't really any specified encoding
+ */
- return true;
+ return true;
}
static void
-ply_logger_write_exception (ply_logger_t *logger,
- const char *string)
+ply_logger_write_exception (ply_logger_t *logger,
+ const char *string)
{
- char *message;
- int number_of_bytes;
+ char *message;
+ int number_of_bytes;
- if (!ply_text_is_loggable (string, -1))
- return;
+ if (!ply_text_is_loggable (string, -1))
+ return;
- message = NULL;
- asprintf (&message,
- "[couldn't write a log entry: %s]\n%n",
- string, &number_of_bytes);
+ message = NULL;
+ asprintf (&message,
+ "[couldn't write a log entry: %s]\n%n",
+ string, &number_of_bytes);
- assert (message != NULL);
+ assert (message != NULL);
- ply_logger_write (logger, message, number_of_bytes, false);
- free (message);
+ ply_logger_write (logger, message, number_of_bytes, false);
+ free (message);
}
static bool
@@ -125,75 +125,72 @@ ply_logger_write (ply_logger_t *logger,
size_t length,
bool should_report_failures)
{
- if (!ply_text_is_loggable (string, length))
- {
- if (should_report_failures)
- ply_logger_write_exception (logger,
- "log text contains unloggable bytes");
- /* we return true here, because returning false would mean
- * "you aren't allowed to write to the log file anymore"
- */
- return true;
- }
-
- if (!ply_write (logger->output_fd, string, length))
- {
- if (should_report_failures)
- ply_logger_write_exception (logger, strerror (errno));
-
- return false;
- }
-
- return true;
+ if (!ply_text_is_loggable (string, length)) {
+ if (should_report_failures)
+ ply_logger_write_exception (logger,
+ "log text contains unloggable bytes");
+ /* we return true here, because returning false would mean
+ * "you aren't allowed to write to the log file anymore"
+ */
+ return true;
+ }
+
+ if (!ply_write (logger->output_fd, string, length)) {
+ if (should_report_failures)
+ ply_logger_write_exception (logger, strerror (errno));
+
+ return false;
+ }
+
+ return true;
}
static bool
ply_logger_flush_buffer (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- if (logger->buffer_size == 0)
- return true;
+ if (logger->buffer_size == 0)
+ return true;
- if (!ply_logger_write (logger, logger->buffer, logger->buffer_size, true))
- return false;
+ if (!ply_logger_write (logger, logger->buffer, logger->buffer_size, true))
+ return false;
- memset (logger->buffer, '\0', logger->buffer_size);
- logger->buffer_size = 0;
+ memset (logger->buffer, '\0', logger->buffer_size);
+ logger->buffer_size = 0;
- return true;
+ return true;
}
static bool
ply_logger_increase_buffer_size (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- if ((logger->buffer_capacity * 2) > PLY_LOGGER_MAX_BUFFER_CAPACITY)
- return false;
+ if ((logger->buffer_capacity * 2) > PLY_LOGGER_MAX_BUFFER_CAPACITY)
+ return false;
- logger->buffer_capacity *= 2;
+ logger->buffer_capacity *= 2;
- logger->buffer = realloc (logger->buffer, logger->buffer_capacity);
- return true;
+ logger->buffer = realloc (logger->buffer, logger->buffer_capacity);
+ return true;
}
static void
ply_logger_decapitate_buffer (ply_logger_t *logger,
size_t bytes_in_head)
{
- assert (logger != NULL);
-
- bytes_in_head = MIN (logger->buffer_size, bytes_in_head);
-
- if (bytes_in_head == logger->buffer_size)
- logger->buffer_size = 0;
- else
- {
- memmove (logger->buffer, logger->buffer + bytes_in_head,
- logger->buffer_size - bytes_in_head);
- logger->buffer_size -= bytes_in_head;
- }
+ assert (logger != NULL);
+
+ bytes_in_head = MIN (logger->buffer_size, bytes_in_head);
+
+ if (bytes_in_head == logger->buffer_size) {
+ logger->buffer_size = 0;
+ } else {
+ memmove (logger->buffer, logger->buffer + bytes_in_head,
+ logger->buffer_size - bytes_in_head);
+ logger->buffer_size -= bytes_in_head;
+ }
}
static bool
@@ -201,304 +198,294 @@ ply_logger_buffer (ply_logger_t *logger,
const char *string,
size_t length)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- if ((logger->buffer_size + length) >= logger->buffer_capacity)
- {
- if (!ply_logger_increase_buffer_size (logger))
- {
- ply_logger_decapitate_buffer (logger, length);
+ if ((logger->buffer_size + length) >= logger->buffer_capacity) {
+ if (!ply_logger_increase_buffer_size (logger)) {
+ ply_logger_decapitate_buffer (logger, length);
- if ((logger->buffer_size + length) >= logger->buffer_capacity)
- if (!ply_logger_increase_buffer_size (logger))
- return false;
+ if ((logger->buffer_size + length) >= logger->buffer_capacity)
+ if (!ply_logger_increase_buffer_size (logger))
+ return false;
+ }
}
- }
- assert (logger->buffer_size + length < logger->buffer_capacity);
+ assert (logger->buffer_size + length < logger->buffer_capacity);
- memcpy (logger->buffer + logger->buffer_size,
- string, length);
+ memcpy (logger->buffer + logger->buffer_size,
+ string, length);
- logger->buffer_size += length;
+ logger->buffer_size += length;
- return true;
+ return true;
}
ply_logger_t *
ply_logger_new (void)
{
- ply_logger_t *logger;
+ ply_logger_t *logger;
- logger = calloc (1, sizeof (ply_logger_t));
+ logger = calloc (1, sizeof(ply_logger_t));
- logger->output_fd = -1;
- logger->filename = NULL;
- logger->is_enabled = true;
- logger->tracing_is_enabled = false;
+ logger->output_fd = -1;
+ logger->filename = NULL;
+ logger->is_enabled = true;
+ logger->tracing_is_enabled = false;
- logger->buffer_capacity = 4096;
- logger->buffer = calloc (1, logger->buffer_capacity);
- logger->buffer_size = 0;
+ logger->buffer_capacity = 4096;
+ logger->buffer = calloc (1, logger->buffer_capacity);
+ logger->buffer_size = 0;
- logger->filters = ply_list_new ();
+ logger->filters = ply_list_new ();
- return logger;
+ return logger;
}
ply_logger_t *
ply_logger_get_default (void)
{
- static ply_logger_t *logger = NULL;
+ static ply_logger_t *logger = NULL;
- if (logger == NULL)
- {
- logger = ply_logger_new ();
- ply_logger_set_output_fd (logger, STDOUT_FILENO);
- }
+ if (logger == NULL) {
+ logger = ply_logger_new ();
+ ply_logger_set_output_fd (logger, STDOUT_FILENO);
+ }
- return logger;
+ return logger;
}
ply_logger_t *
ply_logger_get_error_default (void)
{
- static ply_logger_t *logger = NULL;
+ static ply_logger_t *logger = NULL;
- if (logger == NULL)
- {
- logger = ply_logger_new ();
- ply_logger_set_output_fd (logger, STDERR_FILENO);
- ply_logger_set_flush_policy (logger,
- PLY_LOGGER_FLUSH_POLICY_EVERY_TIME);
- }
+ if (logger == NULL) {
+ logger = ply_logger_new ();
+ ply_logger_set_output_fd (logger, STDERR_FILENO);
+ ply_logger_set_flush_policy (logger,
+ PLY_LOGGER_FLUSH_POLICY_EVERY_TIME);
+ }
- return logger;
+ return logger;
}
static void
ply_logger_free_filters (ply_logger_t *logger)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (logger->filters);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_logger_filter_t *filter;
+ node = ply_list_get_first_node (logger->filters);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_logger_filter_t *filter;
- filter = (ply_logger_filter_t *) ply_list_node_get_data (node);
+ filter = (ply_logger_filter_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (logger->filters, node);
- free (filter);
- node = next_node;
- }
+ next_node = ply_list_get_next_node (logger->filters, node);
+ free (filter);
+ node = next_node;
+ }
- ply_list_free (logger->filters);
+ ply_list_free (logger->filters);
}
void
ply_logger_free (ply_logger_t *logger)
{
- if (logger == NULL)
- return;
+ if (logger == NULL)
+ return;
- if (logger->output_fd >= 0)
- {
- if (ply_logger_is_logging (logger))
- ply_logger_flush (logger);
- close (logger->output_fd);
- }
+ if (logger->output_fd >= 0) {
+ if (ply_logger_is_logging (logger))
+ ply_logger_flush (logger);
+ close (logger->output_fd);
+ }
- ply_logger_free_filters (logger);
+ ply_logger_free_filters (logger);
- free (logger->filename);
- free (logger->buffer);
- free (logger);
+ free (logger->filename);
+ free (logger->buffer);
+ free (logger);
}
bool
-ply_logger_open_file (ply_logger_t *logger,
- const char *filename,
- bool world_readable)
+ply_logger_open_file (ply_logger_t *logger,
+ const char *filename,
+ bool world_readable)
{
- int fd;
- mode_t mode;
+ int fd;
+ mode_t mode;
- assert (logger != NULL);
- assert (filename != NULL);
+ assert (logger != NULL);
+ assert (filename != NULL);
- if (world_readable)
- mode = 0644;
- else
- mode = 0600;
+ if (world_readable)
+ mode = 0644;
+ else
+ mode = 0600;
- fd = open (filename, PLY_LOGGER_OPEN_FLAGS, mode);
+ fd = open (filename, PLY_LOGGER_OPEN_FLAGS, mode);
- if (fd < 0)
- return false;
+ if (fd < 0)
+ return false;
- if (fchmod (fd, mode) < 0) {
- close (fd);
- return false;
- }
+ if (fchmod (fd, mode) < 0) {
+ close (fd);
+ return false;
+ }
- ply_logger_set_output_fd (logger, fd);
+ ply_logger_set_output_fd (logger, fd);
- free (logger->filename);
+ free (logger->filename);
- logger->filename = strdup (filename);
+ logger->filename = strdup (filename);
- return true;
+ return true;
}
void
ply_logger_close_file (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- if (logger->output_fd < 0)
- return;
+ if (logger->output_fd < 0)
+ return;
- close (logger->output_fd);
- ply_logger_set_output_fd (logger, -1);
+ close (logger->output_fd);
+ ply_logger_set_output_fd (logger, -1);
}
void
ply_logger_set_output_fd (ply_logger_t *logger,
int fd)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- logger->output_fd = fd;
+ logger->output_fd = fd;
}
int
ply_logger_get_output_fd (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- return logger->output_fd;
+ return logger->output_fd;
}
bool
ply_logger_flush (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- if (!ply_logger_is_logging (logger))
- return false;
+ if (!ply_logger_is_logging (logger))
+ return false;
- if (logger->output_fd < 0)
- return false;
+ if (logger->output_fd < 0)
+ return false;
- if (!ply_logger_flush_buffer (logger))
- return false;
+ if (!ply_logger_flush_buffer (logger))
+ return false;
#ifdef SYNC_ON_FLUSH
- if ((fdatasync (logger->output_fd) < 0) &&
- ((errno != EROFS) && (errno != EINVAL)))
- return false;
+ if ((fdatasync (logger->output_fd) < 0) &&
+ ((errno != EROFS) && (errno != EINVAL)))
+ return false;
#endif
- return true;
+ return true;
}
void
-ply_logger_set_flush_policy (ply_logger_t *logger,
- ply_logger_flush_policy_t policy)
+ply_logger_set_flush_policy (ply_logger_t *logger,
+ ply_logger_flush_policy_t policy)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- logger->flush_policy = policy;
+ logger->flush_policy = policy;
}
ply_logger_flush_policy_t
ply_logger_get_flush_policy (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- return logger->flush_policy;
+ return logger->flush_policy;
}
void
ply_logger_toggle_logging (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- logger->is_enabled = !logger->is_enabled;
+ logger->is_enabled = !logger->is_enabled;
}
bool
ply_logger_is_logging (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- return logger->is_enabled != false;
+ return logger->is_enabled != false;
}
static bool
-ply_logger_validate_format_string (ply_logger_t *logger,
- const char *format)
+ply_logger_validate_format_string (ply_logger_t *logger,
+ const char *format)
{
- char *n, *p;
+ char *n, *p;
- p = (char *) format;
+ p = (char *) format;
- /* lame checks to limit the damage
- * of some potential exploits.
- */
- while ((n = strstr (p, "%n")) != NULL)
- {
- if (n == format)
- return false;
+ /* lame checks to limit the damage
+ * of some potential exploits.
+ */
+ while ((n = strstr (p, "%n")) != NULL) {
+ if (n == format)
+ return false;
- if (n[-1] != '%')
- return false;
+ if (n[-1] != '%')
+ return false;
- p = n + 1;
- }
+ p = n + 1;
+ }
- return true;
+ return true;
}
void
-ply_logger_inject_with_non_literal_format_string (ply_logger_t *logger,
- const char *format,
+ply_logger_inject_with_non_literal_format_string (ply_logger_t *logger,
+ const char *format,
...)
{
- va_list args;
- size_t string_size;
- char write_buffer[PLY_LOGGER_MAX_INJECTION_SIZE] = "";
-
- assert (logger != NULL);
+ va_list args;
+ size_t string_size;
+ char write_buffer[PLY_LOGGER_MAX_INJECTION_SIZE] = "";
- if (!ply_logger_is_logging (logger))
- return;
+ assert (logger != NULL);
- if (!ply_logger_validate_format_string (logger, format))
- {
- ply_logger_write_exception (logger, "log format string invalid");
- return;
- }
+ if (!ply_logger_is_logging (logger))
+ return;
- va_start (args, format);
- string_size = vsnprintf (write_buffer, 0, format, args) + 1;
- va_end (args);
+ if (!ply_logger_validate_format_string (logger, format)) {
+ ply_logger_write_exception (logger, "log format string invalid");
+ return;
+ }
- if (string_size > PLY_LOGGER_MAX_INJECTION_SIZE)
- {
- ply_logger_write_exception (logger, "log text too long");
- return;
- }
+ va_start (args, format);
+ string_size = vsnprintf (write_buffer, 0, format, args) + 1;
+ va_end (args);
- va_start (args, format);
- vsnprintf (write_buffer, PLY_LOGGER_MAX_INJECTION_SIZE,
- format, args);
- va_end (args);
+ if (string_size > PLY_LOGGER_MAX_INJECTION_SIZE) {
+ ply_logger_write_exception (logger, "log text too long");
+ return;
+ }
- ply_logger_inject_bytes (logger, write_buffer, string_size - 1);
+ va_start (args, format);
+ vsnprintf (write_buffer, PLY_LOGGER_MAX_INJECTION_SIZE,
+ format, args);
+ va_end (args);
+ ply_logger_inject_bytes (logger, write_buffer, string_size - 1);
}
void
@@ -506,95 +493,91 @@ ply_logger_inject_bytes (ply_logger_t *logger,
const void *bytes,
size_t number_of_bytes)
{
- ply_list_node_t *node;
- void *filtered_bytes;
- size_t filtered_size;
-
- assert (logger != NULL);
- assert (bytes != NULL);
- assert (number_of_bytes != 0);
-
- filtered_bytes = NULL;
- filtered_size = 0;
- node = ply_list_get_first_node (logger->filters);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_logger_filter_t *filter;
-
- filter = (ply_logger_filter_t *) ply_list_node_get_data (node);
-
- next_node = ply_list_get_next_node (logger->filters, node);
-
- if (filtered_bytes == NULL)
- filter->handler (filter->user_data, bytes, number_of_bytes,
- &filtered_bytes, &filtered_size, logger);
- else
- {
- void *new_bytes;
- size_t new_size;
-
- new_bytes = NULL;
- new_size = 0;
- filter->handler (filter->user_data, filtered_bytes, filtered_size,
- &new_bytes, &new_size, logger);
-
- if (new_bytes != NULL)
- {
- free (filtered_bytes);
- filtered_bytes = new_bytes;
- filtered_size = new_size;
- }
+ ply_list_node_t *node;
+ void *filtered_bytes;
+ size_t filtered_size;
+
+ assert (logger != NULL);
+ assert (bytes != NULL);
+ assert (number_of_bytes != 0);
+
+ filtered_bytes = NULL;
+ filtered_size = 0;
+ node = ply_list_get_first_node (logger->filters);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_logger_filter_t *filter;
+
+ filter = (ply_logger_filter_t *) ply_list_node_get_data (node);
+
+ next_node = ply_list_get_next_node (logger->filters, node);
+
+ if (filtered_bytes == NULL) {
+ filter->handler (filter->user_data, bytes, number_of_bytes,
+ &filtered_bytes, &filtered_size, logger);
+ } else {
+ void *new_bytes;
+ size_t new_size;
+
+ new_bytes = NULL;
+ new_size = 0;
+ filter->handler (filter->user_data, filtered_bytes, filtered_size,
+ &new_bytes, &new_size, logger);
+
+ if (new_bytes != NULL) {
+ free (filtered_bytes);
+ filtered_bytes = new_bytes;
+ filtered_size = new_size;
+ }
+ }
+
+ node = next_node;
}
- node = next_node;
- }
-
- if (filtered_bytes == NULL)
- ply_logger_buffer (logger, bytes, number_of_bytes);
- else
- {
- ply_logger_buffer (logger, filtered_bytes, filtered_size);
- free (filtered_bytes);
- }
+ if (filtered_bytes == NULL) {
+ ply_logger_buffer (logger, bytes, number_of_bytes);
+ } else {
+ ply_logger_buffer (logger, filtered_bytes, filtered_size);
+ free (filtered_bytes);
+ }
- assert ((logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED)
- || (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME));
+ assert ((logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED)
+ || (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME));
- if (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME)
- ply_logger_flush (logger);
+ if (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME)
+ ply_logger_flush (logger);
}
void
-ply_logger_add_filter (ply_logger_t *logger,
- ply_logger_filter_handler_t filter_handler,
- void *user_data)
+ply_logger_add_filter (ply_logger_t *logger,
+ ply_logger_filter_handler_t filter_handler,
+ void *user_data)
{
- ply_logger_filter_t *filter;
+ ply_logger_filter_t *filter;
- filter = calloc (1, sizeof (ply_logger_filter_t));
+ filter = calloc (1, sizeof(ply_logger_filter_t));
- filter->handler = filter_handler;
- filter->user_data = user_data;
+ filter->handler = filter_handler;
+ filter->user_data = user_data;
- ply_list_append_data (logger->filters, filter);
+ ply_list_append_data (logger->filters, filter);
}
#ifdef PLY_ENABLE_TRACING
void
ply_logger_toggle_tracing (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- logger->tracing_is_enabled = !logger->tracing_is_enabled;
+ logger->tracing_is_enabled = !logger->tracing_is_enabled;
}
bool
ply_logger_is_tracing_enabled (ply_logger_t *logger)
{
- assert (logger != NULL);
+ assert (logger != NULL);
- return logger->tracing_is_enabled != false;
+ return logger->tracing_is_enabled != false;
}
#endif /* PLY_ENABLE_TRACING */
diff --git a/src/libply/ply-logger.h b/src/libply/ply-logger.h
index 596bed53..de231817 100644
--- a/src/libply/ply-logger.h
+++ b/src/libply/ply-logger.h
@@ -31,16 +31,16 @@ typedef struct _ply_logger ply_logger_t;
typedef enum
{
- PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED = 0,
- PLY_LOGGER_FLUSH_POLICY_EVERY_TIME
+ PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED = 0,
+ PLY_LOGGER_FLUSH_POLICY_EVERY_TIME
} ply_logger_flush_policy_t;
-typedef void (* ply_logger_filter_handler_t) (void *user_data,
- const void *in_bytes,
- size_t in_size,
- void **out_bytes,
- size_t *out_size,
- ply_logger_t *logger);
+typedef void (*ply_logger_filter_handler_t) (void *user_data,
+ const void *in_bytes,
+ size_t in_size,
+ void **out_bytes,
+ size_t *out_size,
+ ply_logger_t *logger);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_logger_t *ply_logger_new (void);
@@ -48,28 +48,29 @@ void ply_logger_free (ply_logger_t *logger);
bool ply_logger_open_file (ply_logger_t *logger,
const char *filename,
bool world_readable);
-void ply_logger_close_file (ply_logger_t *logger);
+void ply_logger_close_file (ply_logger_t *logger);
void ply_logger_set_output_fd (ply_logger_t *logger,
int fd);
int ply_logger_get_output_fd (ply_logger_t *logger);
bool ply_logger_flush (ply_logger_t *logger);
-void ply_logger_set_flush_policy (ply_logger_t *logger,
- ply_logger_flush_policy_t policy);
+void ply_logger_set_flush_policy (ply_logger_t *logger,
+ ply_logger_flush_policy_t policy);
ply_logger_flush_policy_t ply_logger_get_flush_policy (ply_logger_t *logger);
void ply_logger_toggle_logging (ply_logger_t *logger);
bool ply_logger_is_logging (ply_logger_t *logger);
void ply_logger_inject_bytes (ply_logger_t *logger,
const void *bytes,
- size_t number_of_bytes);
-void ply_logger_add_filter (ply_logger_t *logger,
- ply_logger_filter_handler_t filter_handler,
- void *user_data);
-#define ply_logger_inject(logger, format, args...) \
+ size_t number_of_bytes);
+void ply_logger_add_filter (ply_logger_t *logger,
+ ply_logger_filter_handler_t filter_handler,
+ void *user_data);
+#define ply_logger_inject(logger, format, args ...) \
ply_logger_inject_with_non_literal_format_string (logger, \
- format "", ##args)
+ format "", ## args)
__attribute__((__format__ (__printf__, 2, 3)))
-void ply_logger_inject_with_non_literal_format_string (ply_logger_t *logger,
- const char *format, ...);
+void ply_logger_inject_with_non_literal_format_string (ply_logger_t *logger,
+ const char *format,
+ ...);
ply_logger_t *ply_logger_get_default (void);
ply_logger_t *ply_logger_get_error_default (void);
@@ -81,25 +82,25 @@ ply_logger_t *ply_logger_get_error_default (void);
void ply_logger_toggle_tracing (ply_logger_t *logger);
bool ply_logger_is_tracing_enabled (ply_logger_t *logger);
-#define ply_logger_trace(logger, format, args...) \
-do \
- { \
- int _old_errno; \
- _old_errno = errno; \
- if (ply_logger_is_tracing_enabled (logger)) \
- { \
- ply_logger_flush (logger); \
- errno = _old_errno; \
- ply_logger_inject (logger, \
- "[%s:%d] %45.45s:" format "\r\n", \
- __FILE__, __LINE__, __func__, ##args); \
- ply_logger_flush (logger); \
- errno = _old_errno; \
- } \
- } \
-while (0)
+#define ply_logger_trace(logger, format, args ...) \
+ do \
+ { \
+ int _old_errno; \
+ _old_errno = errno; \
+ if (ply_logger_is_tracing_enabled (logger)) \
+ { \
+ ply_logger_flush (logger); \
+ errno = _old_errno; \
+ ply_logger_inject (logger, \
+ "[%s:%d] %45.45s:" format "\r\n", \
+ __FILE__, __LINE__, __func__, ## args); \
+ ply_logger_flush (logger); \
+ errno = _old_errno; \
+ } \
+ } \
+ while (0)
#else
-#define ply_logger_trace(logger, format, args...)
+#define ply_logger_trace(logger, format, args ...)
#define ply_logger_toggle_tracing(logger)
#define ply_logger_is_tracing_enabled(logger) (false)
#endif /* PLY_ENABLE_TRACING */
@@ -114,14 +115,14 @@ while (0)
ply_logger_flush (ply_logger_get_default ())
#define ply_free_log() \
ply_logger_free (ply_logger_get_default ())
-#define ply_log(format, args...) \
- ply_logger_inject (ply_logger_get_default (), format "\n", ##args)
-#define ply_log_without_new_line(format, args...) \
- ply_logger_inject (ply_logger_get_default (), format, ##args)
-#define ply_error(format, args...) \
- ply_logger_inject (ply_logger_get_error_default (), format "\n", ##args)
-#define ply_error_without_new_line(format, args...) \
- ply_logger_inject (ply_logger_get_error_default (), format, ##args)
+#define ply_log(format, args ...) \
+ ply_logger_inject (ply_logger_get_default (), format "\n", ## args)
+#define ply_log_without_new_line(format, args ...) \
+ ply_logger_inject (ply_logger_get_default (), format, ## args)
+#define ply_error(format, args ...) \
+ ply_logger_inject (ply_logger_get_error_default (), format "\n", ## args)
+#define ply_error_without_new_line(format, args ...) \
+ ply_logger_inject (ply_logger_get_error_default (), format, ## args)
#define ply_free_error_log() \
ply_logger_free (ply_logger_get_error_default ())
@@ -129,8 +130,8 @@ while (0)
ply_logger_toggle_tracing (ply_logger_get_error_default ())
#define ply_is_tracing() \
ply_logger_is_tracing_enabled (ply_logger_get_error_default ())
-#define ply_trace(format, args...) \
- ply_logger_trace (ply_logger_get_error_default (), format, ##args)
+#define ply_trace(format, args ...) \
+ ply_logger_trace (ply_logger_get_error_default (), format, ## args)
#endif
diff --git a/src/libply/ply-progress.c b/src/libply/ply-progress.c
index 4a16556d..57967d0d 100644
--- a/src/libply/ply-progress.c
+++ b/src/libply/ply-progress.c
@@ -1,4 +1,4 @@
-/* ply-progress.c - calculats boot progress
+/* ply-progress.c - calculats boot progress
*
* Copyright (C) 2007 Red Hat, Inc.
*
@@ -53,287 +53,274 @@
struct _ply_progress
{
- double start_time;
- double pause_time;
- double scalar;
- double last_percentage;
- double last_percentage_time;
- double dead_time;
- double next_message_percentage;
- ply_list_t *current_message_list;
- ply_list_t *previous_message_list;
- uint32_t paused : 1;
+ double start_time;
+ double pause_time;
+ double scalar;
+ double last_percentage;
+ double last_percentage_time;
+ double dead_time;
+ double next_message_percentage;
+ ply_list_t *current_message_list;
+ ply_list_t *previous_message_list;
+ uint32_t paused : 1;
};
-typedef struct
+typedef struct
{
- double time;
- char* string;
- uint32_t disabled : 1;
+ double time;
+ char *string;
+ uint32_t disabled : 1;
} ply_progress_message_t;
-ply_progress_t*
+ply_progress_t *
ply_progress_new (void)
{
- ply_progress_t *progress = calloc (1, sizeof (ply_progress_t));
-
- progress->start_time = ply_get_timestamp();
- progress->pause_time=0;
- progress->scalar=1.0/DEFAULT_BOOT_DURATION;
- progress->pause_time=0.0;
- progress->last_percentage=0.0;
- progress->last_percentage_time=0.0;
- progress->dead_time=0.0;
- progress->next_message_percentage=0.25;
- progress->current_message_list = ply_list_new ();
- progress->previous_message_list = ply_list_new ();
- progress->paused = false;
- return progress;
+ ply_progress_t *progress = calloc (1, sizeof(ply_progress_t));
+
+ progress->start_time = ply_get_timestamp ();
+ progress->pause_time = 0;
+ progress->scalar = 1.0 / DEFAULT_BOOT_DURATION;
+ progress->pause_time = 0.0;
+ progress->last_percentage = 0.0;
+ progress->last_percentage_time = 0.0;
+ progress->dead_time = 0.0;
+ progress->next_message_percentage = 0.25;
+ progress->current_message_list = ply_list_new ();
+ progress->previous_message_list = ply_list_new ();
+ progress->paused = false;
+ return progress;
}
void
-ply_progress_free (ply_progress_t* progress)
+ply_progress_free (ply_progress_t *progress)
{
- ply_list_node_t *node;
- node = ply_list_get_first_node (progress->current_message_list);
-
- while (node)
- {
- ply_list_node_t *next_node;
- ply_progress_message_t *message = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (progress->current_message_list, node);
-
- free (message->string);
- free (message);
- node = next_node;
- }
- ply_list_free (progress->current_message_list);
-
- node = ply_list_get_first_node (progress->previous_message_list);
-
- while (node)
- {
- ply_list_node_t *next_node;
- ply_progress_message_t *message = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (progress->previous_message_list, node);
-
- free (message->string);
- free (message);
- node = next_node;
- }
- ply_list_free (progress->previous_message_list);
- free(progress);
- return;
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (progress->current_message_list);
+
+ while (node) {
+ ply_list_node_t *next_node;
+ ply_progress_message_t *message = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (progress->current_message_list, node);
+
+ free (message->string);
+ free (message);
+ node = next_node;
+ }
+ ply_list_free (progress->current_message_list);
+
+ node = ply_list_get_first_node (progress->previous_message_list);
+
+ while (node) {
+ ply_list_node_t *next_node;
+ ply_progress_message_t *message = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (progress->previous_message_list, node);
+
+ free (message->string);
+ free (message);
+ node = next_node;
+ }
+ ply_list_free (progress->previous_message_list);
+ free (progress);
+ return;
}
-static ply_progress_message_t*
-ply_progress_message_search (ply_list_t *message_list, const char* string)
+static ply_progress_message_t *
+ply_progress_message_search (ply_list_t *message_list, const char *string)
{
- ply_list_node_t *node;
- node = ply_list_get_first_node (message_list);
-
- while (node)
- {
- ply_progress_message_t *message = ply_list_node_get_data (node);
- if (strcmp(string, message->string)==0)
- return message;
- node = ply_list_get_next_node (message_list, node);
- }
- return NULL;
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (message_list);
+
+ while (node) {
+ ply_progress_message_t *message = ply_list_node_get_data (node);
+ if (strcmp (string, message->string) == 0)
+ return message;
+ node = ply_list_get_next_node (message_list, node);
+ }
+ return NULL;
}
-static ply_progress_message_t*
+static ply_progress_message_t *
ply_progress_message_search_next (ply_list_t *message_list, double time)
{
- ply_list_node_t *node;
- node = ply_list_get_first_node (message_list);
- ply_progress_message_t *best=NULL;
- while (node)
- {
- ply_progress_message_t *message = ply_list_node_get_data (node);
- if (message->time > time && (!best || message->time < best->time))
- best = message;
- node = ply_list_get_next_node (message_list, node);
- }
- return best;
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (message_list);
+ ply_progress_message_t *best = NULL;
+ while (node) {
+ ply_progress_message_t *message = ply_list_node_get_data (node);
+ if (message->time > time && (!best || message->time < best->time))
+ best = message;
+ node = ply_list_get_next_node (message_list, node);
+ }
+ return best;
}
void
-ply_progress_load_cache (ply_progress_t* progress,
- const char *filename)
+ply_progress_load_cache (ply_progress_t *progress,
+ const char *filename)
{
- FILE *fp;
-
- fp = fopen (filename,"r");
- if (fp == NULL)
- return;
-
- while (1)
- {
- int items_matched;
- double time;
- int string_size=81;
- char *string;
- char colon;
- int i=0;
-
- items_matched = fscanf (fp, "%lf", &time);
- if (items_matched<1) break;
- items_matched = fscanf (fp, "%c", &colon);
- if (items_matched<1 || colon != ':') break;
-
- string = malloc(sizeof(char)*string_size);
- while (1)
- {
- if (i>=string_size)
- {
- string_size*=2;
- string = realloc(string, sizeof(char)*string_size);
- }
- items_matched = fscanf (fp, "%c", &string[i]);
- if (items_matched<1 || string[i] == '\n')
- {
- string[i] = '\0';
- break;
- }
- i++;
+ FILE *fp;
+
+ fp = fopen (filename, "r");
+ if (fp == NULL)
+ return;
+
+ while (1) {
+ int items_matched;
+ double time;
+ int string_size = 81;
+ char *string;
+ char colon;
+ int i = 0;
+
+ items_matched = fscanf (fp, "%lf", &time);
+ if (items_matched < 1) break;
+ items_matched = fscanf (fp, "%c", &colon);
+ if (items_matched < 1 || colon != ':') break;
+
+ string = malloc (sizeof(char) * string_size);
+ while (1) {
+ if (i >= string_size) {
+ string_size *= 2;
+ string = realloc (string, sizeof(char) * string_size);
+ }
+ items_matched = fscanf (fp, "%c", &string[i]);
+ if (items_matched < 1 || string[i] == '\n') {
+ string[i] = '\0';
+ break;
+ }
+ i++;
+ }
+ ply_progress_message_t *message = malloc (sizeof(ply_progress_message_t));
+ message->time = time;
+ message->string = string;
+ ply_list_append_data (progress->previous_message_list, message);
}
- ply_progress_message_t* message = malloc(sizeof(ply_progress_message_t));
- message->time = time;
- message->string = string;
- ply_list_append_data(progress->previous_message_list, message);
- }
- fclose (fp);
+ fclose (fp);
}
void
-ply_progress_save_cache (ply_progress_t* progress,
- const char *filename)
+ply_progress_save_cache (ply_progress_t *progress,
+ const char *filename)
{
- FILE *fp;
- ply_list_node_t *node;
- double cur_time = ply_progress_get_time(progress);
-
- ply_trace ("saving progress cache to %s", filename);
-
- fp = fopen (filename,"w");
- if (fp == NULL)
- {
- ply_trace ("failed to save cache: %m");
- return;
- }
-
- node = ply_list_get_first_node (progress->current_message_list);
-
- while (node)
- {
- ply_progress_message_t *message = ply_list_node_get_data (node);
- double percentage = message->time / cur_time;
- if (!message->disabled)
- fprintf (fp, "%.3lf:%s\n", percentage, message->string);
- node = ply_list_get_next_node (progress->current_message_list, node);
- }
- fclose (fp);
+ FILE *fp;
+ ply_list_node_t *node;
+ double cur_time = ply_progress_get_time (progress);
+
+ ply_trace ("saving progress cache to %s", filename);
+
+ fp = fopen (filename, "w");
+ if (fp == NULL) {
+ ply_trace ("failed to save cache: %m");
+ return;
+ }
+
+ node = ply_list_get_first_node (progress->current_message_list);
+
+ while (node) {
+ ply_progress_message_t *message = ply_list_node_get_data (node);
+ double percentage = message->time / cur_time;
+ if (!message->disabled)
+ fprintf (fp, "%.3lf:%s\n", percentage, message->string);
+ node = ply_list_get_next_node (progress->current_message_list, node);
+ }
+ fclose (fp);
}
double
-ply_progress_get_percentage (ply_progress_t* progress)
+ply_progress_get_percentage (ply_progress_t *progress)
{
- double percentage;
- double cur_time = ply_progress_get_time (progress);
-
- if ((progress->last_percentage_time-progress->dead_time)*progress->scalar<0.999)
- {
- percentage = progress->last_percentage
- + (((cur_time - progress->last_percentage_time)*progress->scalar)
- / (1 - (progress->last_percentage_time-progress->dead_time)*progress->scalar))
- * (1 - progress->last_percentage);
-
- if ((percentage - progress->next_message_percentage)/progress->scalar > 1){
- percentage = progress->last_percentage
- + (cur_time - progress->last_percentage_time) / (DEFAULT_BOOT_DURATION * 10);
- progress->dead_time += cur_time - progress->last_percentage_time;
+ double percentage;
+ double cur_time = ply_progress_get_time (progress);
+
+ if ((progress->last_percentage_time - progress->dead_time) * progress->scalar < 0.999) {
+ percentage = progress->last_percentage
+ + (((cur_time - progress->last_percentage_time) * progress->scalar)
+ / (1 - (progress->last_percentage_time - progress->dead_time) * progress->scalar))
+ * (1 - progress->last_percentage);
+
+ if ((percentage - progress->next_message_percentage) / progress->scalar > 1) {
+ percentage = progress->last_percentage
+ + (cur_time - progress->last_percentage_time) / (DEFAULT_BOOT_DURATION * 10);
+ progress->dead_time += cur_time - progress->last_percentage_time;
+ }
+ percentage = CLAMP (percentage, 0.0, 1.0);
+ } else {
+ percentage = 1.0;
}
- percentage = CLAMP(percentage, 0.0, 1.0);
- }
- else
- percentage = 1.0;
-
- progress->last_percentage_time = cur_time;
- progress->last_percentage = percentage;
- return percentage;
+
+ progress->last_percentage_time = cur_time;
+ progress->last_percentage = percentage;
+ return percentage;
}
void
-ply_progress_set_percentage (ply_progress_t* progress, double percentage)
+ply_progress_set_percentage (ply_progress_t *progress, double percentage)
{
- progress->next_message_percentage = 1;
- progress->scalar += percentage / (ply_progress_get_time(progress)-progress->dead_time);
- progress->scalar /= 2;
- return;
+ progress->next_message_percentage = 1;
+ progress->scalar += percentage / (ply_progress_get_time (progress) - progress->dead_time);
+ progress->scalar /= 2;
+ return;
}
double
-ply_progress_get_time (ply_progress_t* progress)
+ply_progress_get_time (ply_progress_t *progress)
{
- if (progress->paused)
- {
- return progress->pause_time - progress->start_time;
- }
- return ply_get_timestamp() - progress->start_time;
+ if (progress->paused)
+ return progress->pause_time - progress->start_time;
+ return ply_get_timestamp () - progress->start_time;
}
void
-ply_progress_pause (ply_progress_t* progress)
+ply_progress_pause (ply_progress_t *progress)
{
- progress->pause_time = ply_get_timestamp ();
- progress->paused = true;
- return;
+ progress->pause_time = ply_get_timestamp ();
+ progress->paused = true;
+ return;
}
void
-ply_progress_unpause (ply_progress_t* progress)
+ply_progress_unpause (ply_progress_t *progress)
{
- progress->start_time += ply_get_timestamp() - progress->pause_time;
- progress->paused = false;
- return;
+ progress->start_time += ply_get_timestamp () - progress->pause_time;
+ progress->paused = false;
+ return;
}
void
-ply_progress_status_update (ply_progress_t* progress,
- const char *status)
+ply_progress_status_update (ply_progress_t *progress,
+ const char *status)
{
- ply_progress_message_t *message, *message_next;
- message = ply_progress_message_search(progress->current_message_list, status);
- if (message)
- {
- message->disabled = true;
- } /* Remove duplicates as they confuse things*/
- else
- {
- message = ply_progress_message_search(progress->previous_message_list, status);
- if (message)
- {
- message_next = ply_progress_message_search_next(progress->previous_message_list, message->time);
- if (message_next)
- progress->next_message_percentage = message_next->time;
- else
- progress->next_message_percentage = 1;
-
- progress->scalar += message->time / (ply_progress_get_time(progress)-progress->dead_time);
- progress->scalar /= 2;
+ ply_progress_message_t *message, *message_next;
+
+ message = ply_progress_message_search (progress->current_message_list, status);
+ if (message) {
+ message->disabled = true;
+ } /* Remove duplicates as they confuse things*/
+ else {
+ message = ply_progress_message_search (progress->previous_message_list, status);
+ if (message) {
+ message_next = ply_progress_message_search_next (progress->previous_message_list, message->time);
+ if (message_next)
+ progress->next_message_percentage = message_next->time;
+ else
+ progress->next_message_percentage = 1;
+
+ progress->scalar += message->time / (ply_progress_get_time (progress) - progress->dead_time);
+ progress->scalar /= 2;
+ }
+ message = malloc (sizeof(ply_progress_message_t));
+ message->time = ply_progress_get_time (progress);
+ message->string = strdup (status);
+ message->disabled = false;
+ ply_list_append_data (progress->current_message_list, message);
}
- message = malloc(sizeof(ply_progress_message_t));
- message->time = ply_progress_get_time (progress);
- message->string = strdup(status);
- message->disabled = false;
- ply_list_append_data(progress->current_message_list, message);
- }
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
-
diff --git a/src/libply/ply-progress.h b/src/libply/ply-progress.h
index 434636a6..1d2bce80 100644
--- a/src/libply/ply-progress.h
+++ b/src/libply/ply-progress.h
@@ -1,4 +1,4 @@
-/* ply-progress.h - calculats boot progress
+/* ply-progress.h - calculats boot progress
*
* Copyright (C) 2007 Red Hat, Inc.
*
@@ -28,15 +28,19 @@
typedef struct _ply_progress ply_progress_t;
ply_progress_t *ply_progress_new (void);
-void ply_progress_free (ply_progress_t* progress);
-void ply_progress_load_cache (ply_progress_t* progress, const char *filename);
-double ply_progress_get_percentage (ply_progress_t* progress);
-void ply_progress_set_percentage (ply_progress_t* progress, double percentage);
-double ply_progress_get_time (ply_progress_t* progress);
-void ply_progress_pause (ply_progress_t* progress);
-void ply_progress_unpause (ply_progress_t* progress);
-void ply_progress_save_cache (ply_progress_t* progress, const char *filename);
-void ply_progress_status_update (ply_progress_t* progress, const char *status);
+void ply_progress_free (ply_progress_t *progress);
+void ply_progress_load_cache (ply_progress_t *progress,
+ const char *filename);
+double ply_progress_get_percentage (ply_progress_t *progress);
+void ply_progress_set_percentage (ply_progress_t *progress,
+ double percentage);
+double ply_progress_get_time (ply_progress_t *progress);
+void ply_progress_pause (ply_progress_t *progress);
+void ply_progress_unpause (ply_progress_t *progress);
+void ply_progress_save_cache (ply_progress_t *progress,
+ const char *filename);
+void ply_progress_status_update (ply_progress_t *progress,
+ const char *status);
#endif /* PLY_PROGRESS_H */
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-rectangle.c b/src/libply/ply-rectangle.c
index 8f5203ae..a79a21d3 100644
--- a/src/libply/ply-rectangle.c
+++ b/src/libply/ply-rectangle.c
@@ -32,180 +32,165 @@ ply_rectangle_contains_point (ply_rectangle_t *rectangle,
long x,
long y)
{
- long top_edge;
- long left_edge;
- long right_edge;
- long bottom_edge;
+ long top_edge;
+ long left_edge;
+ long right_edge;
+ long bottom_edge;
- top_edge = rectangle->y;
- left_edge = rectangle->x;
- right_edge = rectangle->x + rectangle->width - 1;
- bottom_edge = rectangle->y + rectangle->height - 1;
+ top_edge = rectangle->y;
+ left_edge = rectangle->x;
+ right_edge = rectangle->x + rectangle->width - 1;
+ bottom_edge = rectangle->y + rectangle->height - 1;
- if (x < left_edge)
- return false;
+ if (x < left_edge)
+ return false;
- if (y < top_edge)
- return false;
+ if (y < top_edge)
+ return false;
- if (x > right_edge)
- return false;
+ if (x > right_edge)
+ return false;
- if (y > bottom_edge)
- return false;
+ if (y > bottom_edge)
+ return false;
- return true;
+ return true;
}
bool
ply_rectangle_is_empty (ply_rectangle_t *rectangle)
{
- return rectangle->width == 0 || rectangle->height == 0;
+ return rectangle->width == 0 || rectangle->height == 0;
}
ply_rectangle_overlap_t
ply_rectangle_find_overlap (ply_rectangle_t *rectangle1,
ply_rectangle_t *rectangle2)
{
- enum {H_COLLISION_NONE, H_COLLISION_LEFT, H_COLLISION_RIGHT, H_COLLISION_BOTH, H_COLLISION_CONTAINED, H_COLLISION_EXACT}
+ enum { H_COLLISION_NONE, H_COLLISION_LEFT, H_COLLISION_RIGHT, H_COLLISION_BOTH, H_COLLISION_CONTAINED, H_COLLISION_EXACT }
h_collision = H_COLLISION_NONE;
- enum {V_COLLISION_NONE, V_COLLISION_TOP, V_COLLISION_BOTTOM, V_COLLISION_BOTH, V_COLLISION_CONTAINED, V_COLLISION_EXACT}
+ enum { V_COLLISION_NONE, V_COLLISION_TOP, V_COLLISION_BOTTOM, V_COLLISION_BOTH, V_COLLISION_CONTAINED, V_COLLISION_EXACT }
v_collision = V_COLLISION_NONE;
- if (rectangle2->x >= rectangle1->x && (rectangle2->x + (int)rectangle2->width) <= (rectangle1->x + (int)rectangle1->width))
- {
- if (rectangle2->x == rectangle1->x && rectangle2->width == rectangle1->width)
- h_collision = H_COLLISION_EXACT;
- else
- h_collision = H_COLLISION_CONTAINED;
- }
- else
- { /* Remember: x+width points to the first pixel outside the rectangle*/
- if (rectangle2->x < rectangle1->x &&
- (rectangle2->x + (int)rectangle2->width) > rectangle1->x)
- h_collision = H_COLLISION_LEFT; /* rectangle2 colllided with the left edge of rectangle1 */
+ if (rectangle2->x >= rectangle1->x && (rectangle2->x + (int) rectangle2->width) <= (rectangle1->x + (int) rectangle1->width)) {
+ if (rectangle2->x == rectangle1->x && rectangle2->width == rectangle1->width)
+ h_collision = H_COLLISION_EXACT;
+ else
+ h_collision = H_COLLISION_CONTAINED;
+ } else { /* Remember: x+width points to the first pixel outside the rectangle*/
+ if (rectangle2->x < rectangle1->x &&
+ (rectangle2->x + (int) rectangle2->width) > rectangle1->x)
+ h_collision = H_COLLISION_LEFT; /* rectangle2 colllided with the left edge of rectangle1 */
- if (rectangle2->x < (rectangle1->x + (int)rectangle1->width) &&
- (rectangle2->x + (int)rectangle2->width) >= (rectangle1->x + (int)rectangle1->width))
- { /* rectangle2 colllided with the right edge of rectangle1 */
- if (h_collision == H_COLLISION_LEFT)
- h_collision = H_COLLISION_BOTH;
- else
- h_collision = H_COLLISION_RIGHT;
+ if (rectangle2->x < (rectangle1->x + (int) rectangle1->width) &&
+ (rectangle2->x + (int) rectangle2->width) >= (rectangle1->x + (int) rectangle1->width)) { /* rectangle2 colllided with the right edge of rectangle1 */
+ if (h_collision == H_COLLISION_LEFT)
+ h_collision = H_COLLISION_BOTH;
+ else
+ h_collision = H_COLLISION_RIGHT;
+ }
}
- }
- if (h_collision != H_COLLISION_NONE)
- {
- if (rectangle2->y >= rectangle1->y && (rectangle2->y + (int)rectangle2->height) <= (rectangle1->y + (int)rectangle1->height))
- {
- if (rectangle2->y == rectangle1->y && rectangle2->height == rectangle1->height)
- v_collision = V_COLLISION_EXACT;
- else
- v_collision = V_COLLISION_CONTAINED;
+ if (h_collision != H_COLLISION_NONE) {
+ if (rectangle2->y >= rectangle1->y && (rectangle2->y + (int) rectangle2->height) <= (rectangle1->y + (int) rectangle1->height)) {
+ if (rectangle2->y == rectangle1->y && rectangle2->height == rectangle1->height)
+ v_collision = V_COLLISION_EXACT;
+ else
+ v_collision = V_COLLISION_CONTAINED;
+ } else {
+ if (rectangle2->y < rectangle1->y &&
+ (rectangle2->y + (int) rectangle2->height) > rectangle1->y)
+ v_collision = V_COLLISION_TOP;
+ if (rectangle2->y < (rectangle1->y + (int) rectangle1->height) &&
+ (rectangle2->y + (int) rectangle2->height) >= (rectangle1->y + (int) rectangle1->height)) {
+ if (v_collision == V_COLLISION_TOP)
+ v_collision = V_COLLISION_BOTH;
+ else
+ v_collision = V_COLLISION_BOTTOM;
+ }
+ }
}
- else
- {
- if (rectangle2->y < rectangle1->y &&
- (rectangle2->y + (int)rectangle2->height) > rectangle1->y)
- v_collision = V_COLLISION_TOP;
- if (rectangle2->y < (rectangle1->y + (int)rectangle1->height) &&
- (rectangle2->y + (int)rectangle2->height) >= (rectangle1->y + (int)rectangle1->height))
- {
- if (v_collision == V_COLLISION_TOP)
- v_collision = V_COLLISION_BOTH;
- else
- v_collision = V_COLLISION_BOTTOM;
- }
- }
- }
- switch (h_collision)
- {
- case H_COLLISION_NONE:
- return PLY_RECTANGLE_OVERLAP_NONE;
- case H_COLLISION_LEFT:
- switch (v_collision)
- {
- case V_COLLISION_NONE:
- return PLY_RECTANGLE_OVERLAP_NONE;
- case V_COLLISION_TOP:
- return PLY_RECTANGLE_OVERLAP_TOP_AND_LEFT_EDGES;
- case V_COLLISION_BOTTOM:
- return PLY_RECTANGLE_OVERLAP_BOTTOM_AND_LEFT_EDGES;
- case V_COLLISION_BOTH:
- return PLY_RECTANGLE_OVERLAP_TOP_LEFT_AND_BOTTOM_EDGES;
- case V_COLLISION_CONTAINED:
- return PLY_RECTANGLE_OVERLAP_LEFT_EDGE;
- case V_COLLISION_EXACT:
- return PLY_RECTANGLE_OVERLAP_EXACT_LEFT_EDGE;
- }
- case H_COLLISION_RIGHT:
- switch (v_collision)
- {
- case V_COLLISION_NONE:
- return PLY_RECTANGLE_OVERLAP_NONE;
- case V_COLLISION_TOP:
- return PLY_RECTANGLE_OVERLAP_TOP_AND_RIGHT_EDGES;
- case V_COLLISION_BOTTOM:
- return PLY_RECTANGLE_OVERLAP_BOTTOM_AND_RIGHT_EDGES;
- case V_COLLISION_BOTH:
- return PLY_RECTANGLE_OVERLAP_TOP_RIGHT_AND_BOTTOM_EDGES;
- case V_COLLISION_CONTAINED:
- return PLY_RECTANGLE_OVERLAP_RIGHT_EDGE;
- case V_COLLISION_EXACT:
- return PLY_RECTANGLE_OVERLAP_EXACT_RIGHT_EDGE;
- }
- case H_COLLISION_BOTH:
- switch (v_collision)
- {
- case V_COLLISION_NONE:
- return PLY_RECTANGLE_OVERLAP_NONE;
- case V_COLLISION_TOP:
- return PLY_RECTANGLE_OVERLAP_TOP_AND_SIDE_EDGES;
- case V_COLLISION_BOTTOM:
- return PLY_RECTANGLE_OVERLAP_BOTTOM_AND_SIDE_EDGES;
- case V_COLLISION_BOTH:
- return PLY_RECTANGLE_OVERLAP_ALL_EDGES;
- case V_COLLISION_CONTAINED:
- return PLY_RECTANGLE_OVERLAP_SIDE_EDGES;
- case V_COLLISION_EXACT:
- return PLY_RECTANGLE_OVERLAP_ALL_EDGES;
- }
- case H_COLLISION_CONTAINED:
- switch (v_collision)
- {
- case V_COLLISION_NONE:
- return PLY_RECTANGLE_OVERLAP_NONE;
- case V_COLLISION_TOP:
- return PLY_RECTANGLE_OVERLAP_TOP_EDGE;
- case V_COLLISION_BOTTOM:
- return PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE;
- case V_COLLISION_BOTH:
- return PLY_RECTANGLE_OVERLAP_TOP_AND_BOTTOM_EDGES;
- case V_COLLISION_CONTAINED:
- return PLY_RECTANGLE_OVERLAP_NO_EDGES;
- case V_COLLISION_EXACT:
- return PLY_RECTANGLE_OVERLAP_NO_EDGES;
- }
- case H_COLLISION_EXACT:
- switch (v_collision)
- {
- case V_COLLISION_NONE:
+ switch (h_collision) {
+ case H_COLLISION_NONE:
return PLY_RECTANGLE_OVERLAP_NONE;
- case V_COLLISION_TOP:
- return PLY_RECTANGLE_OVERLAP_EXACT_TOP_EDGE;
- case V_COLLISION_BOTTOM:
- return PLY_RECTANGLE_OVERLAP_EXACT_BOTTOM_EDGE;
- case V_COLLISION_BOTH:
- return PLY_RECTANGLE_OVERLAP_ALL_EDGES;
- case V_COLLISION_CONTAINED:
- return PLY_RECTANGLE_OVERLAP_NO_EDGES;
- case V_COLLISION_EXACT:
- return PLY_RECTANGLE_OVERLAP_NO_EDGES;
- }
- }
- return PLY_RECTANGLE_OVERLAP_NONE;
+ case H_COLLISION_LEFT:
+ switch (v_collision) {
+ case V_COLLISION_NONE:
+ return PLY_RECTANGLE_OVERLAP_NONE;
+ case V_COLLISION_TOP:
+ return PLY_RECTANGLE_OVERLAP_TOP_AND_LEFT_EDGES;
+ case V_COLLISION_BOTTOM:
+ return PLY_RECTANGLE_OVERLAP_BOTTOM_AND_LEFT_EDGES;
+ case V_COLLISION_BOTH:
+ return PLY_RECTANGLE_OVERLAP_TOP_LEFT_AND_BOTTOM_EDGES;
+ case V_COLLISION_CONTAINED:
+ return PLY_RECTANGLE_OVERLAP_LEFT_EDGE;
+ case V_COLLISION_EXACT:
+ return PLY_RECTANGLE_OVERLAP_EXACT_LEFT_EDGE;
+ }
+ case H_COLLISION_RIGHT:
+ switch (v_collision) {
+ case V_COLLISION_NONE:
+ return PLY_RECTANGLE_OVERLAP_NONE;
+ case V_COLLISION_TOP:
+ return PLY_RECTANGLE_OVERLAP_TOP_AND_RIGHT_EDGES;
+ case V_COLLISION_BOTTOM:
+ return PLY_RECTANGLE_OVERLAP_BOTTOM_AND_RIGHT_EDGES;
+ case V_COLLISION_BOTH:
+ return PLY_RECTANGLE_OVERLAP_TOP_RIGHT_AND_BOTTOM_EDGES;
+ case V_COLLISION_CONTAINED:
+ return PLY_RECTANGLE_OVERLAP_RIGHT_EDGE;
+ case V_COLLISION_EXACT:
+ return PLY_RECTANGLE_OVERLAP_EXACT_RIGHT_EDGE;
+ }
+ case H_COLLISION_BOTH:
+ switch (v_collision) {
+ case V_COLLISION_NONE:
+ return PLY_RECTANGLE_OVERLAP_NONE;
+ case V_COLLISION_TOP:
+ return PLY_RECTANGLE_OVERLAP_TOP_AND_SIDE_EDGES;
+ case V_COLLISION_BOTTOM:
+ return PLY_RECTANGLE_OVERLAP_BOTTOM_AND_SIDE_EDGES;
+ case V_COLLISION_BOTH:
+ return PLY_RECTANGLE_OVERLAP_ALL_EDGES;
+ case V_COLLISION_CONTAINED:
+ return PLY_RECTANGLE_OVERLAP_SIDE_EDGES;
+ case V_COLLISION_EXACT:
+ return PLY_RECTANGLE_OVERLAP_ALL_EDGES;
+ }
+ case H_COLLISION_CONTAINED:
+ switch (v_collision) {
+ case V_COLLISION_NONE:
+ return PLY_RECTANGLE_OVERLAP_NONE;
+ case V_COLLISION_TOP:
+ return PLY_RECTANGLE_OVERLAP_TOP_EDGE;
+ case V_COLLISION_BOTTOM:
+ return PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE;
+ case V_COLLISION_BOTH:
+ return PLY_RECTANGLE_OVERLAP_TOP_AND_BOTTOM_EDGES;
+ case V_COLLISION_CONTAINED:
+ return PLY_RECTANGLE_OVERLAP_NO_EDGES;
+ case V_COLLISION_EXACT:
+ return PLY_RECTANGLE_OVERLAP_NO_EDGES;
+ }
+ case H_COLLISION_EXACT:
+ switch (v_collision) {
+ case V_COLLISION_NONE:
+ return PLY_RECTANGLE_OVERLAP_NONE;
+ case V_COLLISION_TOP:
+ return PLY_RECTANGLE_OVERLAP_EXACT_TOP_EDGE;
+ case V_COLLISION_BOTTOM:
+ return PLY_RECTANGLE_OVERLAP_EXACT_BOTTOM_EDGE;
+ case V_COLLISION_BOTH:
+ return PLY_RECTANGLE_OVERLAP_ALL_EDGES;
+ case V_COLLISION_CONTAINED:
+ return PLY_RECTANGLE_OVERLAP_NO_EDGES;
+ case V_COLLISION_EXACT:
+ return PLY_RECTANGLE_OVERLAP_NO_EDGES;
+ }
+ }
+ return PLY_RECTANGLE_OVERLAP_NONE;
}
void
@@ -213,65 +198,61 @@ ply_rectangle_intersect (ply_rectangle_t *rectangle1,
ply_rectangle_t *rectangle2,
ply_rectangle_t *result)
{
+ long rectangle1_top_edge;
+ long rectangle1_left_edge;
+ long rectangle1_right_edge;
+ long rectangle1_bottom_edge;
+ long rectangle2_top_edge;
+ long rectangle2_left_edge;
+ long rectangle2_right_edge;
+ long rectangle2_bottom_edge;
+ long result_top_edge;
+ long result_left_edge;
+ long result_right_edge;
+ long result_bottom_edge;
- long rectangle1_top_edge;
- long rectangle1_left_edge;
- long rectangle1_right_edge;
- long rectangle1_bottom_edge;
- long rectangle2_top_edge;
- long rectangle2_left_edge;
- long rectangle2_right_edge;
- long rectangle2_bottom_edge;
- long result_top_edge;
- long result_left_edge;
- long result_right_edge;
- long result_bottom_edge;
-
- if (ply_rectangle_is_empty (rectangle1))
- {
- *result = *rectangle1;
- return;
- }
+ if (ply_rectangle_is_empty (rectangle1)) {
+ *result = *rectangle1;
+ return;
+ }
- if (ply_rectangle_is_empty (rectangle2))
- {
- *result = *rectangle2;
- return;
- }
+ if (ply_rectangle_is_empty (rectangle2)) {
+ *result = *rectangle2;
+ return;
+ }
- rectangle1_top_edge = rectangle1->y;
- rectangle1_left_edge = rectangle1->x;
- rectangle1_right_edge = rectangle1->x + rectangle1->width - 1;
- rectangle1_bottom_edge = rectangle1->y + rectangle1->height - 1;
+ rectangle1_top_edge = rectangle1->y;
+ rectangle1_left_edge = rectangle1->x;
+ rectangle1_right_edge = rectangle1->x + rectangle1->width - 1;
+ rectangle1_bottom_edge = rectangle1->y + rectangle1->height - 1;
- rectangle2_top_edge = rectangle2->y;
- rectangle2_left_edge = rectangle2->x;
- rectangle2_right_edge = rectangle2->x + rectangle2->width - 1;
- rectangle2_bottom_edge = rectangle2->y + rectangle2->height - 1;
+ rectangle2_top_edge = rectangle2->y;
+ rectangle2_left_edge = rectangle2->x;
+ rectangle2_right_edge = rectangle2->x + rectangle2->width - 1;
+ rectangle2_bottom_edge = rectangle2->y + rectangle2->height - 1;
- result_top_edge = MAX (rectangle1_top_edge, rectangle2_top_edge);
- result_left_edge = MAX (rectangle1_left_edge, rectangle2_left_edge);
- result_right_edge = MIN (rectangle1_right_edge, rectangle2_right_edge);
- result_bottom_edge = MIN (rectangle1_bottom_edge, rectangle2_bottom_edge);
+ result_top_edge = MAX (rectangle1_top_edge, rectangle2_top_edge);
+ result_left_edge = MAX (rectangle1_left_edge, rectangle2_left_edge);
+ result_right_edge = MIN (rectangle1_right_edge, rectangle2_right_edge);
+ result_bottom_edge = MIN (rectangle1_bottom_edge, rectangle2_bottom_edge);
- result->x = result_left_edge;
- result->y = result_top_edge;
+ result->x = result_left_edge;
+ result->y = result_top_edge;
- if (result_right_edge >= result_left_edge)
- result->width = result_right_edge - result_left_edge + 1;
- else
- result->width = 0;
+ if (result_right_edge >= result_left_edge)
+ result->width = result_right_edge - result_left_edge + 1;
+ else
+ result->width = 0;
- if (result_bottom_edge >= result_top_edge)
- result->height = result_bottom_edge - result_top_edge + 1;
- else
- result->height = 0;
+ if (result_bottom_edge >= result_top_edge)
+ result->height = result_bottom_edge - result_top_edge + 1;
+ else
+ result->height = 0;
- if (ply_rectangle_is_empty (result))
- {
- result->width = 0;
- result->height = 0;
- }
+ if (ply_rectangle_is_empty (result)) {
+ result->width = 0;
+ result->height = 0;
+ }
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-rectangle.h b/src/libply/ply-rectangle.h
index 85ee7110..d7504da1 100644
--- a/src/libply/ply-rectangle.h
+++ b/src/libply/ply-rectangle.h
@@ -31,64 +31,63 @@ typedef struct _ply_rectangle ply_rectangle_t;
struct _ply_rectangle
{
- long x;
- long y;
- unsigned long width;
- unsigned long height;
+ long x;
+ long y;
+ unsigned long width;
+ unsigned long height;
};
typedef enum
{
- PLY_RECTANGLE_OVERLAP_NONE = 0,
- PLY_RECTANGLE_OVERLAP_TOP_EDGE = 1 << 0,
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE = 1 << 1,
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE = 1 << 2,
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE = 1 << 3,
- PLY_RECTANGLE_OVERLAP_TOP_AND_LEFT_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE,
- PLY_RECTANGLE_OVERLAP_TOP_AND_RIGHT_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_TOP_AND_SIDE_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_BOTTOM_AND_LEFT_EDGES =
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE,
- PLY_RECTANGLE_OVERLAP_BOTTOM_AND_RIGHT_EDGES =
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_BOTTOM_AND_SIDE_EDGES =
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_SIDE_EDGES =
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_TOP_AND_BOTTOM_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE,
- PLY_RECTANGLE_OVERLAP_TOP_LEFT_AND_BOTTOM_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE,
- PLY_RECTANGLE_OVERLAP_TOP_RIGHT_AND_BOTTOM_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE |
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE,
- PLY_RECTANGLE_OVERLAP_ALL_EDGES =
- PLY_RECTANGLE_OVERLAP_TOP_EDGE |
- PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
- PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
- PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_NO_EDGES = 1 << 4,
- PLY_RECTANGLE_OVERLAP_EXACT_TOP_EDGE,
- PLY_RECTANGLE_OVERLAP_EXACT_LEFT_EDGE,
- PLY_RECTANGLE_OVERLAP_EXACT_RIGHT_EDGE,
- PLY_RECTANGLE_OVERLAP_EXACT_BOTTOM_EDGE,
-
+ PLY_RECTANGLE_OVERLAP_NONE = 0,
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE = 1 << 0,
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE = 1 << 1,
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE = 1 << 2,
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE = 1 << 3,
+ PLY_RECTANGLE_OVERLAP_TOP_AND_LEFT_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE,
+ PLY_RECTANGLE_OVERLAP_TOP_AND_RIGHT_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_TOP_AND_SIDE_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_BOTTOM_AND_LEFT_EDGES =
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE,
+ PLY_RECTANGLE_OVERLAP_BOTTOM_AND_RIGHT_EDGES =
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_BOTTOM_AND_SIDE_EDGES =
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_SIDE_EDGES =
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_TOP_AND_BOTTOM_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE,
+ PLY_RECTANGLE_OVERLAP_TOP_LEFT_AND_BOTTOM_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE,
+ PLY_RECTANGLE_OVERLAP_TOP_RIGHT_AND_BOTTOM_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE |
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE,
+ PLY_RECTANGLE_OVERLAP_ALL_EDGES =
+ PLY_RECTANGLE_OVERLAP_TOP_EDGE |
+ PLY_RECTANGLE_OVERLAP_LEFT_EDGE |
+ PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE |
+ PLY_RECTANGLE_OVERLAP_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_NO_EDGES = 1 << 4,
+ PLY_RECTANGLE_OVERLAP_EXACT_TOP_EDGE,
+ PLY_RECTANGLE_OVERLAP_EXACT_LEFT_EDGE,
+ PLY_RECTANGLE_OVERLAP_EXACT_RIGHT_EDGE,
+ PLY_RECTANGLE_OVERLAP_EXACT_BOTTOM_EDGE,
} ply_rectangle_overlap_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
diff --git a/src/libply/ply-region.c b/src/libply/ply-region.c
index 92d35743..6756fe73 100644
--- a/src/libply/ply-region.c
+++ b/src/libply/ply-region.c
@@ -34,61 +34,59 @@
struct _ply_region
{
- ply_list_t *rectangle_list;
+ ply_list_t *rectangle_list;
};
ply_region_t *
ply_region_new (void)
{
- ply_region_t *region;
+ ply_region_t *region;
- region = calloc (1, sizeof (ply_region_t));
+ region = calloc (1, sizeof(ply_region_t));
- region->rectangle_list = ply_list_new ();
+ region->rectangle_list = ply_list_new ();
- return region;
+ return region;
}
void
ply_region_clear (ply_region_t *region)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (region->rectangle_list);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_rectangle_t *rectangle;
+ node = ply_list_get_first_node (region->rectangle_list);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_rectangle_t *rectangle;
- rectangle = (ply_rectangle_t *) ply_list_node_get_data (node);
+ rectangle = (ply_rectangle_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (region->rectangle_list, node);
+ next_node = ply_list_get_next_node (region->rectangle_list, node);
- free (rectangle);
- ply_list_remove_node (region->rectangle_list, node);
+ free (rectangle);
+ ply_list_remove_node (region->rectangle_list, node);
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_region_free (ply_region_t *region)
{
-
- ply_region_clear (region);
- ply_list_free (region->rectangle_list);
- free (region);
+ ply_region_clear (region);
+ ply_list_free (region->rectangle_list);
+ free (region);
}
static ply_rectangle_t *
copy_rectangle (ply_rectangle_t *rectangle)
{
- ply_rectangle_t *new_rectangle;
+ ply_rectangle_t *new_rectangle;
- new_rectangle = malloc (sizeof (*rectangle));
- *new_rectangle = *rectangle;
+ new_rectangle = malloc (sizeof(*rectangle));
+ *new_rectangle = *rectangle;
- return new_rectangle;
+ return new_rectangle;
}
static void
@@ -96,375 +94,370 @@ merge_rectangle_with_sub_list (ply_region_t *region,
ply_rectangle_t *new_area,
ply_list_node_t *node)
{
-
- if (ply_rectangle_is_empty (new_area))
- {
- free (new_area);
- return;
- }
-
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_rectangle_t *old_area;
- ply_rectangle_overlap_t overlap;
-
- old_area = (ply_rectangle_t *) ply_list_node_get_data (node);
-
- next_node = ply_list_get_next_node (region->rectangle_list, node);
-
- if (ply_rectangle_is_empty (new_area))
- overlap = PLY_RECTANGLE_OVERLAP_NO_EDGES;
- else if (ply_rectangle_is_empty (old_area))
- overlap = PLY_RECTANGLE_OVERLAP_ALL_EDGES;
- else
- overlap = ply_rectangle_find_overlap (old_area, new_area);
-
- switch (overlap)
- {
- /* NNNN The new rectangle and node rectangle don't touch,
- * NNNN OOOO so let's move on to the next one.
- * OOOO
- */
- case PLY_RECTANGLE_OVERLAP_NONE:
- break;
-
- /* NNNNN We need to split the new rectangle into
- * NNOOOOO two rectangles: The top row of Ns and
- * NNOOOOO the left side of Ns.
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_TOP_AND_LEFT_EDGES:
- {
- ply_rectangle_t *rectangle;
-
- rectangle = copy_rectangle (new_area);
- rectangle->y = old_area->y;
- rectangle->width = old_area->x - new_area->x;
- rectangle->height = (new_area->y + new_area->height) - old_area->y;
-
- merge_rectangle_with_sub_list (region, rectangle, next_node);
-
- new_area->height = old_area->y - new_area->y;
- }
- break;
-
- /* NNNNN We need to split the new rectangle into
- * OOOOONN two rectangles: The top row of Ns and
- * OOOOONN the right side of Ns.
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_TOP_AND_RIGHT_EDGES:
- {
- ply_rectangle_t *rectangle;
-
- rectangle = copy_rectangle (new_area);
- rectangle->x = old_area->x + old_area->width;
- rectangle->y = old_area->y;
- rectangle->width = (new_area->x + new_area->width) - (old_area->x + old_area->width);
- rectangle->height = (new_area->y + new_area->height) - old_area->y;
-
- merge_rectangle_with_sub_list (region, rectangle, next_node);
-
- new_area->height = old_area->y - new_area->y;
- }
- break;
-
- /* NNNNNNN We need to trim out the part of
- * NOOOOON old rectangle that overlaps the new
- * NOOOOON rectangle by shrinking and moving it
- * OOOOO and then we need to add the new rectangle.
- */
- case PLY_RECTANGLE_OVERLAP_TOP_AND_SIDE_EDGES:
- {
- old_area->height = (old_area->y + old_area->height)
- - (new_area->y + new_area->height);
- old_area->y = new_area->y + new_area->height;
- }
- break;
-
- /* NNN We only care about the top row of Ns,
- * ONNNO everything below that is already handled by
- * ONNNO the old rectangle.
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_TOP_EDGE:
- new_area->height = old_area->y - new_area->y;
- break;
-
- /* OOOOO We need to split the new rectangle into
- * NNOOOOO two rectangles: The left side of Ns and
- * NNOOOOO the bottom row of Ns.
- * NNOOOOO
- * NNNNN
- */
- case PLY_RECTANGLE_OVERLAP_BOTTOM_AND_LEFT_EDGES:
- {
- ply_rectangle_t *rectangle;
-
- rectangle = copy_rectangle (new_area);
-
- rectangle->width = old_area->x - new_area->x;
- rectangle->height = (old_area->y + old_area->height) - new_area->y;
-
- merge_rectangle_with_sub_list (region, rectangle, next_node);
-
- new_area->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
- new_area->y = old_area->y + old_area->height;
- }
- break;
-
- /* OOOOO We need to split the new rectangle into
- * OOOOONN two rectangles: The right side of Ns and
- * OOOOONN the bottom row of Ns.
- * OOOOONN
- * NNNNN
- */
- case PLY_RECTANGLE_OVERLAP_BOTTOM_AND_RIGHT_EDGES:
- {
- ply_rectangle_t *rectangle;
-
- rectangle = copy_rectangle (new_area);
-
- rectangle->x = old_area->x + old_area->width;
- rectangle->width = (new_area->x + new_area->width) - (old_area->x + old_area->width);
- rectangle->height = (old_area->y + old_area->height) - new_area->y;
-
- merge_rectangle_with_sub_list (region, rectangle, next_node);
-
- new_area->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
- new_area->y = old_area->y + old_area->height;
- }
- break;
-
- /* OOOOO We need to trim out the part of
- * NOOOOON old rectangle that overlaps the new
- * NOOOOON rectangle by shrinking it
- * NNNNNNN and then we need to add the new rectangle.
- */
- case PLY_RECTANGLE_OVERLAP_BOTTOM_AND_SIDE_EDGES:
- {
- old_area->height = new_area->y - old_area->y;
- }
- break;
-
- /* OOOOO We only care about the bottom row of Ns,
- * ONNNO everything above that is already handled by
- * ONNNO the old rectangle.
- * NNN
- */
- case PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE:
- {
- new_area->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
- new_area->y = old_area->y + old_area->height;
- }
- break;
-
- /* NNNN We need to trim out the part of
- * NNNNO old rectangle that overlaps the new
- * NNNNO rectangle by shrinking it and moving it
- * NNNN and then we need to add the new rectangle.
- */
- case PLY_RECTANGLE_OVERLAP_TOP_LEFT_AND_BOTTOM_EDGES:
- {
- old_area->width = (old_area->x + old_area->width)
- - (new_area->x + new_area->width);
- old_area->x = new_area->x + new_area->width;
- }
- break;
-
- /* NNNN We need to trim out the part of
- * ONNNN old rectangle that overlaps the new
- * ONNNN rectangle by shrinking it and then we
- * NNNN need to add the new rectangle.
- */
- case PLY_RECTANGLE_OVERLAP_TOP_RIGHT_AND_BOTTOM_EDGES:
- old_area->width = new_area->x - old_area->x;
- break;
-
- /* NNNNNNN The old rectangle is completely inside the new rectangle
- * NOOOOON so replace the old rectangle with the new rectangle.
- * NOOOOON
- * NNNNNNN
- */
- case PLY_RECTANGLE_OVERLAP_ALL_EDGES:
- merge_rectangle_with_sub_list (region, new_area, next_node);
- free (old_area);
- ply_list_remove_node (region->rectangle_list, node);
- return;
-
- /* NNN We need to split the new rectangle into
- * ONNNO two rectangles: the top and bottom row of Ns
- * ONNNO
- * NNN
- */
- case PLY_RECTANGLE_OVERLAP_TOP_AND_BOTTOM_EDGES:
- {
- ply_rectangle_t *rectangle;
-
- rectangle = copy_rectangle (new_area);
- rectangle->y = old_area->y + old_area->height;
- rectangle->width = new_area->width;
- rectangle->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
- merge_rectangle_with_sub_list (region, rectangle, next_node);
-
- new_area->height = old_area->y - new_area->y;
- }
- break;
-
- /* OOOOO We only care about the side row of Ns,
- * NNNNOO everything rigth of that is already handled by
- * NNNNOO the old rectangle.
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_LEFT_EDGE:
- new_area->width = old_area->x - new_area->x;
- break;
-
- /* OOOOO We only care about the side row of Ns,
- * NNNNNN everything left of that is already handled by
- * NNNNNN the old rectangle.
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_RIGHT_EDGE:
- {
- long temp = new_area->x;
- new_area->x = old_area->x + old_area->width;
- new_area->width = (temp + new_area->width) - (old_area->x + old_area->width);
- }
- break;
-
- /* OOOOO We need to split the new rectangle into
- * NNNNNNN two rectangles: the side columns of Ns
- * NNNNNNN
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_SIDE_EDGES:
- {
- ply_rectangle_t *rectangle;
-
- rectangle = copy_rectangle (new_area);
-
- rectangle->x = old_area->x + old_area->width;
- rectangle->width = (new_area->x + new_area->width) - (old_area->x + old_area->width);
-
- merge_rectangle_with_sub_list (region, rectangle, next_node);
-
- new_area->width = old_area->x - new_area->x;
- }
- break;
-
- /* OOOOOOO The new rectangle is completely inside an old rectangle
- * ONNNNNO so return early without adding the new rectangle.
- * ONNNNNO
- * OOOOOOO
- */
- case PLY_RECTANGLE_OVERLAP_NO_EDGES:
- free (new_area);
- return;
-
- /* NNNNN We expand the old rectangle up and throw away the new.
- * NNNNN We must merge it because the new region may have overlapped
- * NNNNN something further down the list.
- * OOOOO
- */
- case PLY_RECTANGLE_OVERLAP_EXACT_TOP_EDGE:
- {
- old_area->height = (old_area->y + old_area->height) - new_area->y;
- old_area->y = new_area->y;
- free (new_area);
- merge_rectangle_with_sub_list (region, old_area, next_node);
- ply_list_remove_node (region->rectangle_list, node);
- }
- return;
-
- /* OOOOO We expand the old rectangle down and throw away the new.
- * NNNNN We must merge it because the new region may have overlapped
- * NNNNN something further down the list.
- * NNNNN
- */
- case PLY_RECTANGLE_OVERLAP_EXACT_BOTTOM_EDGE:
- {
- old_area->height = (new_area->y + new_area->height) - old_area->y;
- free (new_area);
- merge_rectangle_with_sub_list (region, old_area, next_node);
- ply_list_remove_node (region->rectangle_list, node);
- }
- return;
-
- /* NNNNNO We expand the old rectangle left and throw away the new.
- * NNNNNO We must merge it because the new region may have overlapped
- * NNNNNO something further down the list.
- */
- case PLY_RECTANGLE_OVERLAP_EXACT_LEFT_EDGE:
- {
- old_area->width = (old_area->x + old_area->width) - new_area->x;
- old_area->x = new_area->x;
- free (new_area);
- merge_rectangle_with_sub_list (region, old_area, next_node);
- ply_list_remove_node (region->rectangle_list, node);
- }
- return;
-
- /* ONNNNN We expand the old rectangle right and throw away the new.
- * ONNNNN We must merge it because the new region may have overlapped
- * ONNNNN something further down the list.
- */
- case PLY_RECTANGLE_OVERLAP_EXACT_RIGHT_EDGE:
- {
- old_area->width = (new_area->x + new_area->width) - old_area->x;
- free (new_area);
- merge_rectangle_with_sub_list (region, old_area, next_node);
- ply_list_remove_node (region->rectangle_list, node);
- }
- return;
-
-
+ if (ply_rectangle_is_empty (new_area)) {
+ free (new_area);
+ return;
}
- node = ply_list_get_next_node (region->rectangle_list, node);
- }
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_rectangle_t *old_area;
+ ply_rectangle_overlap_t overlap;
+
+ old_area = (ply_rectangle_t *) ply_list_node_get_data (node);
+
+ next_node = ply_list_get_next_node (region->rectangle_list, node);
+
+ if (ply_rectangle_is_empty (new_area))
+ overlap = PLY_RECTANGLE_OVERLAP_NO_EDGES;
+ else if (ply_rectangle_is_empty (old_area))
+ overlap = PLY_RECTANGLE_OVERLAP_ALL_EDGES;
+ else
+ overlap = ply_rectangle_find_overlap (old_area, new_area);
+
+ switch (overlap) {
+ /* NNNN The new rectangle and node rectangle don't touch,
+ * NNNN OOOO so let's move on to the next one.
+ * OOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_NONE:
+ break;
+
+ /* NNNNN We need to split the new rectangle into
+ * NNOOOOO two rectangles: The top row of Ns and
+ * NNOOOOO the left side of Ns.
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_AND_LEFT_EDGES:
+ {
+ ply_rectangle_t *rectangle;
+
+ rectangle = copy_rectangle (new_area);
+ rectangle->y = old_area->y;
+ rectangle->width = old_area->x - new_area->x;
+ rectangle->height = (new_area->y + new_area->height) - old_area->y;
+
+ merge_rectangle_with_sub_list (region, rectangle, next_node);
+
+ new_area->height = old_area->y - new_area->y;
+ }
+ break;
+
+ /* NNNNN We need to split the new rectangle into
+ * OOOOONN two rectangles: The top row of Ns and
+ * OOOOONN the right side of Ns.
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_AND_RIGHT_EDGES:
+ {
+ ply_rectangle_t *rectangle;
+
+ rectangle = copy_rectangle (new_area);
+ rectangle->x = old_area->x + old_area->width;
+ rectangle->y = old_area->y;
+ rectangle->width = (new_area->x + new_area->width) - (old_area->x + old_area->width);
+ rectangle->height = (new_area->y + new_area->height) - old_area->y;
+
+ merge_rectangle_with_sub_list (region, rectangle, next_node);
+
+ new_area->height = old_area->y - new_area->y;
+ }
+ break;
+
+ /* NNNNNNN We need to trim out the part of
+ * NOOOOON old rectangle that overlaps the new
+ * NOOOOON rectangle by shrinking and moving it
+ * OOOOO and then we need to add the new rectangle.
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_AND_SIDE_EDGES:
+ {
+ old_area->height = (old_area->y + old_area->height)
+ - (new_area->y + new_area->height);
+ old_area->y = new_area->y + new_area->height;
+ }
+ break;
+
+ /* NNN We only care about the top row of Ns,
+ * ONNNO everything below that is already handled by
+ * ONNNO the old rectangle.
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_EDGE:
+ new_area->height = old_area->y - new_area->y;
+ break;
+
+ /* OOOOO We need to split the new rectangle into
+ * NNOOOOO two rectangles: The left side of Ns and
+ * NNOOOOO the bottom row of Ns.
+ * NNOOOOO
+ * NNNNN
+ */
+ case PLY_RECTANGLE_OVERLAP_BOTTOM_AND_LEFT_EDGES:
+ {
+ ply_rectangle_t *rectangle;
+
+ rectangle = copy_rectangle (new_area);
+
+ rectangle->width = old_area->x - new_area->x;
+ rectangle->height = (old_area->y + old_area->height) - new_area->y;
+
+ merge_rectangle_with_sub_list (region, rectangle, next_node);
+
+ new_area->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
+ new_area->y = old_area->y + old_area->height;
+ }
+ break;
+
+ /* OOOOO We need to split the new rectangle into
+ * OOOOONN two rectangles: The right side of Ns and
+ * OOOOONN the bottom row of Ns.
+ * OOOOONN
+ * NNNNN
+ */
+ case PLY_RECTANGLE_OVERLAP_BOTTOM_AND_RIGHT_EDGES:
+ {
+ ply_rectangle_t *rectangle;
+
+ rectangle = copy_rectangle (new_area);
+
+ rectangle->x = old_area->x + old_area->width;
+ rectangle->width = (new_area->x + new_area->width) - (old_area->x + old_area->width);
+ rectangle->height = (old_area->y + old_area->height) - new_area->y;
+
+ merge_rectangle_with_sub_list (region, rectangle, next_node);
+
+ new_area->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
+ new_area->y = old_area->y + old_area->height;
+ }
+ break;
+
+ /* OOOOO We need to trim out the part of
+ * NOOOOON old rectangle that overlaps the new
+ * NOOOOON rectangle by shrinking it
+ * NNNNNNN and then we need to add the new rectangle.
+ */
+ case PLY_RECTANGLE_OVERLAP_BOTTOM_AND_SIDE_EDGES:
+ {
+ old_area->height = new_area->y - old_area->y;
+ }
+ break;
+
+ /* OOOOO We only care about the bottom row of Ns,
+ * ONNNO everything above that is already handled by
+ * ONNNO the old rectangle.
+ * NNN
+ */
+ case PLY_RECTANGLE_OVERLAP_BOTTOM_EDGE:
+ {
+ new_area->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
+ new_area->y = old_area->y + old_area->height;
+ }
+ break;
+
+ /* NNNN We need to trim out the part of
+ * NNNNO old rectangle that overlaps the new
+ * NNNNO rectangle by shrinking it and moving it
+ * NNNN and then we need to add the new rectangle.
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_LEFT_AND_BOTTOM_EDGES:
+ {
+ old_area->width = (old_area->x + old_area->width)
+ - (new_area->x + new_area->width);
+ old_area->x = new_area->x + new_area->width;
+ }
+ break;
+
+ /* NNNN We need to trim out the part of
+ * ONNNN old rectangle that overlaps the new
+ * ONNNN rectangle by shrinking it and then we
+ * NNNN need to add the new rectangle.
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_RIGHT_AND_BOTTOM_EDGES:
+ old_area->width = new_area->x - old_area->x;
+ break;
+
+ /* NNNNNNN The old rectangle is completely inside the new rectangle
+ * NOOOOON so replace the old rectangle with the new rectangle.
+ * NOOOOON
+ * NNNNNNN
+ */
+ case PLY_RECTANGLE_OVERLAP_ALL_EDGES:
+ merge_rectangle_with_sub_list (region, new_area, next_node);
+ free (old_area);
+ ply_list_remove_node (region->rectangle_list, node);
+ return;
+
+ /* NNN We need to split the new rectangle into
+ * ONNNO two rectangles: the top and bottom row of Ns
+ * ONNNO
+ * NNN
+ */
+ case PLY_RECTANGLE_OVERLAP_TOP_AND_BOTTOM_EDGES:
+ {
+ ply_rectangle_t *rectangle;
+
+ rectangle = copy_rectangle (new_area);
+ rectangle->y = old_area->y + old_area->height;
+ rectangle->width = new_area->width;
+ rectangle->height = (new_area->y + new_area->height) - (old_area->y + old_area->height);
+ merge_rectangle_with_sub_list (region, rectangle, next_node);
+
+ new_area->height = old_area->y - new_area->y;
+ }
+ break;
+
+ /* OOOOO We only care about the side row of Ns,
+ * NNNNOO everything rigth of that is already handled by
+ * NNNNOO the old rectangle.
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_LEFT_EDGE:
+ new_area->width = old_area->x - new_area->x;
+ break;
+
+ /* OOOOO We only care about the side row of Ns,
+ * NNNNNN everything left of that is already handled by
+ * NNNNNN the old rectangle.
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_RIGHT_EDGE:
+ {
+ long temp = new_area->x;
+ new_area->x = old_area->x + old_area->width;
+ new_area->width = (temp + new_area->width) - (old_area->x + old_area->width);
+ }
+ break;
+
+ /* OOOOO We need to split the new rectangle into
+ * NNNNNNN two rectangles: the side columns of Ns
+ * NNNNNNN
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_SIDE_EDGES:
+ {
+ ply_rectangle_t *rectangle;
+
+ rectangle = copy_rectangle (new_area);
+
+ rectangle->x = old_area->x + old_area->width;
+ rectangle->width = (new_area->x + new_area->width) - (old_area->x + old_area->width);
+
+ merge_rectangle_with_sub_list (region, rectangle, next_node);
+
+ new_area->width = old_area->x - new_area->x;
+ }
+ break;
+
+ /* OOOOOOO The new rectangle is completely inside an old rectangle
+ * ONNNNNO so return early without adding the new rectangle.
+ * ONNNNNO
+ * OOOOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_NO_EDGES:
+ free (new_area);
+ return;
+
+ /* NNNNN We expand the old rectangle up and throw away the new.
+ * NNNNN We must merge it because the new region may have overlapped
+ * NNNNN something further down the list.
+ * OOOOO
+ */
+ case PLY_RECTANGLE_OVERLAP_EXACT_TOP_EDGE:
+ {
+ old_area->height = (old_area->y + old_area->height) - new_area->y;
+ old_area->y = new_area->y;
+ free (new_area);
+ merge_rectangle_with_sub_list (region, old_area, next_node);
+ ply_list_remove_node (region->rectangle_list, node);
+ }
+ return;
+
+ /* OOOOO We expand the old rectangle down and throw away the new.
+ * NNNNN We must merge it because the new region may have overlapped
+ * NNNNN something further down the list.
+ * NNNNN
+ */
+ case PLY_RECTANGLE_OVERLAP_EXACT_BOTTOM_EDGE:
+ {
+ old_area->height = (new_area->y + new_area->height) - old_area->y;
+ free (new_area);
+ merge_rectangle_with_sub_list (region, old_area, next_node);
+ ply_list_remove_node (region->rectangle_list, node);
+ }
+ return;
+
+ /* NNNNNO We expand the old rectangle left and throw away the new.
+ * NNNNNO We must merge it because the new region may have overlapped
+ * NNNNNO something further down the list.
+ */
+ case PLY_RECTANGLE_OVERLAP_EXACT_LEFT_EDGE:
+ {
+ old_area->width = (old_area->x + old_area->width) - new_area->x;
+ old_area->x = new_area->x;
+ free (new_area);
+ merge_rectangle_with_sub_list (region, old_area, next_node);
+ ply_list_remove_node (region->rectangle_list, node);
+ }
+ return;
+
+ /* ONNNNN We expand the old rectangle right and throw away the new.
+ * ONNNNN We must merge it because the new region may have overlapped
+ * ONNNNN something further down the list.
+ */
+ case PLY_RECTANGLE_OVERLAP_EXACT_RIGHT_EDGE:
+ {
+ old_area->width = (new_area->x + new_area->width) - old_area->x;
+ free (new_area);
+ merge_rectangle_with_sub_list (region, old_area, next_node);
+ ply_list_remove_node (region->rectangle_list, node);
+ }
+ return;
+ }
+
+ node = ply_list_get_next_node (region->rectangle_list, node);
+ }
- ply_list_append_data (region->rectangle_list, new_area);
+ ply_list_append_data (region->rectangle_list, new_area);
}
void
ply_region_add_rectangle (ply_region_t *region,
ply_rectangle_t *rectangle)
{
- ply_list_node_t *first_node;
- ply_rectangle_t *rectangle_copy;
+ ply_list_node_t *first_node;
+ ply_rectangle_t *rectangle_copy;
- assert (region != NULL);
- assert (rectangle != NULL);
+ assert (region != NULL);
+ assert (rectangle != NULL);
- first_node = ply_list_get_first_node (region->rectangle_list);
+ first_node = ply_list_get_first_node (region->rectangle_list);
- rectangle_copy = copy_rectangle (rectangle);
- merge_rectangle_with_sub_list (region,
- rectangle_copy,
- first_node);
+ rectangle_copy = copy_rectangle (rectangle);
+ merge_rectangle_with_sub_list (region,
+ rectangle_copy,
+ first_node);
}
ply_list_t *
ply_region_get_rectangle_list (ply_region_t *region)
{
- return region->rectangle_list;
+ return region->rectangle_list;
}
static int
rectangle_compare_y (void *element_a, void *element_b)
{
- ply_rectangle_t *rectangle_a = element_a;
- ply_rectangle_t *rectangle_b = element_b;
- return rectangle_a->y - rectangle_b->y;
+ ply_rectangle_t *rectangle_a = element_a;
+ ply_rectangle_t *rectangle_b = element_b;
+
+ return rectangle_a->y - rectangle_b->y;
}
ply_list_t *
ply_region_get_sorted_rectangle_list (ply_region_t *region)
{
- ply_list_sort (region->rectangle_list, &rectangle_compare_y);
- return region->rectangle_list;
+ ply_list_sort (region->rectangle_list, &rectangle_compare_y);
+ return region->rectangle_list;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-terminal-session.c b/src/libply/ply-terminal-session.c
index 379035cc..a697b8fa 100644
--- a/src/libply/ply-terminal-session.c
+++ b/src/libply/ply-terminal-session.c
@@ -43,20 +43,20 @@
struct _ply_terminal_session
{
- int pseudoterminal_master_fd;
- ply_logger_t *logger;
- ply_event_loop_t *loop;
- char **argv;
- ply_fd_watch_t *fd_watch;
- ply_terminal_session_flags_t attach_flags;
-
- ply_terminal_session_output_handler_t output_handler;
- ply_terminal_session_hangup_handler_t hangup_handler;
- void *user_data;
-
- uint32_t is_running : 1;
- uint32_t console_is_redirected : 1;
- uint32_t created_terminal_device : 1;
+ int pseudoterminal_master_fd;
+ ply_logger_t *logger;
+ ply_event_loop_t *loop;
+ char **argv;
+ ply_fd_watch_t *fd_watch;
+ ply_terminal_session_flags_t attach_flags;
+
+ ply_terminal_session_output_handler_t output_handler;
+ ply_terminal_session_hangup_handler_t hangup_handler;
+ void *user_data;
+
+ uint32_t is_running : 1;
+ uint32_t console_is_redirected : 1;
+ uint32_t created_terminal_device : 1;
};
static bool ply_terminal_session_open_console (ply_terminal_session_t *session);
@@ -68,375 +68,361 @@ static void ply_terminal_session_stop_logging (ply_terminal_session_t *session);
static bool
ply_terminal_session_open_console (ply_terminal_session_t *session)
{
- int fd;
- const char *terminal_name;
+ int fd;
+ const char *terminal_name;
- terminal_name = ptsname (session->pseudoterminal_master_fd);
+ terminal_name = ptsname (session->pseudoterminal_master_fd);
- fd = open (terminal_name, O_RDONLY);
+ fd = open (terminal_name, O_RDONLY);
- if (fd < 0)
- return false;
+ if (fd < 0)
+ return false;
- assert (fd == STDIN_FILENO);
- assert (ttyname (fd) != NULL);
- assert (strcmp (ttyname (fd), terminal_name) == 0);
+ assert (fd == STDIN_FILENO);
+ assert (ttyname (fd) != NULL);
+ assert (strcmp (ttyname (fd), terminal_name) == 0);
- fd = open (terminal_name, O_WRONLY);
+ fd = open (terminal_name, O_WRONLY);
- if (fd < 0)
- return false;
+ if (fd < 0)
+ return false;
- assert (fd == STDOUT_FILENO);
- assert (ttyname (fd) != NULL);
- assert (strcmp (ttyname (fd), terminal_name) == 0);
+ assert (fd == STDOUT_FILENO);
+ assert (ttyname (fd) != NULL);
+ assert (strcmp (ttyname (fd), terminal_name) == 0);
- fd = open (terminal_name, O_WRONLY);
+ fd = open (terminal_name, O_WRONLY);
- if (fd < 0)
- return false;
+ if (fd < 0)
+ return false;
- assert (fd == STDERR_FILENO);
- assert (ttyname (fd) != NULL);
- assert (strcmp (ttyname (fd), terminal_name) == 0);
+ assert (fd == STDERR_FILENO);
+ assert (ttyname (fd) != NULL);
+ assert (strcmp (ttyname (fd), terminal_name) == 0);
- return true;
+ return true;
}
static bool
ply_terminal_session_execute (ply_terminal_session_t *session,
bool look_in_path)
{
- ply_close_all_fds ();
+ ply_close_all_fds ();
- if (!ply_terminal_session_open_console (session))
- return false;
+ if (!ply_terminal_session_open_console (session))
+ return false;
- if (look_in_path)
- execvp (session->argv[0], session->argv);
- else
- execv (session->argv[0], session->argv);
+ if (look_in_path)
+ execvp (session->argv[0], session->argv);
+ else
+ execv (session->argv[0], session->argv);
- return false;
+ return false;
}
ply_terminal_session_t *
-ply_terminal_session_new (const char * const *argv)
+ply_terminal_session_new (const char *const *argv)
{
- ply_terminal_session_t *session;
+ ply_terminal_session_t *session;
- assert (argv == NULL || argv[0] != NULL);
+ assert (argv == NULL || argv[0] != NULL);
- session = calloc (1, sizeof (ply_terminal_session_t));
- session->pseudoterminal_master_fd = -1;
- session->argv = argv == NULL ? NULL : ply_copy_string_array (argv);
- session->logger = ply_logger_new ();
- session->is_running = false;
- session->console_is_redirected = false;
+ session = calloc (1, sizeof(ply_terminal_session_t));
+ session->pseudoterminal_master_fd = -1;
+ session->argv = argv == NULL ? NULL : ply_copy_string_array (argv);
+ session->logger = ply_logger_new ();
+ session->is_running = false;
+ session->console_is_redirected = false;
- return session;
+ return session;
}
void
ply_terminal_session_free (ply_terminal_session_t *session)
{
- if (session == NULL)
- return;
+ if (session == NULL)
+ return;
- ply_terminal_session_stop_logging (session);
- ply_logger_free (session->logger);
+ ply_terminal_session_stop_logging (session);
+ ply_logger_free (session->logger);
- ply_free_string_array (session->argv);
+ ply_free_string_array (session->argv);
- if (session->pseudoterminal_master_fd >= 0)
- close (session->pseudoterminal_master_fd);
- free (session);
+ if (session->pseudoterminal_master_fd >= 0)
+ close (session->pseudoterminal_master_fd);
+ free (session);
}
static void
ply_terminal_session_detach_from_event_loop (ply_terminal_session_t *session)
{
- assert (session != NULL);
- session->loop = NULL;
+ assert (session != NULL);
+ session->loop = NULL;
}
-void
+void
ply_terminal_session_attach_to_event_loop (ply_terminal_session_t *session,
ply_event_loop_t *loop)
{
- assert (session != NULL);
- assert (loop != NULL);
- assert (session->loop == NULL);
+ assert (session != NULL);
+ assert (loop != NULL);
+ assert (session->loop == NULL);
- session->loop = loop;
+ session->loop = loop;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- ply_terminal_session_detach_from_event_loop,
- session);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ ply_terminal_session_detach_from_event_loop,
+ session);
}
static bool
ply_terminal_session_redirect_console (ply_terminal_session_t *session)
{
- const char *terminal_name;
- int fd;
+ const char *terminal_name;
+ int fd;
- assert (session != NULL);
+ assert (session != NULL);
- terminal_name = ptsname (session->pseudoterminal_master_fd);
+ terminal_name = ptsname (session->pseudoterminal_master_fd);
- assert (terminal_name != NULL);
+ assert (terminal_name != NULL);
- fd = open (terminal_name, O_RDWR | O_NOCTTY);
+ fd = open (terminal_name, O_RDWR | O_NOCTTY);
- if (fd < 0)
- return false;
+ if (fd < 0)
+ return false;
- if (ioctl (fd, TIOCCONS) < 0)
- {
- ply_save_errno ();
- close (fd);
- ply_restore_errno ();
- return false;
- }
+ if (ioctl (fd, TIOCCONS) < 0) {
+ ply_save_errno ();
+ close (fd);
+ ply_restore_errno ();
+ return false;
+ }
- close (fd);
- session->console_is_redirected = true;
- return true;
+ close (fd);
+ session->console_is_redirected = true;
+ return true;
}
static void
ply_terminal_session_unredirect_console (ply_terminal_session_t *session)
{
- int fd;
+ int fd;
- assert (session != NULL);
- assert (session->console_is_redirected);
+ assert (session != NULL);
+ assert (session->console_is_redirected);
- fd = open ("/dev/console", O_RDWR | O_NOCTTY);
- if (fd >= 0) {
- ioctl (fd, TIOCCONS);
- close (fd);
- } else {
- ply_trace ("couldn't open /dev/console to stop redirecting it: %m");
- }
+ fd = open ("/dev/console", O_RDWR | O_NOCTTY);
+ if (fd >= 0) {
+ ioctl (fd, TIOCCONS);
+ close (fd);
+ } else {
+ ply_trace ("couldn't open /dev/console to stop redirecting it: %m");
+ }
- session->console_is_redirected = false;
+ session->console_is_redirected = false;
}
static void
close_pseudoterminal (ply_terminal_session_t *session)
{
- close (session->pseudoterminal_master_fd);
- session->pseudoterminal_master_fd = -1;
+ close (session->pseudoterminal_master_fd);
+ session->pseudoterminal_master_fd = -1;
}
static bool
open_pseudoterminal (ply_terminal_session_t *session)
{
- ply_trace ("opening device '/dev/ptmx'");
- session->pseudoterminal_master_fd = posix_openpt (O_RDWR | O_NOCTTY);
-
- if (session->pseudoterminal_master_fd < 0)
- return false;
-
- ply_trace (" opened device '/dev/ptmx'");
-
- ply_trace ("creating pseudoterminal");
- if (grantpt (session->pseudoterminal_master_fd) < 0)
- {
- ply_save_errno ();
- ply_trace ("could not create psuedoterminal: %m");
- close_pseudoterminal (session);
- ply_restore_errno ();
- return false;
- }
- ply_trace ("done creating pseudoterminal");
-
- ply_trace ("unlocking pseudoterminal");
- if (unlockpt (session->pseudoterminal_master_fd) < 0)
- {
- ply_save_errno ();
- close_pseudoterminal (session);
- ply_restore_errno ();
- return false;
- }
- ply_trace ("unlocked pseudoterminal");
-
- return true;
+ ply_trace ("opening device '/dev/ptmx'");
+ session->pseudoterminal_master_fd = posix_openpt (O_RDWR | O_NOCTTY);
+
+ if (session->pseudoterminal_master_fd < 0)
+ return false;
+
+ ply_trace (" opened device '/dev/ptmx'");
+
+ ply_trace ("creating pseudoterminal");
+ if (grantpt (session->pseudoterminal_master_fd) < 0) {
+ ply_save_errno ();
+ ply_trace ("could not create psuedoterminal: %m");
+ close_pseudoterminal (session);
+ ply_restore_errno ();
+ return false;
+ }
+ ply_trace ("done creating pseudoterminal");
+
+ ply_trace ("unlocking pseudoterminal");
+ if (unlockpt (session->pseudoterminal_master_fd) < 0) {
+ ply_save_errno ();
+ close_pseudoterminal (session);
+ ply_restore_errno ();
+ return false;
+ }
+ ply_trace ("unlocked pseudoterminal");
+
+ return true;
}
-bool
-ply_terminal_session_run (ply_terminal_session_t *session,
- ply_terminal_session_flags_t flags,
- ply_terminal_session_begin_handler_t begin_handler,
+bool
+ply_terminal_session_run (ply_terminal_session_t *session,
+ ply_terminal_session_flags_t flags,
+ ply_terminal_session_begin_handler_t begin_handler,
ply_terminal_session_output_handler_t output_handler,
ply_terminal_session_hangup_handler_t hangup_handler,
- void *user_data)
+ void *user_data)
{
- pid_t pid;
- bool run_in_parent, look_in_path, should_redirect_console;
-
- assert (session != NULL);
- assert (session->loop != NULL);
- assert (!session->is_running);
- assert (session->hangup_handler == NULL);
-
- run_in_parent = (flags & PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT) != 0;
- look_in_path = (flags & PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH) != 0;
- should_redirect_console =
- (flags & PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE) != 0;
-
- ply_trace ("creating terminal device");
- if (!open_pseudoterminal (session))
- return false;
- ply_trace ("done creating terminal device");
-
- if (should_redirect_console)
- ply_trace ("redirecting system console to terminal device");
- if (should_redirect_console &&
- !ply_terminal_session_redirect_console (session))
- {
- ply_save_errno ();
- close_pseudoterminal (session);
- ply_restore_errno ();
- return false;
- }
- if (should_redirect_console)
- ply_trace ("done redirecting system console to terminal device");
-
- ply_trace ("creating subprocess");
- pid = fork ();
-
- if (pid < 0)
- {
- ply_save_errno ();
- ply_terminal_session_unredirect_console (session);
- close_pseudoterminal (session);
- ply_restore_errno ();
- return false;
- }
-
- if (((pid == 0) && run_in_parent) ||
- ((pid != 0) && !run_in_parent))
- {
- session->is_running = true;
- session->output_handler = output_handler;
- session->hangup_handler = hangup_handler;
- session->user_data = user_data;
- ply_terminal_session_start_logging (session);
-
- return true;
- }
-
- if (begin_handler != NULL)
- {
- ply_trace ("running 'begin handler'");
- begin_handler (user_data, session);
- ply_trace ("ran 'begin handler'");
- }
-
- ply_trace ("beginning session");
- ply_terminal_session_execute (session, look_in_path);
-
- _exit (errno);
- return false;
+ pid_t pid;
+ bool run_in_parent, look_in_path, should_redirect_console;
+
+ assert (session != NULL);
+ assert (session->loop != NULL);
+ assert (!session->is_running);
+ assert (session->hangup_handler == NULL);
+
+ run_in_parent = (flags & PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT) != 0;
+ look_in_path = (flags & PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH) != 0;
+ should_redirect_console =
+ (flags & PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE) != 0;
+
+ ply_trace ("creating terminal device");
+ if (!open_pseudoterminal (session))
+ return false;
+ ply_trace ("done creating terminal device");
+
+ if (should_redirect_console)
+ ply_trace ("redirecting system console to terminal device");
+ if (should_redirect_console &&
+ !ply_terminal_session_redirect_console (session)) {
+ ply_save_errno ();
+ close_pseudoterminal (session);
+ ply_restore_errno ();
+ return false;
+ }
+ if (should_redirect_console)
+ ply_trace ("done redirecting system console to terminal device");
+
+ ply_trace ("creating subprocess");
+ pid = fork ();
+
+ if (pid < 0) {
+ ply_save_errno ();
+ ply_terminal_session_unredirect_console (session);
+ close_pseudoterminal (session);
+ ply_restore_errno ();
+ return false;
+ }
+
+ if (((pid == 0) && run_in_parent) ||
+ ((pid != 0) && !run_in_parent)) {
+ session->is_running = true;
+ session->output_handler = output_handler;
+ session->hangup_handler = hangup_handler;
+ session->user_data = user_data;
+ ply_terminal_session_start_logging (session);
+
+ return true;
+ }
+
+ if (begin_handler != NULL) {
+ ply_trace ("running 'begin handler'");
+ begin_handler (user_data, session);
+ ply_trace ("ran 'begin handler'");
+ }
+
+ ply_trace ("beginning session");
+ ply_terminal_session_execute (session, look_in_path);
+
+ _exit (errno);
+ return false;
}
bool
ply_terminal_session_attach (ply_terminal_session_t *session,
ply_terminal_session_flags_t flags,
ply_terminal_session_output_handler_t output_handler,
- ply_terminal_session_hangup_handler_t hangup_handler,
+ ply_terminal_session_hangup_handler_t hangup_handler,
int ptmx,
void *user_data)
{
- bool should_redirect_console;
-
- assert (session != NULL);
- assert (session->loop != NULL);
- assert (!session->is_running);
- assert (session->hangup_handler == NULL);
-
- should_redirect_console =
- (flags & PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE) != 0;
-
- if (ptmx >= 0)
- {
- ply_trace ("ptmx passed in, using it");
- session->pseudoterminal_master_fd = ptmx;
- }
- else
- {
- ply_trace ("ptmx not passed in, creating one");
- if (!open_pseudoterminal (session))
- {
- ply_trace ("could not create pseudo-terminal: %m");
- return false;
+ bool should_redirect_console;
+
+ assert (session != NULL);
+ assert (session->loop != NULL);
+ assert (!session->is_running);
+ assert (session->hangup_handler == NULL);
+
+ should_redirect_console =
+ (flags & PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE) != 0;
+
+ if (ptmx >= 0) {
+ ply_trace ("ptmx passed in, using it");
+ session->pseudoterminal_master_fd = ptmx;
+ } else {
+ ply_trace ("ptmx not passed in, creating one");
+ if (!open_pseudoterminal (session)) {
+ ply_trace ("could not create pseudo-terminal: %m");
+ return false;
+ }
+
+ session->created_terminal_device = true;
+ }
+
+ if (should_redirect_console)
+ ply_trace ("redirecting system console to terminal device");
+ if (should_redirect_console &&
+ !ply_terminal_session_redirect_console (session)) {
+ ply_save_errno ();
+ close_pseudoterminal (session);
+ ply_restore_errno ();
+ return false;
}
+ if (should_redirect_console)
+ ply_trace ("done redirecting system console to terminal device");
- session->created_terminal_device = true;
- }
-
- if (should_redirect_console)
- ply_trace ("redirecting system console to terminal device");
- if (should_redirect_console &&
- !ply_terminal_session_redirect_console (session))
- {
- ply_save_errno ();
- close_pseudoterminal (session);
- ply_restore_errno ();
- return false;
- }
- if (should_redirect_console)
- ply_trace ("done redirecting system console to terminal device");
-
- session->is_running = true;
- session->output_handler = output_handler;
- session->hangup_handler = hangup_handler;
- session->user_data = user_data;
- session->attach_flags = flags;
- ply_terminal_session_start_logging (session);
-
- return true;
+ session->is_running = true;
+ session->output_handler = output_handler;
+ session->hangup_handler = hangup_handler;
+ session->user_data = user_data;
+ session->attach_flags = flags;
+ ply_terminal_session_start_logging (session);
+
+ return true;
}
void
-ply_terminal_session_detach (ply_terminal_session_t *session)
+ply_terminal_session_detach (ply_terminal_session_t *session)
{
- assert (session != NULL);
+ assert (session != NULL);
- ply_trace ("stopping terminal logger");
+ ply_trace ("stopping terminal logger");
- ply_terminal_session_stop_logging (session);
+ ply_terminal_session_stop_logging (session);
- if (session->console_is_redirected)
- {
- ply_trace ("unredirecting console messages");
- ply_terminal_session_unredirect_console (session);
- }
+ if (session->console_is_redirected) {
+ ply_trace ("unredirecting console messages");
+ ply_terminal_session_unredirect_console (session);
+ }
- if (session->created_terminal_device)
- {
- ply_trace ("ptmx wasn't originally passed in, destroying created one");
- close_pseudoterminal (session);
- session->created_terminal_device = false;
- }
+ if (session->created_terminal_device) {
+ ply_trace ("ptmx wasn't originally passed in, destroying created one");
+ close_pseudoterminal (session);
+ session->created_terminal_device = false;
+ }
- session->output_handler = NULL;
- session->hangup_handler = NULL;
- session->user_data = NULL;
+ session->output_handler = NULL;
+ session->hangup_handler = NULL;
+ session->user_data = NULL;
- session->is_running = false;
+ session->is_running = false;
}
int
ply_terminal_session_get_fd (ply_terminal_session_t *session)
{
- assert (session != NULL);
+ assert (session != NULL);
- return session->pseudoterminal_master_fd;
+ return session->pseudoterminal_master_fd;
}
static void
@@ -444,147 +430,146 @@ ply_terminal_session_log_bytes (ply_terminal_session_t *session,
const uint8_t *bytes,
size_t number_of_bytes)
{
- assert (session != NULL);
- assert (session->logger != NULL);
- assert (bytes != NULL);
- assert (number_of_bytes != 0);
+ assert (session != NULL);
+ assert (session->logger != NULL);
+ assert (bytes != NULL);
+ assert (number_of_bytes != 0);
- ply_logger_inject_bytes (session->logger, bytes, number_of_bytes);
+ ply_logger_inject_bytes (session->logger, bytes, number_of_bytes);
- if (session->output_handler != NULL)
- session->output_handler (session->user_data,
- bytes, number_of_bytes, session);
+ if (session->output_handler != NULL)
+ session->output_handler (session->user_data,
+ bytes, number_of_bytes, session);
}
static void
ply_terminal_session_on_new_data (ply_terminal_session_t *session,
int session_fd)
{
- uint8_t buffer[4096];
- ssize_t bytes_read;
+ uint8_t buffer[4096];
+ ssize_t bytes_read;
- assert (session != NULL);
- assert (session_fd >= 0);
+ assert (session != NULL);
+ assert (session_fd >= 0);
- bytes_read = read (session_fd, buffer, sizeof (buffer));
+ bytes_read = read (session_fd, buffer, sizeof(buffer));
- if (bytes_read > 0)
- ply_terminal_session_log_bytes (session, buffer, bytes_read);
+ if (bytes_read > 0)
+ ply_terminal_session_log_bytes (session, buffer, bytes_read);
- ply_logger_flush (session->logger);
+ ply_logger_flush (session->logger);
}
static void
ply_terminal_session_on_hangup (ply_terminal_session_t *session)
{
- ply_terminal_session_hangup_handler_t hangup_handler;
- ply_terminal_session_output_handler_t output_handler;
- void *user_data;
- ply_terminal_session_flags_t attach_flags;
- bool created_terminal_device;
-
- assert (session != NULL);
-
- ply_trace ("got hang up on terminal session fd");
- hangup_handler = session->hangup_handler;
- output_handler = session->output_handler;
- user_data = session->user_data;
- attach_flags = session->attach_flags;
- created_terminal_device = session->created_terminal_device;
-
- ply_logger_flush (session->logger);
-
- session->is_running = false;
- ply_trace ("stopping terminal logging");
- ply_terminal_session_stop_logging (session);
- session->hangup_handler = NULL;
-
- if (hangup_handler != NULL)
- hangup_handler (session->user_data, session);
-
- ply_terminal_session_detach (session);
-
- /* session ripped away, try to take it back
- */
- if (created_terminal_device)
- {
- ply_trace ("Attempting to reattach to console");
- ply_terminal_session_attach (session, attach_flags,
- output_handler, hangup_handler,
- -1, user_data);
- }
+ ply_terminal_session_hangup_handler_t hangup_handler;
+ ply_terminal_session_output_handler_t output_handler;
+ void *user_data;
+ ply_terminal_session_flags_t attach_flags;
+ bool created_terminal_device;
+
+ assert (session != NULL);
+
+ ply_trace ("got hang up on terminal session fd");
+ hangup_handler = session->hangup_handler;
+ output_handler = session->output_handler;
+ user_data = session->user_data;
+ attach_flags = session->attach_flags;
+ created_terminal_device = session->created_terminal_device;
+
+ ply_logger_flush (session->logger);
+
+ session->is_running = false;
+ ply_trace ("stopping terminal logging");
+ ply_terminal_session_stop_logging (session);
+ session->hangup_handler = NULL;
+
+ if (hangup_handler != NULL)
+ hangup_handler (session->user_data, session);
+
+ ply_terminal_session_detach (session);
+
+ /* session ripped away, try to take it back
+ */
+ if (created_terminal_device) {
+ ply_trace ("Attempting to reattach to console");
+ ply_terminal_session_attach (session, attach_flags,
+ output_handler, hangup_handler,
+ -1, user_data);
+ }
}
-static void
+static void
ply_terminal_session_start_logging (ply_terminal_session_t *session)
{
- int session_fd;
+ int session_fd;
- assert (session != NULL);
- assert (session->logger != NULL);
+ assert (session != NULL);
+ assert (session->logger != NULL);
- ply_trace ("logging incoming console messages");
- if (!ply_logger_is_logging (session->logger))
- ply_logger_toggle_logging (session->logger);
+ ply_trace ("logging incoming console messages");
+ if (!ply_logger_is_logging (session->logger))
+ ply_logger_toggle_logging (session->logger);
- session_fd = ply_terminal_session_get_fd (session);
+ session_fd = ply_terminal_session_get_fd (session);
- assert (session_fd >= 0);
+ assert (session_fd >= 0);
- session->fd_watch = ply_event_loop_watch_fd (session->loop,
- session_fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- ply_terminal_session_on_new_data,
- (ply_event_handler_t)
- ply_terminal_session_on_hangup,
- session);
+ session->fd_watch = ply_event_loop_watch_fd (session->loop,
+ session_fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ ply_terminal_session_on_new_data,
+ (ply_event_handler_t)
+ ply_terminal_session_on_hangup,
+ session);
}
static void
ply_terminal_session_stop_logging (ply_terminal_session_t *session)
{
- assert (session != NULL);
- assert (session->logger != NULL);
-
- ply_trace ("stopping logging of incoming console messages");
- if (ply_logger_is_logging (session->logger))
- ply_logger_toggle_logging (session->logger);
-
- if (session->loop != NULL &&
- session->fd_watch != NULL)
- ply_event_loop_stop_watching_fd (session->loop,
- session->fd_watch);
- session->fd_watch = NULL;
+ assert (session != NULL);
+ assert (session->logger != NULL);
+
+ ply_trace ("stopping logging of incoming console messages");
+ if (ply_logger_is_logging (session->logger))
+ ply_logger_toggle_logging (session->logger);
+
+ if (session->loop != NULL &&
+ session->fd_watch != NULL)
+ ply_event_loop_stop_watching_fd (session->loop,
+ session->fd_watch);
+ session->fd_watch = NULL;
}
-bool
+bool
ply_terminal_session_open_log (ply_terminal_session_t *session,
const char *filename)
{
- bool log_is_opened;
+ bool log_is_opened;
- assert (session != NULL);
- assert (filename != NULL);
- assert (session->logger != NULL);
+ assert (session != NULL);
+ assert (filename != NULL);
+ assert (session->logger != NULL);
- ply_save_errno ();
- unlink (filename);
- log_is_opened = ply_logger_open_file (session->logger, filename, true);
- if (log_is_opened)
- ply_logger_flush (session->logger);
- ply_restore_errno ();
+ ply_save_errno ();
+ unlink (filename);
+ log_is_opened = ply_logger_open_file (session->logger, filename, true);
+ if (log_is_opened)
+ ply_logger_flush (session->logger);
+ ply_restore_errno ();
- return log_is_opened;
+ return log_is_opened;
}
-void
+void
ply_terminal_session_close_log (ply_terminal_session_t *session)
{
- assert (session != NULL);
- assert (session->logger != NULL);
+ assert (session != NULL);
+ assert (session->logger != NULL);
- return ply_logger_close_file (session->logger);
+ return ply_logger_close_file (session->logger);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-terminal-session.h b/src/libply/ply-terminal-session.h
index 7fee891b..26a47c99 100644
--- a/src/libply/ply-terminal-session.h
+++ b/src/libply/ply-terminal-session.h
@@ -31,42 +31,44 @@
typedef struct _ply_terminal_session ply_terminal_session_t;
-typedef void (* ply_terminal_session_begin_handler_t)
- (void *user_data, ply_terminal_session_t *session);
+typedef void (*ply_terminal_session_begin_handler_t)(void *user_data,
+ ply_terminal_session_t *session);
-typedef void (* ply_terminal_session_output_handler_t)
- (void *user_data, const uint8_t *output, size_t size, ply_terminal_session_t *session);
-typedef void (* ply_terminal_session_hangup_handler_t)
- (void *user_data, ply_terminal_session_t *session);
+typedef void (*ply_terminal_session_output_handler_t)(void *user_data,
+ const uint8_t *output,
+ size_t size,
+ ply_terminal_session_t *session);
+typedef void (*ply_terminal_session_hangup_handler_t)(void *user_data,
+ ply_terminal_session_t *session);
typedef enum
{
- PLY_TERMINAL_SESSION_FLAGS_NONE = 0x0,
- PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT = 0x1,
- PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH = 0x2,
- PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE = 0x4,
+ PLY_TERMINAL_SESSION_FLAGS_NONE = 0x0,
+ PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT = 0x1,
+ PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH = 0x2,
+ PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE = 0x4,
} ply_terminal_session_flags_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
-ply_terminal_session_t *ply_terminal_session_new (const char * const *argv);
+ply_terminal_session_t *ply_terminal_session_new (const char *const *argv);
void ply_terminal_session_free (ply_terminal_session_t *session);
void ply_terminal_session_attach_to_event_loop (ply_terminal_session_t *session,
ply_event_loop_t *loop);
-bool ply_terminal_session_run (ply_terminal_session_t *session,
- ply_terminal_session_flags_t flags,
- ply_terminal_session_begin_handler_t begin_handler,
+bool ply_terminal_session_run (ply_terminal_session_t *session,
+ ply_terminal_session_flags_t flags,
+ ply_terminal_session_begin_handler_t begin_handler,
ply_terminal_session_output_handler_t output_handler,
- ply_terminal_session_hangup_handler_t done_handler,
- void *user_data);
+ ply_terminal_session_hangup_handler_t done_handler,
+ void *user_data);
-bool ply_terminal_session_attach (ply_terminal_session_t *session,
- ply_terminal_session_flags_t flags,
+bool ply_terminal_session_attach (ply_terminal_session_t *session,
+ ply_terminal_session_flags_t flags,
ply_terminal_session_output_handler_t output_handler,
ply_terminal_session_hangup_handler_t hangup_handler,
- int ptmx,
- void *user_data);
+ int ptmx,
+ void *user_data);
-void ply_terminal_session_detach (ply_terminal_session_t *session);
+void ply_terminal_session_detach (ply_terminal_session_t *session);
int ply_terminal_session_get_fd (ply_terminal_session_t *session);
bool ply_terminal_session_open_log (ply_terminal_session_t *session,
diff --git a/src/libply/ply-trigger.c b/src/libply/ply-trigger.c
index 46ea5477..b44778d4 100644
--- a/src/libply/ply-trigger.c
+++ b/src/libply/ply-trigger.c
@@ -32,144 +32,139 @@
typedef struct
{
- ply_trigger_handler_t handler;
- void *user_data;
+ ply_trigger_handler_t handler;
+ void *user_data;
} ply_trigger_closure_t;
struct _ply_trigger
{
- ply_list_t *closures;
+ ply_list_t *closures;
- ply_trigger_t **free_address;
- int ignore_count;
+ ply_trigger_t **free_address;
+ int ignore_count;
};
ply_trigger_t *
ply_trigger_new (ply_trigger_t **free_address)
{
- ply_trigger_t *trigger;
+ ply_trigger_t *trigger;
- trigger = calloc (1, sizeof (ply_trigger_t));
- trigger->free_address = free_address;
- trigger->closures = ply_list_new ();
- trigger->ignore_count = 0;
+ trigger = calloc (1, sizeof(ply_trigger_t));
+ trigger->free_address = free_address;
+ trigger->closures = ply_list_new ();
+ trigger->ignore_count = 0;
- return trigger;
+ return trigger;
}
void
ply_trigger_free (ply_trigger_t *trigger)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (trigger == NULL)
- return;
+ if (trigger == NULL)
+ return;
- node = ply_list_get_first_node (trigger->closures);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_trigger_closure_t *closure;
+ node = ply_list_get_first_node (trigger->closures);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_trigger_closure_t *closure;
- closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
+ closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (trigger->closures, node);
+ next_node = ply_list_get_next_node (trigger->closures, node);
- free (closure);
- ply_list_remove_node (trigger->closures, node);
+ free (closure);
+ ply_list_remove_node (trigger->closures, node);
- node = next_node;
- }
- ply_list_free (trigger->closures);
+ node = next_node;
+ }
+ ply_list_free (trigger->closures);
- if (trigger->free_address != NULL)
- *trigger->free_address = NULL;
+ if (trigger->free_address != NULL)
+ *trigger->free_address = NULL;
- if (trigger->free_address != NULL)
- *trigger->free_address = NULL;
+ if (trigger->free_address != NULL)
+ *trigger->free_address = NULL;
- free (trigger);
+ free (trigger);
}
void
-ply_trigger_add_handler (ply_trigger_t *trigger,
- ply_trigger_handler_t handler,
- void *user_data)
+ply_trigger_add_handler (ply_trigger_t *trigger,
+ ply_trigger_handler_t handler,
+ void *user_data)
{
- ply_trigger_closure_t *closure;
+ ply_trigger_closure_t *closure;
- closure = calloc (1, sizeof (ply_trigger_closure_t));
- closure->handler = handler;
- closure->user_data = user_data;
+ closure = calloc (1, sizeof(ply_trigger_closure_t));
+ closure->handler = handler;
+ closure->user_data = user_data;
- ply_list_append_data (trigger->closures, closure);
+ ply_list_append_data (trigger->closures, closure);
}
void
-ply_trigger_remove_handler (ply_trigger_t *trigger,
- ply_trigger_handler_t handler,
- void *user_data)
+ply_trigger_remove_handler (ply_trigger_t *trigger,
+ ply_trigger_handler_t handler,
+ void *user_data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (trigger->closures);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_trigger_closure_t *closure;
+ node = ply_list_get_first_node (trigger->closures);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_trigger_closure_t *closure;
- closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
+ closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (trigger->closures, node);
+ next_node = ply_list_get_next_node (trigger->closures, node);
- if (closure->handler == handler && closure->user_data == user_data)
- {
- free (closure);
- ply_list_remove_node (trigger->closures, node);
- break;
- }
+ if (closure->handler == handler && closure->user_data == user_data) {
+ free (closure);
+ ply_list_remove_node (trigger->closures, node);
+ break;
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
void
ply_trigger_ignore_next_pull (ply_trigger_t *trigger)
{
- trigger->ignore_count++;
+ trigger->ignore_count++;
}
void
ply_trigger_pull (ply_trigger_t *trigger,
const void *data)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (trigger != NULL);
- assert (trigger->ignore_count >= 0);
+ assert (trigger != NULL);
+ assert (trigger->ignore_count >= 0);
- if (trigger->ignore_count > 0)
- {
- trigger->ignore_count--;
- return;
- }
+ if (trigger->ignore_count > 0) {
+ trigger->ignore_count--;
+ return;
+ }
- node = ply_list_get_first_node (trigger->closures);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_trigger_closure_t *closure;
+ node = ply_list_get_first_node (trigger->closures);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_trigger_closure_t *closure;
- closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
+ closure = (ply_trigger_closure_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (trigger->closures, node);
+ next_node = ply_list_get_next_node (trigger->closures, node);
- closure->handler (closure->user_data, data, trigger);
+ closure->handler (closure->user_data, data, trigger);
- node = next_node;
- }
+ node = next_node;
+ }
- if (trigger->free_address != NULL)
- ply_trigger_free (trigger);
+ if (trigger->free_address != NULL)
+ ply_trigger_free (trigger);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-trigger.h b/src/libply/ply-trigger.h
index d543f042..2f3065c8 100644
--- a/src/libply/ply-trigger.h
+++ b/src/libply/ply-trigger.h
@@ -30,18 +30,18 @@
typedef struct _ply_trigger ply_trigger_t;
-typedef void (* ply_trigger_handler_t) (void *user_data,
- const void *trigger_data,
- ply_trigger_t *trigger);
+typedef void (*ply_trigger_handler_t) (void *user_data,
+ const void *trigger_data,
+ ply_trigger_t *trigger);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_trigger_t *ply_trigger_new (ply_trigger_t **free_address);
-void ply_trigger_add_handler (ply_trigger_t *trigger,
- ply_trigger_handler_t handler,
- void *user_data);
-void ply_trigger_remove_handler (ply_trigger_t *trigger,
- ply_trigger_handler_t handler,
- void *user_data);
+void ply_trigger_add_handler (ply_trigger_t *trigger,
+ ply_trigger_handler_t handler,
+ void *user_data);
+void ply_trigger_remove_handler (ply_trigger_t *trigger,
+ ply_trigger_handler_t handler,
+ void *user_data);
void ply_trigger_free (ply_trigger_t *trigger);
void ply_trigger_ignore_next_pull (ply_trigger_t *trigger);
diff --git a/src/libply/ply-utils.c b/src/libply/ply-utils.c
index 83334852..8fb4f411 100644
--- a/src/libply/ply-utils.c
+++ b/src/libply/ply-utils.c
@@ -78,173 +78,164 @@
static int errno_stack[PLY_ERRNO_STACK_SIZE];
static int errno_stack_position = 0;
-bool
+bool
ply_open_unidirectional_pipe (int *sender_fd,
int *receiver_fd)
{
- int pipe_fds[2];
+ int pipe_fds[2];
- assert (sender_fd != NULL);
- assert (receiver_fd != NULL);
+ assert (sender_fd != NULL);
+ assert (receiver_fd != NULL);
- if (pipe2 (pipe_fds, O_CLOEXEC) < 0)
- return false;
+ if (pipe2 (pipe_fds, O_CLOEXEC) < 0)
+ return false;
- *sender_fd = pipe_fds[1];
- *receiver_fd = pipe_fds[0];
+ *sender_fd = pipe_fds[1];
+ *receiver_fd = pipe_fds[0];
- return true;
+ return true;
}
static int
ply_open_unix_socket (void)
{
- int fd;
- const int should_pass_credentials = true;
+ int fd;
+ const int should_pass_credentials = true;
- fd = socket (PF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
+ fd = socket (PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0);
- if (fd < 0)
- return -1;
+ if (fd < 0)
+ return -1;
- if (setsockopt (fd, SOL_SOCKET, SO_PASSCRED,
- &should_pass_credentials, sizeof (should_pass_credentials)) < 0)
- {
- ply_save_errno ();
- close (fd);
- ply_restore_errno ();
- return -1;
- }
+ if (setsockopt (fd, SOL_SOCKET, SO_PASSCRED,
+ &should_pass_credentials, sizeof(should_pass_credentials)) < 0) {
+ ply_save_errno ();
+ close (fd);
+ ply_restore_errno ();
+ return -1;
+ }
- return fd;
+ return fd;
}
static struct sockaddr *
-create_unix_address_from_path (const char *path,
- ply_unix_socket_type_t type,
- size_t *address_size)
-{
- struct sockaddr_un *address;
-
- assert (path != NULL && path[0] != '\0');
- assert (strlen (path) < sizeof (address->sun_path));
-
- address = calloc (1, sizeof (struct sockaddr_un));
- address->sun_family = AF_UNIX;
-
- /* a socket is marked as abstract if its path has the
- * NUL byte at the beginning of the buffer.
- *
- * Note, we depend on the memory being zeroed by the calloc
- * call above.
- */
- if (type == PLY_UNIX_SOCKET_TYPE_CONCRETE)
- strncpy (address->sun_path, path, sizeof (address->sun_path) - 1);
- else
- strncpy (address->sun_path + 1, path, sizeof (address->sun_path) - 1);
-
- assert (address_size != NULL);
-
- /* it's very popular to trim the trailing zeros off the end of the path these
- * days for abstract sockets. Unfortunately, the 0s are part of the name, so
- * both client and server have to agree.
- */
- if (type == PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT)
- {
- *address_size = offsetof (struct sockaddr_un, sun_path)
- + 1 /* NUL */ +
- strlen (address->sun_path + 1) /* path */;
- }
- else
- {
- *address_size = sizeof (struct sockaddr_un);
- }
-
- return (struct sockaddr *) address;
+create_unix_address_from_path (const char *path,
+ ply_unix_socket_type_t type,
+ size_t *address_size)
+{
+ struct sockaddr_un *address;
+
+ assert (path != NULL && path[0] != '\0');
+ assert (strlen (path) < sizeof(address->sun_path));
+
+ address = calloc (1, sizeof(struct sockaddr_un));
+ address->sun_family = AF_UNIX;
+
+ /* a socket is marked as abstract if its path has the
+ * NUL byte at the beginning of the buffer.
+ *
+ * Note, we depend on the memory being zeroed by the calloc
+ * call above.
+ */
+ if (type == PLY_UNIX_SOCKET_TYPE_CONCRETE)
+ strncpy (address->sun_path, path, sizeof(address->sun_path) - 1);
+ else
+ strncpy (address->sun_path + 1, path, sizeof(address->sun_path) - 1);
+
+ assert (address_size != NULL);
+
+ /* it's very popular to trim the trailing zeros off the end of the path these
+ * days for abstract sockets. Unfortunately, the 0s are part of the name, so
+ * both client and server have to agree.
+ */
+ if (type == PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT) {
+ *address_size = offsetof (struct sockaddr_un, sun_path)
+ + 1 /* NUL */ +
+ strlen (address->sun_path + 1) /* path */;
+ } else {
+ *address_size = sizeof(struct sockaddr_un);
+ }
+
+ return (struct sockaddr *) address;
}
int
-ply_connect_to_unix_socket (const char *path,
- ply_unix_socket_type_t type)
+ply_connect_to_unix_socket (const char *path,
+ ply_unix_socket_type_t type)
{
- struct sockaddr *address;
- size_t address_size;
- int fd;
+ struct sockaddr *address;
+ size_t address_size;
+ int fd;
+
+ assert (path != NULL);
+ assert (path[0] != '\0');
- assert (path != NULL);
- assert (path[0] != '\0');
-
- fd = ply_open_unix_socket ();
+ fd = ply_open_unix_socket ();
- if (fd < 0)
- return -1;
+ if (fd < 0)
+ return -1;
- address = create_unix_address_from_path (path, type, &address_size);
+ address = create_unix_address_from_path (path, type, &address_size);
- if (connect (fd, address, address_size) < 0)
- {
- ply_save_errno ();
- free (address);
- close (fd);
- ply_restore_errno ();
+ if (connect (fd, address, address_size) < 0) {
+ ply_save_errno ();
+ free (address);
+ close (fd);
+ ply_restore_errno ();
- return -1;
- }
- free (address);
+ return -1;
+ }
+ free (address);
- return fd;
+ return fd;
}
int
-ply_listen_to_unix_socket (const char *path,
- ply_unix_socket_type_t type)
-{
- struct sockaddr *address;
- size_t address_size;
- int fd;
-
- assert (path != NULL);
- assert (path[0] != '\0');
-
- fd = ply_open_unix_socket ();
-
- if (fd < 0)
- return -1;
-
- address = create_unix_address_from_path (path, type, &address_size);
-
- if (bind (fd, address, address_size) < 0)
- {
- ply_save_errno ();
- free (address);
- close (fd);
- ply_restore_errno ();
-
- return -1;
- }
-
- free (address);
-
- if (listen (fd, SOMAXCONN) < 0)
- {
- ply_save_errno ();
- close (fd);
- ply_restore_errno ();
- return -1;
- }
-
- if (type == PLY_UNIX_SOCKET_TYPE_CONCRETE)
- {
- if (fchmod (fd, 0600) < 0)
- {
- ply_save_errno ();
- close (fd);
- ply_restore_errno ();
- return -1;
+ply_listen_to_unix_socket (const char *path,
+ ply_unix_socket_type_t type)
+{
+ struct sockaddr *address;
+ size_t address_size;
+ int fd;
+
+ assert (path != NULL);
+ assert (path[0] != '\0');
+
+ fd = ply_open_unix_socket ();
+
+ if (fd < 0)
+ return -1;
+
+ address = create_unix_address_from_path (path, type, &address_size);
+
+ if (bind (fd, address, address_size) < 0) {
+ ply_save_errno ();
+ free (address);
+ close (fd);
+ ply_restore_errno ();
+
+ return -1;
+ }
+
+ free (address);
+
+ if (listen (fd, SOMAXCONN) < 0) {
+ ply_save_errno ();
+ close (fd);
+ ply_restore_errno ();
+ return -1;
}
- }
- return fd;
+ if (type == PLY_UNIX_SOCKET_TYPE_CONCRETE) {
+ if (fchmod (fd, 0600) < 0) {
+ ply_save_errno ();
+ close (fd);
+ ply_restore_errno ();
+ return -1;
+ }
+ }
+
+ return fd;
}
bool
@@ -253,725 +244,696 @@ ply_get_credentials_from_fd (int fd,
uid_t *uid,
gid_t *gid)
{
- struct ucred credentials;
- socklen_t credential_size;
+ struct ucred credentials;
+ socklen_t credential_size;
- credential_size = sizeof (credentials);
- if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &credentials,
- &credential_size) < 0)
- return false;
+ credential_size = sizeof(credentials);
+ if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &credentials,
+ &credential_size) < 0)
+ return false;
- if (credential_size < sizeof (credentials))
- return false;
+ if (credential_size < sizeof(credentials))
+ return false;
- if (pid != NULL)
- *pid = credentials.pid;
+ if (pid != NULL)
+ *pid = credentials.pid;
- if (uid != NULL)
- *uid = credentials.uid;
+ if (uid != NULL)
+ *uid = credentials.uid;
- if (gid != NULL)
- *gid = credentials.gid;
+ if (gid != NULL)
+ *gid = credentials.gid;
- return true;
+ return true;
}
-bool
+bool
ply_write (int fd,
const void *buffer,
size_t number_of_bytes)
{
- size_t bytes_left_to_write;
- size_t total_bytes_written = 0;
+ size_t bytes_left_to_write;
+ size_t total_bytes_written = 0;
- assert (fd >= 0);
+ assert (fd >= 0);
- bytes_left_to_write = number_of_bytes;
+ bytes_left_to_write = number_of_bytes;
- do
- {
- ssize_t bytes_written = 0;
+ do {
+ ssize_t bytes_written = 0;
- bytes_written = write (fd,
- ((uint8_t *) buffer) + total_bytes_written,
- bytes_left_to_write);
+ bytes_written = write (fd,
+ ((uint8_t *) buffer) + total_bytes_written,
+ bytes_left_to_write);
- if (bytes_written > 0)
- {
- total_bytes_written += bytes_written;
- bytes_left_to_write -= bytes_written;
- }
- else if ((errno != EINTR))
- break;
- }
- while (bytes_left_to_write > 0);
+ if (bytes_written > 0) {
+ total_bytes_written += bytes_written;
+ bytes_left_to_write -= bytes_written;
+ } else if ((errno != EINTR)) {
+ break;
+ }
+ } while (bytes_left_to_write > 0);
- return bytes_left_to_write == 0;
+ return bytes_left_to_write == 0;
}
-bool
+bool
ply_write_uint32 (int fd,
uint32_t value)
{
- uint8_t buffer[4];
-
- buffer[0] = (value >> 0) & 0xFF;
- buffer[1] = (value >> 8) & 0xFF;
- buffer[2] = (value >> 16) & 0xFF;
- buffer[3] = (value >> 24) & 0xFF;
-
- return ply_write (fd, buffer, 4 * sizeof (uint8_t));
+ uint8_t buffer[4];
+
+ buffer[0] = (value >> 0) & 0xFF;
+ buffer[1] = (value >> 8) & 0xFF;
+ buffer[2] = (value >> 16) & 0xFF;
+ buffer[3] = (value >> 24) & 0xFF;
+
+ return ply_write (fd, buffer, 4 * sizeof(uint8_t));
}
static ssize_t
-ply_read_some_bytes (int fd,
- void *buffer,
- size_t max_bytes)
+ply_read_some_bytes (int fd,
+ void *buffer,
+ size_t max_bytes)
{
- size_t bytes_left_to_read;
- size_t total_bytes_read = 0;
+ size_t bytes_left_to_read;
+ size_t total_bytes_read = 0;
- assert (fd >= 0);
+ assert (fd >= 0);
- bytes_left_to_read = max_bytes;
+ bytes_left_to_read = max_bytes;
- do
- {
- ssize_t bytes_read = 0;
+ do {
+ ssize_t bytes_read = 0;
- bytes_read = read (fd,
- ((uint8_t *) buffer) + total_bytes_read,
- bytes_left_to_read);
+ bytes_read = read (fd,
+ ((uint8_t *) buffer) + total_bytes_read,
+ bytes_left_to_read);
- if (bytes_read > 0)
- {
- total_bytes_read += bytes_read;
- bytes_left_to_read -= bytes_read;
- }
- else if ((errno != EINTR))
- break;
- }
- while (bytes_left_to_read > 0);
+ if (bytes_read > 0) {
+ total_bytes_read += bytes_read;
+ bytes_left_to_read -= bytes_read;
+ } else if ((errno != EINTR)) {
+ break;
+ }
+ } while (bytes_left_to_read > 0);
- if ((bytes_left_to_read > 0) && (errno != EAGAIN))
- total_bytes_read = -1;
+ if ((bytes_left_to_read > 0) && (errno != EAGAIN))
+ total_bytes_read = -1;
- return total_bytes_read;
+ return total_bytes_read;
}
-bool
-ply_read (int fd,
- void *buffer,
- size_t number_of_bytes)
+bool
+ply_read (int fd,
+ void *buffer,
+ size_t number_of_bytes)
{
- size_t total_bytes_read;
- bool read_was_successful;
+ size_t total_bytes_read;
+ bool read_was_successful;
- assert (fd >= 0);
- assert (buffer != NULL);
- assert (number_of_bytes != 0);
+ assert (fd >= 0);
+ assert (buffer != NULL);
+ assert (number_of_bytes != 0);
- total_bytes_read = ply_read_some_bytes (fd, buffer, number_of_bytes);
+ total_bytes_read = ply_read_some_bytes (fd, buffer, number_of_bytes);
- read_was_successful = total_bytes_read == number_of_bytes;
+ read_was_successful = total_bytes_read == number_of_bytes;
- return read_was_successful;
+ return read_was_successful;
}
-bool
+bool
ply_read_uint32 (int fd,
uint32_t *value)
{
- uint8_t buffer[4];
-
- if (!ply_read (fd, buffer, 4 * sizeof (uint8_t)))
- return false;
-
- *value = (buffer[0] << 0) |
- (buffer[1] << 8) |
- (buffer[2] << 16) |
- (buffer[3] << 24);
- return true;
+ uint8_t buffer[4];
+
+ if (!ply_read (fd, buffer, 4 * sizeof(uint8_t)))
+ return false;
+
+ *value = (buffer[0] << 0) |
+ (buffer[1] << 8) |
+ (buffer[2] << 16) |
+ (buffer[3] << 24);
+ return true;
}
-bool
+bool
ply_fd_has_data (int fd)
{
- struct pollfd poll_data;
- int result;
+ struct pollfd poll_data;
+ int result;
- poll_data.fd = fd;
- poll_data.events = POLLIN | POLLPRI;
- poll_data.revents = 0;
- result = poll (&poll_data, 1, 10);
+ poll_data.fd = fd;
+ poll_data.events = POLLIN | POLLPRI;
+ poll_data.revents = 0;
+ result = poll (&poll_data, 1, 10);
- return result == 1
- && ((poll_data.revents & POLLIN)
- || (poll_data.revents & POLLPRI));
+ return result == 1
+ && ((poll_data.revents & POLLIN)
+ || (poll_data.revents & POLLPRI));
}
-bool
+bool
ply_fd_can_take_data (int fd)
{
- struct pollfd poll_data;
- int result;
+ struct pollfd poll_data;
+ int result;
- poll_data.fd = fd;
- poll_data.events = POLLOUT;
- poll_data.revents = 0;
- result = poll (&poll_data, 1, 10);
+ poll_data.fd = fd;
+ poll_data.events = POLLOUT;
+ poll_data.revents = 0;
+ result = poll (&poll_data, 1, 10);
- return result == 1;
+ return result == 1;
}
bool
ply_fd_may_block (int fd)
{
- int flags;
+ int flags;
- assert (fd >= 0);
+ assert (fd >= 0);
- flags = fcntl (fd, F_GETFL);
+ flags = fcntl (fd, F_GETFL);
- return (flags & O_NONBLOCK) != 0;
+ return (flags & O_NONBLOCK) != 0;
}
char **
-ply_copy_string_array (const char * const *array)
+ply_copy_string_array (const char *const *array)
{
- char **copy;
- int i;
+ char **copy;
+ int i;
- for (i = 0; array[i] != NULL; i++);
+ for (i = 0; array[i] != NULL; i++) {
+ }
- copy = calloc (i + 1, sizeof (char *));
+ copy = calloc (i + 1, sizeof(char *));
- for (i = 0; array[i] != NULL; i++)
- copy[i] = strdup (array[i]);
+ for (i = 0; array[i] != NULL; i++) {
+ copy[i] = strdup (array[i]);
+ }
- return copy;
+ return copy;
}
-void
+void
ply_free_string_array (char **array)
{
- int i;
+ int i;
- if (array == NULL)
- return;
+ if (array == NULL)
+ return;
- for (i = 0; array[i] != NULL; i++)
- {
- free (array[i]);
- array[i] = NULL;
- }
+ for (i = 0; array[i] != NULL; i++) {
+ free (array[i]);
+ array[i] = NULL;
+ }
- free (array);
+ free (array);
}
bool
ply_string_has_prefix (const char *string,
const char *prefix)
{
- if (string == NULL)
- return false;
+ if (string == NULL)
+ return false;
- if (prefix == NULL)
- return false;
+ if (prefix == NULL)
+ return false;
- if (strlen (prefix) > strlen (string))
- return false;
+ if (strlen (prefix) > strlen (string))
+ return false;
- return strncmp (string, prefix, strlen (prefix)) == 0;
+ return strncmp (string, prefix, strlen (prefix)) == 0;
}
static int
ply_get_max_open_fds (void)
{
- struct rlimit open_fd_limit;
+ struct rlimit open_fd_limit;
- if (getrlimit (RLIMIT_NOFILE, &open_fd_limit) < 0)
- return -1;
+ if (getrlimit (RLIMIT_NOFILE, &open_fd_limit) < 0)
+ return -1;
- if (open_fd_limit.rlim_cur == RLIM_INFINITY)
- return -1;
+ if (open_fd_limit.rlim_cur == RLIM_INFINITY)
+ return -1;
- return (int) open_fd_limit.rlim_cur;
+ return (int) open_fd_limit.rlim_cur;
}
static bool
ply_close_open_fds (void)
{
- DIR *dir;
- struct dirent *entry;
- int fd, opendir_fd;
+ DIR *dir;
+ struct dirent *entry;
+ int fd, opendir_fd;
- opendir_fd = -1;
- dir = opendir (PLY_OPEN_FILE_DESCRIPTORS_DIR);
+ opendir_fd = -1;
+ dir = opendir (PLY_OPEN_FILE_DESCRIPTORS_DIR);
- if (dir == NULL)
- return false;
+ if (dir == NULL)
+ return false;
- while ((entry = readdir (dir)) != NULL)
- {
- long filename_as_number;
- char *byte_after_number;
+ while ((entry = readdir (dir)) != NULL) {
+ long filename_as_number;
+ char *byte_after_number;
- errno = 0;
- if (entry->d_name[0] == '.')
- continue;
+ errno = 0;
+ if (entry->d_name[0] == '.')
+ continue;
- fd = -1;
- filename_as_number = strtol (entry->d_name, &byte_after_number, 10);
+ fd = -1;
+ filename_as_number = strtol (entry->d_name, &byte_after_number, 10);
- if ((*byte_after_number != '\0') ||
- (filename_as_number < 0) ||
- (filename_as_number > INT_MAX)) {
- closedir (dir);
- return false;
- }
+ if ((*byte_after_number != '\0') ||
+ (filename_as_number < 0) ||
+ (filename_as_number > INT_MAX)) {
+ closedir (dir);
+ return false;
+ }
- fd = (int) filename_as_number;
+ fd = (int) filename_as_number;
- if (fd != opendir_fd)
- close (fd);
- }
+ if (fd != opendir_fd)
+ close (fd);
+ }
- assert (entry == NULL);
- closedir (dir);
+ assert (entry == NULL);
+ closedir (dir);
- return true;
+ return true;
}
-void
+void
ply_close_all_fds (void)
{
- int max_open_fds, fd;
-
- max_open_fds = ply_get_max_open_fds ();
+ int max_open_fds, fd;
- /* if there isn't a reported maximum for some
- * reason, then open up /proc/self/fd and close
- * the ones we can find. If that doesn't work
- * out, then just bite the bullet and close the
- * entire integer range
- */
- if (max_open_fds < 0)
- {
- if (ply_close_open_fds ())
- return;
+ max_open_fds = ply_get_max_open_fds ();
- max_open_fds = INT_MAX;
- }
+ /* if there isn't a reported maximum for some
+ * reason, then open up /proc/self/fd and close
+ * the ones we can find. If that doesn't work
+ * out, then just bite the bullet and close the
+ * entire integer range
+ */
+ if (max_open_fds < 0) {
+ if (ply_close_open_fds ())
+ return;
- else for (fd = 0; fd < max_open_fds; fd++)
- close (fd);
+ max_open_fds = INT_MAX;
+ } else { for (fd = 0; fd < max_open_fds; fd++) {
+ close (fd);
+ }
+ }
}
-double
+double
ply_get_timestamp (void)
{
- const double nanoseconds_per_second = 1000000000.0;
- double timestamp;
- struct timespec now = { 0L, /* zero-filled */ };
+ const double nanoseconds_per_second = 1000000000.0;
+ double timestamp;
+ struct timespec now = { 0L, /* zero-filled */ };
- clock_gettime (CLOCK_MONOTONIC, &now);
- timestamp = ((nanoseconds_per_second * now.tv_sec) + now.tv_nsec) /
- nanoseconds_per_second;
+ clock_gettime (CLOCK_MONOTONIC, &now);
+ timestamp = ((nanoseconds_per_second * now.tv_sec) + now.tv_nsec) /
+ nanoseconds_per_second;
- return timestamp;
+ return timestamp;
}
-void
+void
ply_save_errno (void)
{
- assert (errno_stack_position < PLY_ERRNO_STACK_SIZE);
- errno_stack[errno_stack_position] = errno;
- errno_stack_position++;
+ assert (errno_stack_position < PLY_ERRNO_STACK_SIZE);
+ errno_stack[errno_stack_position] = errno;
+ errno_stack_position++;
}
void
ply_restore_errno (void)
{
- assert (errno_stack_position > 0);
- errno_stack_position--;
- errno = errno_stack[errno_stack_position];
+ assert (errno_stack_position > 0);
+ errno_stack_position--;
+ errno = errno_stack[errno_stack_position];
}
-bool
+bool
ply_directory_exists (const char *dir)
{
- struct stat file_info;
-
- if (stat (dir, &file_info) < 0)
- return false;
+ struct stat file_info;
+
+ if (stat (dir, &file_info) < 0)
+ return false;
- return S_ISDIR (file_info.st_mode);
+ return S_ISDIR (file_info.st_mode);
}
bool
ply_file_exists (const char *file)
{
- struct stat file_info;
-
- if (stat (file, &file_info) < 0)
- return false;
+ struct stat file_info;
+
+ if (stat (file, &file_info) < 0)
+ return false;
- return S_ISREG (file_info.st_mode);
+ return S_ISREG (file_info.st_mode);
}
bool
ply_character_device_exists (const char *device)
{
- struct stat file_info;
+ struct stat file_info;
- if (stat (device, &file_info) < 0)
- return false;
+ if (stat (device, &file_info) < 0)
+ return false;
- return S_ISCHR (file_info.st_mode);
+ return S_ISCHR (file_info.st_mode);
}
ply_module_handle_t *
ply_open_module (const char *module_path)
{
- ply_module_handle_t *handle;
+ ply_module_handle_t *handle;
- assert (module_path != NULL);
+ assert (module_path != NULL);
- handle = (ply_module_handle_t *) dlopen (module_path,
- RTLD_NODELETE |RTLD_NOW | RTLD_LOCAL);
+ handle = (ply_module_handle_t *) dlopen (module_path,
+ RTLD_NODELETE | RTLD_NOW | RTLD_LOCAL);
- if (handle == NULL)
- {
- ply_trace("Could not load module \"%s\": %s\n", module_path, dlerror());
- if (errno == 0)
- errno = ELIBACC;
- }
+ if (handle == NULL) {
+ ply_trace ("Could not load module \"%s\": %s\n", module_path, dlerror ());
+ if (errno == 0)
+ errno = ELIBACC;
+ }
- return handle;
+ return handle;
}
ply_module_handle_t *
ply_open_built_in_module (void)
{
- ply_module_handle_t *handle;
+ ply_module_handle_t *handle;
- handle = (ply_module_handle_t *) dlopen (NULL,
- RTLD_NODELETE |RTLD_NOW | RTLD_LOCAL);
+ handle = (ply_module_handle_t *) dlopen (NULL,
+ RTLD_NODELETE | RTLD_NOW | RTLD_LOCAL);
- if (handle == NULL)
- {
- ply_trace("Could not load built-in module: %s\n", dlerror ());
- if (errno == 0)
- errno = ELIBACC;
- }
+ if (handle == NULL) {
+ ply_trace ("Could not load built-in module: %s\n", dlerror ());
+ if (errno == 0)
+ errno = ELIBACC;
+ }
- return handle;
+ return handle;
}
ply_module_function_t
ply_module_look_up_function (ply_module_handle_t *handle,
const char *function_name)
{
- ply_module_function_t function;
+ ply_module_function_t function;
- assert (handle != NULL);
- assert (function_name != NULL);
+ assert (handle != NULL);
+ assert (function_name != NULL);
- dlerror ();
- function = (ply_module_function_t) dlsym (handle, function_name);
+ dlerror ();
+ function = (ply_module_function_t) dlsym (handle, function_name);
- if (dlerror () != NULL)
- {
- if (errno == 0)
- errno = ELIBACC;
+ if (dlerror () != NULL) {
+ if (errno == 0)
+ errno = ELIBACC;
- return NULL;
- }
+ return NULL;
+ }
- return function;
+ return function;
}
void
ply_close_module (ply_module_handle_t *handle)
{
- dlclose (handle);
+ dlclose (handle);
}
bool
ply_create_directory (const char *directory)
{
- assert (directory != NULL);
- assert (directory[0] != '\0');
-
- if (ply_directory_exists (directory))
- {
- ply_trace ("directory '%s' already exists", directory);
- return true;
- }
-
- if (ply_file_exists (directory))
- {
- ply_trace ("file '%s' is in the way", directory);
- errno = EEXIST;
- return false;
- }
-
- if (mkdir (directory, 0755) < 0)
- {
- char *parent_directory;
- char *last_path_component;
- bool is_created;
-
- is_created = errno == EEXIST;
- if (errno == ENOENT)
- {
- parent_directory = strdup (directory);
- last_path_component = strrchr (parent_directory, '/');
- *last_path_component = '\0';
-
- ply_trace ("parent directory '%s' doesn't exist, creating it first", parent_directory);
- if (ply_create_directory (parent_directory)
- && ((mkdir (directory, 0755) == 0) || errno == EEXIST))
- is_created = true;
-
- ply_save_errno ();
- free (parent_directory);
- ply_restore_errno ();
+ assert (directory != NULL);
+ assert (directory[0] != '\0');
+ if (ply_directory_exists (directory)) {
+ ply_trace ("directory '%s' already exists", directory);
+ return true;
}
- return is_created;
- }
+ if (ply_file_exists (directory)) {
+ ply_trace ("file '%s' is in the way", directory);
+ errno = EEXIST;
+ return false;
+ }
+
+ if (mkdir (directory, 0755) < 0) {
+ char *parent_directory;
+ char *last_path_component;
+ bool is_created;
+
+ is_created = errno == EEXIST;
+ if (errno == ENOENT) {
+ parent_directory = strdup (directory);
+ last_path_component = strrchr (parent_directory, '/');
+ *last_path_component = '\0';
+ ply_trace ("parent directory '%s' doesn't exist, creating it first", parent_directory);
+ if (ply_create_directory (parent_directory)
+ && ((mkdir (directory, 0755) == 0) || errno == EEXIST))
+ is_created = true;
- return true;
+ ply_save_errno ();
+ free (parent_directory);
+ ply_restore_errno ();
+ }
+
+ return is_created;
+ }
+
+
+ return true;
}
bool
ply_create_file_link (const char *source,
const char *destination)
{
- if (link (source, destination) < 0)
- return false;
+ if (link (source, destination) < 0)
+ return false;
- return true;
+ return true;
}
void
ply_show_new_kernel_messages (bool should_show)
{
- int type;
+ int type;
- if (should_show)
- type = PLY_ENABLE_CONSOLE_PRINTK;
- else
- type = PLY_DISABLE_CONSOLE_PRINTK;
+ if (should_show)
+ type = PLY_ENABLE_CONSOLE_PRINTK;
+ else
+ type = PLY_DISABLE_CONSOLE_PRINTK;
- if (klogctl (type, NULL, 0) < 0)
- ply_trace ("could not toggle printk visibility: %m");
+ if (klogctl (type, NULL, 0) < 0)
+ ply_trace ("could not toggle printk visibility: %m");
}
ply_daemon_handle_t *
ply_create_daemon (void)
{
- pid_t pid;
- int sender_fd, receiver_fd;
- int *handle;
-
- if (!ply_open_unidirectional_pipe (&sender_fd, &receiver_fd))
- return NULL;
-
-
- pid = fork ();
-
- if (pid < 0)
- return NULL;
-
- if (pid != 0)
- {
- uint8_t byte;
- close (sender_fd);
-
- if (!ply_read (receiver_fd, &byte, sizeof (uint8_t)))
- {
- int read_error = errno;
- int status;
-
- if (waitpid (pid, &status, WNOHANG) <= 0)
- {
- ply_error ("failed to read status from child immediately after starting to daemonize: %s", strerror (read_error));
- }
- else if (WIFEXITED (status))
- {
- ply_error ("unexpectedly exited with status %d immediately after starting to daemonize", (int) WEXITSTATUS (status));
- }
- else if (WIFSIGNALED (status))
- {
- ply_error ("unexpectedly died from signal %s immediately after starting to daemonize", strsignal (WTERMSIG (status)));
- }
- _exit (1);
- }
+ pid_t pid;
+ int sender_fd, receiver_fd;
+ int *handle;
+
+ if (!ply_open_unidirectional_pipe (&sender_fd, &receiver_fd))
+ return NULL;
+
- _exit ((int) byte);
- }
- close (receiver_fd);
+ pid = fork ();
- handle = calloc (1, sizeof (int));
- *handle = sender_fd;
+ if (pid < 0)
+ return NULL;
+
+ if (pid != 0) {
+ uint8_t byte;
+ close (sender_fd);
+
+ if (!ply_read (receiver_fd, &byte, sizeof(uint8_t))) {
+ int read_error = errno;
+ int status;
+
+ if (waitpid (pid, &status, WNOHANG) <= 0)
+ ply_error ("failed to read status from child immediately after starting to daemonize: %s", strerror (read_error));
+ else if (WIFEXITED (status))
+ ply_error ("unexpectedly exited with status %d immediately after starting to daemonize", (int) WEXITSTATUS (status));
+ else if (WIFSIGNALED (status))
+ ply_error ("unexpectedly died from signal %s immediately after starting to daemonize", strsignal (WTERMSIG (status)));
+ _exit (1);
+ }
+
+ _exit ((int) byte);
+ }
+ close (receiver_fd);
- return (ply_daemon_handle_t *) handle;
+ handle = calloc (1, sizeof(int));
+ *handle = sender_fd;
+
+ return (ply_daemon_handle_t *) handle;
}
bool
ply_detach_daemon (ply_daemon_handle_t *handle,
int exit_code)
{
- int sender_fd;
- uint8_t byte;
+ int sender_fd;
+ uint8_t byte;
- assert (handle != NULL);
- assert (exit_code >= 0 && exit_code < 256);
+ assert (handle != NULL);
+ assert (exit_code >= 0 && exit_code < 256);
- sender_fd = *(int *) handle;
+ sender_fd = *(int *) handle;
- byte = (uint8_t) exit_code;
+ byte = (uint8_t) exit_code;
- if (!ply_write (sender_fd, &byte, sizeof (uint8_t)))
- return false;
+ if (!ply_write (sender_fd, &byte, sizeof(uint8_t)))
+ return false;
- close (sender_fd);
- free (handle);
+ close (sender_fd);
+ free (handle);
- return true;
+ return true;
}
/* UTF-8 encoding
-00000000-01111111 00-7F US-ASCII (single byte)
-10000000-10111111 80-BF Second, third, or fourth byte of a multi-byte sequence
-11000000-11011111 C0-DF Start of 2-byte sequence
-11100000-11101111 E0-EF Start of 3-byte sequence
-11110000-11110100 F0-F4 Start of 4-byte sequence
-*/
-
+ * 00000000-01111111 00-7F US-ASCII (single byte)
+ * 10000000-10111111 80-BF Second, third, or fourth byte of a multi-byte sequence
+ * 11000000-11011111 C0-DF Start of 2-byte sequence
+ * 11100000-11101111 E0-EF Start of 3-byte sequence
+ * 11110000-11110100 F0-F4 Start of 4-byte sequence
+ */
int
-ply_utf8_character_get_size (const char *string,
- size_t n)
+ply_utf8_character_get_size (const char *string,
+ size_t n)
{
- int length;
- if (n < 1) return -1;
- if (string[0] == 0x00) length = 0;
- else if ((string[0] & 0x80) == 0x00) length = 1;
- else if ((string[0] & 0xE0) == 0xC0) length = 2;
- else if ((string[0] & 0xF0) == 0xE0) length = 3;
- else if ((string[0] & 0xF8) == 0xF0) length = 4;
- else return -2;
- if (length > (int) n) return -1;
- return length;
+ int length;
+
+ if (n < 1) return -1;
+ if (string[0] == 0x00) length = 0;
+ else if ((string[0] & 0x80) == 0x00) length = 1;
+ else if ((string[0] & 0xE0) == 0xC0) length = 2;
+ else if ((string[0] & 0xF0) == 0xE0) length = 3;
+ else if ((string[0] & 0xF8) == 0xF0) length = 4;
+ else return -2;
+ if (length > (int) n) return -1;
+ return length;
}
int
-ply_utf8_string_get_length (const char *string,
- size_t n)
+ply_utf8_string_get_length (const char *string,
+ size_t n)
{
- size_t count = 0;
- while (true)
- {
- int charlen = ply_utf8_character_get_size(string, n);
- if (charlen <= 0) break;
- string += charlen;
- n -= charlen;
- count++;
- }
- return count;
+ size_t count = 0;
+
+ while (true) {
+ int charlen = ply_utf8_character_get_size (string, n);
+ if (charlen <= 0) break;
+ string += charlen;
+ n -= charlen;
+ count++;
+ }
+ return count;
}
char *
ply_get_process_command_line (pid_t pid)
{
- char *path;
- char *command_line;
- ssize_t bytes_read;
- int fd;
- ssize_t i;
-
- path = NULL;
- command_line = NULL;
-
- asprintf (&path, "/proc/%ld/cmdline", (long) pid);
-
- fd = open (path, O_RDONLY);
-
- if (fd < 0)
- {
- ply_trace ("Could not open %s: %m", path);
- goto error;
- }
-
- command_line = calloc (PLY_MAX_COMMAND_LINE_SIZE, sizeof (char));
- bytes_read = read (fd, command_line, PLY_MAX_COMMAND_LINE_SIZE - 1);
- if (bytes_read < 0)
- {
- ply_trace ("Could not read %s: %m", path);
- close (fd);
- goto error;
- }
- close (fd);
- free (path);
-
- for (i = 0; i < bytes_read - 1; i++)
- {
- if (command_line[i] == '\0')
- command_line[i] = ' ';
- }
- command_line[i] = '\0';
-
- return command_line;
+ char *path;
+ char *command_line;
+ ssize_t bytes_read;
+ int fd;
+ ssize_t i;
+
+ path = NULL;
+ command_line = NULL;
+
+ asprintf (&path, "/proc/%ld/cmdline", (long) pid);
+
+ fd = open (path, O_RDONLY);
+
+ if (fd < 0) {
+ ply_trace ("Could not open %s: %m", path);
+ goto error;
+ }
+
+ command_line = calloc (PLY_MAX_COMMAND_LINE_SIZE, sizeof(char));
+ bytes_read = read (fd, command_line, PLY_MAX_COMMAND_LINE_SIZE - 1);
+ if (bytes_read < 0) {
+ ply_trace ("Could not read %s: %m", path);
+ close (fd);
+ goto error;
+ }
+ close (fd);
+ free (path);
+
+ for (i = 0; i < bytes_read - 1; i++) {
+ if (command_line[i] == '\0')
+ command_line[i] = ' ';
+ }
+ command_line[i] = '\0';
+
+ return command_line;
error:
- free (path);
- free (command_line);
- return NULL;
+ free (path);
+ free (command_line);
+ return NULL;
}
pid_t
ply_get_process_parent_pid (pid_t pid)
{
- char *path;
- FILE *fp;
- int ppid;
+ char *path;
+ FILE *fp;
+ int ppid;
- asprintf (&path, "/proc/%ld/stat", (long) pid);
+ asprintf (&path, "/proc/%ld/stat", (long) pid);
- ppid = 0;
- fp = fopen (path, "re");
+ ppid = 0;
+ fp = fopen (path, "re");
- if (fp == NULL)
- {
- ply_trace ("Could not open %s: %m", path);
- goto out;
- }
+ if (fp == NULL) {
+ ply_trace ("Could not open %s: %m", path);
+ goto out;
+ }
- if (fscanf (fp, "%*d %*s %*c %d", &ppid) != 1)
- {
- ply_trace ("Could not parse %s: %m", path);
- goto out;
- }
+ if (fscanf (fp, "%*d %*s %*c %d", &ppid) != 1) {
+ ply_trace ("Could not parse %s: %m", path);
+ goto out;
+ }
- if (ppid <= 0)
- {
- ply_trace ("%s is returning invalid parent pid %d", path, ppid);
- ppid = 0;
- goto out;
- }
+ if (ppid <= 0) {
+ ply_trace ("%s is returning invalid parent pid %d", path, ppid);
+ ppid = 0;
+ goto out;
+ }
out:
- free (path);
+ free (path);
- if (fp != NULL)
- fclose (fp);
+ if (fp != NULL)
+ fclose (fp);
- return (pid_t) ppid;
+ return (pid_t) ppid;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-utils.h b/src/libply/ply-utils.h
index abe332a4..b9a28d0d 100644
--- a/src/libply/ply-utils.h
+++ b/src/libply/ply-utils.h
@@ -28,29 +28,29 @@
#include <sys/types.h>
#ifndef MIN
-#define MIN(a,b) ((a) <= (b)? (a) : (b))
+#define MIN(a, b) ((a) <= (b) ? (a) : (b))
#endif
#ifndef MAX
-#define MAX(a,b) ((a) >= (b)? (a) : (b))
+#define MAX(a, b) ((a) >= (b) ? (a) : (b))
#endif
#ifndef CLAMP
-#define CLAMP(a,b,c) (MIN (MAX ((a), (b)), (c)))
+#define CLAMP(a, b, c) (MIN (MAX ((a), (b)), (c)))
#endif
#define PLY_UTF8_CHARACTER_SIZE_MAX 4
typedef intptr_t ply_module_handle_t;
-typedef void (* ply_module_function_t) (void);
+typedef void (*ply_module_function_t) (void);
typedef intptr_t ply_daemon_handle_t;
typedef enum
{
- PLY_UNIX_SOCKET_TYPE_CONCRETE = 0,
- PLY_UNIX_SOCKET_TYPE_ABSTRACT,
- PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT
+ PLY_UNIX_SOCKET_TYPE_CONCRETE = 0,
+ PLY_UNIX_SOCKET_TYPE_ABSTRACT,
+ PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT
} ply_unix_socket_type_t;
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
@@ -59,10 +59,10 @@ typedef enum
bool ply_open_unidirectional_pipe (int *sender_fd,
int *receiver_fd);
-int ply_connect_to_unix_socket (const char *path,
- ply_unix_socket_type_t type);
-int ply_listen_to_unix_socket (const char *path,
- ply_unix_socket_type_t type);
+int ply_connect_to_unix_socket (const char *path,
+ ply_unix_socket_type_t type);
+int ply_listen_to_unix_socket (const char *path,
+ ply_unix_socket_type_t type);
bool ply_get_credentials_from_fd (int fd,
pid_t *pid,
uid_t *uid,
@@ -70,19 +70,19 @@ bool ply_get_credentials_from_fd (int fd,
bool ply_write (int fd,
const void *buffer,
- size_t number_of_bytes);
+ size_t number_of_bytes);
bool ply_write_uint32 (int fd,
uint32_t value);
-bool ply_read (int fd,
- void *buffer,
- size_t number_of_bytes);
+bool ply_read (int fd,
+ void *buffer,
+ size_t number_of_bytes);
bool ply_read_uint32 (int fd,
uint32_t *value);
bool ply_fd_has_data (int fd);
bool ply_fd_can_take_data (int fd);
bool ply_fd_may_block (int fd);
-char **ply_copy_string_array (const char * const *array);
+char **ply_copy_string_array (const char *const *array);
void ply_free_string_array (char **array);
bool ply_string_has_prefix (const char *string,
const char *prefix);
@@ -100,7 +100,7 @@ ply_module_handle_t *ply_open_module (const char *module_path);
ply_module_handle_t *ply_open_built_in_module (void);
ply_module_function_t ply_module_look_up_function (ply_module_handle_t *handle,
- const char *function_name);
+ const char *function_name);
void ply_close_module (ply_module_handle_t *handle);
bool ply_create_directory (const char *directory);
@@ -112,10 +112,10 @@ ply_daemon_handle_t *ply_create_daemon (void);
bool ply_detach_daemon (ply_daemon_handle_t *handle,
int exit_code);
-int ply_utf8_character_get_size (const char *string,
- size_t n);
-int ply_utf8_string_get_length (const char *string,
- size_t n);
+int ply_utf8_character_get_size (const char *string,
+ size_t n);
+int ply_utf8_string_get_length (const char *string,
+ size_t n);
char *ply_get_process_command_line (pid_t pid);
pid_t ply_get_process_parent_pid (pid_t pid);
diff --git a/src/main.c b/src/main.c
index c3daac0f..ab9e1f98 100644
--- a/src/main.c
+++ b/src/main.c
@@ -63,69 +63,70 @@
#define BOOT_DURATION_FILE PLYMOUTH_TIME_DIRECTORY "/boot-duration"
#define SHUTDOWN_DURATION_FILE PLYMOUTH_TIME_DIRECTORY "/shutdown-duration"
-typedef enum {
- PLY_MODE_BOOT,
- PLY_MODE_SHUTDOWN,
- PLY_MODE_UPDATES
+typedef enum
+{
+ PLY_MODE_BOOT,
+ PLY_MODE_SHUTDOWN,
+ PLY_MODE_UPDATES
} ply_mode_t;
-typedef struct
+typedef struct
{
- const char *keys;
- ply_trigger_t *trigger;
+ const char *keys;
+ ply_trigger_t *trigger;
} ply_keystroke_watch_t;
-typedef struct
+typedef struct
{
- enum {PLY_ENTRY_TRIGGER_TYPE_PASSWORD,
- PLY_ENTRY_TRIGGER_TYPE_QUESTION}
+ enum { PLY_ENTRY_TRIGGER_TYPE_PASSWORD,
+ PLY_ENTRY_TRIGGER_TYPE_QUESTION }
type;
- const char *prompt;
- ply_trigger_t *trigger;
+ const char *prompt;
+ ply_trigger_t *trigger;
} ply_entry_trigger_t;
typedef struct
{
- ply_event_loop_t *loop;
- ply_boot_server_t *boot_server;
- ply_boot_splash_t *boot_splash;
- ply_terminal_session_t *session;
- ply_buffer_t *boot_buffer;
- ply_progress_t *progress;
- ply_list_t *keystroke_triggers;
- ply_list_t *entry_triggers;
- ply_buffer_t *entry_buffer;
- ply_list_t *messages;
- ply_command_parser_t *command_parser;
- ply_mode_t mode;
- ply_terminal_t *local_console_terminal;
- ply_device_manager_t *device_manager;
-
- ply_trigger_t *deactivate_trigger;
- ply_trigger_t *quit_trigger;
-
- double start_time;
- double splash_delay;
-
- char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE];
- uint32_t kernel_command_line_is_set : 1;
- uint32_t no_boot_log : 1;
- uint32_t showing_details : 1;
- uint32_t system_initialized : 1;
- uint32_t is_redirected : 1;
- uint32_t is_attached : 1;
- uint32_t should_be_attached : 1;
- uint32_t should_retain_splash : 1;
- uint32_t is_inactive : 1;
- uint32_t is_shown : 1;
- uint32_t should_force_details : 1;
-
- char *override_splash_path;
- char *system_default_splash_path;
- char *distribution_default_splash_path;
- const char *default_tty;
-
- int number_of_errors;
+ ply_event_loop_t *loop;
+ ply_boot_server_t *boot_server;
+ ply_boot_splash_t *boot_splash;
+ ply_terminal_session_t *session;
+ ply_buffer_t *boot_buffer;
+ ply_progress_t *progress;
+ ply_list_t *keystroke_triggers;
+ ply_list_t *entry_triggers;
+ ply_buffer_t *entry_buffer;
+ ply_list_t *messages;
+ ply_command_parser_t *command_parser;
+ ply_mode_t mode;
+ ply_terminal_t *local_console_terminal;
+ ply_device_manager_t *device_manager;
+
+ ply_trigger_t *deactivate_trigger;
+ ply_trigger_t *quit_trigger;
+
+ double start_time;
+ double splash_delay;
+
+ char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE];
+ uint32_t kernel_command_line_is_set : 1;
+ uint32_t no_boot_log : 1;
+ uint32_t showing_details : 1;
+ uint32_t system_initialized : 1;
+ uint32_t is_redirected : 1;
+ uint32_t is_attached : 1;
+ uint32_t should_be_attached : 1;
+ uint32_t should_retain_splash : 1;
+ uint32_t is_inactive : 1;
+ uint32_t is_shown : 1;
+ uint32_t should_force_details : 1;
+
+ char *override_splash_path;
+ char *system_default_splash_path;
+ char *distribution_default_splash_path;
+ const char *default_tty;
+
+ int number_of_errors;
} state_t;
static void show_splash (state_t *state);
@@ -154,7 +155,7 @@ static void toggle_between_splash_and_details (state_t *state);
static void tell_systemd_to_print_details (state_t *state);
static void tell_systemd_to_stop_printing_details (state_t *state);
#endif
-static const char * get_cache_file_for_mode (ply_mode_t mode);
+static const char *get_cache_file_for_mode (ply_mode_t mode);
static void on_escape_pressed (state_t *state);
static void on_enter (state_t *state,
const char *line);
@@ -168,1132 +169,1050 @@ on_session_output (state_t *state,
const char *output,
size_t size)
{
- ply_buffer_append_bytes (state->boot_buffer, output, size);
- if (state->boot_splash != NULL)
- ply_boot_splash_update_output (state->boot_splash,
- output, size);
+ ply_buffer_append_bytes (state->boot_buffer, output, size);
+ if (state->boot_splash != NULL)
+ ply_boot_splash_update_output (state->boot_splash,
+ output, size);
}
static void
on_session_hangup (state_t *state)
{
- ply_trace ("got hang up on terminal session fd");
+ ply_trace ("got hang up on terminal session fd");
}
static void
-on_update (state_t *state,
- const char *status)
+on_update (state_t *state,
+ const char *status)
{
- ply_trace ("updating status to '%s'", status);
- ply_progress_status_update (state->progress,
- status);
- if (state->boot_splash != NULL)
- ply_boot_splash_update_status (state->boot_splash,
- status);
+ ply_trace ("updating status to '%s'", status);
+ ply_progress_status_update (state->progress,
+ status);
+ if (state->boot_splash != NULL)
+ ply_boot_splash_update_status (state->boot_splash,
+ status);
}
static void
-on_change_mode (state_t *state,
- const char *mode)
-{
- if (state->boot_splash == NULL)
- {
- ply_trace ("no splash set");
- return;
- }
-
- ply_trace ("updating mode to '%s'", mode);
- if (strcmp (mode, "boot-up") == 0)
- state->mode = PLY_BOOT_SPLASH_MODE_BOOT_UP;
- else if (strcmp (mode, "shutdown") == 0)
- state->mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN;
- else if (strcmp (mode, "updates") == 0)
- state->mode = PLY_BOOT_SPLASH_MODE_UPDATES;
- else
- return;
-
- if (!ply_boot_splash_show (state->boot_splash, state->mode))
- {
- ply_trace ("failed to update splash");
- return;
- }
+on_change_mode (state_t *state,
+ const char *mode)
+{
+ if (state->boot_splash == NULL) {
+ ply_trace ("no splash set");
+ return;
+ }
+
+ ply_trace ("updating mode to '%s'", mode);
+ if (strcmp (mode, "boot-up") == 0)
+ state->mode = PLY_BOOT_SPLASH_MODE_BOOT_UP;
+ else if (strcmp (mode, "shutdown") == 0)
+ state->mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN;
+ else if (strcmp (mode, "updates") == 0)
+ state->mode = PLY_BOOT_SPLASH_MODE_UPDATES;
+ else
+ return;
+
+ if (!ply_boot_splash_show (state->boot_splash, state->mode)) {
+ ply_trace ("failed to update splash");
+ return;
+ }
}
static void
-on_system_update (state_t *state,
- int progress)
+on_system_update (state_t *state,
+ int progress)
{
- if (state->boot_splash == NULL)
- {
- ply_trace ("no splash set");
- return;
- }
+ if (state->boot_splash == NULL) {
+ ply_trace ("no splash set");
+ return;
+ }
- ply_trace ("setting system update to '%i'", progress);
- if (!ply_boot_splash_system_update (state->boot_splash, progress))
- {
- ply_trace ("failed to update splash");
- return;
- }
+ ply_trace ("setting system update to '%i'", progress);
+ if (!ply_boot_splash_system_update (state->boot_splash, progress)) {
+ ply_trace ("failed to update splash");
+ return;
+ }
}
static void
show_messages (state_t *state)
{
- if (state->boot_splash == NULL)
- {
- ply_trace ("not displaying messages, since no boot splash");
- return;
- }
+ if (state->boot_splash == NULL) {
+ ply_trace ("not displaying messages, since no boot splash");
+ return;
+ }
- ply_list_node_t *node = ply_list_get_first_node (state->messages);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- char *message = ply_list_node_get_data (node);
+ ply_list_node_t *node = ply_list_get_first_node (state->messages);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ char *message = ply_list_node_get_data (node);
- ply_trace ("displaying messages");
+ ply_trace ("displaying messages");
- ply_boot_splash_display_message (state->boot_splash, message);
- next_node = ply_list_get_next_node (state->messages, node);
- node = next_node;
- }
+ ply_boot_splash_display_message (state->boot_splash, message);
+ next_node = ply_list_get_next_node (state->messages, node);
+ node = next_node;
+ }
}
static bool
-load_settings (state_t *state,
- const char *path,
- char **theme_path)
+load_settings (state_t *state,
+ const char *path,
+ char **theme_path)
{
- ply_key_file_t *key_file = NULL;
- const char *delay_string;
- bool settings_loaded = false;
- const char *splash_string;
+ ply_key_file_t *key_file = NULL;
+ const char *delay_string;
+ bool settings_loaded = false;
+ const char *splash_string;
- ply_trace ("Trying to load %s", path);
- key_file = ply_key_file_new (path);
+ ply_trace ("Trying to load %s", path);
+ key_file = ply_key_file_new (path);
- if (!ply_key_file_load (key_file))
- goto out;
+ if (!ply_key_file_load (key_file))
+ goto out;
- splash_string = ply_key_file_get_value (key_file, "Daemon", "Theme");
+ splash_string = ply_key_file_get_value (key_file, "Daemon", "Theme");
- if (splash_string == NULL)
- goto out;
+ if (splash_string == NULL)
+ goto out;
- asprintf (theme_path,
- PLYMOUTH_THEME_PATH "%s/%s.plymouth",
- splash_string, splash_string);
+ asprintf (theme_path,
+ PLYMOUTH_THEME_PATH "%s/%s.plymouth",
+ splash_string, splash_string);
- if (isnan (state->splash_delay))
- {
- delay_string = ply_key_file_get_value (key_file, "Daemon", "ShowDelay");
+ if (isnan (state->splash_delay)) {
+ delay_string = ply_key_file_get_value (key_file, "Daemon", "ShowDelay");
- if (delay_string != NULL)
- {
- state->splash_delay = atof (delay_string);
- ply_trace ("Splash delay is set to %lf", state->splash_delay);
+ if (delay_string != NULL) {
+ state->splash_delay = atof (delay_string);
+ ply_trace ("Splash delay is set to %lf", state->splash_delay);
+ }
}
- }
- settings_loaded = true;
+ settings_loaded = true;
out:
- ply_key_file_free (key_file);
+ ply_key_file_free (key_file);
- return settings_loaded;
+ return settings_loaded;
}
static void
show_detailed_splash (state_t *state)
{
- ply_boot_splash_t *splash;
+ ply_boot_splash_t *splash;
- if (state->boot_splash != NULL)
- return;
+ if (state->boot_splash != NULL)
+ return;
- ply_trace ("Showing detailed splash screen");
- splash = show_theme (state, NULL);
+ ply_trace ("Showing detailed splash screen");
+ splash = show_theme (state, NULL);
- if (splash == NULL)
- {
- ply_trace ("Could not start detailed splash screen, this could be a problem.");
- return;
- }
+ if (splash == NULL) {
+ ply_trace ("Could not start detailed splash screen, this could be a problem.");
+ return;
+ }
- state->boot_splash = splash;
- update_display (state);
+ state->boot_splash = splash;
+ update_display (state);
}
static const char *
command_line_get_string_after_prefix (const char *command_line,
const char *prefix)
{
- char *argument;
+ char *argument;
- argument = strstr (command_line, prefix);
+ argument = strstr (command_line, prefix);
- if (argument == NULL)
- return NULL;
+ if (argument == NULL)
+ return NULL;
- if (argument == command_line ||
- argument[-1] == ' ')
- return argument + strlen (prefix);
+ if (argument == command_line ||
+ argument[-1] == ' ')
+ return argument + strlen (prefix);
- return NULL;
+ return NULL;
}
static bool
command_line_has_argument (const char *command_line,
const char *argument)
{
- const char *string;
+ const char *string;
- string = command_line_get_string_after_prefix (command_line, argument);
+ string = command_line_get_string_after_prefix (command_line, argument);
- if (string == NULL)
- return false;
+ if (string == NULL)
+ return false;
- if (!isspace ((int) string[0]) && string[0] != '\0')
- return false;
+ if (!isspace ((int) string[0]) && string[0] != '\0')
+ return false;
- return true;
+ return true;
}
static void
find_override_splash (state_t *state)
{
- const char *splash_string;
+ const char *splash_string;
- if (state->override_splash_path != NULL)
- return;
+ if (state->override_splash_path != NULL)
+ return;
- splash_string = command_line_get_string_after_prefix (state->kernel_command_line,
- "plymouth.splash=");
+ splash_string = command_line_get_string_after_prefix (state->kernel_command_line,
+ "plymouth.splash=");
- if (splash_string != NULL)
- {
- const char *end;
- int length;
+ if (splash_string != NULL) {
+ const char *end;
+ int length;
- end = splash_string + strcspn (splash_string, " \n");
- length = end - splash_string;
+ end = splash_string + strcspn (splash_string, " \n");
+ length = end - splash_string;
- ply_trace ("Splash is configured to be '%*.*s'", length, length, splash_string);
+ ply_trace ("Splash is configured to be '%*.*s'", length, length, splash_string);
- asprintf (&state->override_splash_path,
- PLYMOUTH_THEME_PATH "%*.*s/%*.*s.plymouth",
- length, length, splash_string, length, length, splash_string);
- }
+ asprintf (&state->override_splash_path,
+ PLYMOUTH_THEME_PATH "%*.*s/%*.*s.plymouth",
+ length, length, splash_string, length, length, splash_string);
+ }
- if (isnan (state->splash_delay))
- {
- const char *delay_string;
+ if (isnan (state->splash_delay)) {
+ const char *delay_string;
- delay_string = command_line_get_string_after_prefix (state->kernel_command_line, "plymouth.splash-delay=");
+ delay_string = command_line_get_string_after_prefix (state->kernel_command_line, "plymouth.splash-delay=");
- if (delay_string != NULL)
- state->splash_delay = atof (delay_string);
- }
+ if (delay_string != NULL)
+ state->splash_delay = atof (delay_string);
+ }
}
static void
find_system_default_splash (state_t *state)
{
- if (state->system_default_splash_path != NULL)
- return;
+ if (state->system_default_splash_path != NULL)
+ return;
- if (!load_settings (state, PLYMOUTH_CONF_DIR "plymouthd.conf", &state->system_default_splash_path))
- {
- ply_trace ("failed to load " PLYMOUTH_CONF_DIR "plymouthd.conf");
- return;
- }
+ if (!load_settings (state, PLYMOUTH_CONF_DIR "plymouthd.conf", &state->system_default_splash_path)) {
+ ply_trace ("failed to load " PLYMOUTH_CONF_DIR "plymouthd.conf");
+ return;
+ }
- ply_trace ("System configured theme file is '%s'", state->system_default_splash_path);
+ ply_trace ("System configured theme file is '%s'", state->system_default_splash_path);
}
static void
find_distribution_default_splash (state_t *state)
{
- if (state->distribution_default_splash_path != NULL)
- return;
+ if (state->distribution_default_splash_path != NULL)
+ return;
- if (!load_settings (state, PLYMOUTH_POLICY_DIR "plymouthd.defaults", &state->distribution_default_splash_path))
- {
- ply_trace ("failed to load " PLYMOUTH_POLICY_DIR "plymouthd.defaults");
- return;
- }
+ if (!load_settings (state, PLYMOUTH_POLICY_DIR "plymouthd.defaults", &state->distribution_default_splash_path)) {
+ ply_trace ("failed to load " PLYMOUTH_POLICY_DIR "plymouthd.defaults");
+ return;
+ }
- ply_trace ("Distribution default theme file is '%s'", state->distribution_default_splash_path);
+ ply_trace ("Distribution default theme file is '%s'", state->distribution_default_splash_path);
}
static void
show_default_splash (state_t *state)
{
- if (state->boot_splash != NULL)
- return;
-
- ply_trace ("Showing splash screen");
- if (state->override_splash_path != NULL)
- {
- ply_trace ("Trying override splash at '%s'", state->override_splash_path);
- state->boot_splash = show_theme (state, state->override_splash_path);
- }
-
- if (state->boot_splash == NULL &&
- state->system_default_splash_path != NULL)
- {
- ply_trace ("Trying system default splash");
- state->boot_splash = show_theme (state, state->system_default_splash_path);
- }
-
- if (state->boot_splash == NULL &&
- state->distribution_default_splash_path != NULL)
- {
- ply_trace ("Trying distribution default splash");
- state->boot_splash = show_theme (state, state->distribution_default_splash_path);
- }
-
- if (state->boot_splash == NULL)
- {
- ply_trace ("Trying old scheme for default splash");
- state->boot_splash = show_theme (state, PLYMOUTH_THEME_PATH "default.plymouth");
- }
-
- if (state->boot_splash == NULL)
- {
- ply_trace ("Could not start default splash screen,"
- "showing text splash screen");
- state->boot_splash = show_theme (state, PLYMOUTH_THEME_PATH "text/text.plymouth");
- }
-
- if (state->boot_splash == NULL)
- {
- ply_trace ("Could not start text splash screen,"
- "showing built-in splash screen");
- state->boot_splash = show_theme (state, NULL);
- }
-
- if (state->boot_splash == NULL)
- {
- ply_error ("plymouthd: could not start boot splash: %m");
- return;
- }
-
- update_display (state);
+ if (state->boot_splash != NULL)
+ return;
+
+ ply_trace ("Showing splash screen");
+ if (state->override_splash_path != NULL) {
+ ply_trace ("Trying override splash at '%s'", state->override_splash_path);
+ state->boot_splash = show_theme (state, state->override_splash_path);
+ }
+
+ if (state->boot_splash == NULL &&
+ state->system_default_splash_path != NULL) {
+ ply_trace ("Trying system default splash");
+ state->boot_splash = show_theme (state, state->system_default_splash_path);
+ }
+
+ if (state->boot_splash == NULL &&
+ state->distribution_default_splash_path != NULL) {
+ ply_trace ("Trying distribution default splash");
+ state->boot_splash = show_theme (state, state->distribution_default_splash_path);
+ }
+
+ if (state->boot_splash == NULL) {
+ ply_trace ("Trying old scheme for default splash");
+ state->boot_splash = show_theme (state, PLYMOUTH_THEME_PATH "default.plymouth");
+ }
+
+ if (state->boot_splash == NULL) {
+ ply_trace ("Could not start default splash screen,"
+ "showing text splash screen");
+ state->boot_splash = show_theme (state, PLYMOUTH_THEME_PATH "text/text.plymouth");
+ }
+
+ if (state->boot_splash == NULL) {
+ ply_trace ("Could not start text splash screen,"
+ "showing built-in splash screen");
+ state->boot_splash = show_theme (state, NULL);
+ }
+
+ if (state->boot_splash == NULL) {
+ ply_error ("plymouthd: could not start boot splash: %m");
+ return;
+ }
+
+ update_display (state);
}
static void
cancel_pending_delayed_show (state_t *state)
{
- if (isnan (state->splash_delay))
- return;
+ if (isnan (state->splash_delay))
+ return;
- ply_event_loop_stop_watching_for_timeout (state->loop,
- (ply_event_loop_timeout_handler_t)
- show_splash,
- state);
- state->splash_delay = NAN;
+ ply_event_loop_stop_watching_for_timeout (state->loop,
+ (ply_event_loop_timeout_handler_t)
+ show_splash,
+ state);
+ state->splash_delay = NAN;
}
static void
-on_ask_for_password (state_t *state,
- const char *prompt,
+on_ask_for_password (state_t *state,
+ const char *prompt,
ply_trigger_t *answer)
{
- ply_entry_trigger_t *entry_trigger;
-
- if (state->boot_splash == NULL)
- {
- /* Waiting to be shown, boot splash will
- * arrive shortly so just sit tight
- */
- if (state->is_shown)
- {
- bool has_open_seats;
-
- cancel_pending_delayed_show (state);
-
- has_open_seats = ply_device_manager_has_open_seats (state->device_manager);
-
- if (has_open_seats)
- {
- ply_trace ("seats open now, showing splash immediately");
- show_splash (state);
- }
- else
- {
- ply_trace ("splash still coming up, waiting a bit");
- }
- }
- else
- {
- /* No splash, client will have to get password */
- ply_trace ("no splash loaded, replying immediately with no password");
- ply_trigger_pull (answer, NULL);
- return;
+ ply_entry_trigger_t *entry_trigger;
+
+ if (state->boot_splash == NULL) {
+ /* Waiting to be shown, boot splash will
+ * arrive shortly so just sit tight
+ */
+ if (state->is_shown) {
+ bool has_open_seats;
+
+ cancel_pending_delayed_show (state);
+
+ has_open_seats = ply_device_manager_has_open_seats (state->device_manager);
+
+ if (has_open_seats) {
+ ply_trace ("seats open now, showing splash immediately");
+ show_splash (state);
+ } else {
+ ply_trace ("splash still coming up, waiting a bit");
+ }
+ } else {
+ /* No splash, client will have to get password */
+ ply_trace ("no splash loaded, replying immediately with no password");
+ ply_trigger_pull (answer, NULL);
+ return;
+ }
}
- }
- entry_trigger = calloc (1, sizeof (ply_entry_trigger_t));
- entry_trigger->type = PLY_ENTRY_TRIGGER_TYPE_PASSWORD;
- entry_trigger->prompt = prompt;
- entry_trigger->trigger = answer;
- ply_trace ("queuing password request with boot splash");
- ply_list_append_data (state->entry_triggers, entry_trigger);
- update_display (state);
+ entry_trigger = calloc (1, sizeof(ply_entry_trigger_t));
+ entry_trigger->type = PLY_ENTRY_TRIGGER_TYPE_PASSWORD;
+ entry_trigger->prompt = prompt;
+ entry_trigger->trigger = answer;
+ ply_trace ("queuing password request with boot splash");
+ ply_list_append_data (state->entry_triggers, entry_trigger);
+ update_display (state);
}
static void
-on_ask_question (state_t *state,
- const char *prompt,
+on_ask_question (state_t *state,
+ const char *prompt,
ply_trigger_t *answer)
{
- ply_entry_trigger_t *entry_trigger;
+ ply_entry_trigger_t *entry_trigger;
- entry_trigger = calloc (1, sizeof (ply_entry_trigger_t));
- entry_trigger->type = PLY_ENTRY_TRIGGER_TYPE_QUESTION;
- entry_trigger->prompt = prompt;
- entry_trigger->trigger = answer;
- ply_trace ("queuing question with boot splash");
- ply_list_append_data (state->entry_triggers, entry_trigger);
- update_display (state);
+ entry_trigger = calloc (1, sizeof(ply_entry_trigger_t));
+ entry_trigger->type = PLY_ENTRY_TRIGGER_TYPE_QUESTION;
+ entry_trigger->prompt = prompt;
+ entry_trigger->trigger = answer;
+ ply_trace ("queuing question with boot splash");
+ ply_list_append_data (state->entry_triggers, entry_trigger);
+ update_display (state);
}
static void
-on_display_message (state_t *state,
- const char *message)
+on_display_message (state_t *state,
+ const char *message)
{
- if (state->boot_splash != NULL)
- {
- ply_trace ("displaying message %s", message);
- ply_boot_splash_display_message (state->boot_splash, message);
- }
- else
- ply_trace ("not displaying message %s as no splash", message);
- ply_list_append_data (state->messages, strdup(message));
-}
-
-static void
-on_hide_message (state_t *state,
- const char *message)
-{
- ply_list_node_t *node;
-
- ply_trace ("hiding message %s", message);
-
- node = ply_list_get_first_node (state->messages);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- char *list_message;
-
- list_message = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (state->messages, node);
-
- if (strcmp (list_message, message) == 0)
- {
- free (list_message);
- ply_list_remove_node (state->messages, node);
- ply_boot_splash_hide_message (state->boot_splash, message);
+ if (state->boot_splash != NULL) {
+ ply_trace ("displaying message %s", message);
+ ply_boot_splash_display_message (state->boot_splash, message);
+ } else {
+ ply_trace ("not displaying message %s as no splash", message);
}
- node = next_node;
- }
+ ply_list_append_data (state->messages, strdup (message));
}
static void
-on_watch_for_keystroke (state_t *state,
- const char *keys,
- ply_trigger_t *trigger)
+on_hide_message (state_t *state,
+ const char *message)
{
- ply_keystroke_watch_t *keystroke_trigger =
- calloc (1, sizeof (ply_keystroke_watch_t));
- ply_trace ("watching for keystroke");
- keystroke_trigger->keys = keys;
- keystroke_trigger->trigger = trigger;
- ply_list_append_data (state->keystroke_triggers, keystroke_trigger);
+ ply_list_node_t *node;
+
+ ply_trace ("hiding message %s", message);
+
+ node = ply_list_get_first_node (state->messages);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ char *list_message;
+
+ list_message = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (state->messages, node);
+
+ if (strcmp (list_message, message) == 0) {
+ free (list_message);
+ ply_list_remove_node (state->messages, node);
+ ply_boot_splash_hide_message (state->boot_splash, message);
+ }
+ node = next_node;
+ }
}
static void
-on_ignore_keystroke (state_t *state,
- const char *keys)
+on_watch_for_keystroke (state_t *state,
+ const char *keys,
+ ply_trigger_t *trigger)
{
- ply_list_node_t *node;
+ ply_keystroke_watch_t *keystroke_trigger =
+ calloc (1, sizeof(ply_keystroke_watch_t));
- ply_trace ("ignoring for keystroke");
+ ply_trace ("watching for keystroke");
+ keystroke_trigger->keys = keys;
+ keystroke_trigger->trigger = trigger;
+ ply_list_append_data (state->keystroke_triggers, keystroke_trigger);
+}
- for (node = ply_list_get_first_node (state->keystroke_triggers); node;
- node = ply_list_get_next_node (state->keystroke_triggers, node))
- {
- ply_keystroke_watch_t* keystroke_trigger = ply_list_node_get_data (node);
- if ((!keystroke_trigger->keys && !keys) ||
- (keystroke_trigger->keys && keys && strcmp(keystroke_trigger->keys, keys)==0))
- {
- ply_trigger_pull (keystroke_trigger->trigger, NULL);
- ply_list_remove_node (state->keystroke_triggers, node);
- return;
+static void
+on_ignore_keystroke (state_t *state,
+ const char *keys)
+{
+ ply_list_node_t *node;
+
+ ply_trace ("ignoring for keystroke");
+
+ for (node = ply_list_get_first_node (state->keystroke_triggers); node;
+ node = ply_list_get_next_node (state->keystroke_triggers, node)) {
+ ply_keystroke_watch_t *keystroke_trigger = ply_list_node_get_data (node);
+ if ((!keystroke_trigger->keys && !keys) ||
+ (keystroke_trigger->keys && keys && strcmp (keystroke_trigger->keys, keys) == 0)) {
+ ply_trigger_pull (keystroke_trigger->trigger, NULL);
+ ply_list_remove_node (state->keystroke_triggers, node);
+ return;
+ }
}
- }
}
static void
on_progress_pause (state_t *state)
{
- ply_trace ("pausing progress");
- ply_progress_pause (state->progress);
+ ply_trace ("pausing progress");
+ ply_progress_pause (state->progress);
}
static void
on_progress_unpause (state_t *state)
{
- ply_trace ("unpausing progress");
- ply_progress_unpause (state->progress);
+ ply_trace ("unpausing progress");
+ ply_progress_unpause (state->progress);
}
static void
on_newroot (state_t *state,
const char *root_dir)
{
- ply_trace ("new root mounted at \"%s\", switching to it", root_dir);
- chdir(root_dir);
- chroot(".");
- chdir("/");
- ply_progress_load_cache (state->progress, get_cache_file_for_mode (state->mode));
- if (state->boot_splash != NULL)
- ply_boot_splash_root_mounted (state->boot_splash);
+ ply_trace ("new root mounted at \"%s\", switching to it", root_dir);
+ chdir (root_dir);
+ chroot (".");
+ chdir ("/");
+ ply_progress_load_cache (state->progress, get_cache_file_for_mode (state->mode));
+ if (state->boot_splash != NULL)
+ ply_boot_splash_root_mounted (state->boot_splash);
}
static const char *
get_cache_file_for_mode (ply_mode_t mode)
{
- const char *filename;
-
- switch ((int)mode)
- {
- case PLY_MODE_BOOT:
- filename = BOOT_DURATION_FILE;
- break;
- case PLY_MODE_SHUTDOWN:
- filename = SHUTDOWN_DURATION_FILE;
- break;
- case PLY_MODE_UPDATES:
- filename = NULL;
- break;
- default:
- ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__);
- abort ();
- break;
- }
-
- ply_trace ("returning cache file '%s'", filename);
- return filename;
+ const char *filename;
+
+ switch ((int) mode) {
+ case PLY_MODE_BOOT:
+ filename = BOOT_DURATION_FILE;
+ break;
+ case PLY_MODE_SHUTDOWN:
+ filename = SHUTDOWN_DURATION_FILE;
+ break;
+ case PLY_MODE_UPDATES:
+ filename = NULL;
+ break;
+ default:
+ ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__);
+ abort ();
+ break;
+ }
+
+ ply_trace ("returning cache file '%s'", filename);
+ return filename;
}
static const char *
get_log_file_for_state (state_t *state)
{
- const char *filename;
-
- switch ((int)state->mode)
- {
- case PLY_MODE_BOOT:
- if (state->no_boot_log)
- filename = NULL;
- else
- filename = PLYMOUTH_LOG_DIRECTORY "/boot.log";
- break;
- case PLY_MODE_SHUTDOWN:
- case PLY_MODE_UPDATES:
- filename = _PATH_DEVNULL;
- break;
- default:
- ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__);
- abort ();
- break;
- }
-
- ply_trace ("returning log file '%s'", filename);
- return filename;
+ const char *filename;
+
+ switch ((int) state->mode) {
+ case PLY_MODE_BOOT:
+ if (state->no_boot_log)
+ filename = NULL;
+ else
+ filename = PLYMOUTH_LOG_DIRECTORY "/boot.log";
+ break;
+ case PLY_MODE_SHUTDOWN:
+ case PLY_MODE_UPDATES:
+ filename = _PATH_DEVNULL;
+ break;
+ default:
+ ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__);
+ abort ();
+ break;
+ }
+
+ ply_trace ("returning log file '%s'", filename);
+ return filename;
}
static const char *
get_log_spool_file_for_mode (ply_mode_t mode)
{
- const char *filename;
-
- switch ((int)mode)
- {
- case PLY_MODE_BOOT:
- filename = PLYMOUTH_SPOOL_DIRECTORY "/boot.log";
- break;
- case PLY_MODE_SHUTDOWN:
- case PLY_MODE_UPDATES:
- filename = NULL;
- break;
- default:
- ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__);
- abort ();
- break;
- }
+ const char *filename;
+
+ switch ((int) mode) {
+ case PLY_MODE_BOOT:
+ filename = PLYMOUTH_SPOOL_DIRECTORY "/boot.log";
+ break;
+ case PLY_MODE_SHUTDOWN:
+ case PLY_MODE_UPDATES:
+ filename = NULL;
+ break;
+ default:
+ ply_error ("Unhandled case in %s line %d\n", __FILE__, __LINE__);
+ abort ();
+ break;
+ }
- ply_trace ("returning spool file '%s'", filename);
- return filename;
+ ply_trace ("returning spool file '%s'", filename);
+ return filename;
}
static void
spool_error (state_t *state)
{
- const char *logfile;
- const char *logspool;
+ const char *logfile;
+ const char *logspool;
- ply_trace ("spooling error for viewer");
+ ply_trace ("spooling error for viewer");
- logfile = get_log_file_for_state (state);
- logspool = get_log_spool_file_for_mode (state->mode);
+ logfile = get_log_file_for_state (state);
+ logspool = get_log_spool_file_for_mode (state->mode);
- if (logfile != NULL && logspool != NULL)
- {
- unlink (logspool);
+ if (logfile != NULL && logspool != NULL) {
+ unlink (logspool);
- ply_create_file_link (logfile, logspool);
- }
+ ply_create_file_link (logfile, logspool);
+ }
}
static void
prepare_logging (state_t *state)
{
- const char *logfile;
+ const char *logfile;
- if (!state->system_initialized)
- {
- ply_trace ("not preparing logging yet, system not initialized");
- return;
- }
+ if (!state->system_initialized) {
+ ply_trace ("not preparing logging yet, system not initialized");
+ return;
+ }
- if (state->session == NULL)
- {
- ply_trace ("not preparing logging, no session");
- return;
- }
+ if (state->session == NULL) {
+ ply_trace ("not preparing logging, no session");
+ return;
+ }
- logfile = get_log_file_for_state (state);
- if (logfile != NULL)
- {
- bool log_opened;
- ply_trace ("opening log '%s'", logfile);
+ logfile = get_log_file_for_state (state);
+ if (logfile != NULL) {
+ bool log_opened;
+ ply_trace ("opening log '%s'", logfile);
- log_opened = ply_terminal_session_open_log (state->session, logfile);
+ log_opened = ply_terminal_session_open_log (state->session, logfile);
- if (!log_opened)
- ply_trace ("failed to open log: %m");
+ if (!log_opened)
+ ply_trace ("failed to open log: %m");
- if (state->number_of_errors > 0)
- spool_error (state);
- }
+ if (state->number_of_errors > 0)
+ spool_error (state);
+ }
}
static void
on_system_initialized (state_t *state)
{
- ply_trace ("system now initialized, opening log");
- state->system_initialized = true;
+ ply_trace ("system now initialized, opening log");
+ state->system_initialized = true;
- prepare_logging (state);
+ prepare_logging (state);
}
static void
on_error (state_t *state)
{
- ply_trace ("encountered error during boot up");
+ ply_trace ("encountered error during boot up");
- if (state->system_initialized && state->number_of_errors == 0)
- spool_error (state);
- else
- ply_trace ("not spooling because number of errors %d", state->number_of_errors);
+ if (state->system_initialized && state->number_of_errors == 0)
+ spool_error (state);
+ else
+ ply_trace ("not spooling because number of errors %d", state->number_of_errors);
- state->number_of_errors++;
+ state->number_of_errors++;
}
static bool
plymouth_should_ignore_show_splash_calls (state_t *state)
{
- const char *init_string;
- size_t length;
+ const char *init_string;
+ size_t length;
- ply_trace ("checking if plymouth should be running");
- if (state->mode != PLY_MODE_BOOT || command_line_has_argument (state->kernel_command_line, "plymouth.force-splash"))
- return false;
+ ply_trace ("checking if plymouth should be running");
+ if (state->mode != PLY_MODE_BOOT || command_line_has_argument (state->kernel_command_line, "plymouth.force-splash"))
+ return false;
- if (command_line_has_argument (state->kernel_command_line, "plymouth.ignore-show-splash"))
- return true;
+ if (command_line_has_argument (state->kernel_command_line, "plymouth.ignore-show-splash"))
+ return true;
- init_string = command_line_get_string_after_prefix (state->kernel_command_line, "init=");
+ init_string = command_line_get_string_after_prefix (state->kernel_command_line, "init=");
- if (init_string)
- {
- length = strcspn (init_string, " \n");
- if (length > 2 && ply_string_has_prefix (init_string + length - 2, "sh"))
- return true;
- }
+ if (init_string) {
+ length = strcspn (init_string, " \n");
+ if (length > 2 && ply_string_has_prefix (init_string + length - 2, "sh"))
+ return true;
+ }
- return false;
+ return false;
}
static bool
plymouth_should_show_default_splash (state_t *state)
{
- ply_trace ("checking if plymouth should show default splash");
+ ply_trace ("checking if plymouth should show default splash");
- const char const *strings[] = {
- "single", "1", "s", "S", "-S", NULL
- };
- int i;
+ const char const *strings[] = {
+ "single", "1", "s", "S", "-S", NULL
+ };
+ int i;
- if (state->should_force_details)
- return false;
+ if (state->should_force_details)
+ return false;
- for (i = 0; strings[i] != NULL; i++)
- {
- if (command_line_has_argument (state->kernel_command_line, strings[i]))
- {
- ply_trace ("no default splash because kernel command line has option \"%s\"", strings[i]);
- return false;
+ for (i = 0; strings[i] != NULL; i++) {
+ if (command_line_has_argument (state->kernel_command_line, strings[i])) {
+ ply_trace ("no default splash because kernel command line has option \"%s\"", strings[i]);
+ return false;
+ }
}
- }
- if (command_line_has_argument (state->kernel_command_line, "splash=verbose"))
- {
- ply_trace ("no default splash because kernel command line has option \"splash=verbose\"");
- return false;
- }
+ if (command_line_has_argument (state->kernel_command_line, "splash=verbose")) {
+ ply_trace ("no default splash because kernel command line has option \"splash=verbose\"");
+ return false;
+ }
- if (command_line_has_argument (state->kernel_command_line, "rhgb"))
- {
- ply_trace ("using default splash because kernel command line has option \"rhgb\"");
- return true;
- }
+ if (command_line_has_argument (state->kernel_command_line, "rhgb")) {
+ ply_trace ("using default splash because kernel command line has option \"rhgb\"");
+ return true;
+ }
- if (command_line_has_argument (state->kernel_command_line, "splash"))
- {
- ply_trace ("using default splash because kernel command line has option \"splash\"");
- return true;
- }
+ if (command_line_has_argument (state->kernel_command_line, "splash")) {
+ ply_trace ("using default splash because kernel command line has option \"splash\"");
+ return true;
+ }
- if (command_line_has_argument (state->kernel_command_line, "splash=silent"))
- {
- ply_trace ("using default splash because kernel command line has option \"splash=slient\"");
- return true;
- }
+ if (command_line_has_argument (state->kernel_command_line, "splash=silent")) {
+ ply_trace ("using default splash because kernel command line has option \"splash=slient\"");
+ return true;
+ }
- ply_trace ("no default splash because kernel command line lacks \"splash\" or \"rhgb\"");
- return false;
+ ply_trace ("no default splash because kernel command line lacks \"splash\" or \"rhgb\"");
+ return false;
}
static void
on_show_splash (state_t *state)
{
- bool has_open_seats;
+ bool has_open_seats;
- if (state->is_shown)
- {
- ply_trace ("show splash called while already shown");
- return;
- }
+ if (state->is_shown) {
+ ply_trace ("show splash called while already shown");
+ return;
+ }
- if (state->is_inactive)
- {
- ply_trace ("show splash called while inactive");
- return;
- }
+ if (state->is_inactive) {
+ ply_trace ("show splash called while inactive");
+ return;
+ }
- if (plymouth_should_ignore_show_splash_calls (state))
- {
- ply_trace ("show splash called while ignoring show splash calls");
- dump_details_and_quit_splash (state);
- return;
- }
+ if (plymouth_should_ignore_show_splash_calls (state)) {
+ ply_trace ("show splash called while ignoring show splash calls");
+ dump_details_and_quit_splash (state);
+ return;
+ }
- state->is_shown = true;
- has_open_seats = ply_device_manager_has_open_seats (state->device_manager);
+ state->is_shown = true;
+ has_open_seats = ply_device_manager_has_open_seats (state->device_manager);
- if (!state->is_attached && state->should_be_attached && has_open_seats)
- attach_to_running_session (state);
+ if (!state->is_attached && state->should_be_attached && has_open_seats)
+ attach_to_running_session (state);
- if (has_open_seats)
- {
- ply_trace ("at least one seat already open, so loading splash");
- show_splash (state);
- }
- else
- {
- ply_trace ("no seats available to show splash on, waiting...");
- }
+ if (has_open_seats) {
+ ply_trace ("at least one seat already open, so loading splash");
+ show_splash (state);
+ } else {
+ ply_trace ("no seats available to show splash on, waiting...");
+ }
}
static void
on_seat_removed (state_t *state,
ply_seat_t *seat)
{
- ply_keyboard_t *keyboard;
+ ply_keyboard_t *keyboard;
- keyboard = ply_seat_get_keyboard (seat);
+ keyboard = ply_seat_get_keyboard (seat);
- ply_trace ("no longer listening for keystrokes");
- ply_keyboard_remove_input_handler (keyboard,
- (ply_keyboard_input_handler_t)
- on_keyboard_input);
- ply_trace ("no longer listening for escape");
- ply_keyboard_remove_escape_handler (keyboard,
- (ply_keyboard_escape_handler_t)
- on_escape_pressed);
- ply_trace ("no longer listening for backspace");
- ply_keyboard_remove_backspace_handler (keyboard,
- (ply_keyboard_backspace_handler_t)
- on_backspace);
- ply_trace ("no longer listening for enter");
- ply_keyboard_remove_enter_handler (keyboard,
- (ply_keyboard_enter_handler_t)
- on_enter);
+ ply_trace ("no longer listening for keystrokes");
+ ply_keyboard_remove_input_handler (keyboard,
+ (ply_keyboard_input_handler_t)
+ on_keyboard_input);
+ ply_trace ("no longer listening for escape");
+ ply_keyboard_remove_escape_handler (keyboard,
+ (ply_keyboard_escape_handler_t)
+ on_escape_pressed);
+ ply_trace ("no longer listening for backspace");
+ ply_keyboard_remove_backspace_handler (keyboard,
+ (ply_keyboard_backspace_handler_t)
+ on_backspace);
+ ply_trace ("no longer listening for enter");
+ ply_keyboard_remove_enter_handler (keyboard,
+ (ply_keyboard_enter_handler_t)
+ on_enter);
- if (state->boot_splash != NULL)
- ply_boot_splash_detach_from_seat (state->boot_splash, seat);
+ if (state->boot_splash != NULL)
+ ply_boot_splash_detach_from_seat (state->boot_splash, seat);
}
static void
show_splash (state_t *state)
{
- if (state->boot_splash != NULL)
- return;
-
- if (!isnan (state->splash_delay))
- {
- double now, running_time;
+ if (state->boot_splash != NULL)
+ return;
+
+ if (!isnan (state->splash_delay)) {
+ double now, running_time;
+
+ now = ply_get_timestamp ();
+ running_time = now - state->start_time;
+ if (state->splash_delay > running_time) {
+ double time_left = state->splash_delay - running_time;
+
+ ply_trace ("delaying show splash for %lf seconds",
+ time_left);
+ ply_event_loop_stop_watching_for_timeout (state->loop,
+ (ply_event_loop_timeout_handler_t)
+ show_splash,
+ state);
+ ply_event_loop_watch_for_timeout (state->loop,
+ time_left,
+ (ply_event_loop_timeout_handler_t)
+ show_splash,
+ state);
+ return;
+ }
+ }
- now = ply_get_timestamp ();
- running_time = now - state->start_time;
- if (state->splash_delay > running_time)
- {
- double time_left = state->splash_delay - running_time;
-
- ply_trace ("delaying show splash for %lf seconds",
- time_left);
- ply_event_loop_stop_watching_for_timeout (state->loop,
- (ply_event_loop_timeout_handler_t)
- show_splash,
- state);
- ply_event_loop_watch_for_timeout (state->loop,
- time_left,
- (ply_event_loop_timeout_handler_t)
- show_splash,
- state);
- return;
- }
- }
-
- if (plymouth_should_show_default_splash (state))
- {
- show_default_splash (state);
- state->showing_details = false;
- }
- else
- {
- show_detailed_splash (state);
- state->showing_details = true;
- }
+ if (plymouth_should_show_default_splash (state)) {
+ show_default_splash (state);
+ state->showing_details = false;
+ } else {
+ show_detailed_splash (state);
+ state->showing_details = true;
+ }
}
static void
on_seat_added (state_t *state,
ply_seat_t *seat)
{
- ply_keyboard_t *keyboard;
+ ply_keyboard_t *keyboard;
- if (state->is_shown)
- {
- if (state->boot_splash == NULL)
- {
- ply_trace ("seat added before splash loaded, so loading splash now");
- show_splash (state);
- }
- else
- {
- ply_trace ("seat added after splash loaded, so attaching to splash");
- ply_boot_splash_attach_to_seat (state->boot_splash, seat);
+ if (state->is_shown) {
+ if (state->boot_splash == NULL) {
+ ply_trace ("seat added before splash loaded, so loading splash now");
+ show_splash (state);
+ } else {
+ ply_trace ("seat added after splash loaded, so attaching to splash");
+ ply_boot_splash_attach_to_seat (state->boot_splash, seat);
+ }
}
- }
-
- keyboard = ply_seat_get_keyboard (seat);
-
- ply_trace ("listening for keystrokes");
- ply_keyboard_add_input_handler (keyboard,
- (ply_keyboard_input_handler_t)
- on_keyboard_input, state);
- ply_trace ("listening for escape");
- ply_keyboard_add_escape_handler (keyboard,
- (ply_keyboard_escape_handler_t)
- on_escape_pressed, state);
- ply_trace ("listening for backspace");
- ply_keyboard_add_backspace_handler (keyboard,
- (ply_keyboard_backspace_handler_t)
- on_backspace, state);
- ply_trace ("listening for enter");
- ply_keyboard_add_enter_handler (keyboard,
- (ply_keyboard_enter_handler_t)
- on_enter, state);
+ keyboard = ply_seat_get_keyboard (seat);
+
+ ply_trace ("listening for keystrokes");
+ ply_keyboard_add_input_handler (keyboard,
+ (ply_keyboard_input_handler_t)
+ on_keyboard_input, state);
+ ply_trace ("listening for escape");
+ ply_keyboard_add_escape_handler (keyboard,
+ (ply_keyboard_escape_handler_t)
+ on_escape_pressed, state);
+ ply_trace ("listening for backspace");
+ ply_keyboard_add_backspace_handler (keyboard,
+ (ply_keyboard_backspace_handler_t)
+ on_backspace, state);
+ ply_trace ("listening for enter");
+ ply_keyboard_add_enter_handler (keyboard,
+ (ply_keyboard_enter_handler_t)
+ on_enter, state);
}
static void
-load_devices (state_t *state,
- ply_device_manager_flags_t flags)
+load_devices (state_t *state,
+ ply_device_manager_flags_t flags)
{
- state->device_manager = ply_device_manager_new (state->default_tty, flags);
- state->local_console_terminal = ply_device_manager_get_default_terminal (state->device_manager);
+ state->device_manager = ply_device_manager_new (state->default_tty, flags);
+ state->local_console_terminal = ply_device_manager_get_default_terminal (state->device_manager);
- ply_device_manager_watch_seats (state->device_manager,
- (ply_seat_added_handler_t)
- on_seat_added,
- (ply_seat_removed_handler_t)
- on_seat_removed,
- state);
+ ply_device_manager_watch_seats (state->device_manager,
+ (ply_seat_added_handler_t)
+ on_seat_added,
+ (ply_seat_removed_handler_t)
+ on_seat_removed,
+ state);
}
static void
quit_splash (state_t *state)
{
- ply_trace ("quiting splash");
- if (state->boot_splash != NULL)
- {
- ply_trace ("freeing splash");
- ply_boot_splash_free (state->boot_splash);
- state->boot_splash = NULL;
- }
+ ply_trace ("quiting splash");
+ if (state->boot_splash != NULL) {
+ ply_trace ("freeing splash");
+ ply_boot_splash_free (state->boot_splash);
+ state->boot_splash = NULL;
+ }
- ply_device_manager_deactivate_keyboards (state->device_manager);
+ ply_device_manager_deactivate_keyboards (state->device_manager);
- if (state->local_console_terminal != NULL)
- {
- if (!state->should_retain_splash)
- {
- ply_trace ("Not retaining splash, so deallocating VT");
- ply_terminal_deactivate_vt (state->local_console_terminal);
- ply_terminal_close (state->local_console_terminal);
+ if (state->local_console_terminal != NULL) {
+ if (!state->should_retain_splash) {
+ ply_trace ("Not retaining splash, so deallocating VT");
+ ply_terminal_deactivate_vt (state->local_console_terminal);
+ ply_terminal_close (state->local_console_terminal);
+ }
}
- }
- detach_from_running_session (state);
+ detach_from_running_session (state);
}
static void
hide_splash (state_t *state)
{
- state->is_shown = false;
+ state->is_shown = false;
- cancel_pending_delayed_show (state);
+ cancel_pending_delayed_show (state);
- if (state->boot_splash == NULL)
- return;
+ if (state->boot_splash == NULL)
+ return;
- ply_boot_splash_hide (state->boot_splash);
+ ply_boot_splash_hide (state->boot_splash);
- if (state->local_console_terminal != NULL)
- ply_terminal_set_mode (state->local_console_terminal, PLY_TERMINAL_MODE_TEXT);
+ if (state->local_console_terminal != NULL)
+ ply_terminal_set_mode (state->local_console_terminal, PLY_TERMINAL_MODE_TEXT);
}
static void
dump_details_and_quit_splash (state_t *state)
{
- state->showing_details = false;
- toggle_between_splash_and_details (state);
+ state->showing_details = false;
+ toggle_between_splash_and_details (state);
- ply_device_manager_deactivate_renderers (state->device_manager);
- hide_splash (state);
- quit_splash (state);
+ ply_device_manager_deactivate_renderers (state->device_manager);
+ hide_splash (state);
+ quit_splash (state);
}
static void
on_hide_splash (state_t *state)
{
- if (state->is_inactive)
- return;
+ if (state->is_inactive)
+ return;
- if (state->boot_splash == NULL)
- return;
+ if (state->boot_splash == NULL)
+ return;
- ply_trace ("hiding boot splash");
- dump_details_and_quit_splash (state);
+ ply_trace ("hiding boot splash");
+ dump_details_and_quit_splash (state);
}
#ifdef PLY_ENABLE_DEPRECATED_GDM_TRANSITION
static void
tell_gdm_to_transition (void)
{
- int fd;
+ int fd;
- fd = creat ("/var/spool/gdm/force-display-on-active-vt", 0644);
- close (fd);
+ fd = creat ("/var/spool/gdm/force-display-on-active-vt", 0644);
+ close (fd);
}
#endif
static void
quit_program (state_t *state)
{
- ply_trace ("cleaning up devices");
- ply_device_manager_free (state->device_manager);
+ ply_trace ("cleaning up devices");
+ ply_device_manager_free (state->device_manager);
- ply_trace ("exiting event loop");
- ply_event_loop_exit (state->loop, 0);
+ ply_trace ("exiting event loop");
+ ply_event_loop_exit (state->loop, 0);
- if (pid_file != NULL)
- {
- unlink (pid_file);
- free (pid_file);
- pid_file = NULL;
- }
+ if (pid_file != NULL) {
+ unlink (pid_file);
+ free (pid_file);
+ pid_file = NULL;
+ }
#ifdef PLY_ENABLE_DEPRECATED_GDM_TRANSITION
- if (state->should_retain_splash &&
- state->mode == PLY_MODE_BOOT)
- {
- tell_gdm_to_transition ();
- }
+ if (state->should_retain_splash &&
+ state->mode == PLY_MODE_BOOT)
+ tell_gdm_to_transition ();
+
#endif
- if (state->deactivate_trigger != NULL)
- {
- ply_trigger_pull (state->deactivate_trigger, NULL);
- state->deactivate_trigger = NULL;
- }
- if (state->quit_trigger != NULL)
- {
- ply_trigger_pull (state->quit_trigger, NULL);
- state->quit_trigger = NULL;
- }
+ if (state->deactivate_trigger != NULL) {
+ ply_trigger_pull (state->deactivate_trigger, NULL);
+ state->deactivate_trigger = NULL;
+ }
+ if (state->quit_trigger != NULL) {
+ ply_trigger_pull (state->quit_trigger, NULL);
+ state->quit_trigger = NULL;
+ }
}
static void
deactivate_splash (state_t *state)
{
- assert (!state->is_inactive);
+ assert (!state->is_inactive);
- ply_device_manager_deactivate_renderers (state->device_manager);
+ ply_device_manager_deactivate_renderers (state->device_manager);
- detach_from_running_session (state);
+ detach_from_running_session (state);
- if (state->local_console_terminal != NULL)
- {
- ply_trace ("deactivating terminal");
- ply_terminal_stop_watching_for_vt_changes (state->local_console_terminal);
- ply_terminal_set_buffered_input (state->local_console_terminal);
- ply_terminal_close (state->local_console_terminal);
- }
+ if (state->local_console_terminal != NULL) {
+ ply_trace ("deactivating terminal");
+ ply_terminal_stop_watching_for_vt_changes (state->local_console_terminal);
+ ply_terminal_set_buffered_input (state->local_console_terminal);
+ ply_terminal_close (state->local_console_terminal);
+ }
- /* do not let any tty opened where we could write after deactivate */
- if (command_line_has_argument (state->kernel_command_line, "plymouth.debug"))
- {
- ply_logger_close_file (ply_logger_get_error_default ());
- }
+ /* do not let any tty opened where we could write after deactivate */
+ if (command_line_has_argument (state->kernel_command_line, "plymouth.debug"))
+ ply_logger_close_file (ply_logger_get_error_default ());
- state->is_inactive = true;
+ state->is_inactive = true;
- ply_trigger_pull (state->deactivate_trigger, NULL);
- state->deactivate_trigger = NULL;
+ ply_trigger_pull (state->deactivate_trigger, NULL);
+ state->deactivate_trigger = NULL;
}
static void
on_boot_splash_idle (state_t *state)
{
- ply_trace ("boot splash idle");
-
- /* In the case where we've received both a deactivate command and a
- * quit command, the quit command takes precedence.
- */
- if (state->quit_trigger != NULL)
- {
- if (!state->should_retain_splash)
- {
- ply_trace ("hiding splash");
- ply_device_manager_deactivate_renderers (state->device_manager);
- hide_splash (state);
+ ply_trace ("boot splash idle");
+
+ /* In the case where we've received both a deactivate command and a
+ * quit command, the quit command takes precedence.
+ */
+ if (state->quit_trigger != NULL) {
+ if (!state->should_retain_splash) {
+ ply_trace ("hiding splash");
+ ply_device_manager_deactivate_renderers (state->device_manager);
+ hide_splash (state);
+ }
+
+ ply_trace ("quitting splash");
+ quit_splash (state);
+ ply_trace ("quitting program");
+ quit_program (state);
+ } else if (state->deactivate_trigger != NULL) {
+ ply_trace ("deactivating splash");
+ deactivate_splash (state);
}
-
- ply_trace ("quitting splash");
- quit_splash (state);
- ply_trace ("quitting program");
- quit_program (state);
- }
- else if (state->deactivate_trigger != NULL)
- {
- ply_trace ("deactivating splash");
- deactivate_splash (state);
- }
}
static void
on_deactivate (state_t *state,
ply_trigger_t *deactivate_trigger)
{
- if (state->is_inactive)
- {
- ply_trigger_pull (deactivate_trigger, NULL);
- return;
- }
-
- if (state->deactivate_trigger != NULL)
- {
- ply_trigger_add_handler (state->deactivate_trigger,
- (ply_trigger_handler_t)
- ply_trigger_pull,
- deactivate_trigger);
- return;
- }
-
- state->deactivate_trigger = deactivate_trigger;
-
- ply_trace ("deactivating");
- cancel_pending_delayed_show (state);
-
- ply_device_manager_deactivate_keyboards (state->device_manager);
-
- if (state->boot_splash != NULL)
- {
- ply_boot_splash_become_idle (state->boot_splash,
- (ply_boot_splash_on_idle_handler_t)
- on_boot_splash_idle,
- state);
- }
- else
- {
- ply_trace ("deactivating splash");
- deactivate_splash (state);
- }
+ if (state->is_inactive) {
+ ply_trigger_pull (deactivate_trigger, NULL);
+ return;
+ }
+
+ if (state->deactivate_trigger != NULL) {
+ ply_trigger_add_handler (state->deactivate_trigger,
+ (ply_trigger_handler_t)
+ ply_trigger_pull,
+ deactivate_trigger);
+ return;
+ }
+
+ state->deactivate_trigger = deactivate_trigger;
+
+ ply_trace ("deactivating");
+ cancel_pending_delayed_show (state);
+
+ ply_device_manager_deactivate_keyboards (state->device_manager);
+
+ if (state->boot_splash != NULL) {
+ ply_boot_splash_become_idle (state->boot_splash,
+ (ply_boot_splash_on_idle_handler_t)
+ on_boot_splash_idle,
+ state);
+ } else {
+ ply_trace ("deactivating splash");
+ deactivate_splash (state);
+ }
}
static void
on_reactivate (state_t *state)
{
- if (!state->is_inactive)
- return;
+ if (!state->is_inactive)
+ return;
- if (state->local_console_terminal != NULL)
- {
- ply_terminal_open (state->local_console_terminal);
- ply_terminal_watch_for_vt_changes (state->local_console_terminal);
- ply_terminal_set_unbuffered_input (state->local_console_terminal);
- ply_terminal_ignore_mode_changes (state->local_console_terminal, false);
- }
+ if (state->local_console_terminal != NULL) {
+ ply_terminal_open (state->local_console_terminal);
+ ply_terminal_watch_for_vt_changes (state->local_console_terminal);
+ ply_terminal_set_unbuffered_input (state->local_console_terminal);
+ ply_terminal_ignore_mode_changes (state->local_console_terminal, false);
+ }
- if ((state->session != NULL) && state->should_be_attached)
- {
- ply_trace ("reactivating terminal session");
- attach_to_running_session (state);
- }
+ if ((state->session != NULL) && state->should_be_attached) {
+ ply_trace ("reactivating terminal session");
+ attach_to_running_session (state);
+ }
- ply_device_manager_activate_keyboards (state->device_manager);
- ply_device_manager_activate_renderers (state->device_manager);
+ ply_device_manager_activate_keyboards (state->device_manager);
+ ply_device_manager_activate_renderers (state->device_manager);
- state->is_inactive = false;
+ state->is_inactive = false;
- update_display (state);
+ update_display (state);
}
static void
@@ -1301,748 +1220,686 @@ on_quit (state_t *state,
bool retain_splash,
ply_trigger_t *quit_trigger)
{
- ply_trace ("quitting (retain splash: %s)", retain_splash? "true" : "false");
-
- if (state->quit_trigger != NULL)
- {
- ply_trace ("quit trigger already pending, so chaining to it");
- ply_trigger_add_handler (state->quit_trigger,
- (ply_trigger_handler_t)
- ply_trigger_pull,
- quit_trigger);
- return;
- }
-
- if (state->system_initialized)
- {
- ply_trace ("system initialized so saving boot-duration file");
- ply_create_directory (PLYMOUTH_TIME_DIRECTORY);
- ply_progress_save_cache (state->progress,
- get_cache_file_for_mode (state->mode));
- }
- else
- {
- ply_trace ("system not initialized so skipping saving boot-duration file");
- }
- state->quit_trigger = quit_trigger;
- state->should_retain_splash = retain_splash;
+ ply_trace ("quitting (retain splash: %s)", retain_splash ? "true" : "false");
+
+ if (state->quit_trigger != NULL) {
+ ply_trace ("quit trigger already pending, so chaining to it");
+ ply_trigger_add_handler (state->quit_trigger,
+ (ply_trigger_handler_t)
+ ply_trigger_pull,
+ quit_trigger);
+ return;
+ }
+
+ if (state->system_initialized) {
+ ply_trace ("system initialized so saving boot-duration file");
+ ply_create_directory (PLYMOUTH_TIME_DIRECTORY);
+ ply_progress_save_cache (state->progress,
+ get_cache_file_for_mode (state->mode));
+ } else {
+ ply_trace ("system not initialized so skipping saving boot-duration file");
+ }
+ state->quit_trigger = quit_trigger;
+ state->should_retain_splash = retain_splash;
#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
- tell_systemd_to_stop_printing_details (state);
+ tell_systemd_to_stop_printing_details (state);
#endif
- ply_trace ("closing log");
- if (state->session != NULL)
- ply_terminal_session_close_log (state->session);
-
- ply_device_manager_deactivate_keyboards (state->device_manager);
-
- ply_trace ("unloading splash");
- if (state->is_inactive && !retain_splash)
- {
- /* We've been deactivated and X failed to start
- */
- dump_details_and_quit_splash (state);
- quit_program (state);
- }
- else if (state->boot_splash != NULL)
- {
- ply_boot_splash_become_idle (state->boot_splash,
- (ply_boot_splash_on_idle_handler_t)
- on_boot_splash_idle,
- state);
- }
- else
- quit_program (state);
+ ply_trace ("closing log");
+ if (state->session != NULL)
+ ply_terminal_session_close_log (state->session);
+
+ ply_device_manager_deactivate_keyboards (state->device_manager);
+
+ ply_trace ("unloading splash");
+ if (state->is_inactive && !retain_splash) {
+ /* We've been deactivated and X failed to start
+ */
+ dump_details_and_quit_splash (state);
+ quit_program (state);
+ } else if (state->boot_splash != NULL) {
+ ply_boot_splash_become_idle (state->boot_splash,
+ (ply_boot_splash_on_idle_handler_t)
+ on_boot_splash_idle,
+ state);
+ } else {
+ quit_program (state);
+ }
}
static bool
on_has_active_vt (state_t *state)
{
- if (state->local_console_terminal != NULL)
- return ply_terminal_is_active (state->local_console_terminal);
- else
- return false;
+ if (state->local_console_terminal != NULL)
+ return ply_terminal_is_active (state->local_console_terminal);
+ else
+ return false;
}
static ply_boot_server_t *
start_boot_server (state_t *state)
{
- ply_boot_server_t *server;
-
- server = ply_boot_server_new ((ply_boot_server_update_handler_t) on_update,
- (ply_boot_server_change_mode_handler_t) on_change_mode,
- (ply_boot_server_system_update_handler_t) on_system_update,
- (ply_boot_server_ask_for_password_handler_t) on_ask_for_password,
- (ply_boot_server_ask_question_handler_t) on_ask_question,
- (ply_boot_server_display_message_handler_t) on_display_message,
- (ply_boot_server_hide_message_handler_t) on_hide_message,
- (ply_boot_server_watch_for_keystroke_handler_t) on_watch_for_keystroke,
- (ply_boot_server_ignore_keystroke_handler_t) on_ignore_keystroke,
- (ply_boot_server_progress_pause_handler_t) on_progress_pause,
- (ply_boot_server_progress_unpause_handler_t) on_progress_unpause,
- (ply_boot_server_show_splash_handler_t) on_show_splash,
- (ply_boot_server_hide_splash_handler_t) on_hide_splash,
- (ply_boot_server_newroot_handler_t) on_newroot,
- (ply_boot_server_system_initialized_handler_t) on_system_initialized,
- (ply_boot_server_error_handler_t) on_error,
- (ply_boot_server_deactivate_handler_t) on_deactivate,
- (ply_boot_server_reactivate_handler_t) on_reactivate,
- (ply_boot_server_quit_handler_t) on_quit,
- (ply_boot_server_has_active_vt_handler_t) on_has_active_vt,
- state);
-
- if (!ply_boot_server_listen (server))
- {
- ply_save_errno ();
- ply_boot_server_free (server);
- ply_restore_errno ();
- return NULL;
- }
-
- ply_boot_server_attach_to_event_loop (server, state->loop);
-
- return server;
+ ply_boot_server_t *server;
+
+ server = ply_boot_server_new ((ply_boot_server_update_handler_t) on_update,
+ (ply_boot_server_change_mode_handler_t) on_change_mode,
+ (ply_boot_server_system_update_handler_t) on_system_update,
+ (ply_boot_server_ask_for_password_handler_t) on_ask_for_password,
+ (ply_boot_server_ask_question_handler_t) on_ask_question,
+ (ply_boot_server_display_message_handler_t) on_display_message,
+ (ply_boot_server_hide_message_handler_t) on_hide_message,
+ (ply_boot_server_watch_for_keystroke_handler_t) on_watch_for_keystroke,
+ (ply_boot_server_ignore_keystroke_handler_t) on_ignore_keystroke,
+ (ply_boot_server_progress_pause_handler_t) on_progress_pause,
+ (ply_boot_server_progress_unpause_handler_t) on_progress_unpause,
+ (ply_boot_server_show_splash_handler_t) on_show_splash,
+ (ply_boot_server_hide_splash_handler_t) on_hide_splash,
+ (ply_boot_server_newroot_handler_t) on_newroot,
+ (ply_boot_server_system_initialized_handler_t) on_system_initialized,
+ (ply_boot_server_error_handler_t) on_error,
+ (ply_boot_server_deactivate_handler_t) on_deactivate,
+ (ply_boot_server_reactivate_handler_t) on_reactivate,
+ (ply_boot_server_quit_handler_t) on_quit,
+ (ply_boot_server_has_active_vt_handler_t) on_has_active_vt,
+ state);
+
+ if (!ply_boot_server_listen (server)) {
+ ply_save_errno ();
+ ply_boot_server_free (server);
+ ply_restore_errno ();
+ return NULL;
+ }
+
+ ply_boot_server_attach_to_event_loop (server, state->loop);
+
+ return server;
}
static void
update_display (state_t *state)
{
- if (!state->boot_splash) return;
-
- ply_list_node_t *node;
- node = ply_list_get_first_node (state->entry_triggers);
- if (node)
- {
- ply_entry_trigger_t* entry_trigger = ply_list_node_get_data (node);
- if (entry_trigger->type == PLY_ENTRY_TRIGGER_TYPE_PASSWORD)
- {
- int bullets = ply_utf8_string_get_length (ply_buffer_get_bytes (state->entry_buffer),
- ply_buffer_get_size (state->entry_buffer));
- bullets = MAX(0, bullets);
- ply_boot_splash_display_password (state->boot_splash,
- entry_trigger->prompt,
- bullets);
- }
- else if (entry_trigger->type == PLY_ENTRY_TRIGGER_TYPE_QUESTION)
- {
- ply_boot_splash_display_question (state->boot_splash,
- entry_trigger->prompt,
- ply_buffer_get_bytes (state->entry_buffer));
- }
- else {
- ply_trace("unkown entry type");
+ if (!state->boot_splash) return;
+
+ ply_list_node_t *node;
+ node = ply_list_get_first_node (state->entry_triggers);
+ if (node) {
+ ply_entry_trigger_t *entry_trigger = ply_list_node_get_data (node);
+ if (entry_trigger->type == PLY_ENTRY_TRIGGER_TYPE_PASSWORD) {
+ int bullets = ply_utf8_string_get_length (ply_buffer_get_bytes (state->entry_buffer),
+ ply_buffer_get_size (state->entry_buffer));
+ bullets = MAX (0, bullets);
+ ply_boot_splash_display_password (state->boot_splash,
+ entry_trigger->prompt,
+ bullets);
+ } else if (entry_trigger->type == PLY_ENTRY_TRIGGER_TYPE_QUESTION) {
+ ply_boot_splash_display_question (state->boot_splash,
+ entry_trigger->prompt,
+ ply_buffer_get_bytes (state->entry_buffer));
+ } else {
+ ply_trace ("unkown entry type");
+ }
+ } else {
+ ply_boot_splash_display_normal (state->boot_splash);
}
- }
- else
- {
- ply_boot_splash_display_normal (state->boot_splash);
- }
-
}
static void
toggle_between_splash_and_details (state_t *state)
{
- ply_trace ("toggling between splash and details");
- if (state->boot_splash != NULL)
- {
- ply_trace ("hiding and freeing current splash");
- hide_splash (state);
- ply_boot_splash_free (state->boot_splash);
- state->boot_splash = NULL;
- }
-
- if (!state->showing_details)
- {
- show_detailed_splash (state);
- state->showing_details = true;
- }
- else
- {
- show_default_splash (state);
- state->showing_details = false;
- }
+ ply_trace ("toggling between splash and details");
+ if (state->boot_splash != NULL) {
+ ply_trace ("hiding and freeing current splash");
+ hide_splash (state);
+ ply_boot_splash_free (state->boot_splash);
+ state->boot_splash = NULL;
+ }
+
+ if (!state->showing_details) {
+ show_detailed_splash (state);
+ state->showing_details = true;
+ } else {
+ show_default_splash (state);
+ state->showing_details = false;
+ }
}
static void
on_escape_pressed (state_t *state)
{
- ply_trace ("escape key pressed");
- toggle_between_splash_and_details (state);
+ ply_trace ("escape key pressed");
+ toggle_between_splash_and_details (state);
}
static void
-on_keyboard_input (state_t *state,
- const char *keyboard_input,
- size_t character_size)
-{
- ply_list_node_t *node;
- node = ply_list_get_first_node (state->entry_triggers);
- if (node)
- { /* \x3 (ETX) is Ctrl+C and \x4 (EOT) is Ctrl+D */
- if (character_size == 1 && ( keyboard_input[0] == '\x3' || keyboard_input[0] == '\x4' ))
- {
- ply_entry_trigger_t* entry_trigger = ply_list_node_get_data (node);
- ply_trigger_pull (entry_trigger->trigger, "\x3");
- ply_buffer_clear (state->entry_buffer);
- ply_list_remove_node (state->entry_triggers, node);
- free (entry_trigger);
- }
- else
- {
- ply_buffer_append_bytes (state->entry_buffer, keyboard_input, character_size);
- }
- update_display (state);
- }
- else
- {
- for (node = ply_list_get_first_node (state->keystroke_triggers); node;
- node = ply_list_get_next_node (state->keystroke_triggers, node))
- {
- ply_keystroke_watch_t* keystroke_trigger = ply_list_node_get_data (node);
- if (!keystroke_trigger->keys || strstr(keystroke_trigger->keys, keyboard_input)) /* assume strstr works on utf8 arrays */
- {
- ply_trigger_pull (keystroke_trigger->trigger, keyboard_input);
- ply_list_remove_node (state->keystroke_triggers, node);
- free(keystroke_trigger);
- return;
- }
+on_keyboard_input (state_t *state,
+ const char *keyboard_input,
+ size_t character_size)
+{
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (state->entry_triggers);
+ if (node) { /* \x3 (ETX) is Ctrl+C and \x4 (EOT) is Ctrl+D */
+ if (character_size == 1 && (keyboard_input[0] == '\x3' || keyboard_input[0] == '\x4')) {
+ ply_entry_trigger_t *entry_trigger = ply_list_node_get_data (node);
+ ply_trigger_pull (entry_trigger->trigger, "\x3");
+ ply_buffer_clear (state->entry_buffer);
+ ply_list_remove_node (state->entry_triggers, node);
+ free (entry_trigger);
+ } else {
+ ply_buffer_append_bytes (state->entry_buffer, keyboard_input, character_size);
+ }
+ update_display (state);
+ } else {
+ for (node = ply_list_get_first_node (state->keystroke_triggers); node;
+ node = ply_list_get_next_node (state->keystroke_triggers, node)) {
+ ply_keystroke_watch_t *keystroke_trigger = ply_list_node_get_data (node);
+ if (!keystroke_trigger->keys || strstr (keystroke_trigger->keys, keyboard_input)) { /* assume strstr works on utf8 arrays */
+ ply_trigger_pull (keystroke_trigger->trigger, keyboard_input);
+ ply_list_remove_node (state->keystroke_triggers, node);
+ free (keystroke_trigger);
+ return;
+ }
+ }
+ return;
}
- return;
- }
}
static void
-on_backspace (state_t *state)
+on_backspace (state_t *state)
{
- ssize_t bytes_to_remove;
- ssize_t previous_character_size;
- const char *bytes;
- size_t size;
- ply_list_node_t *node = ply_list_get_first_node (state->entry_triggers);
- if (!node) return;
+ ssize_t bytes_to_remove;
+ ssize_t previous_character_size;
+ const char *bytes;
+ size_t size;
+ ply_list_node_t *node = ply_list_get_first_node (state->entry_triggers);
- bytes = ply_buffer_get_bytes (state->entry_buffer);
- size = ply_buffer_get_size (state->entry_buffer);
+ if (!node) return;
- bytes_to_remove = MIN(size, PLY_UTF8_CHARACTER_SIZE_MAX);
- while ((previous_character_size = ply_utf8_character_get_size (bytes + size - bytes_to_remove, bytes_to_remove)) < bytes_to_remove)
- {
- if (previous_character_size > 0)
- bytes_to_remove -= previous_character_size;
- else
- bytes_to_remove--;
- }
+ bytes = ply_buffer_get_bytes (state->entry_buffer);
+ size = ply_buffer_get_size (state->entry_buffer);
- ply_buffer_remove_bytes_at_end (state->entry_buffer, bytes_to_remove);
- update_display (state);
+ bytes_to_remove = MIN (size, PLY_UTF8_CHARACTER_SIZE_MAX);
+ while ((previous_character_size = ply_utf8_character_get_size (bytes + size - bytes_to_remove, bytes_to_remove)) < bytes_to_remove) {
+ if (previous_character_size > 0)
+ bytes_to_remove -= previous_character_size;
+ else
+ bytes_to_remove--;
+ }
+
+ ply_buffer_remove_bytes_at_end (state->entry_buffer, bytes_to_remove);
+ update_display (state);
}
static void
-on_enter (state_t *state,
- const char *line)
-{
- ply_list_node_t *node;
- node = ply_list_get_first_node (state->entry_triggers);
- if (node)
- {
- ply_entry_trigger_t* entry_trigger = ply_list_node_get_data (node);
- const char* reply_text = ply_buffer_get_bytes (state->entry_buffer);
- ply_trigger_pull (entry_trigger->trigger, reply_text);
- ply_buffer_clear (state->entry_buffer);
- ply_list_remove_node (state->entry_triggers, node);
- free (entry_trigger);
- update_display (state);
- }
- else
- {
- for (node = ply_list_get_first_node (state->keystroke_triggers); node;
- node = ply_list_get_next_node (state->keystroke_triggers, node))
- {
- ply_keystroke_watch_t* keystroke_trigger = ply_list_node_get_data (node);
- if (!keystroke_trigger->keys || strstr(keystroke_trigger->keys, "\n")) /* assume strstr works on utf8 arrays */
- {
- ply_trigger_pull (keystroke_trigger->trigger, line);
- ply_list_remove_node (state->keystroke_triggers, node);
- free(keystroke_trigger);
- return;
- }
+on_enter (state_t *state,
+ const char *line)
+{
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (state->entry_triggers);
+ if (node) {
+ ply_entry_trigger_t *entry_trigger = ply_list_node_get_data (node);
+ const char *reply_text = ply_buffer_get_bytes (state->entry_buffer);
+ ply_trigger_pull (entry_trigger->trigger, reply_text);
+ ply_buffer_clear (state->entry_buffer);
+ ply_list_remove_node (state->entry_triggers, node);
+ free (entry_trigger);
+ update_display (state);
+ } else {
+ for (node = ply_list_get_first_node (state->keystroke_triggers); node;
+ node = ply_list_get_next_node (state->keystroke_triggers, node)) {
+ ply_keystroke_watch_t *keystroke_trigger = ply_list_node_get_data (node);
+ if (!keystroke_trigger->keys || strstr (keystroke_trigger->keys, "\n")) { /* assume strstr works on utf8 arrays */
+ ply_trigger_pull (keystroke_trigger->trigger, line);
+ ply_list_remove_node (state->keystroke_triggers, node);
+ free (keystroke_trigger);
+ return;
+ }
+ }
+ return;
}
- return;
- }
}
static void
attach_splash_to_seats (state_t *state,
ply_boot_splash_t *splash)
{
+ ply_list_t *seats;
+ ply_list_node_t *node;
- ply_list_t *seats;
- ply_list_node_t *node;
-
- seats = ply_device_manager_get_seats (state->device_manager);
- node = ply_list_get_first_node (seats);
- while (node != NULL)
- {
- ply_seat_t *seat;
- ply_list_node_t *next_node;
+ seats = ply_device_manager_get_seats (state->device_manager);
+ node = ply_list_get_first_node (seats);
+ while (node != NULL) {
+ ply_seat_t *seat;
+ ply_list_node_t *next_node;
- seat = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (seats, node);
+ seat = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (seats, node);
- ply_boot_splash_attach_to_seat (splash, seat);
+ ply_boot_splash_attach_to_seat (splash, seat);
- node = next_node;
- }
+ node = next_node;
+ }
}
#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
static void
tell_systemd_to_print_details (state_t *state)
{
- ply_trace ("telling systemd to start printing details");
- if (kill (1, SIGRTMIN + 20) < 0)
- ply_trace ("could not tell systemd to print details: %m");
+ ply_trace ("telling systemd to start printing details");
+ if (kill (1, SIGRTMIN + 20) < 0)
+ ply_trace ("could not tell systemd to print details: %m");
}
static void
tell_systemd_to_stop_printing_details (state_t *state)
{
- ply_trace ("telling systemd to stop printing details");
- if (kill (1, SIGRTMIN + 21) < 0)
- ply_trace ("could not tell systemd to stop printing details: %m");
+ ply_trace ("telling systemd to stop printing details");
+ if (kill (1, SIGRTMIN + 21) < 0)
+ ply_trace ("could not tell systemd to stop printing details: %m");
}
#endif
static ply_boot_splash_t *
load_built_in_theme (state_t *state)
{
- ply_boot_splash_t *splash;
- bool is_loaded;
+ ply_boot_splash_t *splash;
+ bool is_loaded;
- ply_trace ("Loading built-in theme");
+ ply_trace ("Loading built-in theme");
- splash = ply_boot_splash_new ("",
- PLYMOUTH_PLUGIN_PATH,
- state->boot_buffer);
+ splash = ply_boot_splash_new ("",
+ PLYMOUTH_PLUGIN_PATH,
+ state->boot_buffer);
- is_loaded = ply_boot_splash_load_built_in (splash);
+ is_loaded = ply_boot_splash_load_built_in (splash);
- if (!is_loaded)
- {
- ply_save_errno ();
- ply_boot_splash_free (splash);
- ply_restore_errno ();
- return NULL;
- }
+ if (!is_loaded) {
+ ply_save_errno ();
+ ply_boot_splash_free (splash);
+ ply_restore_errno ();
+ return NULL;
+ }
- ply_trace ("attaching plugin to event loop");
- ply_boot_splash_attach_to_event_loop (splash, state->loop);
+ ply_trace ("attaching plugin to event loop");
+ ply_boot_splash_attach_to_event_loop (splash, state->loop);
- ply_trace ("attaching progress to plugin");
- ply_boot_splash_attach_progress (splash, state->progress);
+ ply_trace ("attaching progress to plugin");
+ ply_boot_splash_attach_progress (splash, state->progress);
- return splash;
+ return splash;
}
static ply_boot_splash_t *
load_theme (state_t *state,
const char *theme_path)
{
- ply_boot_splash_t *splash;
- bool is_loaded;
+ ply_boot_splash_t *splash;
+ bool is_loaded;
- ply_trace ("Loading boot splash theme '%s'",
- theme_path);
+ ply_trace ("Loading boot splash theme '%s'",
+ theme_path);
- splash = ply_boot_splash_new (theme_path,
- PLYMOUTH_PLUGIN_PATH,
- state->boot_buffer);
+ splash = ply_boot_splash_new (theme_path,
+ PLYMOUTH_PLUGIN_PATH,
+ state->boot_buffer);
- is_loaded = ply_boot_splash_load (splash);
+ is_loaded = ply_boot_splash_load (splash);
- if (!is_loaded)
- {
- ply_save_errno ();
- ply_boot_splash_free (splash);
- ply_restore_errno ();
- return NULL;
- }
+ if (!is_loaded) {
+ ply_save_errno ();
+ ply_boot_splash_free (splash);
+ ply_restore_errno ();
+ return NULL;
+ }
- ply_trace ("attaching plugin to event loop");
- ply_boot_splash_attach_to_event_loop (splash, state->loop);
+ ply_trace ("attaching plugin to event loop");
+ ply_boot_splash_attach_to_event_loop (splash, state->loop);
- ply_trace ("attaching progress to plugin");
- ply_boot_splash_attach_progress (splash, state->progress);
+ ply_trace ("attaching progress to plugin");
+ ply_boot_splash_attach_progress (splash, state->progress);
- return splash;
+ return splash;
}
static ply_boot_splash_t *
-show_theme (state_t *state,
- const char *theme_path)
+show_theme (state_t *state,
+ const char *theme_path)
{
- ply_boot_splash_mode_t splash_mode;
- ply_boot_splash_t *splash;
+ ply_boot_splash_mode_t splash_mode;
+ ply_boot_splash_t *splash;
- if (theme_path != NULL)
- splash = load_theme (state, theme_path);
- else
- splash = load_built_in_theme (state);
+ if (theme_path != NULL)
+ splash = load_theme (state, theme_path);
+ else
+ splash = load_built_in_theme (state);
- if (splash == NULL)
- return NULL;
+ if (splash == NULL)
+ return NULL;
- attach_splash_to_seats (state, splash);
- ply_device_manager_activate_renderers (state->device_manager);
+ attach_splash_to_seats (state, splash);
+ ply_device_manager_activate_renderers (state->device_manager);
- if (state->mode == PLY_MODE_SHUTDOWN)
- splash_mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN;
- else
- splash_mode = PLY_BOOT_SPLASH_MODE_BOOT_UP;
+ if (state->mode == PLY_MODE_SHUTDOWN)
+ splash_mode = PLY_BOOT_SPLASH_MODE_SHUTDOWN;
+ else
+ splash_mode = PLY_BOOT_SPLASH_MODE_BOOT_UP;
- if (!ply_boot_splash_show (splash, splash_mode))
- {
- ply_save_errno ();
- ply_boot_splash_free (splash);
- ply_restore_errno ();
- return NULL;
- }
+ if (!ply_boot_splash_show (splash, splash_mode)) {
+ ply_save_errno ();
+ ply_boot_splash_free (splash);
+ ply_restore_errno ();
+ return NULL;
+ }
#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
- if (state->is_attached)
- tell_systemd_to_print_details (state);
+ if (state->is_attached)
+ tell_systemd_to_print_details (state);
#endif
- ply_device_manager_activate_keyboards (state->device_manager);
- show_messages (state);
+ ply_device_manager_activate_keyboards (state->device_manager);
+ show_messages (state);
- return splash;
+ return splash;
}
static bool
attach_to_running_session (state_t *state)
{
- ply_terminal_session_t *session;
- ply_terminal_session_flags_t flags;
- bool should_be_redirected;
-
- flags = 0;
+ ply_terminal_session_t *session;
+ ply_terminal_session_flags_t flags;
+ bool should_be_redirected;
- should_be_redirected = !state->no_boot_log;
+ flags = 0;
- if (should_be_redirected)
- flags |= PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE;
+ should_be_redirected = !state->no_boot_log;
- if (state->session == NULL)
- {
- ply_trace ("creating new terminal session");
- session = ply_terminal_session_new (NULL);
+ if (should_be_redirected)
+ flags |= PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE;
- ply_terminal_session_attach_to_event_loop (session, state->loop);
- }
- else
- {
- session = state->session;
- ply_trace ("session already created");
- }
+ if (state->session == NULL) {
+ ply_trace ("creating new terminal session");
+ session = ply_terminal_session_new (NULL);
- if (!ply_terminal_session_attach (session, flags,
- (ply_terminal_session_output_handler_t)
- on_session_output,
- (ply_terminal_session_hangup_handler_t)
- (should_be_redirected? on_session_hangup: NULL),
- -1, state))
- {
- ply_save_errno ();
- ply_terminal_session_free (session);
- ply_buffer_free (state->boot_buffer);
- state->boot_buffer = NULL;
- ply_restore_errno ();
+ ply_terminal_session_attach_to_event_loop (session, state->loop);
+ } else {
+ session = state->session;
+ ply_trace ("session already created");
+ }
- state->is_redirected = false;
- state->is_attached = false;
- return false;
- }
+ if (!ply_terminal_session_attach (session, flags,
+ (ply_terminal_session_output_handler_t)
+ on_session_output,
+ (ply_terminal_session_hangup_handler_t)
+ (should_be_redirected ? on_session_hangup : NULL),
+ -1, state)) {
+ ply_save_errno ();
+ ply_terminal_session_free (session);
+ ply_buffer_free (state->boot_buffer);
+ state->boot_buffer = NULL;
+ ply_restore_errno ();
+
+ state->is_redirected = false;
+ state->is_attached = false;
+ return false;
+ }
- state->is_redirected = should_be_redirected;
- state->is_attached = true;
- state->session = session;
+ state->is_redirected = should_be_redirected;
+ state->is_attached = true;
+ state->session = session;
- return true;
+ return true;
}
static void
detach_from_running_session (state_t *state)
{
- if (state->session == NULL)
- return;
+ if (state->session == NULL)
+ return;
- if (!state->is_attached)
- return;
+ if (!state->is_attached)
+ return;
- ply_trace ("detaching from terminal session");
- ply_terminal_session_detach (state->session);
- state->is_redirected = false;
- state->is_attached = false;
+ ply_trace ("detaching from terminal session");
+ ply_terminal_session_detach (state->session);
+ state->is_redirected = false;
+ state->is_attached = false;
}
static bool
get_kernel_command_line (state_t *state)
{
- int fd;
- const char *remaining_command_line;
- char *key;
+ int fd;
+ const char *remaining_command_line;
+ char *key;
- if (state->kernel_command_line_is_set)
- return true;
+ if (state->kernel_command_line_is_set)
+ return true;
- ply_trace ("opening /proc/cmdline");
- fd = open ("/proc/cmdline", O_RDONLY);
+ ply_trace ("opening /proc/cmdline");
+ fd = open ("/proc/cmdline", O_RDONLY);
- if (fd < 0)
- {
- ply_trace ("couldn't open it: %m");
- return false;
- }
+ if (fd < 0) {
+ ply_trace ("couldn't open it: %m");
+ return false;
+ }
- ply_trace ("reading kernel command line");
- if (read (fd, state->kernel_command_line, sizeof (state->kernel_command_line)) < 0)
- {
- ply_trace ("couldn't read it: %m");
- close (fd);
- return false;
- }
+ ply_trace ("reading kernel command line");
+ if (read (fd, state->kernel_command_line, sizeof(state->kernel_command_line)) < 0) {
+ ply_trace ("couldn't read it: %m");
+ close (fd);
+ return false;
+ }
- /* we now use plymouth.argument for kernel commandline arguments.
- * It used to be plymouth:argument. This bit just rewrites all : to be .
- */
- remaining_command_line = state->kernel_command_line;
- while ((key = strstr (remaining_command_line, "plymouth:")) != NULL)
- {
- char *colon;
+ /* we now use plymouth.argument for kernel commandline arguments.
+ * It used to be plymouth:argument. This bit just rewrites all : to be .
+ */
+ remaining_command_line = state->kernel_command_line;
+ while ((key = strstr (remaining_command_line, "plymouth:")) != NULL) {
+ char *colon;
- colon = key + strlen ("plymouth");
- *colon = '.';
+ colon = key + strlen ("plymouth");
+ *colon = '.';
- remaining_command_line = colon + 1;
- }
- ply_trace ("Kernel command line is: '%s'", state->kernel_command_line);
+ remaining_command_line = colon + 1;
+ }
+ ply_trace ("Kernel command line is: '%s'", state->kernel_command_line);
- close (fd);
+ close (fd);
- state->kernel_command_line_is_set = true;
- return true;
+ state->kernel_command_line_is_set = true;
+ return true;
}
static void
check_verbosity (state_t *state)
{
- const char *stream;
- const char *path;
+ const char *stream;
+ const char *path;
- ply_trace ("checking if tracing should be enabled");
+ ply_trace ("checking if tracing should be enabled");
- stream = command_line_get_string_after_prefix (state->kernel_command_line,
- "plymouth.debug=stream:");
+ stream = command_line_get_string_after_prefix (state->kernel_command_line,
+ "plymouth.debug=stream:");
- path = command_line_get_string_after_prefix (state->kernel_command_line,
- "plymouth.debug=file:");
- if (stream != NULL || path != NULL ||
- command_line_has_argument (state->kernel_command_line, "plymouth.debug"))
- {
- int fd;
+ path = command_line_get_string_after_prefix (state->kernel_command_line,
+ "plymouth.debug=file:");
+ if (stream != NULL || path != NULL ||
+ command_line_has_argument (state->kernel_command_line, "plymouth.debug")) {
+ int fd;
- ply_trace ("tracing should be enabled!");
- if (!ply_is_tracing ())
- ply_toggle_tracing ();
+ ply_trace ("tracing should be enabled!");
+ if (!ply_is_tracing ())
+ ply_toggle_tracing ();
- if (path != NULL && debug_buffer_path == NULL)
- {
- char *end;
+ if (path != NULL && debug_buffer_path == NULL) {
+ char *end;
- debug_buffer_path = strdup (path);
- end = debug_buffer_path + strcspn (debug_buffer_path, " \n");
- *end = '\0';
- }
+ debug_buffer_path = strdup (path);
+ end = debug_buffer_path + strcspn (debug_buffer_path, " \n");
+ *end = '\0';
+ }
- if (debug_buffer == NULL)
- debug_buffer = ply_buffer_new ();
+ if (debug_buffer == NULL)
+ debug_buffer = ply_buffer_new ();
- if (stream != NULL)
- {
- char *end;
- char *stream_copy;
-
- stream_copy = strdup (stream);
- end = stream_copy + strcspn (stream_copy, " \n");
- *end = '\0';
-
- ply_trace ("streaming debug output to %s instead of screen", stream_copy);
- fd = open (stream_copy, O_RDWR | O_NOCTTY | O_CREAT, 0600);
-
- if (fd < 0)
- {
- ply_trace ("could not stream output to %s: %m", stream_copy);
- }
- else
- {
- ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
- }
- free (stream_copy);
- } else {
- const char* device;
- char *file;
+ if (stream != NULL) {
+ char *end;
+ char *stream_copy;
- device = state->default_tty;
+ stream_copy = strdup (stream);
+ end = stream_copy + strcspn (stream_copy, " \n");
+ *end = '\0';
- ply_trace ("redirecting debug output to %s", device);
+ ply_trace ("streaming debug output to %s instead of screen", stream_copy);
+ fd = open (stream_copy, O_RDWR | O_NOCTTY | O_CREAT, 0600);
- if (strncmp (device, "/dev/", strlen ("/dev/")) == 0)
- file = strdup (device);
- else
- asprintf (&file, "/dev/%s", device);
+ if (fd < 0)
+ ply_trace ("could not stream output to %s: %m", stream_copy);
+ else
+ ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
+ free (stream_copy);
+ } else {
+ const char *device;
+ char *file;
- fd = open (file, O_RDWR | O_APPEND);
+ device = state->default_tty;
- if (fd < 0)
- {
- ply_trace ("could not redirected debug output to %s: %m", device);
- }
- else {
- ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
- }
+ ply_trace ("redirecting debug output to %s", device);
- free (file);
- }
- }
- else
- ply_trace ("tracing shouldn't be enabled!");
+ if (strncmp (device, "/dev/", strlen ("/dev/")) == 0)
+ file = strdup (device);
+ else
+ asprintf (&file, "/dev/%s", device);
- if (debug_buffer != NULL)
- {
- if (debug_buffer_path == NULL)
- debug_buffer_path = strdup (PLYMOUTH_LOG_DIRECTORY "/plymouth-debug.log");
+ fd = open (file, O_RDWR | O_APPEND);
+
+ if (fd < 0)
+ ply_trace ("could not redirected debug output to %s: %m", device);
+ else
+ ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
+
+ free (file);
+ }
+ } else {
+ ply_trace ("tracing shouldn't be enabled!");
+ }
- ply_logger_add_filter (ply_logger_get_error_default (),
- (ply_logger_filter_handler_t)
- on_error_message,
- debug_buffer);
+ if (debug_buffer != NULL) {
+ if (debug_buffer_path == NULL)
+ debug_buffer_path = strdup (PLYMOUTH_LOG_DIRECTORY "/plymouth-debug.log");
- }
+ ply_logger_add_filter (ply_logger_get_error_default (),
+ (ply_logger_filter_handler_t)
+ on_error_message,
+ debug_buffer);
+ }
}
static void
check_logging (state_t *state)
{
- bool kernel_no_log;
+ bool kernel_no_log;
- ply_trace ("checking if console messages should be redirected and logged");
+ ply_trace ("checking if console messages should be redirected and logged");
- kernel_no_log = command_line_has_argument (state->kernel_command_line, "plymouth.nolog");
- if (kernel_no_log)
- state->no_boot_log = true;
+ kernel_no_log = command_line_has_argument (state->kernel_command_line, "plymouth.nolog");
+ if (kernel_no_log)
+ state->no_boot_log = true;
- if (state->no_boot_log)
- ply_trace ("logging won't be enabled!");
- else
- ply_trace ("logging will be enabled!");
+ if (state->no_boot_log)
+ ply_trace ("logging won't be enabled!");
+ else
+ ply_trace ("logging will be enabled!");
}
static bool
redirect_standard_io_to_dev_null (void)
{
- int fd;
+ int fd;
- fd = open ("/dev/null", O_RDWR | O_APPEND);
+ fd = open ("/dev/null", O_RDWR | O_APPEND);
- if (fd < 0)
- return false;
+ if (fd < 0)
+ return false;
- dup2 (fd, STDIN_FILENO);
- dup2 (fd, STDOUT_FILENO);
- dup2 (fd, STDERR_FILENO);
+ dup2 (fd, STDIN_FILENO);
+ dup2 (fd, STDOUT_FILENO);
+ dup2 (fd, STDERR_FILENO);
- close (fd);
+ close (fd);
- return true;
+ return true;
}
static const char *
find_fallback_tty (state_t *state)
{
- static const char *tty_list[] =
- {
- "/dev/ttyS0",
- "/dev/hvc0",
- "/dev/xvc0",
- "/dev/ttySG0",
- NULL
- };
- int i;
-
- for (i = 0; tty_list[i] != NULL; i++)
- {
- if (ply_character_device_exists (tty_list[i]))
- return tty_list[i];
- }
+ static const char *tty_list[] =
+ {
+ "/dev/ttyS0",
+ "/dev/hvc0",
+ "/dev/xvc0",
+ "/dev/ttySG0",
+ NULL
+ };
+ int i;
+
+ for (i = 0; tty_list[i] != NULL; i++) {
+ if (ply_character_device_exists (tty_list[i]))
+ return tty_list[i];
+ }
- return state->default_tty;
+ return state->default_tty;
}
static bool
initialize_environment (state_t *state)
{
- ply_trace ("initializing minimal work environment");
+ ply_trace ("initializing minimal work environment");
- if (!get_kernel_command_line (state))
- return false;
+ if (!get_kernel_command_line (state))
+ return false;
- if (!state->default_tty)
- {
- if (getenv ("DISPLAY") != NULL && access (PLYMOUTH_PLUGIN_PATH "renderers/x11.so", F_OK) == 0)
- state->default_tty = "/dev/tty";
- }
- if (!state->default_tty)
- {
- if (state->mode == PLY_MODE_SHUTDOWN)
- {
- state->default_tty = SHUTDOWN_TTY;
- }
- else
- state->default_tty = BOOT_TTY;
+ if (!state->default_tty)
+ if (getenv ("DISPLAY") != NULL && access (PLYMOUTH_PLUGIN_PATH "renderers/x11.so", F_OK) == 0)
+ state->default_tty = "/dev/tty";
+ if (!state->default_tty) {
+ if (state->mode == PLY_MODE_SHUTDOWN)
+ state->default_tty = SHUTDOWN_TTY;
+ else
+ state->default_tty = BOOT_TTY;
- ply_trace ("checking if '%s' exists", state->default_tty);
- if (!ply_character_device_exists (state->default_tty))
- {
- ply_trace ("nope, forcing details mode");
- state->should_force_details = true;
+ ply_trace ("checking if '%s' exists", state->default_tty);
+ if (!ply_character_device_exists (state->default_tty)) {
+ ply_trace ("nope, forcing details mode");
+ state->should_force_details = true;
- state->default_tty = find_fallback_tty (state);
- ply_trace ("going to go with '%s'", state->default_tty);
+ state->default_tty = find_fallback_tty (state);
+ ply_trace ("going to go with '%s'", state->default_tty);
+ }
}
- }
- check_verbosity (state);
- check_logging (state);
+ check_verbosity (state);
+ check_logging (state);
- ply_trace ("source built on %s", __DATE__);
+ ply_trace ("source built on %s", __DATE__);
- state->keystroke_triggers = ply_list_new ();
- state->entry_triggers = ply_list_new ();
- state->entry_buffer = ply_buffer_new();
- state->messages = ply_list_new ();
+ state->keystroke_triggers = ply_list_new ();
+ state->entry_triggers = ply_list_new ();
+ state->entry_buffer = ply_buffer_new ();
+ state->messages = ply_list_new ();
- redirect_standard_io_to_dev_null ();
+ redirect_standard_io_to_dev_null ();
- ply_trace ("Making sure " PLYMOUTH_RUNTIME_DIR " exists");
- if (!ply_create_directory (PLYMOUTH_RUNTIME_DIR))
- ply_trace ("could not create " PLYMOUTH_RUNTIME_DIR ": %m");
+ ply_trace ("Making sure " PLYMOUTH_RUNTIME_DIR " exists");
+ if (!ply_create_directory (PLYMOUTH_RUNTIME_DIR))
+ ply_trace ("could not create " PLYMOUTH_RUNTIME_DIR ": %m");
- ply_trace ("initialized minimal work environment");
- return true;
+ ply_trace ("initialized minimal work environment");
+ return true;
}
static void
@@ -2050,331 +1907,309 @@ on_error_message (ply_buffer_t *debug_buffer,
const void *bytes,
size_t number_of_bytes)
{
- ply_buffer_append_bytes (debug_buffer, bytes, number_of_bytes);
+ ply_buffer_append_bytes (debug_buffer, bytes, number_of_bytes);
}
static void
dump_debug_buffer_to_file (void)
{
- int fd;
- const char *bytes;
- size_t size;
+ int fd;
+ const char *bytes;
+ size_t size;
- fd = open (debug_buffer_path,
- O_WRONLY | O_CREAT | O_TRUNC, 0600);
+ fd = open (debug_buffer_path,
+ O_WRONLY | O_CREAT | O_TRUNC, 0600);
- if (fd < 0)
- return;
+ if (fd < 0)
+ return;
- size = ply_buffer_get_size (debug_buffer);
- bytes = ply_buffer_get_bytes (debug_buffer);
- ply_write (fd, bytes, size);
- close (fd);
+ size = ply_buffer_get_size (debug_buffer);
+ bytes = ply_buffer_get_bytes (debug_buffer);
+ ply_write (fd, bytes, size);
+ close (fd);
}
- #include <termios.h>
- #include <unistd.h>
+#include <termios.h>
+#include <unistd.h>
static void
on_crash (int signum)
{
- struct termios term_attributes;
- int fd;
+ struct termios term_attributes;
+ int fd;
- fd = open ("/dev/tty1", O_RDWR | O_NOCTTY);
- if (fd < 0) fd = open ("/dev/hvc0", O_RDWR | O_NOCTTY);
+ fd = open ("/dev/tty1", O_RDWR | O_NOCTTY);
+ if (fd < 0) fd = open ("/dev/hvc0", O_RDWR | O_NOCTTY);
- ioctl (fd, KDSETMODE, KD_TEXT);
+ ioctl (fd, KDSETMODE, KD_TEXT);
- tcgetattr (fd, &term_attributes);
+ tcgetattr (fd, &term_attributes);
- term_attributes.c_iflag |= BRKINT | IGNPAR | ICRNL | IXON;
- term_attributes.c_oflag |= OPOST;
- term_attributes.c_lflag |= ECHO | ICANON | ISIG | IEXTEN;
+ term_attributes.c_iflag |= BRKINT | IGNPAR | ICRNL | IXON;
+ term_attributes.c_oflag |= OPOST;
+ term_attributes.c_lflag |= ECHO | ICANON | ISIG | IEXTEN;
- tcsetattr (fd, TCSAFLUSH, &term_attributes);
+ tcsetattr (fd, TCSAFLUSH, &term_attributes);
- close (fd);
+ close (fd);
- if (debug_buffer != NULL)
- {
- dump_debug_buffer_to_file ();
- sleep (30);
- }
+ if (debug_buffer != NULL) {
+ dump_debug_buffer_to_file ();
+ sleep (30);
+ }
- if (pid_file != NULL)
- {
- unlink (pid_file);
- free (pid_file);
- pid_file = NULL;
- }
+ if (pid_file != NULL) {
+ unlink (pid_file);
+ free (pid_file);
+ pid_file = NULL;
+ }
- signal (signum, SIG_DFL);
- raise(signum);
+ signal (signum, SIG_DFL);
+ raise (signum);
}
static void
write_pid_file (const char *filename)
{
- FILE *fp;
+ FILE *fp;
- fp = fopen (filename, "w");
- if (fp == NULL)
- {
- ply_error ("could not write pid file %s: %m", filename);
- }
- else
- {
- fprintf (fp, "%d\n", (int) getpid ());
- fclose (fp);
- }
+ fp = fopen (filename, "w");
+ if (fp == NULL) {
+ ply_error ("could not write pid file %s: %m", filename);
+ } else {
+ fprintf (fp, "%d\n", (int) getpid ());
+ fclose (fp);
+ }
}
int
main (int argc,
char **argv)
{
- state_t state = { 0 };
- int exit_code;
- bool should_help = false;
- bool no_boot_log = false;
- bool no_daemon = false;
- bool debug = false;
- bool attach_to_session;
- ply_daemon_handle_t *daemon_handle = NULL;
- char *mode_string = NULL;
- char *kernel_command_line = NULL;
- char *tty = NULL;
- ply_device_manager_flags_t device_manager_flags = PLY_DEVICE_MANAGER_FLAGS_NONE;
-
- state.start_time = ply_get_timestamp ();
- state.command_parser = ply_command_parser_new ("plymouthd", "Splash server");
-
- state.loop = ply_event_loop_get_default ();
-
- ply_command_parser_add_options (state.command_parser,
- "help", "This help message", PLY_COMMAND_OPTION_TYPE_FLAG,
- "attach-to-session", "Redirect console messages from screen to log", PLY_COMMAND_OPTION_TYPE_FLAG,
- "no-daemon", "Do not daemonize", PLY_COMMAND_OPTION_TYPE_FLAG,
- "debug", "Output debugging information", PLY_COMMAND_OPTION_TYPE_FLAG,
- "debug-file", "File to output debugging information to", PLY_COMMAND_OPTION_TYPE_STRING,
- "mode", "Mode is one of: boot, shutdown", PLY_COMMAND_OPTION_TYPE_STRING,
- "pid-file", "Write the pid of the daemon to a file", PLY_COMMAND_OPTION_TYPE_STRING,
- "kernel-command-line", "Fake kernel command line to use", PLY_COMMAND_OPTION_TYPE_STRING,
- "tty", "TTY to use instead of default", PLY_COMMAND_OPTION_TYPE_STRING,
- "no-boot-log", "Do not write boot log file", PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
-
- if (!ply_command_parser_parse_arguments (state.command_parser, state.loop, argv, argc))
- {
- char *help_string;
-
- help_string = ply_command_parser_get_help_string (state.command_parser);
-
- ply_error_without_new_line ("%s", help_string);
-
- free (help_string);
- return EX_USAGE;
- }
-
- ply_command_parser_get_options (state.command_parser,
- "help", &should_help,
- "attach-to-session", &attach_to_session,
- "mode", &mode_string,
- "no-boot-log", &no_boot_log,
- "no-daemon", &no_daemon,
- "debug", &debug,
- "debug-file", &debug_buffer_path,
- "pid-file", &pid_file,
- "tty", &tty,
- "kernel-command-line", &kernel_command_line,
- NULL);
-
- if (should_help)
- {
- char *help_string;
-
- help_string = ply_command_parser_get_help_string (state.command_parser);
-
- if (argc < 2)
- fprintf (stderr, "%s", help_string);
- else
- printf ("%s", help_string);
-
- free (help_string);
- return 0;
- }
-
- if (debug && !ply_is_tracing ())
- ply_toggle_tracing ();
-
- if (mode_string != NULL)
- {
- if (strcmp (mode_string, "shutdown") == 0)
- state.mode = PLY_MODE_SHUTDOWN;
- else if (strcmp (mode_string, "updates") == 0)
- state.mode = PLY_MODE_UPDATES;
- else
- state.mode = PLY_MODE_BOOT;
-
- free (mode_string);
- }
-
- if (tty != NULL)
- {
- state.default_tty = tty;
- }
-
- if (kernel_command_line != NULL)
- {
- strncpy (state.kernel_command_line, kernel_command_line, sizeof (state.kernel_command_line));
- state.kernel_command_line[sizeof (state.kernel_command_line) - 1] = '\0';
- state.kernel_command_line_is_set = true;
- }
-
- if (geteuid () != 0)
- {
- ply_error ("plymouthd must be run as root user");
- return EX_OSERR;
- }
-
- state.no_boot_log = no_boot_log;
-
- chdir ("/");
- signal (SIGPIPE, SIG_IGN);
-
- if (! no_daemon)
- {
- daemon_handle = ply_create_daemon ();
-
- if (daemon_handle == NULL)
- {
- ply_error ("plymouthd: cannot daemonize: %m");
- return EX_UNAVAILABLE;
+ state_t state = { 0 };
+ int exit_code;
+ bool should_help = false;
+ bool no_boot_log = false;
+ bool no_daemon = false;
+ bool debug = false;
+ bool attach_to_session;
+ ply_daemon_handle_t *daemon_handle = NULL;
+ char *mode_string = NULL;
+ char *kernel_command_line = NULL;
+ char *tty = NULL;
+ ply_device_manager_flags_t device_manager_flags = PLY_DEVICE_MANAGER_FLAGS_NONE;
+
+ state.start_time = ply_get_timestamp ();
+ state.command_parser = ply_command_parser_new ("plymouthd", "Splash server");
+
+ state.loop = ply_event_loop_get_default ();
+
+ ply_command_parser_add_options (state.command_parser,
+ "help", "This help message", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "attach-to-session", "Redirect console messages from screen to log", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "no-daemon", "Do not daemonize", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "debug", "Output debugging information", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "debug-file", "File to output debugging information to", PLY_COMMAND_OPTION_TYPE_STRING,
+ "mode", "Mode is one of: boot, shutdown", PLY_COMMAND_OPTION_TYPE_STRING,
+ "pid-file", "Write the pid of the daemon to a file", PLY_COMMAND_OPTION_TYPE_STRING,
+ "kernel-command-line", "Fake kernel command line to use", PLY_COMMAND_OPTION_TYPE_STRING,
+ "tty", "TTY to use instead of default", PLY_COMMAND_OPTION_TYPE_STRING,
+ "no-boot-log", "Do not write boot log file", PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
+
+ if (!ply_command_parser_parse_arguments (state.command_parser, state.loop, argv, argc)) {
+ char *help_string;
+
+ help_string = ply_command_parser_get_help_string (state.command_parser);
+
+ ply_error_without_new_line ("%s", help_string);
+
+ free (help_string);
+ return EX_USAGE;
}
- }
- if (debug)
- debug_buffer = ply_buffer_new ();
+ ply_command_parser_get_options (state.command_parser,
+ "help", &should_help,
+ "attach-to-session", &attach_to_session,
+ "mode", &mode_string,
+ "no-boot-log", &no_boot_log,
+ "no-daemon", &no_daemon,
+ "debug", &debug,
+ "debug-file", &debug_buffer_path,
+ "pid-file", &pid_file,
+ "tty", &tty,
+ "kernel-command-line", &kernel_command_line,
+ NULL);
+
+ if (should_help) {
+ char *help_string;
+
+ help_string = ply_command_parser_get_help_string (state.command_parser);
+
+ if (argc < 2)
+ fprintf (stderr, "%s", help_string);
+ else
+ printf ("%s", help_string);
+
+ free (help_string);
+ return 0;
+ }
- signal (SIGABRT, on_crash);
- signal (SIGSEGV, on_crash);
+ if (debug && !ply_is_tracing ())
+ ply_toggle_tracing ();
- /* before do anything we need to make sure we have a working
- * environment.
- */
- if (!initialize_environment (&state))
- {
- if (errno == 0)
- {
- if (daemon_handle != NULL)
- ply_detach_daemon (daemon_handle, 0);
- return 0;
+ if (mode_string != NULL) {
+ if (strcmp (mode_string, "shutdown") == 0)
+ state.mode = PLY_MODE_SHUTDOWN;
+ else if (strcmp (mode_string, "updates") == 0)
+ state.mode = PLY_MODE_UPDATES;
+ else
+ state.mode = PLY_MODE_BOOT;
+
+ free (mode_string);
}
- ply_error ("plymouthd: could not setup basic operating environment: %m");
- if (daemon_handle != NULL)
- ply_detach_daemon (daemon_handle, EX_OSERR);
- return EX_OSERR;
- }
+ if (tty != NULL)
+ state.default_tty = tty;
+
+ if (kernel_command_line != NULL) {
+ strncpy (state.kernel_command_line, kernel_command_line, sizeof(state.kernel_command_line));
+ state.kernel_command_line[sizeof(state.kernel_command_line) - 1] = '\0';
+ state.kernel_command_line_is_set = true;
+ }
- /* Make the first byte in argv be '@' so that we can survive systemd's killing
- * spree when going from initrd to /, and so we stay alive all the way until
- * the power is killed at shutdown.
- * http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons
- */
- argv[0][0] = '@';
+ if (geteuid () != 0) {
+ ply_error ("plymouthd must be run as root user");
+ return EX_OSERR;
+ }
- state.boot_server = start_boot_server (&state);
+ state.no_boot_log = no_boot_log;
- if (state.boot_server == NULL)
- {
- ply_trace ("plymouthd is already running");
+ chdir ("/");
+ signal (SIGPIPE, SIG_IGN);
- if (daemon_handle != NULL)
- ply_detach_daemon (daemon_handle, EX_OK);
- return EX_OK;
- }
+ if (!no_daemon) {
+ daemon_handle = ply_create_daemon ();
- state.boot_buffer = ply_buffer_new ();
+ if (daemon_handle == NULL) {
+ ply_error ("plymouthd: cannot daemonize: %m");
+ return EX_UNAVAILABLE;
+ }
+ }
- if (attach_to_session)
- {
- state.should_be_attached = attach_to_session;
- if (!attach_to_running_session (&state))
- {
- ply_trace ("could not redirect console session: %m");
- if (! no_daemon)
- ply_detach_daemon (daemon_handle, EX_UNAVAILABLE);
- return EX_UNAVAILABLE;
+ if (debug)
+ debug_buffer = ply_buffer_new ();
+
+ signal (SIGABRT, on_crash);
+ signal (SIGSEGV, on_crash);
+
+ /* before do anything we need to make sure we have a working
+ * environment.
+ */
+ if (!initialize_environment (&state)) {
+ if (errno == 0) {
+ if (daemon_handle != NULL)
+ ply_detach_daemon (daemon_handle, 0);
+ return 0;
+ }
+
+ ply_error ("plymouthd: could not setup basic operating environment: %m");
+ if (daemon_handle != NULL)
+ ply_detach_daemon (daemon_handle, EX_OSERR);
+ return EX_OSERR;
}
- }
- state.progress = ply_progress_new ();
- state.splash_delay = NAN;
+ /* Make the first byte in argv be '@' so that we can survive systemd's killing
+ * spree when going from initrd to /, and so we stay alive all the way until
+ * the power is killed at shutdown.
+ * http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons
+ */
+ argv[0][0] = '@';
- ply_progress_load_cache (state.progress,
- get_cache_file_for_mode (state.mode));
+ state.boot_server = start_boot_server (&state);
- if (pid_file != NULL)
- write_pid_file (pid_file);
+ if (state.boot_server == NULL) {
+ ply_trace ("plymouthd is already running");
- if (daemon_handle != NULL
- && !ply_detach_daemon (daemon_handle, 0))
- {
- ply_error ("plymouthd: could not tell parent to exit: %m");
- return EX_UNAVAILABLE;
- }
+ if (daemon_handle != NULL)
+ ply_detach_daemon (daemon_handle, EX_OK);
+ return EX_OK;
+ }
+
+ state.boot_buffer = ply_buffer_new ();
+
+ if (attach_to_session) {
+ state.should_be_attached = attach_to_session;
+ if (!attach_to_running_session (&state)) {
+ ply_trace ("could not redirect console session: %m");
+ if (!no_daemon)
+ ply_detach_daemon (daemon_handle, EX_UNAVAILABLE);
+ return EX_UNAVAILABLE;
+ }
+ }
+
+ state.progress = ply_progress_new ();
+ state.splash_delay = NAN;
+
+ ply_progress_load_cache (state.progress,
+ get_cache_file_for_mode (state.mode));
- find_override_splash (&state);
- find_system_default_splash (&state);
- find_distribution_default_splash (&state);
+ if (pid_file != NULL)
+ write_pid_file (pid_file);
- if (command_line_has_argument (state.kernel_command_line, "plymouth.ignore-serial-consoles"))
- device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES;
+ if (daemon_handle != NULL
+ && !ply_detach_daemon (daemon_handle, 0)) {
+ ply_error ("plymouthd: could not tell parent to exit: %m");
+ return EX_UNAVAILABLE;
+ }
+
+ find_override_splash (&state);
+ find_system_default_splash (&state);
+ find_distribution_default_splash (&state);
+
+ if (command_line_has_argument (state.kernel_command_line, "plymouth.ignore-serial-consoles"))
+ device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES;
- if (command_line_has_argument (state.kernel_command_line, "plymouth.ignore-udev") ||
- (getenv ("DISPLAY") != NULL))
- device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV;
+ if (command_line_has_argument (state.kernel_command_line, "plymouth.ignore-udev") ||
+ (getenv ("DISPLAY") != NULL))
+ device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV;
- if (!plymouth_should_show_default_splash (&state))
- {
- /* don't bother listening for udev events if we're forcing details */
- device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV;
+ if (!plymouth_should_show_default_splash (&state)) {
+ /* don't bother listening for udev events if we're forcing details */
+ device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV;
- /* don't ever delay showing the detailed splash */
- state.splash_delay = NAN;
- }
+ /* don't ever delay showing the detailed splash */
+ state.splash_delay = NAN;
+ }
+
+ load_devices (&state, device_manager_flags);
- load_devices (&state, device_manager_flags);
+ ply_trace ("entering event loop");
+ exit_code = ply_event_loop_run (state.loop);
+ ply_trace ("exited event loop");
- ply_trace ("entering event loop");
- exit_code = ply_event_loop_run (state.loop);
- ply_trace ("exited event loop");
+ ply_boot_splash_free (state.boot_splash);
+ state.boot_splash = NULL;
- ply_boot_splash_free (state.boot_splash);
- state.boot_splash = NULL;
+ ply_command_parser_free (state.command_parser);
- ply_command_parser_free (state.command_parser);
+ ply_boot_server_free (state.boot_server);
+ state.boot_server = NULL;
- ply_boot_server_free (state.boot_server);
- state.boot_server = NULL;
+ ply_trace ("freeing terminal session");
+ ply_terminal_session_free (state.session);
- ply_trace ("freeing terminal session");
- ply_terminal_session_free (state.session);
+ ply_buffer_free (state.boot_buffer);
+ ply_progress_free (state.progress);
- ply_buffer_free (state.boot_buffer);
- ply_progress_free (state.progress);
+ ply_trace ("exiting with code %d", exit_code);
- ply_trace ("exiting with code %d", exit_code);
-
- if (debug_buffer != NULL)
- {
- dump_debug_buffer_to_file ();
- ply_buffer_free (debug_buffer);
- }
+ if (debug_buffer != NULL) {
+ dump_debug_buffer_to_file ();
+ ply_buffer_free (debug_buffer);
+ }
- ply_free_error_log();
+ ply_free_error_log ();
- return exit_code;
+ return exit_code;
}
/* vim: set sts=4 ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/controls/label/plugin.c b/src/plugins/controls/label/plugin.c
index a570acad..5edce3b7 100644
--- a/src/plugins/controls/label/plugin.c
+++ b/src/plugins/controls/label/plugin.c
@@ -51,147 +51,147 @@
struct _ply_label_plugin_control
{
- ply_event_loop_t *loop;
- ply_pixel_display_t *display;
- ply_rectangle_t area;
+ ply_event_loop_t *loop;
+ ply_pixel_display_t *display;
+ ply_rectangle_t area;
- char *text;
- char *fontdesc;
+ char *text;
+ char *fontdesc;
- PangoAlignment alignment;
- long width;
- float red;
- float green;
- float blue;
- float alpha;
+ PangoAlignment alignment;
+ long width;
+ float red;
+ float green;
+ float blue;
+ float alpha;
- uint32_t is_hidden : 1;
+ uint32_t is_hidden : 1;
};
-ply_label_plugin_interface_t * ply_label_plugin_get_interface (void);
+ply_label_plugin_interface_t *ply_label_plugin_get_interface (void);
static ply_label_plugin_control_t *
create_control (void)
{
- ply_label_plugin_control_t *label;
+ ply_label_plugin_control_t *label;
- label = calloc (1, sizeof (ply_label_plugin_control_t));
+ label = calloc (1, sizeof(ply_label_plugin_control_t));
- label->is_hidden = true;
- label->alignment = PANGO_ALIGN_LEFT;
- label->width = -1;
+ label->is_hidden = true;
+ label->alignment = PANGO_ALIGN_LEFT;
+ label->width = -1;
- return label;
+ return label;
}
static void
destroy_control (ply_label_plugin_control_t *label)
{
- if (label == NULL)
- return;
+ if (label == NULL)
+ return;
- free (label);
+ free (label);
}
static long
get_width_of_control (ply_label_plugin_control_t *label)
{
- return label->area.width;
+ return label->area.width;
}
static long
get_height_of_control (ply_label_plugin_control_t *label)
{
- return label->area.height;
+ return label->area.height;
}
static cairo_t *
get_cairo_context_for_pixel_buffer (ply_label_plugin_control_t *label,
ply_pixel_buffer_t *pixel_buffer)
{
- cairo_surface_t *cairo_surface;
- cairo_t *cairo_context;
- unsigned char *data;
- ply_rectangle_t size;
-
- data = (unsigned char *) ply_pixel_buffer_get_argb32_data (pixel_buffer);
- ply_pixel_buffer_get_size (pixel_buffer, &size);
-
- cairo_surface = cairo_image_surface_create_for_data (data,
- CAIRO_FORMAT_ARGB32,
- size.width,
- size.height,
- size.width * 4);
- cairo_context = cairo_create (cairo_surface);
- cairo_surface_destroy (cairo_surface);
-
- return cairo_context;
+ cairo_surface_t *cairo_surface;
+ cairo_t *cairo_context;
+ unsigned char *data;
+ ply_rectangle_t size;
+
+ data = (unsigned char *) ply_pixel_buffer_get_argb32_data (pixel_buffer);
+ ply_pixel_buffer_get_size (pixel_buffer, &size);
+
+ cairo_surface = cairo_image_surface_create_for_data (data,
+ CAIRO_FORMAT_ARGB32,
+ size.width,
+ size.height,
+ size.width * 4);
+ cairo_context = cairo_create (cairo_surface);
+ cairo_surface_destroy (cairo_surface);
+
+ return cairo_context;
}
static cairo_t *
get_cairo_context_for_sizing (ply_label_plugin_control_t *label)
{
- cairo_surface_t *cairo_surface;
- cairo_t *cairo_context;
+ cairo_surface_t *cairo_surface;
+ cairo_t *cairo_context;
- cairo_surface = cairo_image_surface_create_for_data (NULL, CAIRO_FORMAT_ARGB32, 0, 0, 0);
- cairo_context = cairo_create (cairo_surface);
- cairo_surface_destroy (cairo_surface);
+ cairo_surface = cairo_image_surface_create_for_data (NULL, CAIRO_FORMAT_ARGB32, 0, 0, 0);
+ cairo_context = cairo_create (cairo_surface);
+ cairo_surface_destroy (cairo_surface);
- return cairo_context;
+ return cairo_context;
}
-static PangoLayout*
-init_pango_text_layout (cairo_t *cairo_context,
- char *text,
- char *font_description,
+static PangoLayout *
+init_pango_text_layout (cairo_t *cairo_context,
+ char *text,
+ char *font_description,
PangoAlignment alignment,
- long width)
+ long width)
{
- PangoLayout *pango_layout;
- PangoFontDescription *description;
+ PangoLayout *pango_layout;
+ PangoFontDescription *description;
- pango_layout = pango_cairo_create_layout (cairo_context);
+ pango_layout = pango_cairo_create_layout (cairo_context);
- if (!font_description)
- description = pango_font_description_from_string ("Sans 12");
- else
- description = pango_font_description_from_string (font_description);
+ if (!font_description)
+ description = pango_font_description_from_string ("Sans 12");
+ else
+ description = pango_font_description_from_string (font_description);
- pango_layout_set_font_description (pango_layout, description);
- pango_font_description_free (description);
+ pango_layout_set_font_description (pango_layout, description);
+ pango_font_description_free (description);
- pango_layout_set_alignment(pango_layout, alignment);
- if (width >= 0)
- pango_layout_set_width(pango_layout, width * PANGO_SCALE);
+ pango_layout_set_alignment (pango_layout, alignment);
+ if (width >= 0)
+ pango_layout_set_width (pango_layout, width * PANGO_SCALE);
- pango_layout_set_text (pango_layout, text, -1);
- pango_cairo_update_layout (cairo_context, pango_layout);
+ pango_layout_set_text (pango_layout, text, -1);
+ pango_cairo_update_layout (cairo_context, pango_layout);
- return pango_layout;
+ return pango_layout;
}
static void
size_control (ply_label_plugin_control_t *label)
{
- cairo_t *cairo_context;
- PangoLayout *pango_layout;
- int text_width;
- int text_height;
+ cairo_t *cairo_context;
+ PangoLayout *pango_layout;
+ int text_width;
+ int text_height;
- if (label->is_hidden)
- return;
+ if (label->is_hidden)
+ return;
- cairo_context = get_cairo_context_for_sizing (label);
+ cairo_context = get_cairo_context_for_sizing (label);
- pango_layout = init_pango_text_layout(cairo_context, label->text, label->fontdesc, label->alignment, label->width);
+ pango_layout = init_pango_text_layout (cairo_context, label->text, label->fontdesc, label->alignment, label->width);
- pango_layout_get_size (pango_layout, &text_width, &text_height);
- label->area.width = (long) ((double) text_width / PANGO_SCALE);
- label->area.height = (long) ((double) text_height / PANGO_SCALE);
+ pango_layout_get_size (pango_layout, &text_width, &text_height);
+ label->area.width = (long) ((double) text_width / PANGO_SCALE);
+ label->area.height = (long) ((double) text_height / PANGO_SCALE);
- g_object_unref (pango_layout);
- cairo_destroy (cairo_context);
+ g_object_unref (pango_layout);
+ cairo_destroy (cairo_context);
}
static void
@@ -202,133 +202,124 @@ draw_control (ply_label_plugin_control_t *label,
unsigned long width,
unsigned long height)
{
- cairo_t *cairo_context;
- PangoLayout *pango_layout;
- int text_width;
- int text_height;
-
- if (label->is_hidden)
- return;
-
- cairo_context = get_cairo_context_for_pixel_buffer (label, pixel_buffer);
-
- pango_layout = init_pango_text_layout(cairo_context, label->text, label->fontdesc, label->alignment, label->width);
-
- pango_layout_get_size (pango_layout, &text_width, &text_height);
- label->area.width = (long) ((double) text_width / PANGO_SCALE);
- label->area.height = (long) ((double) text_height / PANGO_SCALE);
-
- cairo_rectangle (cairo_context, x, y, width, height);
- cairo_clip (cairo_context);
- cairo_move_to (cairo_context,
- label->area.x,
- label->area.y);
- cairo_set_source_rgba (cairo_context,
- label->red,
- label->green,
- label->blue,
- label->alpha);
- pango_cairo_show_layout (cairo_context,
- pango_layout);
-
- g_object_unref (pango_layout);
- cairo_destroy (cairo_context);
+ cairo_t *cairo_context;
+ PangoLayout *pango_layout;
+ int text_width;
+ int text_height;
+
+ if (label->is_hidden)
+ return;
+
+ cairo_context = get_cairo_context_for_pixel_buffer (label, pixel_buffer);
+
+ pango_layout = init_pango_text_layout (cairo_context, label->text, label->fontdesc, label->alignment, label->width);
+
+ pango_layout_get_size (pango_layout, &text_width, &text_height);
+ label->area.width = (long) ((double) text_width / PANGO_SCALE);
+ label->area.height = (long) ((double) text_height / PANGO_SCALE);
+
+ cairo_rectangle (cairo_context, x, y, width, height);
+ cairo_clip (cairo_context);
+ cairo_move_to (cairo_context,
+ label->area.x,
+ label->area.y);
+ cairo_set_source_rgba (cairo_context,
+ label->red,
+ label->green,
+ label->blue,
+ label->alpha);
+ pango_cairo_show_layout (cairo_context,
+ pango_layout);
+
+ g_object_unref (pango_layout);
+ cairo_destroy (cairo_context);
}
static void
set_alignment_for_control (ply_label_plugin_control_t *label,
- ply_label_alignment_t alignment)
+ ply_label_alignment_t alignment)
{
- ply_rectangle_t dirty_area;
- PangoAlignment pango_alignment;
-
- switch(alignment)
- {
- case PLY_LABEL_ALIGN_CENTER:
- pango_alignment = PANGO_ALIGN_CENTER;
- break;
- case PLY_LABEL_ALIGN_RIGHT:
- pango_alignment = PANGO_ALIGN_RIGHT;
- break;
- case PLY_LABEL_ALIGN_LEFT:
- default:
- pango_alignment = PANGO_ALIGN_LEFT;
- break;
- }
-
- if (label->alignment != pango_alignment)
- {
- dirty_area = label->area;
- label->alignment = pango_alignment;
- size_control (label);
- if (!label->is_hidden && label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- dirty_area.x, dirty_area.y,
- dirty_area.width, dirty_area.height);
-
- }
+ ply_rectangle_t dirty_area;
+ PangoAlignment pango_alignment;
+
+ switch (alignment) {
+ case PLY_LABEL_ALIGN_CENTER:
+ pango_alignment = PANGO_ALIGN_CENTER;
+ break;
+ case PLY_LABEL_ALIGN_RIGHT:
+ pango_alignment = PANGO_ALIGN_RIGHT;
+ break;
+ case PLY_LABEL_ALIGN_LEFT:
+ default:
+ pango_alignment = PANGO_ALIGN_LEFT;
+ break;
+ }
+
+ if (label->alignment != pango_alignment) {
+ dirty_area = label->area;
+ label->alignment = pango_alignment;
+ size_control (label);
+ if (!label->is_hidden && label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ dirty_area.x, dirty_area.y,
+ dirty_area.width, dirty_area.height);
+ }
}
static void
set_width_for_control (ply_label_plugin_control_t *label,
long width)
{
- ply_rectangle_t dirty_area;
-
- if (label->width != width)
- {
- dirty_area = label->area;
- label->width = width;
- size_control (label);
- if (!label->is_hidden && label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- dirty_area.x, dirty_area.y,
- dirty_area.width, dirty_area.height);
-
- }
+ ply_rectangle_t dirty_area;
+
+ if (label->width != width) {
+ dirty_area = label->area;
+ label->width = width;
+ size_control (label);
+ if (!label->is_hidden && label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ dirty_area.x, dirty_area.y,
+ dirty_area.width, dirty_area.height);
+ }
}
static void
set_text_for_control (ply_label_plugin_control_t *label,
const char *text)
{
- ply_rectangle_t dirty_area;
-
- if (label->text != text)
- {
- dirty_area = label->area;
- free (label->text);
- label->text = strdup (text);
- size_control (label);
- if (!label->is_hidden && label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- dirty_area.x, dirty_area.y,
- dirty_area.width, dirty_area.height);
-
- }
+ ply_rectangle_t dirty_area;
+
+ if (label->text != text) {
+ dirty_area = label->area;
+ free (label->text);
+ label->text = strdup (text);
+ size_control (label);
+ if (!label->is_hidden && label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ dirty_area.x, dirty_area.y,
+ dirty_area.width, dirty_area.height);
+ }
}
static void
set_font_for_control (ply_label_plugin_control_t *label,
const char *fontdesc)
{
- ply_rectangle_t dirty_area;
-
- if (label->fontdesc != fontdesc)
- {
- dirty_area = label->area;
- free (label->fontdesc);
- if (fontdesc)
- label->fontdesc = strdup (fontdesc);
- else
- label->fontdesc = NULL;
- size_control (label);
- if (!label->is_hidden && label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- dirty_area.x, dirty_area.y,
- dirty_area.width, dirty_area.height);
-
- }
+ ply_rectangle_t dirty_area;
+
+ if (label->fontdesc != fontdesc) {
+ dirty_area = label->area;
+ free (label->fontdesc);
+ if (fontdesc)
+ label->fontdesc = strdup (fontdesc);
+ else
+ label->fontdesc = NULL;
+ size_control (label);
+ if (!label->is_hidden && label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ dirty_area.x, dirty_area.y,
+ dirty_area.width, dirty_area.height);
+ }
}
static void
@@ -338,15 +329,15 @@ set_color_for_control (ply_label_plugin_control_t *label,
float blue,
float alpha)
{
- label->red = red;
- label->green = green;
- label->blue = blue;
- label->alpha = alpha;
-
- if (!label->is_hidden && label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- label->area.x, label->area.y,
- label->area.width, label->area.height);
+ label->red = red;
+ label->green = green;
+ label->blue = blue;
+ label->alpha = alpha;
+
+ if (!label->is_hidden && label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ label->area.x, label->area.y,
+ label->area.width, label->area.height);
}
static bool
@@ -355,67 +346,67 @@ show_control (ply_label_plugin_control_t *label,
long x,
long y)
{
- ply_rectangle_t dirty_area;
+ ply_rectangle_t dirty_area;
- dirty_area = label->area;
- label->display = display;
- label->area.x = x;
- label->area.y = y;
+ dirty_area = label->area;
+ label->display = display;
+ label->area.x = x;
+ label->area.y = y;
- label->is_hidden = false;
+ label->is_hidden = false;
- size_control (label);
+ size_control (label);
- if (!label->is_hidden && label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- dirty_area.x, dirty_area.y,
- dirty_area.width, dirty_area.height);
+ if (!label->is_hidden && label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ dirty_area.x, dirty_area.y,
+ dirty_area.width, dirty_area.height);
- label->is_hidden = false;
+ label->is_hidden = false;
- return true;
+ return true;
}
static void
hide_control (ply_label_plugin_control_t *label)
{
- label->is_hidden = true;
- if (label->display != NULL)
- ply_pixel_display_draw_area (label->display,
- label->area.x, label->area.y,
- label->area.width, label->area.height);
-
- label->display = NULL;
- label->loop = NULL;
+ label->is_hidden = true;
+ if (label->display != NULL)
+ ply_pixel_display_draw_area (label->display,
+ label->area.x, label->area.y,
+ label->area.width, label->area.height);
+
+ label->display = NULL;
+ label->loop = NULL;
}
static bool
is_control_hidden (ply_label_plugin_control_t *label)
{
- return label->is_hidden;
+ return label->is_hidden;
}
ply_label_plugin_interface_t *
ply_label_plugin_get_interface (void)
{
- static ply_label_plugin_interface_t plugin_interface =
- {
- .create_control = create_control,
- .destroy_control = destroy_control,
- .show_control = show_control,
- .hide_control = hide_control,
- .draw_control = draw_control,
- .is_control_hidden = is_control_hidden,
- .set_text_for_control = set_text_for_control,
- .set_alignment_for_control = set_alignment_for_control,
- .set_width_for_control = set_width_for_control,
- .set_font_for_control = set_font_for_control,
- .set_color_for_control = set_color_for_control,
- .get_width_of_control = get_width_of_control,
- .get_height_of_control = get_height_of_control
- };
-
- return &plugin_interface;
+ static ply_label_plugin_interface_t plugin_interface =
+ {
+ .create_control = create_control,
+ .destroy_control = destroy_control,
+ .show_control = show_control,
+ .hide_control = hide_control,
+ .draw_control = draw_control,
+ .is_control_hidden = is_control_hidden,
+ .set_text_for_control = set_text_for_control,
+ .set_alignment_for_control = set_alignment_for_control,
+ .set_width_for_control = set_width_for_control,
+ .set_font_for_control = set_font_for_control,
+ .set_color_for_control = set_color_for_control,
+ .get_width_of_control = get_width_of_control,
+ .get_height_of_control = get_height_of_control
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c
index 6677279d..45aab7df 100644
--- a/src/plugins/renderers/drm/plugin.c
+++ b/src/plugins/renderers/drm/plugin.c
@@ -65,55 +65,55 @@
struct _ply_renderer_head
{
- ply_renderer_backend_t *backend;
- ply_pixel_buffer_t *pixel_buffer;
- ply_rectangle_t area;
+ ply_renderer_backend_t *backend;
+ ply_pixel_buffer_t *pixel_buffer;
+ ply_rectangle_t area;
- unsigned long row_stride;
+ unsigned long row_stride;
- ply_array_t *connector_ids;
- drmModeConnector *connector0;
- int connector0_mode_index;
+ ply_array_t *connector_ids;
+ drmModeConnector *connector0;
+ int connector0_mode_index;
- uint32_t controller_id;
- uint32_t encoder_id;
- uint32_t console_buffer_id;
- uint32_t scan_out_buffer_id;
+ uint32_t controller_id;
+ uint32_t encoder_id;
+ uint32_t console_buffer_id;
+ uint32_t scan_out_buffer_id;
};
struct _ply_renderer_input_source
{
- ply_renderer_backend_t *backend;
- ply_fd_watch_t *terminal_input_watch;
+ ply_renderer_backend_t *backend;
+ ply_fd_watch_t *terminal_input_watch;
- ply_buffer_t *key_buffer;
+ ply_buffer_t *key_buffer;
- ply_renderer_input_source_handler_t handler;
- void *user_data;
+ ply_renderer_input_source_handler_t handler;
+ void *user_data;
};
struct _ply_renderer_backend
{
- ply_event_loop_t *loop;
- ply_terminal_t *terminal;
+ ply_event_loop_t *loop;
+ ply_terminal_t *terminal;
- ply_renderer_driver_interface_t *driver_interface;
- ply_renderer_driver_t *driver;
- uint32_t driver_supports_mapping_console;
+ ply_renderer_driver_interface_t *driver_interface;
+ ply_renderer_driver_t *driver;
+ uint32_t driver_supports_mapping_console;
- int device_fd;
- char *device_name;
- drmModeRes *resources;
+ int device_fd;
+ char *device_name;
+ drmModeRes *resources;
- ply_renderer_input_source_t input_source;
- ply_list_t *heads;
- ply_hashtable_t *heads_by_connector_id;
+ ply_renderer_input_source_t input_source;
+ ply_list_t *heads;
+ ply_hashtable_t *heads_by_connector_id;
- int32_t dither_red;
- int32_t dither_green;
- int32_t dither_blue;
+ int32_t dither_red;
+ int32_t dither_green;
+ int32_t dither_blue;
- uint32_t is_active : 1;
+ uint32_t is_active : 1;
};
ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void);
@@ -131,27 +131,24 @@ ply_renderer_head_add_connector (ply_renderer_head_t *head,
drmModeConnector *connector,
int connector_mode_index)
{
- drmModeModeInfo *mode;
-
- mode = &connector->modes[connector_mode_index];
-
- if (mode->hdisplay != head->area.width || mode->vdisplay != head->area.height)
- {
- ply_trace ("Tried to add connector with resolution %dx%d to %dx%d head",
- (int) mode->hdisplay, (int) mode->vdisplay,
- (int) head->area.width, (int) head->area.height);
- return false;
- }
- else
- {
- ply_trace ("Adding connector with id %d to %dx%d head",
- (int) connector->connector_id,
- (int) head->area.width, (int) head->area.height);
- }
-
- ply_array_add_uint32_element (head->connector_ids, connector->connector_id);
-
- return true;
+ drmModeModeInfo *mode;
+
+ mode = &connector->modes[connector_mode_index];
+
+ if (mode->hdisplay != head->area.width || mode->vdisplay != head->area.height) {
+ ply_trace ("Tried to add connector with resolution %dx%d to %dx%d head",
+ (int) mode->hdisplay, (int) mode->vdisplay,
+ (int) head->area.width, (int) head->area.height);
+ return false;
+ } else {
+ ply_trace ("Adding connector with id %d to %dx%d head",
+ (int) connector->connector_id,
+ (int) head->area.width, (int) head->area.height);
+ }
+
+ ply_array_add_uint32_element (head->connector_ids, connector->connector_id);
+
+ return true;
}
static ply_renderer_head_t *
@@ -162,49 +159,49 @@ ply_renderer_head_new (ply_renderer_backend_t *backend,
uint32_t controller_id,
uint32_t console_buffer_id)
{
- ply_renderer_head_t *head;
- drmModeModeInfo *mode;
+ ply_renderer_head_t *head;
+ drmModeModeInfo *mode;
- head = calloc (1, sizeof (ply_renderer_head_t));
+ head = calloc (1, sizeof(ply_renderer_head_t));
- head->backend = backend;
- head->encoder_id = encoder_id;
- head->connector_ids = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_UINT32);
- head->controller_id = controller_id;
- head->console_buffer_id = console_buffer_id;
+ head->backend = backend;
+ head->encoder_id = encoder_id;
+ head->connector_ids = ply_array_new (PLY_ARRAY_ELEMENT_TYPE_UINT32);
+ head->controller_id = controller_id;
+ head->console_buffer_id = console_buffer_id;
- assert (connector_mode_index < connector->count_modes);
- mode = &connector->modes[connector_mode_index];
+ assert (connector_mode_index < connector->count_modes);
+ mode = &connector->modes[connector_mode_index];
- head->connector0 = connector;
- head->connector0_mode_index = connector_mode_index;
+ head->connector0 = connector;
+ head->connector0_mode_index = connector_mode_index;
- head->area.x = 0;
- head->area.y = 0;
- head->area.width = mode->hdisplay;
- head->area.height = mode->vdisplay;
+ head->area.x = 0;
+ head->area.y = 0;
+ head->area.width = mode->hdisplay;
+ head->area.height = mode->vdisplay;
- ply_renderer_head_add_connector (head, connector, connector_mode_index);
- assert (ply_array_get_size (head->connector_ids) > 0);
+ ply_renderer_head_add_connector (head, connector, connector_mode_index);
+ assert (ply_array_get_size (head->connector_ids) > 0);
- head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+ head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
- ply_trace ("Creating %ldx%ld renderer head", head->area.width, head->area.height);
- ply_pixel_buffer_fill_with_color (head->pixel_buffer, NULL,
- 0.0, 0.0, 0.0, 1.0);
+ ply_trace ("Creating %ldx%ld renderer head", head->area.width, head->area.height);
+ ply_pixel_buffer_fill_with_color (head->pixel_buffer, NULL,
+ 0.0, 0.0, 0.0, 1.0);
- return head;
+ return head;
}
static void
ply_renderer_head_free (ply_renderer_head_t *head)
{
- ply_trace ("freeing %ldx%ld renderer head", head->area.width, head->area.height);
- ply_pixel_buffer_free (head->pixel_buffer);
+ ply_trace ("freeing %ldx%ld renderer head", head->area.width, head->area.height);
+ ply_pixel_buffer_free (head->pixel_buffer);
- drmModeFreeConnector (head->connector0);
- ply_array_free (head->connector_ids);
- free (head);
+ drmModeFreeConnector (head->connector0);
+ ply_array_free (head->connector_ids);
+ free (head);
}
static bool
@@ -212,91 +209,88 @@ ply_renderer_head_set_scan_out_buffer (ply_renderer_backend_t *backend,
ply_renderer_head_t *head,
uint32_t buffer_id)
{
- drmModeModeInfo *mode;
- uint32_t *connector_ids;
- int number_of_connectors;
+ drmModeModeInfo *mode;
+ uint32_t *connector_ids;
+ int number_of_connectors;
- connector_ids = (uint32_t *) ply_array_get_uint32_elements (head->connector_ids);
- number_of_connectors = ply_array_get_size (head->connector_ids);
+ connector_ids = (uint32_t *) ply_array_get_uint32_elements (head->connector_ids);
+ number_of_connectors = ply_array_get_size (head->connector_ids);
- mode = &head->connector0->modes[head->connector0_mode_index];
+ mode = &head->connector0->modes[head->connector0_mode_index];
- ply_trace ("Setting scan out buffer of %ldx%ld head to our buffer",
- head->area.width, head->area.height);
+ ply_trace ("Setting scan out buffer of %ldx%ld head to our buffer",
+ head->area.width, head->area.height);
- /* Tell the controller to use the allocated scan out buffer on each connectors
- */
- if (drmModeSetCrtc (backend->device_fd, head->controller_id, buffer_id,
- 0, 0, connector_ids, number_of_connectors, mode) < 0)
- {
- ply_trace ("Couldn't set scan out buffer for head with controller id %d",
- head->controller_id);
- return false;
- }
+ /* Tell the controller to use the allocated scan out buffer on each connectors
+ */
+ if (drmModeSetCrtc (backend->device_fd, head->controller_id, buffer_id,
+ 0, 0, connector_ids, number_of_connectors, mode) < 0) {
+ ply_trace ("Couldn't set scan out buffer for head with controller id %d",
+ head->controller_id);
+ return false;
+ }
- return true;
+ return true;
}
static bool
ply_renderer_head_map (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- bool scan_out_set;
-
- assert (backend != NULL);
- assert (backend->device_fd >= 0);
- assert (backend->driver_interface != NULL);
- assert (backend->driver != NULL);
-
- assert (head != NULL);
-
- ply_trace ("Creating buffer for %ldx%ld renderer head", head->area.width, head->area.height);
- head->scan_out_buffer_id =
- backend->driver_interface->create_buffer (backend->driver,
- head->area.width, head->area.height,
- &head->row_stride);
-
- if (head->scan_out_buffer_id == 0)
- return false;
+ bool scan_out_set;
+
+ assert (backend != NULL);
+ assert (backend->device_fd >= 0);
+ assert (backend->driver_interface != NULL);
+ assert (backend->driver != NULL);
+
+ assert (head != NULL);
+
+ ply_trace ("Creating buffer for %ldx%ld renderer head", head->area.width, head->area.height);
+ head->scan_out_buffer_id =
+ backend->driver_interface->create_buffer (backend->driver,
+ head->area.width, head->area.height,
+ &head->row_stride);
+
+ if (head->scan_out_buffer_id == 0)
+ return false;
+
+ ply_trace ("Mapping buffer for %ldx%ld renderer head", head->area.width, head->area.height);
+ if (!backend->driver_interface->map_buffer (backend->driver,
+ head->scan_out_buffer_id)) {
+ backend->driver_interface->destroy_buffer (backend->driver,
+ head->scan_out_buffer_id);
+ head->scan_out_buffer_id = 0;
+ return false;
+ }
- ply_trace ("Mapping buffer for %ldx%ld renderer head", head->area.width, head->area.height);
- if (!backend->driver_interface->map_buffer (backend->driver,
- head->scan_out_buffer_id))
- {
- backend->driver_interface->destroy_buffer (backend->driver,
- head->scan_out_buffer_id);
- head->scan_out_buffer_id = 0;
- return false;
- }
-
- /* FIXME: Maybe we should blit the fbcon contents instead of the (blank)
- * shadow buffer?
- */
- ply_renderer_head_redraw (backend, head);
-
- scan_out_set = reset_scan_out_buffer_if_needed (backend, head);
- if (!scan_out_set && backend->is_active)
- {
- backend->driver_interface->destroy_buffer (backend->driver,
- head->scan_out_buffer_id);
- head->scan_out_buffer_id = 0;
- return false;
- }
+ /* FIXME: Maybe we should blit the fbcon contents instead of the (blank)
+ * shadow buffer?
+ */
+ ply_renderer_head_redraw (backend, head);
+
+ scan_out_set = reset_scan_out_buffer_if_needed (backend, head);
+ if (!scan_out_set && backend->is_active) {
+ backend->driver_interface->destroy_buffer (backend->driver,
+ head->scan_out_buffer_id);
+ head->scan_out_buffer_id = 0;
+ return false;
+ }
- return true;
+ return true;
}
static void
ply_renderer_head_unmap (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_trace ("unmapping %ldx%ld renderer head", head->area.width, head->area.height);
- backend->driver_interface->unmap_buffer (backend->driver,
- head->scan_out_buffer_id);
+ ply_trace ("unmapping %ldx%ld renderer head", head->area.width, head->area.height);
+ backend->driver_interface->unmap_buffer (backend->driver,
+ head->scan_out_buffer_id);
- backend->driver_interface->destroy_buffer (backend->driver,
- head->scan_out_buffer_id);
- head->scan_out_buffer_id = 0;
+ backend->driver_interface->destroy_buffer (backend->driver,
+ head->scan_out_buffer_id);
+ head->scan_out_buffer_id = 0;
}
static void
@@ -306,24 +300,22 @@ flush_area (const char *src,
unsigned long dst_row_stride,
ply_rectangle_t *area_to_flush)
{
- unsigned long y1, y2, y;
-
- y1 = area_to_flush->y;
- y2 = y1 + area_to_flush->height;
-
- if (area_to_flush->width * 4 == src_row_stride &&
- area_to_flush->width * 4 == dst_row_stride)
- {
- memcpy (dst, src, area_to_flush->width * area_to_flush->height * 4);
- return;
- }
-
- for (y = y1; y < y2; y++)
- {
- memcpy (dst, src, area_to_flush->width * 4);
- dst += dst_row_stride;
- src += src_row_stride;
- }
+ unsigned long y1, y2, y;
+
+ y1 = area_to_flush->y;
+ y2 = y1 + area_to_flush->height;
+
+ if (area_to_flush->width * 4 == src_row_stride &&
+ area_to_flush->width * 4 == dst_row_stride) {
+ memcpy (dst, src, area_to_flush->width * area_to_flush->height * 4);
+ return;
+ }
+
+ for (y = y1; y < y2; y++) {
+ memcpy (dst, src, area_to_flush->width * 4);
+ dst += dst_row_stride;
+ src += src_row_stride;
+ }
}
static void
@@ -331,306 +323,291 @@ ply_renderer_head_flush_area (ply_renderer_head_t *head,
ply_rectangle_t *area_to_flush,
char *map_address)
{
- uint32_t *shadow_buffer;
- char *dst, *src;
+ uint32_t *shadow_buffer;
+ char *dst, *src;
- shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
+ shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
- dst = &map_address[area_to_flush->y * head->row_stride + area_to_flush->x * BYTES_PER_PIXEL];
- src = (char *) &shadow_buffer[area_to_flush->y * head->area.width + area_to_flush->x];
+ dst = &map_address[area_to_flush->y * head->row_stride + area_to_flush->x * BYTES_PER_PIXEL];
+ src = (char *) &shadow_buffer[area_to_flush->y * head->area.width + area_to_flush->x];
- flush_area (src, head->area.width * 4, dst, head->row_stride, area_to_flush);
+ flush_area (src, head->area.width * 4, dst, head->row_stride, area_to_flush);
}
static void
free_heads (ply_renderer_backend_t *backend)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
- ply_renderer_head_free (head);
- ply_list_remove_node (backend->heads, node);
+ ply_renderer_head_free (head);
+ ply_list_remove_node (backend->heads, node);
- node = next_node;
- }
+ node = next_node;
+ }
}
static ply_renderer_backend_t *
-create_backend (const char *device_name,
+create_backend (const char *device_name,
ply_terminal_t *terminal)
{
- ply_renderer_backend_t *backend;
+ ply_renderer_backend_t *backend;
- backend = calloc (1, sizeof (ply_renderer_backend_t));
+ backend = calloc (1, sizeof(ply_renderer_backend_t));
- if (device_name != NULL)
- backend->device_name = strdup (device_name);
- else
- backend->device_name = strdup ("/dev/dri/card0");
+ if (device_name != NULL)
+ backend->device_name = strdup (device_name);
+ else
+ backend->device_name = strdup ("/dev/dri/card0");
- ply_trace ("creating renderer backend for device %s", backend->device_name);
+ ply_trace ("creating renderer backend for device %s", backend->device_name);
- backend->device_fd = -1;
+ backend->device_fd = -1;
- backend->loop = ply_event_loop_get_default ();
- backend->heads = ply_list_new ();
- backend->input_source.key_buffer = ply_buffer_new ();
- backend->terminal = terminal;
+ backend->loop = ply_event_loop_get_default ();
+ backend->heads = ply_list_new ();
+ backend->input_source.key_buffer = ply_buffer_new ();
+ backend->terminal = terminal;
- return backend;
+ return backend;
}
static void
destroy_backend (ply_renderer_backend_t *backend)
{
- ply_trace ("destroying renderer backend for device %s", backend->device_name);
- free_heads (backend);
+ ply_trace ("destroying renderer backend for device %s", backend->device_name);
+ free_heads (backend);
- free (backend->device_name);
+ free (backend->device_name);
- free (backend);
+ free (backend);
}
static void
activate (ply_renderer_backend_t *backend)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("taking master and scanning out");
- backend->is_active = true;
+ ply_trace ("taking master and scanning out");
+ backend->is_active = true;
- drmSetMaster (backend->device_fd);
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
+ drmSetMaster (backend->device_fd);
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
- if (head->scan_out_buffer_id != 0)
- {
- /* Flush out any pending drawing to the buffer
- */
- flush_head (backend, head);
+ if (head->scan_out_buffer_id != 0) {
+ /* Flush out any pending drawing to the buffer
+ */
+ flush_head (backend, head);
- /* Then send the buffer to the monitor
- */
- ply_renderer_head_set_scan_out_buffer (backend, head,
- head->scan_out_buffer_id);
- }
+ /* Then send the buffer to the monitor
+ */
+ ply_renderer_head_set_scan_out_buffer (backend, head,
+ head->scan_out_buffer_id);
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
deactivate (ply_renderer_backend_t *backend)
{
- ply_trace ("dropping master");
- drmDropMaster (backend->device_fd);
- backend->is_active = false;
+ ply_trace ("dropping master");
+ drmDropMaster (backend->device_fd);
+ backend->is_active = false;
}
static void
on_active_vt_changed (ply_renderer_backend_t *backend)
{
- if (ply_terminal_is_active (backend->terminal))
- {
- ply_trace ("activating on vt change");
- activate (backend);
- }
- else
- {
- ply_trace ("deactivating on vt change");
- deactivate (backend);
- }
+ if (ply_terminal_is_active (backend->terminal)) {
+ ply_trace ("activating on vt change");
+ activate (backend);
+ } else {
+ ply_trace ("deactivating on vt change");
+ deactivate (backend);
+ }
}
static bool
load_driver (ply_renderer_backend_t *backend)
{
- int device_fd;
+ int device_fd;
- ply_trace ("Opening '%s'", backend->device_name);
- device_fd = open (backend->device_name, O_RDWR);
+ ply_trace ("Opening '%s'", backend->device_name);
+ device_fd = open (backend->device_name, O_RDWR);
- if (device_fd < 0)
- {
- ply_trace ("open failed: %m");
- return false;
- }
+ if (device_fd < 0) {
+ ply_trace ("open failed: %m");
+ return false;
+ }
- backend->driver_interface = ply_renderer_generic_driver_get_interface (device_fd);
- backend->driver_supports_mapping_console = false;
+ backend->driver_interface = ply_renderer_generic_driver_get_interface (device_fd);
+ backend->driver_supports_mapping_console = false;
- if (backend->driver_interface == NULL)
- {
- close (device_fd);
- return false;
- }
+ if (backend->driver_interface == NULL) {
+ close (device_fd);
+ return false;
+ }
- backend->driver = backend->driver_interface->create_driver (device_fd);
+ backend->driver = backend->driver_interface->create_driver (device_fd);
- if (backend->driver == NULL)
- {
- close (device_fd);
- return false;
- }
+ if (backend->driver == NULL) {
+ close (device_fd);
+ return false;
+ }
- backend->device_fd = device_fd;
+ backend->device_fd = device_fd;
- return true;
+ return true;
}
static void
unload_driver (ply_renderer_backend_t *backend)
{
- if (backend->driver == NULL)
- return;
+ if (backend->driver == NULL)
+ return;
- ply_trace ("unloading driver");
- assert (backend->driver_interface != NULL);
+ ply_trace ("unloading driver");
+ assert (backend->driver_interface != NULL);
- backend->driver_interface->destroy_driver (backend->driver);
- backend->driver = NULL;
+ backend->driver_interface->destroy_driver (backend->driver);
+ backend->driver = NULL;
- backend->driver_interface = NULL;
+ backend->driver_interface = NULL;
- if (backend->device_fd >= 0)
- {
- drmClose (backend->device_fd);
- backend->device_fd = -1;
- }
+ if (backend->device_fd >= 0) {
+ drmClose (backend->device_fd);
+ backend->device_fd = -1;
+ }
}
static bool
open_device (ply_renderer_backend_t *backend)
{
- assert (backend != NULL);
- assert (backend->device_name != NULL);
-
- if (!load_driver (backend))
- return false;
-
- if (backend->terminal == NULL)
- return true;
-
- if (!ply_terminal_open (backend->terminal))
- {
- ply_trace ("could not open terminal: %m");
- return false;
- }
-
- if (!ply_terminal_is_vt (backend->terminal))
- {
- ply_trace ("terminal is not a VT");
- ply_terminal_close (backend->terminal);
- return false;
- }
-
- ply_terminal_watch_for_active_vt_change (backend->terminal,
- (ply_terminal_active_vt_changed_handler_t)
- on_active_vt_changed,
- backend);
-
- return true;
+ assert (backend != NULL);
+ assert (backend->device_name != NULL);
+
+ if (!load_driver (backend))
+ return false;
+
+ if (backend->terminal == NULL)
+ return true;
+
+ if (!ply_terminal_open (backend->terminal)) {
+ ply_trace ("could not open terminal: %m");
+ return false;
+ }
+
+ if (!ply_terminal_is_vt (backend->terminal)) {
+ ply_trace ("terminal is not a VT");
+ ply_terminal_close (backend->terminal);
+ return false;
+ }
+
+ ply_terminal_watch_for_active_vt_change (backend->terminal,
+ (ply_terminal_active_vt_changed_handler_t)
+ on_active_vt_changed,
+ backend);
+
+ return true;
}
static void
close_device (ply_renderer_backend_t *backend)
{
- ply_trace ("closing device");
+ ply_trace ("closing device");
- free_heads (backend);
+ free_heads (backend);
- if (backend->terminal != NULL)
- ply_terminal_stop_watching_for_active_vt_change (backend->terminal,
- (ply_terminal_active_vt_changed_handler_t)
- on_active_vt_changed,
- backend);
+ if (backend->terminal != NULL) {
+ ply_terminal_stop_watching_for_active_vt_change (backend->terminal,
+ (ply_terminal_active_vt_changed_handler_t)
+ on_active_vt_changed,
+ backend);
+ }
- unload_driver (backend);
+ unload_driver (backend);
}
static drmModeCrtc *
find_controller_for_encoder (ply_renderer_backend_t *backend,
drmModeEncoder *encoder)
{
- drmModeCrtc *controller;
+ drmModeCrtc *controller;
- controller = NULL;
+ controller = NULL;
- /* Monitor is already lit. We'll use the same controller.
- */
- if (encoder->crtc_id != 0)
- {
- controller = drmModeGetCrtc (backend->device_fd, encoder->crtc_id);
+ /* Monitor is already lit. We'll use the same controller.
+ */
+ if (encoder->crtc_id != 0) {
+ controller = drmModeGetCrtc (backend->device_fd, encoder->crtc_id);
- if (controller != NULL)
- {
- ply_trace ("Found already lit monitor");
- return controller;
+ if (controller != NULL) {
+ ply_trace ("Found already lit monitor");
+ return controller;
+ }
}
- }
- return NULL;
+ return NULL;
}
static drmModeEncoder *
find_encoder_for_connector (ply_renderer_backend_t *backend,
drmModeConnector *connector)
{
- int i;
- drmModeEncoder *encoder;
+ int i;
+ drmModeEncoder *encoder;
- assert (backend != NULL);
+ assert (backend != NULL);
- for (i = 0; i < connector->count_encoders; i++)
- {
- encoder = drmModeGetEncoder (backend->device_fd,
- connector->encoders[i]);
+ for (i = 0; i < connector->count_encoders; i++) {
+ encoder = drmModeGetEncoder (backend->device_fd,
+ connector->encoders[i]);
- if (encoder == NULL)
- continue;
+ if (encoder == NULL)
+ continue;
- if (encoder->encoder_id == connector->encoder_id)
- return encoder;
+ if (encoder->encoder_id == connector->encoder_id)
+ return encoder;
- drmModeFreeEncoder (encoder);
- }
+ drmModeFreeEncoder (encoder);
+ }
- return NULL;
+ return NULL;
}
static bool
modes_are_equal (drmModeModeInfo *a,
drmModeModeInfo *b)
{
- return a->clock == b->clock &&
- a->hdisplay == b->hdisplay &&
- a->hsync_start == b->hsync_start &&
- a->hsync_end == b->hsync_end &&
- a->htotal == b->htotal &&
- a->hskew == b->hskew &&
- a->vdisplay == b->vdisplay &&
- a->vsync_start == b->vsync_start &&
- a->vsync_end == b->vsync_end &&
- a->vtotal == b->vtotal &&
- a->vscan == b->vscan &&
- a->vrefresh == b->vrefresh &&
- a->flags == b->flags &&
- a->type == b->type;
-
+ return a->clock == b->clock &&
+ a->hdisplay == b->hdisplay &&
+ a->hsync_start == b->hsync_start &&
+ a->hsync_end == b->hsync_end &&
+ a->htotal == b->htotal &&
+ a->hskew == b->hskew &&
+ a->vdisplay == b->vdisplay &&
+ a->vsync_start == b->vsync_start &&
+ a->vsync_end == b->vsync_end &&
+ a->vtotal == b->vtotal &&
+ a->vscan == b->vscan &&
+ a->vrefresh == b->vrefresh &&
+ a->flags == b->flags &&
+ a->type == b->type;
}
static int
@@ -638,20 +615,18 @@ find_index_of_mode (ply_renderer_backend_t *backend,
drmModeConnector *connector,
drmModeModeInfo *mode)
{
- int i;
+ int i;
- for (i = 0; i < connector->count_modes; i++)
- {
- if (modes_are_equal (&connector->modes[i], mode))
- {
- ply_trace ("Found connector mode index %d for mode %dx%d",
- i, mode->hdisplay, mode->vdisplay);
+ for (i = 0; i < connector->count_modes; i++) {
+ if (modes_are_equal (&connector->modes[i], mode)) {
+ ply_trace ("Found connector mode index %d for mode %dx%d",
+ i, mode->hdisplay, mode->vdisplay);
- return i;
+ return i;
+ }
}
- }
- return -1;
+ return -1;
}
static int
@@ -659,252 +634,230 @@ get_index_of_active_mode (ply_renderer_backend_t *backend,
drmModeCrtc *controller,
drmModeConnector *connector)
{
- if (!controller->mode_valid)
- {
- ply_trace ("No valid mode currently active on monitor");
- return -1;
- }
+ if (!controller->mode_valid) {
+ ply_trace ("No valid mode currently active on monitor");
+ return -1;
+ }
- ply_trace ("Looking for connector mode index of active mode %dx%d",
- controller->mode.hdisplay, controller->mode.vdisplay);
+ ply_trace ("Looking for connector mode index of active mode %dx%d",
+ controller->mode.hdisplay, controller->mode.vdisplay);
- return find_index_of_mode (backend, connector, &controller->mode);
+ return find_index_of_mode (backend, connector, &controller->mode);
}
static bool
create_heads_for_active_connectors (ply_renderer_backend_t *backend)
{
- int i;
- drmModeConnector *connector;
- ply_hashtable_t *heads_by_controller_id;
-
- heads_by_controller_id = ply_hashtable_new (NULL, NULL);
-
- for (i = 0; i < backend->resources->count_connectors; i++)
- {
- ply_renderer_head_t *head;
- drmModeEncoder *encoder;
- uint32_t encoder_id;
- drmModeCrtc *controller;
- uint32_t controller_id;
- uint32_t console_buffer_id;
- int connector_mode_index;
-
- connector = drmModeGetConnector (backend->device_fd,
- backend->resources->connectors[i]);
-
- if (connector == NULL)
- continue;
-
- if (connector->connection != DRM_MODE_CONNECTED)
- {
- drmModeFreeConnector (connector);
- continue;
- }
-
- if (connector->count_modes <= 0)
- {
- drmModeFreeConnector (connector);
- continue;
+ int i;
+ drmModeConnector *connector;
+ ply_hashtable_t *heads_by_controller_id;
+
+ heads_by_controller_id = ply_hashtable_new (NULL, NULL);
+
+ for (i = 0; i < backend->resources->count_connectors; i++) {
+ ply_renderer_head_t *head;
+ drmModeEncoder *encoder;
+ uint32_t encoder_id;
+ drmModeCrtc *controller;
+ uint32_t controller_id;
+ uint32_t console_buffer_id;
+ int connector_mode_index;
+
+ connector = drmModeGetConnector (backend->device_fd,
+ backend->resources->connectors[i]);
+
+ if (connector == NULL)
+ continue;
+
+ if (connector->connection != DRM_MODE_CONNECTED) {
+ drmModeFreeConnector (connector);
+ continue;
+ }
+
+ if (connector->count_modes <= 0) {
+ drmModeFreeConnector (connector);
+ continue;
+ }
+
+ encoder = find_encoder_for_connector (backend, connector);
+
+ if (encoder == NULL) {
+ drmModeFreeConnector (connector);
+ continue;
+ }
+
+ encoder_id = encoder->encoder_id;
+ controller = find_controller_for_encoder (backend, encoder);
+ drmModeFreeEncoder (encoder);
+
+ if (controller == NULL) {
+ drmModeFreeConnector (connector);
+ continue;
+ }
+
+ controller_id = controller->crtc_id;
+
+ connector_mode_index = get_index_of_active_mode (backend, controller, connector);
+
+ /* If we couldn't find the current active mode, fall back to the first available.
+ */
+ if (connector_mode_index < 0) {
+ ply_trace ("falling back to first available mode");
+ connector_mode_index = 0;
+ }
+
+ console_buffer_id = controller->buffer_id;
+ drmModeFreeCrtc (controller);
+
+ head = ply_hashtable_lookup (heads_by_controller_id,
+ (void *) (intptr_t) controller_id);
+
+ if (head == NULL) {
+ head = ply_renderer_head_new (backend, connector, connector_mode_index,
+ encoder_id, controller_id,
+ console_buffer_id);
+
+ ply_list_append_data (backend->heads, head);
+
+ ply_hashtable_insert (heads_by_controller_id,
+ (void *) (intptr_t) controller_id,
+ head);
+ } else {
+ if (!ply_renderer_head_add_connector (head, connector, connector_mode_index))
+ ply_trace ("couldn't connect monitor to existing head");
+
+ drmModeFreeConnector (connector);
+ }
}
- encoder = find_encoder_for_connector (backend, connector);
-
- if (encoder == NULL)
- {
- drmModeFreeConnector (connector);
- continue;
- }
+ ply_hashtable_free (heads_by_controller_id);
- encoder_id = encoder->encoder_id;
- controller = find_controller_for_encoder (backend, encoder);
- drmModeFreeEncoder (encoder);
-
- if (controller == NULL)
- {
- drmModeFreeConnector (connector);
- continue;
+#ifdef PLY_ENABLE_DEPRECATED_GDM_TRANSITION
+ /* If the driver doesn't support mapping the fb console
+ * then we can't get a smooth crossfade transition to
+ * the display manager unless we use the /dev/fb interface
+ * or the plymouth deactivate interface.
+ *
+ * In multihead configurations, we'd rather have working
+ * multihead, but otherwise bail now.
+ */
+ if (!backend->driver_supports_mapping_console &&
+ ply_list_get_length (backend->heads) == 1) {
+ ply_list_node_t *node;
+ ply_renderer_head_t *head;
+
+ node = ply_list_get_first_node (backend->heads);
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+
+ if (ply_array_get_size (head->connector_ids) == 1) {
+ ply_trace ("Only one monitor configured, and driver doesn't "
+ "support mapping console, so letting frame-buffer "
+ "take over");
+
+ free_heads (backend);
+ return false;
+ }
}
+#endif
- controller_id = controller->crtc_id;
-
- connector_mode_index = get_index_of_active_mode (backend, controller, connector);
+ return ply_list_get_length (backend->heads) > 0;
+}
- /* If we couldn't find the current active mode, fall back to the first available.
- */
- if (connector_mode_index < 0)
- {
- ply_trace ("falling back to first available mode");
- connector_mode_index = 0;
+static bool
+has_32bpp_support (ply_renderer_backend_t *backend)
+{
+ uint32_t buffer_id;
+ unsigned long row_stride;
+ uint32_t min_width;
+ uint32_t min_height;
+
+ min_width = backend->resources->min_width;
+ min_height = backend->resources->min_height;
+
+ /* Some drivers set min_width/min_height to 0,
+ * but 0x0 sized buffers don't work.
+ */
+ if (min_width == 0)
+ min_width = 1;
+
+ if (min_height == 0)
+ min_height = 1;
+
+ buffer_id = backend->driver_interface->create_buffer (backend->driver,
+ min_width,
+ min_height,
+ &row_stride);
+
+ if (buffer_id == 0) {
+ ply_trace ("Could not create minimal (%ux%u) 32bpp dummy buffer",
+ backend->resources->min_width,
+ backend->resources->min_height);
+ return false;
}
- console_buffer_id = controller->buffer_id;
- drmModeFreeCrtc (controller);
+ backend->driver_interface->destroy_buffer (backend->driver,
+ buffer_id);
- head = ply_hashtable_lookup (heads_by_controller_id,
- (void *) (intptr_t) controller_id);
+ return true;
+}
- if (head == NULL)
- {
- head = ply_renderer_head_new (backend, connector, connector_mode_index,
- encoder_id, controller_id,
- console_buffer_id);
+static bool
+query_device (ply_renderer_backend_t *backend)
+{
+ assert (backend != NULL);
+ assert (backend->device_fd >= 0);
- ply_list_append_data (backend->heads, head);
+ backend->resources = drmModeGetResources (backend->device_fd);
- ply_hashtable_insert (heads_by_controller_id,
- (void *) (intptr_t) controller_id,
- head);
+ if (backend->resources == NULL) {
+ ply_trace ("Could not get card resources");
+ return false;
}
- else
- {
- if (!ply_renderer_head_add_connector (head, connector, connector_mode_index))
- {
- ply_trace ("couldn't connect monitor to existing head");
- }
- drmModeFreeConnector (connector);
+ if (!create_heads_for_active_connectors (backend)) {
+ ply_trace ("Could not initialize heads");
+ return false;
}
- }
-
- ply_hashtable_free (heads_by_controller_id);
-
-#ifdef PLY_ENABLE_DEPRECATED_GDM_TRANSITION
- /* If the driver doesn't support mapping the fb console
- * then we can't get a smooth crossfade transition to
- * the display manager unless we use the /dev/fb interface
- * or the plymouth deactivate interface.
- *
- * In multihead configurations, we'd rather have working
- * multihead, but otherwise bail now.
- */
- if (!backend->driver_supports_mapping_console &&
- ply_list_get_length (backend->heads) == 1)
- {
- ply_list_node_t *node;
- ply_renderer_head_t *head;
-
- node = ply_list_get_first_node (backend->heads);
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
-
- if (ply_array_get_size (head->connector_ids) == 1)
- {
- ply_trace ("Only one monitor configured, and driver doesn't "
- "support mapping console, so letting frame-buffer "
- "take over");
- free_heads (backend);
- return false;
+ if (!has_32bpp_support (backend)) {
+ ply_trace ("Device doesn't support 32bpp framebuffer");
+ return false;
}
- }
-#endif
- return ply_list_get_length (backend->heads) > 0;
+ return true;
}
static bool
-has_32bpp_support (ply_renderer_backend_t *backend)
+map_to_device (ply_renderer_backend_t *backend)
{
- uint32_t buffer_id;
- unsigned long row_stride;
- uint32_t min_width;
- uint32_t min_height;
-
- min_width = backend->resources->min_width;
- min_height = backend->resources->min_height;
-
- /* Some drivers set min_width/min_height to 0,
- * but 0x0 sized buffers don't work.
- */
- if (min_width == 0)
- min_width = 1;
-
- if (min_height == 0)
- min_height = 1;
-
- buffer_id = backend->driver_interface->create_buffer (backend->driver,
- min_width,
- min_height,
- &row_stride);
-
- if (buffer_id == 0)
- {
- ply_trace ("Could not create minimal (%ux%u) 32bpp dummy buffer",
- backend->resources->min_width,
- backend->resources->min_height);
- return false;
- }
-
- backend->driver_interface->destroy_buffer (backend->driver,
- buffer_id);
-
- return true;
-}
+ ply_list_node_t *node;
+ bool head_mapped;
-static bool
-query_device (ply_renderer_backend_t *backend)
-{
- assert (backend != NULL);
- assert (backend->device_fd >= 0);
-
- backend->resources = drmModeGetResources (backend->device_fd);
-
- if (backend->resources == NULL)
- {
- ply_trace ("Could not get card resources");
- return false;
- }
-
- if (!create_heads_for_active_connectors (backend))
- {
- ply_trace ("Could not initialize heads");
- return false;
- }
-
- if (!has_32bpp_support (backend))
- {
- ply_trace ("Device doesn't support 32bpp framebuffer");
- return false;
- }
-
- return true;
-}
+ head_mapped = false;
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
-static bool
-map_to_device (ply_renderer_backend_t *backend)
-{
- ply_list_node_t *node;
- bool head_mapped;
-
- head_mapped = false;
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
-
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
-
- if (ply_renderer_head_map (backend, head))
- head_mapped = true;
-
- node = next_node;
- }
-
- if (backend->terminal != NULL)
- {
- if (ply_terminal_is_active (backend->terminal))
- activate (backend);
- else
- ply_terminal_activate_vt (backend->terminal);
- }
- else
- {
- activate (backend);
- }
-
- return head_mapped;
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
+
+ if (ply_renderer_head_map (backend, head))
+ head_mapped = true;
+
+ node = next_node;
+ }
+
+ if (backend->terminal != NULL) {
+ if (ply_terminal_is_active (backend->terminal))
+ activate (backend);
+ else
+ ply_terminal_activate_vt (backend->terminal);
+ } else {
+ activate (backend);
+ }
+
+ return head_mapped;
}
static bool
@@ -912,338 +865,324 @@ ply_renderer_head_set_scan_out_buffer_to_console (ply_renderer_backend_t *backen
ply_renderer_head_t *head,
bool should_set_to_black)
{
- unsigned long width;
- unsigned long height;
- unsigned long row_stride;
- uint32_t *shadow_buffer;
- ply_pixel_buffer_t *pixel_buffer;
- char *map_address;
- ply_rectangle_t area;
-
- if (!backend->driver_interface->fetch_buffer (backend->driver,
- head->console_buffer_id,
- &width, &height, &row_stride))
- return false;
-
- if (!backend->driver_interface->map_buffer (backend->driver,
- head->console_buffer_id))
- {
- backend->driver_interface->destroy_buffer (backend->driver,
+ unsigned long width;
+ unsigned long height;
+ unsigned long row_stride;
+ uint32_t *shadow_buffer;
+ ply_pixel_buffer_t *pixel_buffer;
+ char *map_address;
+ ply_rectangle_t area;
+
+ if (!backend->driver_interface->fetch_buffer (backend->driver,
+ head->console_buffer_id,
+ &width, &height, &row_stride))
+ return false;
+
+ if (!backend->driver_interface->map_buffer (backend->driver,
+ head->console_buffer_id)) {
+ backend->driver_interface->destroy_buffer (backend->driver,
+ head->console_buffer_id);
+ return false;
+ }
+
+ if (head->area.width != width || head->area.height != height) {
+ /* Force black if the fb console resolution doesn't match our resolution
+ */
+ area.x = 0;
+ area.y = 0;
+ area.width = width;
+ area.height = height;
+
+ should_set_to_black = true;
+ ply_trace ("Console fb is %ldx%ld and screen contents are %ldx%ld. "
+ "They aren't the same dimensions; forcing black",
+ width, height, head->area.width, head->area.height);
+ } else {
+ area = head->area;
+ }
+
+ if (should_set_to_black) {
+ pixel_buffer = ply_pixel_buffer_new (width, height);
+ shadow_buffer = ply_pixel_buffer_get_argb32_data (pixel_buffer);
+ } else {
+ pixel_buffer = NULL;
+ shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
+ }
+
+ ply_trace ("Drawing %s to console fb", should_set_to_black ? "black" : "screen contents");
+ map_address =
+ backend->driver_interface->begin_flush (backend->driver,
+ head->console_buffer_id);
+
+ flush_area ((char *) shadow_buffer, area.width * 4,
+ map_address, row_stride, &area);
+
+ backend->driver_interface->end_flush (backend->driver,
+ head->console_buffer_id);
+
+ backend->driver_interface->unmap_buffer (backend->driver,
head->console_buffer_id);
- return false;
- }
-
- if (head->area.width != width || head->area.height != height)
- {
- /* Force black if the fb console resolution doesn't match our resolution
- */
- area.x = 0;
- area.y = 0;
- area.width = width;
- area.height = height;
-
- should_set_to_black = true;
- ply_trace ("Console fb is %ldx%ld and screen contents are %ldx%ld. "
- "They aren't the same dimensions; forcing black",
- width, height, head->area.width, head->area.height);
- }
- else
- area = head->area;
-
- if (should_set_to_black)
- {
- pixel_buffer = ply_pixel_buffer_new (width, height);
- shadow_buffer = ply_pixel_buffer_get_argb32_data (pixel_buffer);
- }
- else
- {
- pixel_buffer = NULL;
- shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
- }
-
- ply_trace ("Drawing %s to console fb", should_set_to_black? "black" : "screen contents");
- map_address =
- backend->driver_interface->begin_flush (backend->driver,
- head->console_buffer_id);
-
- flush_area ((char *) shadow_buffer, area.width * 4,
- map_address, row_stride, &area);
-
- backend->driver_interface->end_flush (backend->driver,
- head->console_buffer_id);
-
- backend->driver_interface->unmap_buffer (backend->driver,
- head->console_buffer_id);
-
- ply_trace ("Setting scan out hardware to console fb");
- ply_renderer_head_set_scan_out_buffer (backend,
- head, head->console_buffer_id);
-
- backend->driver_interface->destroy_buffer (backend->driver,
- head->console_buffer_id);
-
- if (pixel_buffer != NULL)
- ply_pixel_buffer_free (pixel_buffer);
-
- return true;
+
+ ply_trace ("Setting scan out hardware to console fb");
+ ply_renderer_head_set_scan_out_buffer (backend,
+ head, head->console_buffer_id);
+
+ backend->driver_interface->destroy_buffer (backend->driver,
+ head->console_buffer_id);
+
+ if (pixel_buffer != NULL)
+ ply_pixel_buffer_free (pixel_buffer);
+
+ return true;
}
static void
unmap_from_device (ply_renderer_backend_t *backend)
{
- ply_list_node_t *node;
- bool should_set_to_black;
+ ply_list_node_t *node;
+ bool should_set_to_black;
- /* We only copy what's on screen back to the fb console
- * if there's one head (since in multihead set ups the fb console
- * is cloned).
- */
- should_set_to_black = ply_list_get_length (backend->heads) > 1;
+ /* We only copy what's on screen back to the fb console
+ * if there's one head (since in multihead set ups the fb console
+ * is cloned).
+ */
+ should_set_to_black = ply_list_get_length (backend->heads) > 1;
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
- if (backend->is_active)
- {
- ply_trace ("scanning out %s directly to console",
- should_set_to_black? "black" : "splash");
- ply_renderer_head_set_scan_out_buffer_to_console (backend, head,
- should_set_to_black);
- }
+ if (backend->is_active) {
+ ply_trace ("scanning out %s directly to console",
+ should_set_to_black ? "black" : "splash");
+ ply_renderer_head_set_scan_out_buffer_to_console (backend, head,
+ should_set_to_black);
+ }
- ply_renderer_head_unmap (backend, head);
+ ply_renderer_head_unmap (backend, head);
- node = next_node;
- }
+ node = next_node;
+ }
}
static bool
reset_scan_out_buffer_if_needed (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- drmModeCrtc *controller;
- bool did_reset = false;
+ drmModeCrtc *controller;
+ bool did_reset = false;
- if (backend->terminal != NULL)
- {
- if (!ply_terminal_is_active (backend->terminal))
- return false;
- }
+ if (backend->terminal != NULL)
+ if (!ply_terminal_is_active (backend->terminal))
+ return false;
- controller = drmModeGetCrtc (backend->device_fd, head->controller_id);
+ controller = drmModeGetCrtc (backend->device_fd, head->controller_id);
- if (controller == NULL)
- return false;
+ if (controller == NULL)
+ return false;
- if (controller->buffer_id != head->scan_out_buffer_id)
- {
- ply_renderer_head_set_scan_out_buffer (backend, head,
- head->scan_out_buffer_id);
- did_reset = true;
- }
+ if (controller->buffer_id != head->scan_out_buffer_id) {
+ ply_renderer_head_set_scan_out_buffer (backend, head,
+ head->scan_out_buffer_id);
+ did_reset = true;
+ }
- drmModeFreeCrtc (controller);
+ drmModeFreeCrtc (controller);
- return did_reset;
+ return did_reset;
}
static void
flush_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_region_t *updated_region;
- ply_list_t *areas_to_flush;
- ply_list_node_t *node;
- ply_pixel_buffer_t *pixel_buffer;
- char *map_address;
-
- assert (backend != NULL);
-
- if (!backend->is_active)
- return;
-
- if (backend->terminal != NULL)
- {
- ply_terminal_set_mode (backend->terminal, PLY_TERMINAL_MODE_GRAPHICS);
- ply_terminal_set_unbuffered_input (backend->terminal);
- }
- pixel_buffer = head->pixel_buffer;
- updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
- areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region);
-
- map_address =
- backend->driver_interface->begin_flush (backend->driver,
- head->scan_out_buffer_id);
-
- node = ply_list_get_first_node (areas_to_flush);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_rectangle_t *area_to_flush;
-
- area_to_flush = (ply_rectangle_t *) ply_list_node_get_data (node);
-
- next_node = ply_list_get_next_node (areas_to_flush, node);
-
- if (reset_scan_out_buffer_if_needed (backend, head))
- ply_trace ("Needed to reset scan out buffer on %ldx%ld renderer head",
- head->area.width, head->area.height);
+ ply_region_t *updated_region;
+ ply_list_t *areas_to_flush;
+ ply_list_node_t *node;
+ ply_pixel_buffer_t *pixel_buffer;
+ char *map_address;
+
+ assert (backend != NULL);
+
+ if (!backend->is_active)
+ return;
+
+ if (backend->terminal != NULL) {
+ ply_terminal_set_mode (backend->terminal, PLY_TERMINAL_MODE_GRAPHICS);
+ ply_terminal_set_unbuffered_input (backend->terminal);
+ }
+ pixel_buffer = head->pixel_buffer;
+ updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
+ areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region);
+
+ map_address =
+ backend->driver_interface->begin_flush (backend->driver,
+ head->scan_out_buffer_id);
+
+ node = ply_list_get_first_node (areas_to_flush);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_rectangle_t *area_to_flush;
+
+ area_to_flush = (ply_rectangle_t *) ply_list_node_get_data (node);
- ply_renderer_head_flush_area (head, area_to_flush, map_address);
+ next_node = ply_list_get_next_node (areas_to_flush, node);
- node = next_node;
- }
+ if (reset_scan_out_buffer_if_needed (backend, head))
+ ply_trace ("Needed to reset scan out buffer on %ldx%ld renderer head",
+ head->area.width, head->area.height);
- backend->driver_interface->end_flush (backend->driver,
- head->scan_out_buffer_id);
+ ply_renderer_head_flush_area (head, area_to_flush, map_address);
- ply_region_clear (updated_region);
+ node = next_node;
+ }
+
+ backend->driver_interface->end_flush (backend->driver,
+ head->scan_out_buffer_id);
+
+ ply_region_clear (updated_region);
}
static void
ply_renderer_head_redraw (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_region_t *region;
+ ply_region_t *region;
- ply_trace ("Redrawing %ldx%ld renderer head", head->area.width, head->area.height);
+ ply_trace ("Redrawing %ldx%ld renderer head", head->area.width, head->area.height);
- region = ply_pixel_buffer_get_updated_areas (head->pixel_buffer);
+ region = ply_pixel_buffer_get_updated_areas (head->pixel_buffer);
- ply_region_add_rectangle (region, &head->area);
+ ply_region_add_rectangle (region, &head->area);
- flush_head (backend, head);
+ flush_head (backend, head);
}
static ply_list_t *
get_heads (ply_renderer_backend_t *backend)
{
- return backend->heads;
+ return backend->heads;
}
static ply_pixel_buffer_t *
get_buffer_for_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
+ if (head->backend != backend)
+ return NULL;
- if (head->backend != backend)
- return NULL;
-
- return head->pixel_buffer;
+ return head->pixel_buffer;
}
static bool
has_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- return input_source == &backend->input_source;
+ return input_source == &backend->input_source;
}
static ply_renderer_input_source_t *
get_input_source (ply_renderer_backend_t *backend)
{
- return &backend->input_source;
+ return &backend->input_source;
}
static void
on_key_event (ply_renderer_input_source_t *input_source,
int terminal_fd)
-{
- ply_buffer_append_from_fd (input_source->key_buffer,
- terminal_fd);
-
- if (input_source->handler != NULL)
- input_source->handler (input_source->user_data, input_source->key_buffer, input_source);
+{
+ ply_buffer_append_from_fd (input_source->key_buffer,
+ terminal_fd);
+ if (input_source->handler != NULL)
+ input_source->handler (input_source->user_data, input_source->key_buffer, input_source);
}
static void
on_input_source_disconnected (ply_renderer_input_source_t *input_source)
{
- ply_trace ("input source disconnected, reopening");
+ ply_trace ("input source disconnected, reopening");
- open_input_source (input_source->backend, input_source);
+ open_input_source (input_source->backend, input_source);
}
static bool
open_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- int terminal_fd;
+ int terminal_fd;
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- if (backend->terminal == NULL)
- return false;
+ if (backend->terminal == NULL)
+ return false;
- terminal_fd = ply_terminal_get_fd (backend->terminal);
+ terminal_fd = ply_terminal_get_fd (backend->terminal);
- input_source->backend = backend;
- input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t) on_key_event,
- (ply_event_handler_t)
- on_input_source_disconnected, input_source);
- return true;
+ input_source->backend = backend;
+ input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t) on_key_event,
+ (ply_event_handler_t)
+ on_input_source_disconnected, input_source);
+ return true;
}
static void
-set_handler_for_input_source (ply_renderer_backend_t *backend,
- ply_renderer_input_source_t *input_source,
+set_handler_for_input_source (ply_renderer_backend_t *backend,
+ ply_renderer_input_source_t *input_source,
ply_renderer_input_source_handler_t handler,
- void *user_data)
+ void *user_data)
{
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- input_source->handler = handler;
- input_source->user_data = user_data;
+ input_source->handler = handler;
+ input_source->user_data = user_data;
}
static void
close_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- if (backend->terminal == NULL)
- return;
+ if (backend->terminal == NULL)
+ return;
- ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch);
- input_source->terminal_input_watch = NULL;
- input_source->backend = NULL;
+ ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch);
+ input_source->terminal_input_watch = NULL;
+ input_source->backend = NULL;
}
ply_renderer_plugin_interface_t *
ply_renderer_backend_get_interface (void)
{
- static ply_renderer_plugin_interface_t plugin_interface =
- {
- .create_backend = create_backend,
- .destroy_backend = destroy_backend,
- .open_device = open_device,
- .close_device = close_device,
- .query_device = query_device,
- .map_to_device = map_to_device,
- .unmap_from_device = unmap_from_device,
- .activate = activate,
- .deactivate = deactivate,
- .flush_head = flush_head,
- .get_heads = get_heads,
- .get_buffer_for_head = get_buffer_for_head,
- .get_input_source = get_input_source,
- .open_input_source = open_input_source,
- .set_handler_for_input_source = set_handler_for_input_source,
- .close_input_source = close_input_source
- };
-
- return &plugin_interface;
+ static ply_renderer_plugin_interface_t plugin_interface =
+ {
+ .create_backend = create_backend,
+ .destroy_backend = destroy_backend,
+ .open_device = open_device,
+ .close_device = close_device,
+ .query_device = query_device,
+ .map_to_device = map_to_device,
+ .unmap_from_device = unmap_from_device,
+ .activate = activate,
+ .deactivate = deactivate,
+ .flush_head = flush_head,
+ .get_heads = get_heads,
+ .get_buffer_for_head = get_buffer_for_head,
+ .get_input_source = get_input_source,
+ .open_input_source = open_input_source,
+ .set_handler_for_input_source = set_handler_for_input_source,
+ .close_input_source = close_input_source
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/plugins/renderers/drm/ply-renderer-driver.h b/src/plugins/renderers/drm/ply-renderer-driver.h
index a0d6044a..f3febcf4 100644
--- a/src/plugins/renderers/drm/ply-renderer-driver.h
+++ b/src/plugins/renderers/drm/ply-renderer-driver.h
@@ -33,34 +33,33 @@ typedef struct _ply_renderer_driver ply_renderer_driver_t;
typedef struct
{
- ply_renderer_driver_t * (* create_driver) (int device_fd);
+ ply_renderer_driver_t * (*create_driver)(int device_fd);
- void (* destroy_driver) (ply_renderer_driver_t *driver);
+ void (*destroy_driver)(ply_renderer_driver_t *driver);
- uint32_t (* create_buffer) (ply_renderer_driver_t *driver,
- unsigned long width,
- unsigned long height,
- unsigned long *row_stride);
- bool (* fetch_buffer) (ply_renderer_driver_t *driver,
- uint32_t buffer_id,
- unsigned long *width,
- unsigned long *height,
- unsigned long *row_stride);
+ uint32_t (*create_buffer)(ply_renderer_driver_t *driver,
+ unsigned long width,
+ unsigned long height,
+ unsigned long *row_stride);
+ bool (*fetch_buffer)(ply_renderer_driver_t *driver,
+ uint32_t buffer_id,
+ unsigned long *width,
+ unsigned long *height,
+ unsigned long *row_stride);
- bool (* map_buffer) (ply_renderer_driver_t *driver,
- uint32_t buffer_id);
-
- void (* unmap_buffer) (ply_renderer_driver_t *driver,
+ bool (*map_buffer)(ply_renderer_driver_t *driver,
uint32_t buffer_id);
- char * (* begin_flush) (ply_renderer_driver_t *driver,
- uint32_t buffer_id);
- void (* end_flush) (ply_renderer_driver_t *driver,
- uint32_t buffer_id);
-
- void (* destroy_buffer) (ply_renderer_driver_t *driver,
+ void (*unmap_buffer)(ply_renderer_driver_t *driver,
uint32_t buffer_id);
+ char * (*begin_flush)(ply_renderer_driver_t * driver,
+ uint32_t buffer_id);
+ void (*end_flush)(ply_renderer_driver_t *driver,
+ uint32_t buffer_id);
+
+ void (*destroy_buffer)(ply_renderer_driver_t *driver,
+ uint32_t buffer_id);
} ply_renderer_driver_interface_t;
#endif /* PLY_RENDERER_DRIVER_H */
diff --git a/src/plugins/renderers/drm/ply-renderer-generic-driver.c b/src/plugins/renderers/drm/ply-renderer-generic-driver.c
index 45a8faab..b1be714b 100644
--- a/src/plugins/renderers/drm/ply-renderer-generic-driver.c
+++ b/src/plugins/renderers/drm/ply-renderer-generic-driver.c
@@ -53,91 +53,89 @@ typedef struct _ply_renderer_buffer ply_renderer_buffer_t;
struct _ply_renderer_buffer
{
- uint32_t id;
+ uint32_t id;
- uint32_t handle;
- uint32_t width;
- uint32_t height;
- uint32_t row_stride;
+ uint32_t handle;
+ uint32_t width;
+ uint32_t height;
+ uint32_t row_stride;
- void *map_address;
- uint32_t map_size;
- int map_count;
+ void *map_address;
+ uint32_t map_size;
+ int map_count;
- uint32_t added_fb : 1;
+ uint32_t added_fb : 1;
};
struct _ply_renderer_driver
{
- int device_fd;
- ply_hashtable_t *buffers;
+ int device_fd;
+ ply_hashtable_t *buffers;
- uint32_t requires_explicit_flushing : 1;
+ uint32_t requires_explicit_flushing : 1;
};
static bool
ply_renderer_buffer_map (ply_renderer_driver_t *driver,
ply_renderer_buffer_t *buffer)
{
- struct drm_mode_map_dumb map_dumb_buffer_request;
- void *map_address;
-
- if (buffer->map_address != MAP_FAILED)
- {
- buffer->map_count++;
- return true;
- }
-
- memset (&map_dumb_buffer_request, 0, sizeof (struct drm_mode_map_dumb));
- map_dumb_buffer_request.handle = buffer->handle;
- if (drmIoctl (driver->device_fd, DRM_IOCTL_MODE_MAP_DUMB, &map_dumb_buffer_request) < 0)
- {
- ply_trace ("Could not map GEM object %u: %m", buffer->handle);
- return false;
- }
-
- map_address = mmap (0, buffer->map_size,
- PROT_READ | PROT_WRITE, MAP_SHARED,
- driver->device_fd, map_dumb_buffer_request.offset);
-
- if (map_address == MAP_FAILED)
- return false;
-
- buffer->map_address = map_address;
- buffer->map_count++;
-
- return true;
+ struct drm_mode_map_dumb map_dumb_buffer_request;
+ void *map_address;
+
+ if (buffer->map_address != MAP_FAILED) {
+ buffer->map_count++;
+ return true;
+ }
+
+ memset (&map_dumb_buffer_request, 0, sizeof(struct drm_mode_map_dumb));
+ map_dumb_buffer_request.handle = buffer->handle;
+ if (drmIoctl (driver->device_fd, DRM_IOCTL_MODE_MAP_DUMB, &map_dumb_buffer_request) < 0) {
+ ply_trace ("Could not map GEM object %u: %m", buffer->handle);
+ return false;
+ }
+
+ map_address = mmap (0, buffer->map_size,
+ PROT_READ | PROT_WRITE, MAP_SHARED,
+ driver->device_fd, map_dumb_buffer_request.offset);
+
+ if (map_address == MAP_FAILED)
+ return false;
+
+ buffer->map_address = map_address;
+ buffer->map_count++;
+
+ return true;
}
static void
ply_renderer_buffer_unmap (ply_renderer_driver_t *driver,
ply_renderer_buffer_t *buffer)
{
- buffer->map_count--;
+ buffer->map_count--;
- assert (buffer->map_count >= 0);
+ assert (buffer->map_count >= 0);
}
static ply_renderer_driver_t *
create_driver (int device_fd)
{
- ply_renderer_driver_t *driver;
+ ply_renderer_driver_t *driver;
- driver = calloc (1, sizeof (ply_renderer_driver_t));
- driver->device_fd = device_fd;
- driver->requires_explicit_flushing = true;
- driver->buffers = ply_hashtable_new (ply_hashtable_direct_hash,
- ply_hashtable_direct_compare);
+ driver = calloc (1, sizeof(ply_renderer_driver_t));
+ driver->device_fd = device_fd;
+ driver->requires_explicit_flushing = true;
+ driver->buffers = ply_hashtable_new (ply_hashtable_direct_hash,
+ ply_hashtable_direct_compare);
- return driver;
+ return driver;
}
static void
destroy_driver (ply_renderer_driver_t *driver)
{
- ply_hashtable_free (driver->buffers);
+ ply_hashtable_free (driver->buffers);
- free (driver);
+ free (driver);
}
static ply_renderer_buffer_t *
@@ -145,77 +143,73 @@ ply_renderer_buffer_new (ply_renderer_driver_t *driver,
uint32_t width,
uint32_t height)
{
- ply_renderer_buffer_t *buffer;
- struct drm_mode_create_dumb create_dumb_buffer_request;
-
- buffer = calloc (1, sizeof (ply_renderer_buffer_t));
- buffer->width = width;
- buffer->height = height;
- buffer->map_address = MAP_FAILED;
-
- memset (&create_dumb_buffer_request, 0, sizeof (struct drm_mode_create_dumb));
-
- create_dumb_buffer_request.width = width;
- create_dumb_buffer_request.height = height;
- create_dumb_buffer_request.bpp = 32;
- create_dumb_buffer_request.flags = 0;
-
- if (drmIoctl (driver->device_fd,
- DRM_IOCTL_MODE_CREATE_DUMB,
- &create_dumb_buffer_request) < 0)
- {
- free (buffer);
- ply_trace ("Could not allocate GEM object for frame buffer: %m");
- return NULL;
- }
-
- buffer->handle = create_dumb_buffer_request.handle;
- buffer->row_stride = create_dumb_buffer_request.pitch;
- buffer->map_size = create_dumb_buffer_request.size;
-
- ply_trace ("returning %ux%u buffer with stride %u",
- width, height, buffer->row_stride);
-
- return buffer;
+ ply_renderer_buffer_t *buffer;
+ struct drm_mode_create_dumb create_dumb_buffer_request;
+
+ buffer = calloc (1, sizeof(ply_renderer_buffer_t));
+ buffer->width = width;
+ buffer->height = height;
+ buffer->map_address = MAP_FAILED;
+
+ memset (&create_dumb_buffer_request, 0, sizeof(struct drm_mode_create_dumb));
+
+ create_dumb_buffer_request.width = width;
+ create_dumb_buffer_request.height = height;
+ create_dumb_buffer_request.bpp = 32;
+ create_dumb_buffer_request.flags = 0;
+
+ if (drmIoctl (driver->device_fd,
+ DRM_IOCTL_MODE_CREATE_DUMB,
+ &create_dumb_buffer_request) < 0) {
+ free (buffer);
+ ply_trace ("Could not allocate GEM object for frame buffer: %m");
+ return NULL;
+ }
+
+ buffer->handle = create_dumb_buffer_request.handle;
+ buffer->row_stride = create_dumb_buffer_request.pitch;
+ buffer->map_size = create_dumb_buffer_request.size;
+
+ ply_trace ("returning %ux%u buffer with stride %u",
+ width, height, buffer->row_stride);
+
+ return buffer;
}
static void
ply_renderer_buffer_free (ply_renderer_driver_t *driver,
ply_renderer_buffer_t *buffer)
{
- struct drm_mode_destroy_dumb destroy_dumb_buffer_request;
+ struct drm_mode_destroy_dumb destroy_dumb_buffer_request;
- if (buffer->added_fb)
- drmModeRmFB (driver->device_fd, buffer->id);
+ if (buffer->added_fb)
+ drmModeRmFB (driver->device_fd, buffer->id);
- if (buffer->map_address != MAP_FAILED)
- {
- munmap (buffer->map_address, buffer->map_size);
- buffer->map_address = MAP_FAILED;
- }
+ if (buffer->map_address != MAP_FAILED) {
+ munmap (buffer->map_address, buffer->map_size);
+ buffer->map_address = MAP_FAILED;
+ }
- memset (&destroy_dumb_buffer_request, 0, sizeof (struct drm_mode_destroy_dumb));
- destroy_dumb_buffer_request.handle = buffer->handle;
+ memset (&destroy_dumb_buffer_request, 0, sizeof(struct drm_mode_destroy_dumb));
+ destroy_dumb_buffer_request.handle = buffer->handle;
- if (drmIoctl (driver->device_fd,
- DRM_IOCTL_MODE_DESTROY_DUMB,
- &destroy_dumb_buffer_request) < 0)
- {
- ply_trace ("Could not deallocate GEM object %u: %m", buffer->handle);
- }
+ if (drmIoctl (driver->device_fd,
+ DRM_IOCTL_MODE_DESTROY_DUMB,
+ &destroy_dumb_buffer_request) < 0)
+ ply_trace ("Could not deallocate GEM object %u: %m", buffer->handle);
- free (buffer);
+ free (buffer);
}
static ply_renderer_buffer_t *
get_buffer_from_id (ply_renderer_driver_t *driver,
uint32_t id)
{
- static ply_renderer_buffer_t *buffer;
+ static ply_renderer_buffer_t *buffer;
- buffer = ply_hashtable_lookup (driver->buffers, (void *) (uintptr_t) id);
+ buffer = ply_hashtable_lookup (driver->buffers, (void *) (uintptr_t) id);
- return buffer;
+ return buffer;
}
static bool
@@ -225,28 +219,27 @@ fetch_buffer (ply_renderer_driver_t *driver,
unsigned long *height,
unsigned long *row_stride)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = get_buffer_from_id (driver, buffer_id);
+ buffer = get_buffer_from_id (driver, buffer_id);
- if (buffer == NULL)
- {
- ply_trace ("could not fetch buffer %u", buffer_id);
- return false;
- }
+ if (buffer == NULL) {
+ ply_trace ("could not fetch buffer %u", buffer_id);
+ return false;
+ }
- if (width != NULL)
- *width = buffer->width;
+ if (width != NULL)
+ *width = buffer->width;
- if (height != NULL)
- *height = buffer->height;
+ if (height != NULL)
+ *height = buffer->height;
- if (row_stride != NULL)
- *row_stride = buffer->row_stride;
+ if (row_stride != NULL)
+ *row_stride = buffer->row_stride;
- ply_trace ("fetched %ux%u buffer with stride %u",
- buffer->width, buffer->height, buffer->row_stride);
- return true;
+ ply_trace ("fetched %ux%u buffer with stride %u",
+ buffer->width, buffer->height, buffer->row_stride);
+ return true;
}
static uint32_t
@@ -255,141 +248,138 @@ create_buffer (ply_renderer_driver_t *driver,
unsigned long height,
unsigned long *row_stride)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = ply_renderer_buffer_new (driver, width, height);
+ buffer = ply_renderer_buffer_new (driver, width, height);
- if (buffer == NULL)
- {
- ply_trace ("Could not allocate GEM object for frame buffer: %m");
- return 0;
- }
+ if (buffer == NULL) {
+ ply_trace ("Could not allocate GEM object for frame buffer: %m");
+ return 0;
+ }
- if (drmModeAddFB (driver->device_fd, width, height,
- 24, 32, buffer->row_stride, buffer->handle,
- &buffer->id) != 0)
- {
- ply_trace ("Could not set up GEM object as frame buffer: %m");
- ply_renderer_buffer_free (driver, buffer);
- return 0;
- }
+ if (drmModeAddFB (driver->device_fd, width, height,
+ 24, 32, buffer->row_stride, buffer->handle,
+ &buffer->id) != 0) {
+ ply_trace ("Could not set up GEM object as frame buffer: %m");
+ ply_renderer_buffer_free (driver, buffer);
+ return 0;
+ }
- *row_stride = buffer->row_stride;
+ *row_stride = buffer->row_stride;
- buffer->added_fb = true;
- ply_hashtable_insert (driver->buffers,
- (void *) (uintptr_t) buffer->id,
- buffer);
+ buffer->added_fb = true;
+ ply_hashtable_insert (driver->buffers,
+ (void *) (uintptr_t) buffer->id,
+ buffer);
- return buffer->id;
+ return buffer->id;
}
static bool
map_buffer (ply_renderer_driver_t *driver,
uint32_t buffer_id)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = get_buffer_from_id (driver, buffer_id);
+ buffer = get_buffer_from_id (driver, buffer_id);
- assert (buffer != NULL);
+ assert (buffer != NULL);
- return ply_renderer_buffer_map (driver, buffer);
+ return ply_renderer_buffer_map (driver, buffer);
}
static void
unmap_buffer (ply_renderer_driver_t *driver,
uint32_t buffer_id)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = get_buffer_from_id (driver, buffer_id);
+ buffer = get_buffer_from_id (driver, buffer_id);
- assert (buffer != NULL);
+ assert (buffer != NULL);
- ply_renderer_buffer_unmap (driver, buffer);
+ ply_renderer_buffer_unmap (driver, buffer);
}
static char *
begin_flush (ply_renderer_driver_t *driver,
uint32_t buffer_id)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = get_buffer_from_id (driver, buffer_id);
+ buffer = get_buffer_from_id (driver, buffer_id);
- assert (buffer != NULL);
+ assert (buffer != NULL);
- return buffer->map_address;
+ return buffer->map_address;
}
static void
end_flush (ply_renderer_driver_t *driver,
uint32_t buffer_id)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = get_buffer_from_id (driver, buffer_id);
+ buffer = get_buffer_from_id (driver, buffer_id);
- assert (buffer != NULL);
+ assert (buffer != NULL);
- if (driver->requires_explicit_flushing)
- {
- struct drm_clip_rect flush_area;
- int ret;
+ if (driver->requires_explicit_flushing) {
+ struct drm_clip_rect flush_area;
+ int ret;
- flush_area.x1 = 0;
- flush_area.y1 = 0;
- flush_area.x2 = buffer->width;
- flush_area.y2 = buffer->height;
+ flush_area.x1 = 0;
+ flush_area.y1 = 0;
+ flush_area.x2 = buffer->width;
+ flush_area.y2 = buffer->height;
- ret = drmModeDirtyFB (driver->device_fd, buffer->id, &flush_area, 1);
+ ret = drmModeDirtyFB (driver->device_fd, buffer->id, &flush_area, 1);
- if (ret == -ENOSYS)
- driver->requires_explicit_flushing = false;
- }
+ if (ret == -ENOSYS)
+ driver->requires_explicit_flushing = false;
+ }
}
static void
destroy_buffer (ply_renderer_driver_t *driver,
uint32_t buffer_id)
{
- ply_renderer_buffer_t *buffer;
+ ply_renderer_buffer_t *buffer;
- buffer = ply_hashtable_remove (driver->buffers,
- (void *) (uintptr_t) buffer_id);
+ buffer = ply_hashtable_remove (driver->buffers,
+ (void *) (uintptr_t) buffer_id);
- assert (buffer != NULL);
+ assert (buffer != NULL);
- ply_renderer_buffer_free (driver, buffer);
+ ply_renderer_buffer_free (driver, buffer);
}
ply_renderer_driver_interface_t *
ply_renderer_generic_driver_get_interface (int device_fd)
{
- uint64_t supports_dumb_buffers;
+ uint64_t supports_dumb_buffers;
- static ply_renderer_driver_interface_t driver_interface =
- {
- .create_driver = create_driver,
- .destroy_driver = destroy_driver,
- .create_buffer = create_buffer,
- .fetch_buffer = fetch_buffer,
- .map_buffer = map_buffer,
- .unmap_buffer = unmap_buffer,
- .begin_flush = begin_flush,
- .end_flush = end_flush,
- .destroy_buffer = destroy_buffer,
- };
+ static ply_renderer_driver_interface_t driver_interface =
+ {
+ .create_driver = create_driver,
+ .destroy_driver = destroy_driver,
+ .create_buffer = create_buffer,
+ .fetch_buffer = fetch_buffer,
+ .map_buffer = map_buffer,
+ .unmap_buffer = unmap_buffer,
+ .begin_flush = begin_flush,
+ .end_flush = end_flush,
+ .destroy_buffer = destroy_buffer,
+ };
- if (drmGetCap (device_fd, DRM_CAP_DUMB_BUFFER, &supports_dumb_buffers) < 0)
- return NULL;
+ if (drmGetCap (device_fd, DRM_CAP_DUMB_BUFFER, &supports_dumb_buffers) < 0)
+ return NULL;
- if (!supports_dumb_buffers)
- return NULL;
+ if (!supports_dumb_buffers)
+ return NULL;
- return &driver_interface;
+ return &driver_interface;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s, (0,=.5s,:.5s */
diff --git a/src/plugins/renderers/frame-buffer/plugin.c b/src/plugins/renderers/frame-buffer/plugin.c
index dd73a0f7..418855ab 100644
--- a/src/plugins/renderers/frame-buffer/plugin.c
+++ b/src/plugins/renderers/frame-buffer/plugin.c
@@ -61,58 +61,57 @@
struct _ply_renderer_head
{
- ply_pixel_buffer_t *pixel_buffer;
- ply_rectangle_t area;
- char *map_address;
- size_t size;
-
+ ply_pixel_buffer_t *pixel_buffer;
+ ply_rectangle_t area;
+ char *map_address;
+ size_t size;
};
struct _ply_renderer_input_source
{
- ply_renderer_backend_t *backend;
- ply_fd_watch_t *terminal_input_watch;
+ ply_renderer_backend_t *backend;
+ ply_fd_watch_t *terminal_input_watch;
- ply_buffer_t *key_buffer;
+ ply_buffer_t *key_buffer;
- ply_renderer_input_source_handler_t handler;
- void *user_data;
+ ply_renderer_input_source_handler_t handler;
+ void *user_data;
};
struct _ply_renderer_backend
{
- ply_event_loop_t *loop;
- ply_terminal_t *terminal;
+ ply_event_loop_t *loop;
+ ply_terminal_t *terminal;
- char *device_name;
- int device_fd;
+ char *device_name;
+ int device_fd;
- ply_renderer_input_source_t input_source;
- ply_renderer_head_t head;
- ply_list_t *heads;
+ ply_renderer_input_source_t input_source;
+ ply_renderer_head_t head;
+ ply_list_t *heads;
- uint32_t red_bit_position;
- uint32_t green_bit_position;
- uint32_t blue_bit_position;
- uint32_t alpha_bit_position;
+ uint32_t red_bit_position;
+ uint32_t green_bit_position;
+ uint32_t blue_bit_position;
+ uint32_t alpha_bit_position;
- uint32_t bits_for_red;
- uint32_t bits_for_green;
- uint32_t bits_for_blue;
- uint32_t bits_for_alpha;
+ uint32_t bits_for_red;
+ uint32_t bits_for_green;
+ uint32_t bits_for_blue;
+ uint32_t bits_for_alpha;
- int32_t dither_red;
- int32_t dither_green;
- int32_t dither_blue;
+ int32_t dither_red;
+ int32_t dither_green;
+ int32_t dither_blue;
- unsigned int bytes_per_pixel;
- unsigned int row_stride;
+ unsigned int bytes_per_pixel;
+ unsigned int row_stride;
- uint32_t is_active : 1;
+ uint32_t is_active : 1;
- void (* flush_area) (ply_renderer_backend_t *backend,
- ply_renderer_head_t *head,
- ply_rectangle_t *area_to_flush);
+ void (*flush_area) (ply_renderer_backend_t *backend,
+ ply_renderer_head_t *head,
+ ply_rectangle_t *area_to_flush);
};
ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void);
@@ -125,44 +124,47 @@ static inline uint_fast32_t
argb32_pixel_value_to_device_pixel_value (ply_renderer_backend_t *backend,
uint32_t pixel_value)
{
- uint8_t r, g, b, a;
- int orig_r, orig_g, orig_b, orig_a;
- uint8_t new_r, new_g, new_b;
- int i;
+ uint8_t r, g, b, a;
+ int orig_r, orig_g, orig_b, orig_a;
+ uint8_t new_r, new_g, new_b;
+ int i;
- orig_a = pixel_value >> 24;
- a = orig_a >> (8 - backend->bits_for_alpha);
+ orig_a = pixel_value >> 24;
+ a = orig_a >> (8 - backend->bits_for_alpha);
- orig_r = ((pixel_value >> 16) & 0xff) - backend->dither_red;
- r = CLAMP (orig_r, 0, 255) >> (8 - backend->bits_for_red);
+ orig_r = ((pixel_value >> 16) & 0xff) - backend->dither_red;
+ r = CLAMP (orig_r, 0, 255) >> (8 - backend->bits_for_red);
- orig_g = ((pixel_value >> 8) & 0xff) - backend->dither_green;
- g = CLAMP (orig_g, 0, 255) >> (8 - backend->bits_for_green);
+ orig_g = ((pixel_value >> 8) & 0xff) - backend->dither_green;
+ g = CLAMP (orig_g, 0, 255) >> (8 - backend->bits_for_green);
- orig_b = (pixel_value & 0xff) - backend->dither_blue;
- b = CLAMP (orig_b, 0, 255) >> (8 - backend->bits_for_blue);
+ orig_b = (pixel_value & 0xff) - backend->dither_blue;
+ b = CLAMP (orig_b, 0, 255) >> (8 - backend->bits_for_blue);
- new_r = r << (8 - backend->bits_for_red);
- new_g = g << (8 - backend->bits_for_green);
- new_b = b << (8 - backend->bits_for_blue);
+ new_r = r << (8 - backend->bits_for_red);
+ new_g = g << (8 - backend->bits_for_green);
+ new_b = b << (8 - backend->bits_for_blue);
- for (i = backend->bits_for_red; i < 8; i <<= 1)
- new_r |= new_r >> i;
+ for (i = backend->bits_for_red; i < 8; i <<= 1) {
+ new_r |= new_r >> i;
+ }
- for (i = backend->bits_for_green; i < 8; i <<= 1)
- new_g |= new_g >> i;
+ for (i = backend->bits_for_green; i < 8; i <<= 1) {
+ new_g |= new_g >> i;
+ }
- for (i = backend->bits_for_blue; i < 8; i <<= 1)
- new_b |= new_b >> i;
+ for (i = backend->bits_for_blue; i < 8; i <<= 1) {
+ new_b |= new_b >> i;
+ }
- backend->dither_red = new_r - orig_r;
- backend->dither_green = new_g - orig_g;
- backend->dither_blue = new_b - orig_b;
+ backend->dither_red = new_r - orig_r;
+ backend->dither_green = new_g - orig_g;
+ backend->dither_blue = new_b - orig_b;
- return ((a << backend->alpha_bit_position)
- | (r << backend->red_bit_position)
- | (g << backend->green_bit_position)
- | (b << backend->blue_bit_position));
+ return (a << backend->alpha_bit_position)
+ | (r << backend->red_bit_position)
+ | (g << backend->green_bit_position)
+ | (b << backend->blue_bit_position);
}
static void
@@ -170,41 +172,39 @@ flush_area_to_any_device (ply_renderer_backend_t *backend,
ply_renderer_head_t *head,
ply_rectangle_t *area_to_flush)
{
- unsigned long row, column;
- uint32_t *shadow_buffer;
- char *row_backend;
- unsigned long x1, y1, x2, y2;
-
- x1 = area_to_flush->x;
- y1 = area_to_flush->y;
- x2 = x1 + area_to_flush->width;
- y2 = y1 + area_to_flush->height;
-
- row_backend = malloc (backend->row_stride);
- shadow_buffer = ply_pixel_buffer_get_argb32_data (backend->head.pixel_buffer);
- for (row = y1; row < y2; row++)
- {
- unsigned long offset;
-
- for (column = x1; column < x2; column++)
- {
- uint32_t pixel_value;
- uint_fast32_t device_pixel_value;
+ unsigned long row, column;
+ uint32_t *shadow_buffer;
+ char *row_backend;
+ unsigned long x1, y1, x2, y2;
- pixel_value = shadow_buffer[row * head->area.width + column];
+ x1 = area_to_flush->x;
+ y1 = area_to_flush->y;
+ x2 = x1 + area_to_flush->width;
+ y2 = y1 + area_to_flush->height;
- device_pixel_value = argb32_pixel_value_to_device_pixel_value (backend,
- pixel_value);
+ row_backend = malloc (backend->row_stride);
+ shadow_buffer = ply_pixel_buffer_get_argb32_data (backend->head.pixel_buffer);
+ for (row = y1; row < y2; row++) {
+ unsigned long offset;
- memcpy (row_backend + column * backend->bytes_per_pixel,
- &device_pixel_value, backend->bytes_per_pixel);
- }
+ for (column = x1; column < x2; column++) {
+ uint32_t pixel_value;
+ uint_fast32_t device_pixel_value;
+
+ pixel_value = shadow_buffer[row * head->area.width + column];
+
+ device_pixel_value = argb32_pixel_value_to_device_pixel_value (backend,
+ pixel_value);
- offset = row * backend->row_stride + x1 * backend->bytes_per_pixel;
- memcpy (head->map_address + offset, row_backend + x1 * backend->bytes_per_pixel,
- area_to_flush->width * backend->bytes_per_pixel);
- }
- free (row_backend);
+ memcpy (row_backend + column * backend->bytes_per_pixel,
+ &device_pixel_value, backend->bytes_per_pixel);
+ }
+
+ offset = row * backend->row_stride + x1 * backend->bytes_per_pixel;
+ memcpy (head->map_address + offset, row_backend + x1 * backend->bytes_per_pixel,
+ area_to_flush->width * backend->bytes_per_pixel);
+ }
+ free (row_backend);
}
static void
@@ -212,557 +212,529 @@ flush_area_to_xrgb32_device (ply_renderer_backend_t *backend,
ply_renderer_head_t *head,
ply_rectangle_t *area_to_flush)
{
- unsigned long x, y, y1, y2;
- uint32_t *shadow_buffer;
- char *dst, *src;
-
- x = area_to_flush->x;
- y1 = area_to_flush->y;
- y2 = y1 + area_to_flush->height;
-
- shadow_buffer = ply_pixel_buffer_get_argb32_data (backend->head.pixel_buffer);
-
- dst = &head->map_address[y1 * backend->row_stride + x * backend->bytes_per_pixel];
- src = (char *) &shadow_buffer[y1 * head->area.width + x];
-
- if (area_to_flush->width * 4 == backend->row_stride &&
- head->area.width * 4 == backend->row_stride)
- {
- memcpy (dst, src, area_to_flush->width * area_to_flush->height * 4);
- return;
- }
-
- for (y = y1; y < y2; y++)
- {
- memcpy (dst, src, area_to_flush->width * 4);
- dst += backend->row_stride;
- src += head->area.width * 4;
- }
+ unsigned long x, y, y1, y2;
+ uint32_t *shadow_buffer;
+ char *dst, *src;
+
+ x = area_to_flush->x;
+ y1 = area_to_flush->y;
+ y2 = y1 + area_to_flush->height;
+
+ shadow_buffer = ply_pixel_buffer_get_argb32_data (backend->head.pixel_buffer);
+
+ dst = &head->map_address[y1 * backend->row_stride + x * backend->bytes_per_pixel];
+ src = (char *) &shadow_buffer[y1 * head->area.width + x];
+
+ if (area_to_flush->width * 4 == backend->row_stride &&
+ head->area.width * 4 == backend->row_stride) {
+ memcpy (dst, src, area_to_flush->width * area_to_flush->height * 4);
+ return;
+ }
+
+ for (y = y1; y < y2; y++) {
+ memcpy (dst, src, area_to_flush->width * 4);
+ dst += backend->row_stride;
+ src += head->area.width * 4;
+ }
}
static ply_renderer_backend_t *
-create_backend (const char *device_name,
+create_backend (const char *device_name,
ply_terminal_t *terminal)
{
- ply_renderer_backend_t *backend;
+ ply_renderer_backend_t *backend;
- backend = calloc (1, sizeof (ply_renderer_backend_t));
+ backend = calloc (1, sizeof(ply_renderer_backend_t));
- if (device_name != NULL)
- backend->device_name = strdup (device_name);
- else if (getenv ("FRAMEBUFFER") != NULL)
- backend->device_name = strdup (getenv ("FRAMEBUFFER"));
- else
- backend->device_name =
- strdup (PLY_FRAME_BUFFER_DEFAULT_FB_DEVICE_NAME);
+ if (device_name != NULL)
+ backend->device_name = strdup (device_name);
+ else if (getenv ("FRAMEBUFFER") != NULL)
+ backend->device_name = strdup (getenv ("FRAMEBUFFER"));
+ else
+ backend->device_name =
+ strdup (PLY_FRAME_BUFFER_DEFAULT_FB_DEVICE_NAME);
- ply_trace ("creating renderer backend for device %s", backend->device_name);
+ ply_trace ("creating renderer backend for device %s", backend->device_name);
- backend->loop = ply_event_loop_get_default ();
- backend->head.map_address = MAP_FAILED;
- backend->heads = ply_list_new ();
- backend->input_source.key_buffer = ply_buffer_new ();
- backend->terminal = terminal;
+ backend->loop = ply_event_loop_get_default ();
+ backend->head.map_address = MAP_FAILED;
+ backend->heads = ply_list_new ();
+ backend->input_source.key_buffer = ply_buffer_new ();
+ backend->terminal = terminal;
- return backend;
+ return backend;
}
static void
initialize_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_trace ("initializing %lux%lu head",
- head->area.width, head->area.height);
- head->pixel_buffer = ply_pixel_buffer_new (head->area.width,
- head->area.height);
- ply_pixel_buffer_fill_with_color (backend->head.pixel_buffer, NULL,
- 0.0, 0.0, 0.0, 1.0);
- ply_list_append_data (backend->heads, head);
+ ply_trace ("initializing %lux%lu head",
+ head->area.width, head->area.height);
+ head->pixel_buffer = ply_pixel_buffer_new (head->area.width,
+ head->area.height);
+ ply_pixel_buffer_fill_with_color (backend->head.pixel_buffer, NULL,
+ 0.0, 0.0, 0.0, 1.0);
+ ply_list_append_data (backend->heads, head);
}
static void
uninitialize_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_trace ("uninitializing %lux%lu head",
- head->area.width, head->area.height);
- if (head->pixel_buffer != NULL)
- {
- ply_pixel_buffer_free (head->pixel_buffer);
- head->pixel_buffer = NULL;
-
- ply_list_remove_data (backend->heads, head);
- }
+ ply_trace ("uninitializing %lux%lu head",
+ head->area.width, head->area.height);
+ if (head->pixel_buffer != NULL) {
+ ply_pixel_buffer_free (head->pixel_buffer);
+ head->pixel_buffer = NULL;
+
+ ply_list_remove_data (backend->heads, head);
+ }
}
static void
destroy_backend (ply_renderer_backend_t *backend)
{
+ ply_trace ("destroying renderer backend for device %s",
+ backend->device_name);
+ free (backend->device_name);
+ uninitialize_head (backend, &backend->head);
- ply_trace ("destroying renderer backend for device %s",
- backend->device_name);
- free (backend->device_name);
- uninitialize_head (backend, &backend->head);
+ ply_list_free (backend->heads);
- ply_list_free (backend->heads);
-
- free (backend);
+ free (backend);
}
static void
activate (ply_renderer_backend_t *backend)
{
- ply_trace ("Redrawing screen");
- backend->is_active = true;
+ ply_trace ("Redrawing screen");
+ backend->is_active = true;
- if (backend->head.map_address != MAP_FAILED)
- ply_renderer_head_redraw (backend, &backend->head);
+ if (backend->head.map_address != MAP_FAILED)
+ ply_renderer_head_redraw (backend, &backend->head);
}
static void
deactivate (ply_renderer_backend_t *backend)
{
- backend->is_active = false;
+ backend->is_active = false;
}
static void
on_active_vt_changed (ply_renderer_backend_t *backend)
{
- if (ply_terminal_is_active (backend->terminal))
- {
- ply_trace ("activating on vt change");
- activate (backend);
- }
- else
- {
- ply_trace ("deactivating on vt change");
- deactivate (backend);
- }
+ if (ply_terminal_is_active (backend->terminal)) {
+ ply_trace ("activating on vt change");
+ activate (backend);
+ } else {
+ ply_trace ("deactivating on vt change");
+ deactivate (backend);
+ }
}
static bool
open_device (ply_renderer_backend_t *backend)
{
- backend->device_fd = open (backend->device_name, O_RDWR);
-
- if (backend->device_fd < 0)
- {
- ply_trace ("could not open '%s': %m", backend->device_name);
- return false;
- }
-
- if (backend->terminal == NULL)
- return true;
-
- if (!ply_terminal_open (backend->terminal))
- {
- ply_trace ("could not open terminal: %m");
- return false;
- }
-
- if (!ply_terminal_is_vt (backend->terminal))
- {
- ply_trace ("terminal is not a VT");
- ply_terminal_close (backend->terminal);
- return false;
- }
-
- ply_terminal_watch_for_active_vt_change (backend->terminal,
- (ply_terminal_active_vt_changed_handler_t)
- on_active_vt_changed,
- backend);
-
- return true;
+ backend->device_fd = open (backend->device_name, O_RDWR);
+
+ if (backend->device_fd < 0) {
+ ply_trace ("could not open '%s': %m", backend->device_name);
+ return false;
+ }
+
+ if (backend->terminal == NULL)
+ return true;
+
+ if (!ply_terminal_open (backend->terminal)) {
+ ply_trace ("could not open terminal: %m");
+ return false;
+ }
+
+ if (!ply_terminal_is_vt (backend->terminal)) {
+ ply_trace ("terminal is not a VT");
+ ply_terminal_close (backend->terminal);
+ return false;
+ }
+
+ ply_terminal_watch_for_active_vt_change (backend->terminal,
+ (ply_terminal_active_vt_changed_handler_t)
+ on_active_vt_changed,
+ backend);
+
+ return true;
}
static void
close_device (ply_renderer_backend_t *backend)
{
+ if (backend->terminal != NULL) {
+ ply_terminal_stop_watching_for_active_vt_change (backend->terminal,
+ (ply_terminal_active_vt_changed_handler_t)
+ on_active_vt_changed,
+ backend);
+ }
+ uninitialize_head (backend, &backend->head);
- if (backend->terminal != NULL)
- ply_terminal_stop_watching_for_active_vt_change (backend->terminal,
- (ply_terminal_active_vt_changed_handler_t)
- on_active_vt_changed,
- backend);
- uninitialize_head (backend, &backend->head);
-
- close (backend->device_fd);
- backend->device_fd = -1;
-
- backend->bytes_per_pixel = 0;
- backend->head.area.x = 0;
- backend->head.area.y = 0;
- backend->head.area.width = 0;
- backend->head.area.height = 0;
+ close (backend->device_fd);
+ backend->device_fd = -1;
+
+ backend->bytes_per_pixel = 0;
+ backend->head.area.x = 0;
+ backend->head.area.y = 0;
+ backend->head.area.width = 0;
+ backend->head.area.height = 0;
}
static const char const *get_visual_name (int visual)
{
- static const char const *visuals[] =
- {
- [FB_VISUAL_MONO01] = "FB_VISUAL_MONO01",
- [FB_VISUAL_MONO10] = "FB_VISUAL_MONO10",
- [FB_VISUAL_TRUECOLOR] = "FB_VISUAL_TRUECOLOR",
- [FB_VISUAL_PSEUDOCOLOR] = "FB_VISUAL_PSEUDOCOLOR",
- [FB_VISUAL_DIRECTCOLOR] = "FB_VISUAL_DIRECTCOLOR",
- [FB_VISUAL_STATIC_PSEUDOCOLOR] = "FB_VISUAL_STATIC_PSEUDOCOLOR",
- NULL
- };
- static char unknown[] = "invalid visual: -4294967295";
-
- if (visual < FB_VISUAL_MONO01 || visual > FB_VISUAL_STATIC_PSEUDOCOLOR)
- {
- sprintf (unknown, "invalid visual: %d", visual);
- return unknown;
- }
-
- return visuals[visual];
+ static const char const *visuals[] =
+ {
+ [FB_VISUAL_MONO01] = "FB_VISUAL_MONO01",
+ [FB_VISUAL_MONO10] = "FB_VISUAL_MONO10",
+ [FB_VISUAL_TRUECOLOR] = "FB_VISUAL_TRUECOLOR",
+ [FB_VISUAL_PSEUDOCOLOR] = "FB_VISUAL_PSEUDOCOLOR",
+ [FB_VISUAL_DIRECTCOLOR] = "FB_VISUAL_DIRECTCOLOR",
+ [FB_VISUAL_STATIC_PSEUDOCOLOR] = "FB_VISUAL_STATIC_PSEUDOCOLOR",
+ NULL
+ };
+ static char unknown[] = "invalid visual: -4294967295";
+
+ if (visual < FB_VISUAL_MONO01 || visual > FB_VISUAL_STATIC_PSEUDOCOLOR) {
+ sprintf (unknown, "invalid visual: %d", visual);
+ return unknown;
+ }
+
+ return visuals[visual];
}
static bool
query_device (ply_renderer_backend_t *backend)
{
- struct fb_var_screeninfo variable_screen_info;
- struct fb_fix_screeninfo fixed_screen_info;
-
- assert (backend != NULL);
- assert (backend->device_fd >= 0);
-
- if (ioctl (backend->device_fd, FBIOGET_VSCREENINFO, &variable_screen_info) < 0)
- return false;
-
- if (ioctl (backend->device_fd, FBIOGET_FSCREENINFO, &fixed_screen_info) < 0)
- return false;
-
- /* Normally the pixel is divided into channels between the color components.
- * Each channel directly maps to a color channel on the hardware.
- *
- * There are some odd ball modes that use an indexed palette instead. In
- * those cases (pseudocolor, direct color, etc), the pixel value is just an
- * index into a lookup table of the real color values.
- *
- * We don't support that.
- */
- if (fixed_screen_info.visual != FB_VISUAL_TRUECOLOR)
- {
- int rc = -1;
- int i;
- static const int depths[] = {32, 24, 16, 0};
-
- ply_trace ("Visual was %s, trying to find usable mode.\n",
- get_visual_name (fixed_screen_info.visual));
-
- for (i = 0; depths[i] != 0; i++)
- {
- variable_screen_info.bits_per_pixel = depths[i];
- variable_screen_info.activate |= FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE;
-
- rc = ioctl (backend->device_fd, FBIOPUT_VSCREENINFO, &variable_screen_info);
- if (rc >= 0)
- {
- if (ioctl (backend->device_fd, FBIOGET_FSCREENINFO, &fixed_screen_info) < 0)
- return false;
+ struct fb_var_screeninfo variable_screen_info;
+ struct fb_fix_screeninfo fixed_screen_info;
- if (fixed_screen_info.visual == FB_VISUAL_TRUECOLOR)
- break;
- }
- }
+ assert (backend != NULL);
+ assert (backend->device_fd >= 0);
- if (ioctl (backend->device_fd, FBIOGET_VSCREENINFO, &variable_screen_info) < 0)
- return false;
+ if (ioctl (backend->device_fd, FBIOGET_VSCREENINFO, &variable_screen_info) < 0)
+ return false;
- if (ioctl (backend->device_fd, FBIOGET_FSCREENINFO, &fixed_screen_info) < 0)
- return false;
- }
+ if (ioctl (backend->device_fd, FBIOGET_FSCREENINFO, &fixed_screen_info) < 0)
+ return false;
- if (fixed_screen_info.visual != FB_VISUAL_TRUECOLOR ||
- variable_screen_info.bits_per_pixel < 16)
- {
- ply_trace ("Visual is %s; not using graphics\n",
- get_visual_name (fixed_screen_info.visual));
- return false;
- }
+ /* Normally the pixel is divided into channels between the color components.
+ * Each channel directly maps to a color channel on the hardware.
+ *
+ * There are some odd ball modes that use an indexed palette instead. In
+ * those cases (pseudocolor, direct color, etc), the pixel value is just an
+ * index into a lookup table of the real color values.
+ *
+ * We don't support that.
+ */
+ if (fixed_screen_info.visual != FB_VISUAL_TRUECOLOR) {
+ int rc = -1;
+ int i;
+ static const int depths[] = { 32, 24, 16, 0 };
+
+ ply_trace ("Visual was %s, trying to find usable mode.\n",
+ get_visual_name (fixed_screen_info.visual));
+
+ for (i = 0; depths[i] != 0; i++) {
+ variable_screen_info.bits_per_pixel = depths[i];
+ variable_screen_info.activate |= FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE;
+
+ rc = ioctl (backend->device_fd, FBIOPUT_VSCREENINFO, &variable_screen_info);
+ if (rc >= 0) {
+ if (ioctl (backend->device_fd, FBIOGET_FSCREENINFO, &fixed_screen_info) < 0)
+ return false;
+
+ if (fixed_screen_info.visual == FB_VISUAL_TRUECOLOR)
+ break;
+ }
+ }
+
+ if (ioctl (backend->device_fd, FBIOGET_VSCREENINFO, &variable_screen_info) < 0)
+ return false;
+
+ if (ioctl (backend->device_fd, FBIOGET_FSCREENINFO, &fixed_screen_info) < 0)
+ return false;
+ }
- backend->head.area.x = variable_screen_info.xoffset;
- backend->head.area.y = variable_screen_info.yoffset;
- backend->head.area.width = variable_screen_info.xres;
- backend->head.area.height = variable_screen_info.yres;
+ if (fixed_screen_info.visual != FB_VISUAL_TRUECOLOR ||
+ variable_screen_info.bits_per_pixel < 16) {
+ ply_trace ("Visual is %s; not using graphics\n",
+ get_visual_name (fixed_screen_info.visual));
+ return false;
+ }
- backend->red_bit_position = variable_screen_info.red.offset;
- backend->bits_for_red = variable_screen_info.red.length;
+ backend->head.area.x = variable_screen_info.xoffset;
+ backend->head.area.y = variable_screen_info.yoffset;
+ backend->head.area.width = variable_screen_info.xres;
+ backend->head.area.height = variable_screen_info.yres;
- backend->green_bit_position = variable_screen_info.green.offset;
- backend->bits_for_green = variable_screen_info.green.length;
+ backend->red_bit_position = variable_screen_info.red.offset;
+ backend->bits_for_red = variable_screen_info.red.length;
- backend->blue_bit_position = variable_screen_info.blue.offset;
- backend->bits_for_blue = variable_screen_info.blue.length;
+ backend->green_bit_position = variable_screen_info.green.offset;
+ backend->bits_for_green = variable_screen_info.green.length;
- backend->alpha_bit_position = variable_screen_info.transp.offset;
- backend->bits_for_alpha = variable_screen_info.transp.length;
+ backend->blue_bit_position = variable_screen_info.blue.offset;
+ backend->bits_for_blue = variable_screen_info.blue.length;
- backend->bytes_per_pixel = variable_screen_info.bits_per_pixel >> 3;
- backend->row_stride = fixed_screen_info.line_length;
- backend->dither_red = 0;
- backend->dither_green = 0;
- backend->dither_blue = 0;
+ backend->alpha_bit_position = variable_screen_info.transp.offset;
+ backend->bits_for_alpha = variable_screen_info.transp.length;
- ply_trace ("%d bpp (%d, %d, %d, %d) with rowstride %d",
- (int) backend->bytes_per_pixel * 8,
- backend->bits_for_red,
- backend->bits_for_green,
- backend->bits_for_blue,
- backend->bits_for_alpha,
- (int) backend->row_stride);
+ backend->bytes_per_pixel = variable_screen_info.bits_per_pixel >> 3;
+ backend->row_stride = fixed_screen_info.line_length;
+ backend->dither_red = 0;
+ backend->dither_green = 0;
+ backend->dither_blue = 0;
- backend->head.size = backend->head.area.height * backend->row_stride;
+ ply_trace ("%d bpp (%d, %d, %d, %d) with rowstride %d",
+ (int) backend->bytes_per_pixel * 8,
+ backend->bits_for_red,
+ backend->bits_for_green,
+ backend->bits_for_blue,
+ backend->bits_for_alpha,
+ (int) backend->row_stride);
- if (backend->bytes_per_pixel == 4 &&
- backend->red_bit_position == 16 && backend->bits_for_red == 8 &&
- backend->green_bit_position == 8 && backend->bits_for_green == 8 &&
- backend->blue_bit_position == 0 && backend->bits_for_blue == 8)
- backend->flush_area = flush_area_to_xrgb32_device;
- else
- backend->flush_area = flush_area_to_any_device;
+ backend->head.size = backend->head.area.height * backend->row_stride;
- initialize_head (backend, &backend->head);
+ if (backend->bytes_per_pixel == 4 &&
+ backend->red_bit_position == 16 && backend->bits_for_red == 8 &&
+ backend->green_bit_position == 8 && backend->bits_for_green == 8 &&
+ backend->blue_bit_position == 0 && backend->bits_for_blue == 8)
+ backend->flush_area = flush_area_to_xrgb32_device;
+ else
+ backend->flush_area = flush_area_to_any_device;
- return true;
+ initialize_head (backend, &backend->head);
+ return true;
}
static bool
map_to_device (ply_renderer_backend_t *backend)
{
- ply_renderer_head_t *head;
+ ply_renderer_head_t *head;
- assert (backend != NULL);
- assert (backend->device_fd >= 0);
+ assert (backend != NULL);
+ assert (backend->device_fd >= 0);
- head = &backend->head;
- assert (head->size > 0);
+ head = &backend->head;
+ assert (head->size > 0);
- head->map_address = mmap (NULL, head->size, PROT_WRITE,
- MAP_SHARED, backend->device_fd, 0);
+ head->map_address = mmap (NULL, head->size, PROT_WRITE,
+ MAP_SHARED, backend->device_fd, 0);
- if (head->map_address == MAP_FAILED)
- {
- ply_trace ("could not map fb device: %m");
- return false;
- }
-
- if (backend->terminal != NULL)
- {
- if (ply_terminal_is_active (backend->terminal))
- {
- ply_trace ("already on right vt, activating");
- activate (backend);
+ if (head->map_address == MAP_FAILED) {
+ ply_trace ("could not map fb device: %m");
+ return false;
}
- else
- {
- ply_trace ("on wrong vt, changing vts");
- ply_terminal_activate_vt (backend->terminal);
+
+ if (backend->terminal != NULL) {
+ if (ply_terminal_is_active (backend->terminal)) {
+ ply_trace ("already on right vt, activating");
+ activate (backend);
+ } else {
+ ply_trace ("on wrong vt, changing vts");
+ ply_terminal_activate_vt (backend->terminal);
+ }
+ } else {
+ activate (backend);
}
- }
- else
- {
- activate (backend);
- }
- return true;
+ return true;
}
static void
unmap_from_device (ply_renderer_backend_t *backend)
{
- ply_renderer_head_t *head;
+ ply_renderer_head_t *head;
- head = &backend->head;
+ head = &backend->head;
- ply_trace ("unmapping device");
- if (head->map_address != MAP_FAILED)
- {
- munmap (head->map_address, head->size);
- head->map_address = MAP_FAILED;
- }
+ ply_trace ("unmapping device");
+ if (head->map_address != MAP_FAILED) {
+ munmap (head->map_address, head->size);
+ head->map_address = MAP_FAILED;
+ }
}
static void
flush_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_region_t *updated_region;
- ply_list_t *areas_to_flush;
- ply_list_node_t *node;
- ply_pixel_buffer_t *pixel_buffer;
+ ply_region_t *updated_region;
+ ply_list_t *areas_to_flush;
+ ply_list_node_t *node;
+ ply_pixel_buffer_t *pixel_buffer;
- assert (backend != NULL);
- assert (&backend->head == head);
+ assert (backend != NULL);
+ assert (&backend->head == head);
- if (!backend->is_active)
- return;
+ if (!backend->is_active)
+ return;
- if (backend->terminal != NULL)
- {
- ply_terminal_set_mode (backend->terminal, PLY_TERMINAL_MODE_GRAPHICS);
- ply_terminal_set_unbuffered_input (backend->terminal);
- }
- pixel_buffer = head->pixel_buffer;
- updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
- areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region);
+ if (backend->terminal != NULL) {
+ ply_terminal_set_mode (backend->terminal, PLY_TERMINAL_MODE_GRAPHICS);
+ ply_terminal_set_unbuffered_input (backend->terminal);
+ }
+ pixel_buffer = head->pixel_buffer;
+ updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
+ areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region);
- node = ply_list_get_first_node (areas_to_flush);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_rectangle_t *area_to_flush;
+ node = ply_list_get_first_node (areas_to_flush);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_rectangle_t *area_to_flush;
- area_to_flush = (ply_rectangle_t *) ply_list_node_get_data (node);
+ area_to_flush = (ply_rectangle_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (areas_to_flush, node);
+ next_node = ply_list_get_next_node (areas_to_flush, node);
- backend->flush_area (backend, head, area_to_flush);
+ backend->flush_area (backend, head, area_to_flush);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_region_clear (updated_region);
+ ply_region_clear (updated_region);
}
static void
ply_renderer_head_redraw (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_region_t *region;
+ ply_region_t *region;
- region = ply_pixel_buffer_get_updated_areas (head->pixel_buffer);
+ region = ply_pixel_buffer_get_updated_areas (head->pixel_buffer);
- ply_region_add_rectangle (region, &head->area);
+ ply_region_add_rectangle (region, &head->area);
- flush_head (backend, head);
+ flush_head (backend, head);
}
static ply_list_t *
get_heads (ply_renderer_backend_t *backend)
{
- return backend->heads;
+ return backend->heads;
}
static ply_pixel_buffer_t *
get_buffer_for_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
+ if (head != &backend->head)
+ return NULL;
- if (head != &backend->head)
- return NULL;
-
- return backend->head.pixel_buffer;
+ return backend->head.pixel_buffer;
}
static bool
has_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- return input_source == &backend->input_source;
+ return input_source == &backend->input_source;
}
static ply_renderer_input_source_t *
get_input_source (ply_renderer_backend_t *backend)
{
- return &backend->input_source;
+ return &backend->input_source;
}
static void
on_key_event (ply_renderer_input_source_t *input_source,
int terminal_fd)
-{
- ply_buffer_append_from_fd (input_source->key_buffer,
- terminal_fd);
-
- if (input_source->handler != NULL)
- input_source->handler (input_source->user_data, input_source->key_buffer, input_source);
+{
+ ply_buffer_append_from_fd (input_source->key_buffer,
+ terminal_fd);
+ if (input_source->handler != NULL)
+ input_source->handler (input_source->user_data, input_source->key_buffer, input_source);
}
static void
on_input_source_disconnected (ply_renderer_input_source_t *input_source)
{
- ply_trace ("input source disconnected, reopening");
- open_input_source (input_source->backend, input_source);
+ ply_trace ("input source disconnected, reopening");
+ open_input_source (input_source->backend, input_source);
}
static bool
open_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- int terminal_fd;
+ int terminal_fd;
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- if (backend->terminal == NULL)
- return false;
+ if (backend->terminal == NULL)
+ return false;
- terminal_fd = ply_terminal_get_fd (backend->terminal);
+ terminal_fd = ply_terminal_get_fd (backend->terminal);
- input_source->backend = backend;
- input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t) on_key_event,
- (ply_event_handler_t) on_input_source_disconnected,
- input_source);
- return true;
+ input_source->backend = backend;
+ input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t) on_key_event,
+ (ply_event_handler_t) on_input_source_disconnected,
+ input_source);
+ return true;
}
static void
-set_handler_for_input_source (ply_renderer_backend_t *backend,
- ply_renderer_input_source_t *input_source,
+set_handler_for_input_source (ply_renderer_backend_t *backend,
+ ply_renderer_input_source_t *input_source,
ply_renderer_input_source_handler_t handler,
- void *user_data)
+ void *user_data)
{
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- input_source->handler = handler;
- input_source->user_data = user_data;
+ input_source->handler = handler;
+ input_source->user_data = user_data;
}
static void
close_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- if (backend->terminal == NULL)
- return;
+ if (backend->terminal == NULL)
+ return;
- ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch);
- input_source->terminal_input_watch = NULL;
- input_source->backend = NULL;
+ ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch);
+ input_source->terminal_input_watch = NULL;
+ input_source->backend = NULL;
}
ply_renderer_plugin_interface_t *
ply_renderer_backend_get_interface (void)
{
- static ply_renderer_plugin_interface_t plugin_interface =
- {
- .create_backend = create_backend,
- .destroy_backend = destroy_backend,
- .open_device = open_device,
- .close_device = close_device,
- .query_device = query_device,
- .map_to_device = map_to_device,
- .unmap_from_device = unmap_from_device,
- .activate = activate,
- .deactivate = deactivate,
- .flush_head = flush_head,
- .get_heads = get_heads,
- .get_buffer_for_head = get_buffer_for_head,
- .get_input_source = get_input_source,
- .open_input_source = open_input_source,
- .set_handler_for_input_source = set_handler_for_input_source,
- .close_input_source = close_input_source
- };
-
- return &plugin_interface;
+ static ply_renderer_plugin_interface_t plugin_interface =
+ {
+ .create_backend = create_backend,
+ .destroy_backend = destroy_backend,
+ .open_device = open_device,
+ .close_device = close_device,
+ .query_device = query_device,
+ .map_to_device = map_to_device,
+ .unmap_from_device = unmap_from_device,
+ .activate = activate,
+ .deactivate = deactivate,
+ .flush_head = flush_head,
+ .get_heads = get_heads,
+ .get_buffer_for_head = get_buffer_for_head,
+ .get_input_source = get_input_source,
+ .open_input_source = open_input_source,
+ .set_handler_for_input_source = set_handler_for_input_source,
+ .close_input_source = close_input_source
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/plugins/renderers/x11/plugin.c b/src/plugins/renderers/x11/plugin.c
index 54980ee5..ef9d2bab 100644
--- a/src/plugins/renderers/x11/plugin.c
+++ b/src/plugins/renderers/x11/plugin.c
@@ -62,31 +62,31 @@
struct _ply_renderer_head
{
- ply_renderer_backend_t *backend;
- ply_pixel_buffer_t *pixel_buffer;
- ply_rectangle_t area;
- GtkWidget *window;
- GdkPixmap *pixmap;
- cairo_surface_t *image;
- uint32_t is_fullscreen : 1;
+ ply_renderer_backend_t *backend;
+ ply_pixel_buffer_t *pixel_buffer;
+ ply_rectangle_t area;
+ GtkWidget *window;
+ GdkPixmap *pixmap;
+ cairo_surface_t *image;
+ uint32_t is_fullscreen : 1;
};
struct _ply_renderer_input_source
{
- ply_buffer_t *key_buffer;
- ply_renderer_input_source_handler_t handler;
- void *user_data;
+ ply_buffer_t *key_buffer;
+ ply_renderer_input_source_handler_t handler;
+ void *user_data;
};
struct _ply_renderer_backend
{
- ply_event_loop_t *loop;
- ply_renderer_input_source_t input_source;
- ply_list_t *heads;
+ ply_event_loop_t *loop;
+ ply_renderer_input_source_t input_source;
+ ply_list_t *heads;
- ply_fd_watch_t *display_watch;
+ ply_fd_watch_t *display_watch;
- uint32_t is_active : 1;
+ uint32_t is_active : 1;
};
ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void);
@@ -104,150 +104,150 @@ static ply_renderer_backend_t *
create_backend (const char *device_name,
ply_terminal_t *terminal)
{
- ply_renderer_backend_t *backend;
+ ply_renderer_backend_t *backend;
- backend = calloc (1, sizeof (ply_renderer_backend_t));
+ backend = calloc (1, sizeof(ply_renderer_backend_t));
- backend->loop = ply_event_loop_get_default ();
- backend->heads = ply_list_new ();
- backend->input_source.key_buffer = ply_buffer_new ();
+ backend->loop = ply_event_loop_get_default ();
+ backend->heads = ply_list_new ();
+ backend->input_source.key_buffer = ply_buffer_new ();
- return backend;
+ return backend;
}
static void
destroy_backend (ply_renderer_backend_t *backend)
{
- ply_list_node_t *node;
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
-
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
-
- free (head);
- node = next_node;
- }
-
- ply_list_free (backend->heads);
- ply_buffer_free (backend->input_source.key_buffer);
- free (backend);
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
+
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
+
+ free (head);
+ node = next_node;
+ }
+
+ ply_list_free (backend->heads);
+ ply_buffer_free (backend->input_source.key_buffer);
+ free (backend);
}
static void
on_display_event (ply_renderer_backend_t *backend)
{
- while (gtk_events_pending ())
- gtk_main_iteration ();
+ while (gtk_events_pending ()) {
+ gtk_main_iteration ();
+ }
}
static bool
open_device (ply_renderer_backend_t *backend)
{
- Display *display;
- int display_fd;
-
- if (!gtk_init_check (0, NULL))
- return false;
-
- display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
- display_fd = ConnectionNumber (display);
- backend->display_watch = ply_event_loop_watch_fd (backend->loop,
- display_fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t) on_display_event,
- NULL,
- backend);
-
- return true;
+ Display *display;
+ int display_fd;
+
+ if (!gtk_init_check (0, NULL))
+ return false;
+
+ display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
+ display_fd = ConnectionNumber (display);
+ backend->display_watch = ply_event_loop_watch_fd (backend->loop,
+ display_fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t) on_display_event,
+ NULL,
+ backend);
+
+ return true;
}
static void
close_device (ply_renderer_backend_t *backend)
{
- ply_event_loop_stop_watching_fd (backend->loop, backend->display_watch);
- backend->display_watch = NULL;
- return;
+ ply_event_loop_stop_watching_fd (backend->loop, backend->display_watch);
+ backend->display_watch = NULL;
+ return;
}
static void
create_fake_multi_head_setup (ply_renderer_backend_t *backend)
{
- ply_renderer_head_t *head;
-
- head = calloc (1, sizeof (ply_renderer_head_t));
-
- head->backend = backend;
- head->area.x = 0;
- head->area.y = 0;
- head->area.width = 800; /* FIXME hardcoded */
- head->area.height = 600;
- head->pixmap = gdk_pixmap_new (NULL,
- head->area.width,
- head->area.height,
- 24);
- head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
-
- ply_list_append_data (backend->heads, head);
-
- head = calloc (1, sizeof (ply_renderer_head_t));
-
- head->backend = backend;
- head->area.x = 800;
- head->area.y = 0;
- head->area.width = 640; /* FIXME hardcoded */
- head->area.height = 480;
- head->pixmap = gdk_pixmap_new (NULL,
- head->area.width,
- head->area.height,
- 24);
- head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
-
- ply_list_append_data (backend->heads, head);
+ ply_renderer_head_t *head;
+
+ head = calloc (1, sizeof(ply_renderer_head_t));
+
+ head->backend = backend;
+ head->area.x = 0;
+ head->area.y = 0;
+ head->area.width = 800; /* FIXME hardcoded */
+ head->area.height = 600;
+ head->pixmap = gdk_pixmap_new (NULL,
+ head->area.width,
+ head->area.height,
+ 24);
+ head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+
+ ply_list_append_data (backend->heads, head);
+
+ head = calloc (1, sizeof(ply_renderer_head_t));
+
+ head->backend = backend;
+ head->area.x = 800;
+ head->area.y = 0;
+ head->area.width = 640; /* FIXME hardcoded */
+ head->area.height = 480;
+ head->pixmap = gdk_pixmap_new (NULL,
+ head->area.width,
+ head->area.height,
+ 24);
+ head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+
+ ply_list_append_data (backend->heads, head);
}
static void
create_fullscreen_single_head_setup (ply_renderer_backend_t *backend)
{
- ply_renderer_head_t *head;
- GdkRectangle monitor_geometry;
-
- gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor_geometry);
-
- head = calloc (1, sizeof (ply_renderer_head_t));
-
- head->backend = backend;
- head->area.x = monitor_geometry.x;
- head->area.y = monitor_geometry.y;
- head->area.width = monitor_geometry.width;
- head->area.height = monitor_geometry.height;
- head->is_fullscreen = true;
- head->pixmap = gdk_pixmap_new (NULL,
- head->area.width,
- head->area.height,
- 24);
- head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
-
- ply_list_append_data (backend->heads, head);
+ ply_renderer_head_t *head;
+ GdkRectangle monitor_geometry;
+
+ gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor_geometry);
+
+ head = calloc (1, sizeof(ply_renderer_head_t));
+
+ head->backend = backend;
+ head->area.x = monitor_geometry.x;
+ head->area.y = monitor_geometry.y;
+ head->area.width = monitor_geometry.width;
+ head->area.height = monitor_geometry.height;
+ head->is_fullscreen = true;
+ head->pixmap = gdk_pixmap_new (NULL,
+ head->area.width,
+ head->area.height,
+ 24);
+ head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+
+ ply_list_append_data (backend->heads, head);
}
static bool
query_device (ply_renderer_backend_t *backend)
{
- assert (backend != NULL);
+ assert (backend != NULL);
- if (ply_list_get_first_node (backend->heads) == NULL)
- {
- if (getenv ("PLY_CREATE_FAKE_MULTI_HEAD_SETUP") != NULL)
- create_fake_multi_head_setup (backend);
- else
- create_fullscreen_single_head_setup (backend);
- }
+ if (ply_list_get_first_node (backend->heads) == NULL) {
+ if (getenv ("PLY_CREATE_FAKE_MULTI_HEAD_SETUP") != NULL)
+ create_fake_multi_head_setup (backend);
+ else
+ create_fullscreen_single_head_setup (backend);
+ }
- return true;
+ return true;
}
static gboolean
@@ -255,105 +255,104 @@ on_window_destroy (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
{
- return TRUE;
+ return TRUE;
}
static bool
map_to_device (ply_renderer_backend_t *backend)
{
- ply_list_node_t *node;
- assert (backend != NULL);
-
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
- uint32_t *shadow_buffer;
-
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
-
- if (head->window == NULL)
- {
- head->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_resizable (GTK_WINDOW (head->window), FALSE);
- gtk_widget_set_size_request (head->window,
- head->area.width,
- head->area.height);
- shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
- head->image = cairo_image_surface_create_for_data ((unsigned char *) shadow_buffer,
- CAIRO_FORMAT_ARGB32,
- head->area.width, head->area.height,
- head->area.width * 4);
- gtk_widget_set_app_paintable (head->window, TRUE);
- gtk_widget_show_all (head->window);
- gdk_window_set_back_pixmap (head->window->window, head->pixmap, FALSE);
- gdk_window_set_decorations (head->window->window, GDK_DECOR_BORDER);
- gtk_window_move (GTK_WINDOW (head->window), head->area.x, head->area.y);
-
- gtk_window_set_type_hint (GTK_WINDOW (head->window), GDK_WINDOW_TYPE_HINT_DOCK);
-
- if (head->is_fullscreen)
- gtk_window_fullscreen (GTK_WINDOW (head->window));
-
- gtk_widget_add_events (head->window, GDK_BUTTON1_MOTION_MASK);
-
- g_signal_connect (head->window, "motion-notify-event",
- G_CALLBACK (on_motion_notify_event),
- head);
- g_signal_connect (head->window, "key-press-event",
- G_CALLBACK (on_key_event),
- &backend->input_source);
- g_signal_connect (head->window, "delete-event",
- G_CALLBACK (on_window_destroy),
- NULL);
+ ply_list_node_t *node;
+
+ assert (backend != NULL);
+
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
+ uint32_t *shadow_buffer;
+
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
+
+ if (head->window == NULL) {
+ head->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_resizable (GTK_WINDOW (head->window), FALSE);
+ gtk_widget_set_size_request (head->window,
+ head->area.width,
+ head->area.height);
+ shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
+ head->image = cairo_image_surface_create_for_data ((unsigned char *) shadow_buffer,
+ CAIRO_FORMAT_ARGB32,
+ head->area.width, head->area.height,
+ head->area.width * 4);
+ gtk_widget_set_app_paintable (head->window, TRUE);
+ gtk_widget_show_all (head->window);
+ gdk_window_set_back_pixmap (head->window->window, head->pixmap, FALSE);
+ gdk_window_set_decorations (head->window->window, GDK_DECOR_BORDER);
+ gtk_window_move (GTK_WINDOW (head->window), head->area.x, head->area.y);
+
+ gtk_window_set_type_hint (GTK_WINDOW (head->window), GDK_WINDOW_TYPE_HINT_DOCK);
+
+ if (head->is_fullscreen)
+ gtk_window_fullscreen (GTK_WINDOW (head->window));
+
+ gtk_widget_add_events (head->window, GDK_BUTTON1_MOTION_MASK);
+
+ g_signal_connect (head->window, "motion-notify-event",
+ G_CALLBACK (on_motion_notify_event),
+ head);
+ g_signal_connect (head->window, "key-press-event",
+ G_CALLBACK (on_key_event),
+ &backend->input_source);
+ g_signal_connect (head->window, "delete-event",
+ G_CALLBACK (on_window_destroy),
+ NULL);
+ }
+ ply_renderer_head_redraw (backend, head);
+ node = next_node;
}
- ply_renderer_head_redraw (backend, head);
- node = next_node;
- }
- backend->is_active = true;
+ backend->is_active = true;
- return true;
+ return true;
}
static void
unmap_from_device (ply_renderer_backend_t *backend)
{
- ply_list_node_t *node;
- assert (backend != NULL);
-
- node = ply_list_get_first_node (backend->heads);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_renderer_head_t *head;
-
- head = (ply_renderer_head_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (backend->heads, node);
-
- gtk_widget_destroy (head->window);
- head->window = NULL;
- ply_pixel_buffer_free (head->pixel_buffer);
- head->pixel_buffer = NULL;
- cairo_surface_destroy (head->image);
- head->image = NULL;
-
- node = next_node;
- }
+ ply_list_node_t *node;
+
+ assert (backend != NULL);
+
+ node = ply_list_get_first_node (backend->heads);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_renderer_head_t *head;
+
+ head = (ply_renderer_head_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (backend->heads, node);
+
+ gtk_widget_destroy (head->window);
+ head->window = NULL;
+ ply_pixel_buffer_free (head->pixel_buffer);
+ head->pixel_buffer = NULL;
+ cairo_surface_destroy (head->image);
+ head->image = NULL;
+
+ node = next_node;
+ }
}
static void
activate (ply_renderer_backend_t *backend)
{
- backend->is_active = true;
+ backend->is_active = true;
}
static void
deactivate (ply_renderer_backend_t *backend)
{
- backend->is_active = false;
+ backend->is_active = false;
}
static void
@@ -362,115 +361,114 @@ flush_area_to_device (ply_renderer_backend_t *backend,
ply_rectangle_t *area_to_flush,
cairo_t *cr)
{
- cairo_save (cr);
- cairo_rectangle (cr,
- area_to_flush->x,
- area_to_flush->y,
- area_to_flush->width,
- area_to_flush->height);
- cairo_clip (cr);
-
- cairo_set_source_surface (cr, head->image, 0, 0);
- cairo_paint (cr);
- cairo_restore (cr);
+ cairo_save (cr);
+ cairo_rectangle (cr,
+ area_to_flush->x,
+ area_to_flush->y,
+ area_to_flush->width,
+ area_to_flush->height);
+ cairo_clip (cr);
+
+ cairo_set_source_surface (cr, head->image, 0, 0);
+ cairo_paint (cr);
+ cairo_restore (cr);
}
static void
flush_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_region_t *updated_region;
- ply_list_t *areas_to_flush;
- ply_list_node_t *node;
- ply_pixel_buffer_t *pixel_buffer;
- cairo_t *cr;
-
- assert (backend != NULL);
-
- if (!backend->is_active)
- return;
-
- pixel_buffer = head->pixel_buffer;
- updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
- areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region);
-
- cr = gdk_cairo_create (head->pixmap);
-
- node = ply_list_get_first_node (areas_to_flush);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- ply_rectangle_t *area_to_flush;
-
- area_to_flush = (ply_rectangle_t *) ply_list_node_get_data (node);
-
- next_node = ply_list_get_next_node (areas_to_flush, node);
-
- flush_area_to_device (backend, head, area_to_flush, cr);
- gdk_window_clear_area (head->window->window,
- area_to_flush->x,
- area_to_flush->y,
- area_to_flush->width,
- area_to_flush->height);
- node = next_node;
- }
- ply_region_clear (updated_region);
-
- cairo_destroy (cr);
-
- /* Force read-back to make sure plymouth isn't saturating the
- * X server with requests
- */
- g_object_unref (gdk_drawable_get_image (GDK_DRAWABLE (head->pixmap),
- 0, 0, 1, 1));
+ ply_region_t *updated_region;
+ ply_list_t *areas_to_flush;
+ ply_list_node_t *node;
+ ply_pixel_buffer_t *pixel_buffer;
+ cairo_t *cr;
+
+ assert (backend != NULL);
+
+ if (!backend->is_active)
+ return;
+
+ pixel_buffer = head->pixel_buffer;
+ updated_region = ply_pixel_buffer_get_updated_areas (pixel_buffer);
+ areas_to_flush = ply_region_get_sorted_rectangle_list (updated_region);
+
+ cr = gdk_cairo_create (head->pixmap);
+
+ node = ply_list_get_first_node (areas_to_flush);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ ply_rectangle_t *area_to_flush;
+
+ area_to_flush = (ply_rectangle_t *) ply_list_node_get_data (node);
+
+ next_node = ply_list_get_next_node (areas_to_flush, node);
+
+ flush_area_to_device (backend, head, area_to_flush, cr);
+ gdk_window_clear_area (head->window->window,
+ area_to_flush->x,
+ area_to_flush->y,
+ area_to_flush->width,
+ area_to_flush->height);
+ node = next_node;
+ }
+ ply_region_clear (updated_region);
+
+ cairo_destroy (cr);
+
+ /* Force read-back to make sure plymouth isn't saturating the
+ * X server with requests
+ */
+ g_object_unref (gdk_drawable_get_image (GDK_DRAWABLE (head->pixmap),
+ 0, 0, 1, 1));
}
static void
ply_renderer_head_redraw (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- ply_region_t *region;
- ply_rectangle_t area;
+ ply_region_t *region;
+ ply_rectangle_t area;
- area.x = 0;
- area.y = 0;
- area.width = head->area.width;
- area.height = head->area.height;
+ area.x = 0;
+ area.y = 0;
+ area.width = head->area.width;
+ area.height = head->area.height;
- region = ply_pixel_buffer_get_updated_areas (head->pixel_buffer);
+ region = ply_pixel_buffer_get_updated_areas (head->pixel_buffer);
- ply_region_add_rectangle (region, &area);
+ ply_region_add_rectangle (region, &area);
- flush_head (backend, head);
+ flush_head (backend, head);
}
static ply_list_t *
get_heads (ply_renderer_backend_t *backend)
{
- return backend->heads;
+ return backend->heads;
}
static ply_pixel_buffer_t *
get_buffer_for_head (ply_renderer_backend_t *backend,
ply_renderer_head_t *head)
{
- if (head->backend != backend)
- return NULL;
+ if (head->backend != backend)
+ return NULL;
- return head->pixel_buffer;
+ return head->pixel_buffer;
}
static bool
has_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- return input_source == &backend->input_source;
+ return input_source == &backend->input_source;
}
static ply_renderer_input_source_t *
get_input_source (ply_renderer_backend_t *backend)
{
- return &backend->input_source;
+ return &backend->input_source;
}
static gboolean
@@ -478,11 +476,11 @@ on_motion_notify_event (GtkWidget *widget,
GdkEventMotion *event,
gpointer user_data)
{
- ply_renderer_head_t *head = user_data;
+ ply_renderer_head_t *head = user_data;
- gtk_window_begin_move_drag (GTK_WINDOW (head->window), 1,
- event->x_root, event->y_root, event->time);
- return FALSE;
+ gtk_window_begin_move_drag (GTK_WINDOW (head->window), 1,
+ event->x_root, event->y_root, event->time);
+ return FALSE;
}
static gboolean
@@ -490,95 +488,88 @@ on_key_event (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data)
{
- ply_renderer_input_source_t *input_source = user_data;
-
- if (event->keyval == GDK_Return) /* Enter */
- {
- ply_buffer_append_bytes (input_source->key_buffer, "\n", 1);
- }
- else if (event->keyval == GDK_Escape) /* Esc */
- {
- ply_buffer_append_bytes (input_source->key_buffer, "\033", 1);
- }
- else if (event->keyval == GDK_BackSpace) /* Backspace */
- {
- ply_buffer_append_bytes (input_source->key_buffer, "\177", 1);
- }
- else
- {
- gchar bytes[7];
- int byte_count;
- guint32 unichar;
- unichar = gdk_keyval_to_unicode (event->keyval);
- byte_count = g_unichar_to_utf8 (unichar, bytes);
- if (bytes[0] != 0)
- ply_buffer_append_bytes (input_source->key_buffer, bytes, byte_count);
- else
- ply_trace ("unknown GDK key: 0x%X \"%s\"",
- event->keyval,
- gdk_keyval_name (event->keyval));
- }
-
- if (input_source->handler != NULL)
- input_source->handler (input_source->user_data, input_source->key_buffer, input_source);
- return FALSE;
+ ply_renderer_input_source_t *input_source = user_data;
+
+ if (event->keyval == GDK_Return) { /* Enter */
+ ply_buffer_append_bytes (input_source->key_buffer, "\n", 1);
+ } else if (event->keyval == GDK_Escape) { /* Esc */
+ ply_buffer_append_bytes (input_source->key_buffer, "\033", 1);
+ } else if (event->keyval == GDK_BackSpace) { /* Backspace */
+ ply_buffer_append_bytes (input_source->key_buffer, "\177", 1);
+ } else {
+ gchar bytes[7];
+ int byte_count;
+ guint32 unichar;
+ unichar = gdk_keyval_to_unicode (event->keyval);
+ byte_count = g_unichar_to_utf8 (unichar, bytes);
+ if (bytes[0] != 0)
+ ply_buffer_append_bytes (input_source->key_buffer, bytes, byte_count);
+ else
+ ply_trace ("unknown GDK key: 0x%X \"%s\"",
+ event->keyval,
+ gdk_keyval_name (event->keyval));
+ }
+
+ if (input_source->handler != NULL)
+ input_source->handler (input_source->user_data, input_source->key_buffer, input_source);
+ return FALSE;
}
static bool
open_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
-
- return true;
+ return true;
}
static void
-set_handler_for_input_source (ply_renderer_backend_t *backend,
- ply_renderer_input_source_t *input_source,
+set_handler_for_input_source (ply_renderer_backend_t *backend,
+ ply_renderer_input_source_t *input_source,
ply_renderer_input_source_handler_t handler,
- void *user_data)
+ void *user_data)
{
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
- input_source->handler = handler;
- input_source->user_data = user_data;
+ input_source->handler = handler;
+ input_source->user_data = user_data;
}
static void
close_input_source (ply_renderer_backend_t *backend,
ply_renderer_input_source_t *input_source)
{
- assert (backend != NULL);
- assert (has_input_source (backend, input_source));
+ assert (backend != NULL);
+ assert (has_input_source (backend, input_source));
}
ply_renderer_plugin_interface_t *
ply_renderer_backend_get_interface (void)
{
- static ply_renderer_plugin_interface_t plugin_interface =
- {
- .create_backend = create_backend,
- .destroy_backend = destroy_backend,
- .open_device = open_device,
- .close_device = close_device,
- .query_device = query_device,
- .map_to_device = map_to_device,
- .unmap_from_device = unmap_from_device,
- .activate = activate,
- .deactivate = deactivate,
- .flush_head = flush_head,
- .get_heads = get_heads,
- .get_buffer_for_head = get_buffer_for_head,
- .get_input_source = get_input_source,
- .open_input_source = open_input_source,
- .set_handler_for_input_source = set_handler_for_input_source,
- .close_input_source = close_input_source
- };
- return &plugin_interface;
+ static ply_renderer_plugin_interface_t plugin_interface =
+ {
+ .create_backend = create_backend,
+ .destroy_backend = destroy_backend,
+ .open_device = open_device,
+ .close_device = close_device,
+ .query_device = query_device,
+ .map_to_device = map_to_device,
+ .unmap_from_device = unmap_from_device,
+ .activate = activate,
+ .deactivate = deactivate,
+ .flush_head = flush_head,
+ .get_heads = get_heads,
+ .get_buffer_for_head = get_buffer_for_head,
+ .get_input_source = get_input_source,
+ .open_input_source = open_input_source,
+ .set_handler_for_input_source = set_handler_for_input_source,
+ .close_input_source = close_input_source
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/plugins/splash/details/plugin.c b/src/plugins/splash/details/plugin.c
index aff2f1c0..8e55d053 100644
--- a/src/plugins/splash/details/plugin.c
+++ b/src/plugins/splash/details/plugin.c
@@ -54,16 +54,17 @@
#define CLEAR_LINE_SEQUENCE "\033[2K\r"
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_text_display_t *display;
+ ply_boot_splash_plugin_t *plugin;
+ ply_text_display_t *display;
} view_t;
ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
@@ -71,125 +72,121 @@ static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin);
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
- ply_list_t *views;
- ply_boot_splash_display_type_t state;
- ply_list_t *messages;
-
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
+ ply_list_t *views;
+ ply_boot_splash_display_type_t state;
+ ply_list_t *messages;
};
static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
- ply_text_display_t *display)
+ ply_text_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- return view;
+ return view;
}
static void
view_free (view_t *view)
{
- free (view);
+ free (view);
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static void
free_messages (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->messages);
+ node = ply_list_get_first_node (plugin->messages);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- char *message;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ char *message;
- message = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->messages, node);
+ message = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->messages, node);
- free (message);
- ply_list_remove_node (plugin->messages, node);
+ free (message);
+ ply_list_remove_node (plugin->messages, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->messages);
- plugin->messages = NULL;
+ ply_list_free (plugin->messages);
+ plugin->messages = NULL;
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_plugin_t *plugin;
- ply_trace ("creating plugin");
+ ply_trace ("creating plugin");
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
- plugin->views = ply_list_new ();
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- plugin->messages = ply_list_new ();
- return plugin;
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
+ plugin->views = ply_list_new ();
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ plugin->messages = ply_list_new ();
+ return plugin;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- ply_trace ("destroying plugin");
+ ply_trace ("destroying plugin");
- if (plugin == NULL)
- return;
+ if (plugin == NULL)
+ return;
- if (plugin->loop != NULL)
- {
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ if (plugin->loop != NULL) {
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- free_messages (plugin);
- free_views (plugin);
+ free_messages (plugin);
+ free_views (plugin);
- free (plugin);
+ free (plugin);
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
- ply_trace ("detaching from event loop");
+ ply_trace ("detaching from event loop");
}
static void
@@ -197,10 +194,10 @@ view_write (view_t *view,
const char *text,
size_t number_of_bytes)
{
- ply_terminal_t *terminal;
+ ply_terminal_t *terminal;
- terminal = ply_text_display_get_terminal (view->display);
- ply_terminal_write (terminal, "%.*s", (int) number_of_bytes, text);
+ terminal = ply_text_display_get_terminal (view->display);
+ ply_terminal_write (terminal, "%.*s", (int) number_of_bytes, text);
}
static void
@@ -208,67 +205,63 @@ write_on_views (ply_boot_splash_plugin_t *plugin,
const char *text,
size_t number_of_bytes)
{
- ply_list_node_t *node;
-
- if (number_of_bytes == 0)
- return;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
+ if (number_of_bytes == 0)
+ return;
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view_write (view, text, number_of_bytes);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- node = next_node;
- }
+ view_write (view, text, number_of_bytes);
+ node = next_node;
+ }
}
static void
add_text_display (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- view_t *view;
- ply_terminal_t *terminal;
+ view_t *view;
+ ply_terminal_t *terminal;
- view = view_new (plugin, display);
+ view = view_new (plugin, display);
- terminal = ply_text_display_get_terminal (view->display);
- if (ply_terminal_open (terminal))
- ply_terminal_activate_vt (terminal);
+ terminal = ply_text_display_get_terminal (view->display);
+ if (ply_terminal_open (terminal))
+ ply_terminal_activate_vt (terminal);
- ply_list_append_data (plugin->views, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_text_display (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
- ply_list_remove_node (plugin->views, node);
- return;
- }
+ if (view->display == display) {
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
static bool
@@ -277,34 +270,33 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- size_t size;
+ size_t size;
- assert (plugin != NULL);
+ assert (plugin != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
+ plugin->loop = loop;
+ plugin->mode = mode;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- if (boot_buffer)
- {
- size = ply_buffer_get_size (boot_buffer);
+ if (boot_buffer) {
+ size = ply_buffer_get_size (boot_buffer);
- write_on_views (plugin, ply_buffer_get_bytes (boot_buffer), size);
- }
+ write_on_views (plugin, ply_buffer_get_bytes (boot_buffer), size);
+ }
- return true;
+ return true;
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("status update");
+ ply_trace ("status update");
}
static void
@@ -312,51 +304,50 @@ on_boot_output (ply_boot_splash_plugin_t *plugin,
const char *output,
size_t size)
{
- ply_trace ("writing '%s' to all views (%d bytes)",
- output, (int) size);
- write_on_views (plugin, output, size);
+ ply_trace ("writing '%s' to all views (%d bytes)",
+ output, (int) size);
+ write_on_views (plugin, output, size);
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("hiding splash screen");
+ ply_trace ("hiding splash screen");
- ply_event_loop_stop_watching_for_exit (plugin->loop,
- (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
+ ply_event_loop_stop_watching_for_exit (plugin->loop,
+ (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- write_on_views (plugin, "\r\n", strlen ("\r\n"));
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ write_on_views (plugin, "\r\n", strlen ("\r\n"));
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- node = ply_list_get_first_node (plugin->messages);
- while (node != NULL)
- {
- const char *message;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->messages);
+ while (node != NULL) {
+ const char *message;
+ ply_list_node_t *next_node;
- message = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->messages, node);
+ message = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->messages, node);
- write_on_views (plugin, message, strlen (message));
- write_on_views (plugin, "\r\n", strlen ("\r\n"));
+ write_on_views (plugin, message, strlen (message));
+ write_on_views (plugin, "\r\n", strlen ("\r\n"));
- ply_list_remove_node (plugin->messages, node);
- node = next_node;
- }
+ ply_list_remove_node (plugin->messages, node);
+ node = next_node;
+ }
}
static void
@@ -364,28 +355,30 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- int i;
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY)
- write_on_views (plugin, "\r\n", strlen ("\r\n"));
- else
- write_on_views (plugin,
- CLEAR_LINE_SEQUENCE,
- strlen (CLEAR_LINE_SEQUENCE));
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
-
- if (prompt)
- write_on_views (plugin,
- prompt,
- strlen (prompt));
- else
- write_on_views (plugin,
- "Password",
- strlen ("Password"));
-
- write_on_views (plugin, ":", strlen (":"));
-
- for (i = 0; i < bullets; i++)
- write_on_views (plugin, "*", strlen ("*"));
+ int i;
+
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY)
+ write_on_views (plugin, "\r\n", strlen ("\r\n"));
+ else
+ write_on_views (plugin,
+ CLEAR_LINE_SEQUENCE,
+ strlen (CLEAR_LINE_SEQUENCE));
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+
+ if (prompt)
+ write_on_views (plugin,
+ prompt,
+ strlen (prompt));
+ else
+ write_on_views (plugin,
+ "Password",
+ strlen ("Password"));
+
+ write_on_views (plugin, ":", strlen (":"));
+
+ for (i = 0; i < bullets; i++) {
+ write_on_views (plugin, "*", strlen ("*"));
+ }
}
static void
@@ -393,54 +386,53 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY)
- write_on_views (plugin, "\r\n", strlen ("\r\n"));
- else
- write_on_views (plugin,
- CLEAR_LINE_SEQUENCE,
- strlen (CLEAR_LINE_SEQUENCE));
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
- if (prompt)
- write_on_views (plugin, prompt, strlen (prompt));
-
- write_on_views (plugin, ":", strlen (":"));
- write_on_views (plugin, entry_text, strlen (entry_text));
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY)
+ write_on_views (plugin, "\r\n", strlen ("\r\n"));
+ else
+ write_on_views (plugin,
+ CLEAR_LINE_SEQUENCE,
+ strlen (CLEAR_LINE_SEQUENCE));
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
+ if (prompt)
+ write_on_views (plugin, prompt, strlen (prompt));
+
+ write_on_views (plugin, ":", strlen (":"));
+ write_on_views (plugin, entry_text, strlen (entry_text));
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- {
- write_on_views (plugin, message, strlen (message));
- write_on_views (plugin, "\r\n", strlen ("\r\n"));
- }
- else
- ply_list_append_data (plugin->messages, strdup (message));
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL) {
+ write_on_views (plugin, message, strlen (message));
+ write_on_views (plugin, "\r\n", strlen ("\r\n"));
+ } else {
+ ply_list_append_data (plugin->messages, strdup (message));
+ }
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_text_display = add_text_display,
- .remove_text_display = remove_text_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_output = on_boot_output,
- .hide_splash_screen = hide_splash_screen,
- .display_normal = display_normal,
- .display_password = display_password,
- .display_question = display_question,
- .display_message = display_message,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_text_display = add_text_display,
+ .remove_text_display = remove_text_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_output = on_boot_output,
+ .hide_splash_screen = hide_splash_screen,
+ .display_normal = display_normal,
+ .display_password = display_password,
+ .display_question = display_question,
+ .display_message = display_message,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/fade-throbber/plugin.c b/src/plugins/splash/fade-throbber/plugin.c
index 4af6cae7..1643b870 100644
--- a/src/plugins/splash/fade-throbber/plugin.c
+++ b/src/plugins/splash/fade-throbber/plugin.c
@@ -60,49 +60,50 @@
#endif
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
typedef struct
{
- unsigned int x;
- unsigned int y;
- double start_time;
- double speed;
- double opacity;
+ unsigned int x;
+ unsigned int y;
+ double start_time;
+ double speed;
+ double opacity;
} star_t;
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_pixel_display_t *display;
- ply_list_t *stars;
- ply_entry_t *entry;
- ply_label_t *label;
- ply_label_t *message_label;
- ply_rectangle_t lock_area;
- double logo_opacity;
+ ply_boot_splash_plugin_t *plugin;
+ ply_pixel_display_t *display;
+ ply_list_t *stars;
+ ply_entry_t *entry;
+ ply_label_t *label;
+ ply_label_t *message_label;
+ ply_rectangle_t lock_area;
+ double logo_opacity;
} view_t;
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
- ply_image_t *logo_image;
- ply_image_t *star_image;
- ply_image_t *lock_image;
- char *image_dir;
- ply_list_t *views;
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
+ ply_image_t *logo_image;
+ ply_image_t *star_image;
+ ply_image_t *lock_image;
+ char *image_dir;
+ ply_list_t *views;
- ply_boot_splash_display_type_t state;
+ ply_boot_splash_display_type_t state;
- double start_time;
- double now;
+ double start_time;
+ double now;
- uint32_t is_animating : 1;
+ uint32_t is_animating : 1;
};
ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
@@ -111,84 +112,82 @@ static void
view_show_prompt (view_t *view,
const char *prompt)
{
- ply_boot_splash_plugin_t *plugin;
- int x, y;
- int entry_width, entry_height;
+ ply_boot_splash_plugin_t *plugin;
+ int x, y;
+ int entry_width, entry_height;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- if (ply_entry_is_hidden (view->entry))
- {
- unsigned long screen_width, screen_height;
+ if (ply_entry_is_hidden (view->entry)) {
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- view->lock_area.width = ply_image_get_width (plugin->lock_image);
- view->lock_area.height = ply_image_get_height (plugin->lock_image);
+ view->lock_area.width = ply_image_get_width (plugin->lock_image);
+ view->lock_area.height = ply_image_get_height (plugin->lock_image);
- entry_width = ply_entry_get_width (view->entry);
- entry_height = ply_entry_get_height (view->entry);
+ entry_width = ply_entry_get_width (view->entry);
+ entry_height = ply_entry_get_height (view->entry);
- x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
- y = screen_height / 2.0 - entry_height / 2.0;
+ x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
+ y = screen_height / 2.0 - entry_height / 2.0;
- view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
- view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
+ view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
+ view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
- ply_entry_show (view->entry, plugin->loop, view->display, x, y);
- }
+ ply_entry_show (view->entry, plugin->loop, view->display, x, y);
+ }
- if (prompt != NULL)
- {
- ply_label_set_text (view->label, prompt);
+ if (prompt != NULL) {
+ ply_label_set_text (view->label, prompt);
- x = view->lock_area.x;
- y = view->lock_area.y + view->lock_area.height;
+ x = view->lock_area.x;
+ y = view->lock_area.y + view->lock_area.height;
- ply_label_show (view->label, view->display, x, y);
- }
+ ply_label_show (view->label, view->display, x, y);
+ }
}
static void
view_hide_prompt (view_t *view)
{
- assert (view != NULL);
+ assert (view != NULL);
- ply_entry_hide (view->entry);
- ply_label_hide (view->label);
+ ply_entry_hide (view->entry);
+ ply_label_hide (view->label);
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
- char *image_dir, *image_path;
+ ply_boot_splash_plugin_t *plugin;
+ char *image_dir, *image_path;
- srand ((int) ply_get_timestamp ());
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
- plugin->start_time = 0.0;
+ srand ((int) ply_get_timestamp ());
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
+ plugin->start_time = 0.0;
- plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE);
- image_dir = ply_key_file_get_value (key_file, "fade-throbber", "ImageDir");
+ plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE);
+ image_dir = ply_key_file_get_value (key_file, "fade-throbber", "ImageDir");
- asprintf (&image_path, "%s/star.png", image_dir);
- plugin->star_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/star.png", image_dir);
+ plugin->star_image = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/lock.png", image_dir);
- plugin->lock_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/lock.png", image_dir);
+ plugin->lock_image = ply_image_new (image_path);
+ free (image_path);
- plugin->image_dir = image_dir;
+ plugin->image_dir = image_dir;
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- plugin->views = ply_list_new ();
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ plugin->views = ply_list_new ();
- return plugin;
+ return plugin;
}
static star_t *
@@ -196,46 +195,45 @@ star_new (int x,
int y,
double speed)
{
- star_t *star;
+ star_t *star;
- star = calloc (1, sizeof (star_t));
- star->x = x;
- star->y = y;
- star->speed = speed;
- star->start_time = ply_get_timestamp ();
+ star = calloc (1, sizeof(star_t));
+ star->x = x;
+ star->y = y;
+ star->speed = speed;
+ star->start_time = ply_get_timestamp ();
- return star;
+ return star;
}
static void
star_free (star_t *star)
{
- free (star);
+ free (star);
}
static void
free_stars (view_t *view)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (view != NULL);
+ assert (view != NULL);
- node = ply_list_get_first_node (view->stars);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- star_t *star;
+ node = ply_list_get_first_node (view->stars);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ star_t *star;
- star = (star_t *) ply_list_node_get_data (node);
+ star = (star_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (view->stars, node);
+ next_node = ply_list_get_next_node (view->stars, node);
- star_free (star);
- node = next_node;
- }
+ star_free (star);
+ node = next_node;
+ }
- ply_list_free (view->stars);
- view->stars = NULL;
+ ply_list_free (view->stars);
+ view->stars = NULL;
}
static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin);
@@ -244,380 +242,368 @@ static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- view->entry = ply_entry_new (plugin->image_dir);
- view->stars = ply_list_new ();
- view->label = ply_label_new ();
+ view->entry = ply_entry_new (plugin->image_dir);
+ view->stars = ply_list_new ();
+ view->label = ply_label_new ();
- view->message_label = ply_label_new ();
+ view->message_label = ply_label_new ();
- return view;
+ return view;
}
static void
view_free (view_t *view)
{
+ ply_entry_free (view->entry);
+ ply_label_free (view->message_label);
+ free_stars (view);
- ply_entry_free (view->entry);
- ply_label_free (view->message_label);
- free_stars (view);
-
- free (view);
+ free (view);
}
static bool
view_load (view_t *view)
{
- ply_trace ("loading entry");
- if (!ply_entry_load (view->entry))
- return false;
+ ply_trace ("loading entry");
+ if (!ply_entry_load (view->entry))
+ return false;
- return true;
+ return true;
}
static bool
load_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- bool view_loaded;
+ ply_list_node_t *node;
+ bool view_loaded;
- view_loaded = false;
- node = ply_list_get_first_node (plugin->views);
+ view_loaded = false;
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view_load (view))
- view_loaded = true;
+ if (view_load (view))
+ view_loaded = true;
- node = next_node;
- }
+ node = next_node;
+ }
- return view_loaded;
+ return view_loaded;
}
static void
view_redraw (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
redraw_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_redraw (view);
+ view_redraw (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
pause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_pause_updates (view->display);
+ ply_pixel_display_pause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_unpause_updates (view->display);
+ ply_pixel_display_unpause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- if (plugin == NULL)
- return;
-
- if (plugin->loop != NULL)
- {
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
-
- free_views (plugin);
- ply_image_free (plugin->logo_image);
- ply_image_free (plugin->star_image);
- ply_image_free (plugin->lock_image);
- free (plugin);
+ if (plugin == NULL)
+ return;
+
+ if (plugin->loop != NULL) {
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
+
+ free_views (plugin);
+ ply_image_free (plugin->logo_image);
+ ply_image_free (plugin->star_image);
+ ply_image_free (plugin->lock_image);
+ free (plugin);
}
static void
-view_animate_at_time (view_t *view,
- double time)
+view_animate_at_time (view_t *view,
+ double time)
{
- ply_boot_splash_plugin_t *plugin;
- ply_list_node_t *node;
- double logo_opacity;
- long logo_x, logo_y;
- long logo_width, logo_height;
- unsigned long screen_width, screen_height;
- unsigned long star_width, star_height;
+ ply_boot_splash_plugin_t *plugin;
+ ply_list_node_t *node;
+ double logo_opacity;
+ long logo_x, logo_y;
+ long logo_width, logo_height;
+ unsigned long screen_width, screen_height;
+ unsigned long star_width, star_height;
- plugin = view->plugin;
+ plugin = view->plugin;
- logo_width = ply_image_get_width (plugin->logo_image);
- logo_height = ply_image_get_height (plugin->logo_image);
+ logo_width = ply_image_get_width (plugin->logo_image);
+ logo_height = ply_image_get_height (plugin->logo_image);
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- logo_x = (screen_width / 2) - (logo_width / 2);
- logo_y = (screen_height / 2) - (logo_height / 2);
+ logo_x = (screen_width / 2) - (logo_width / 2);
+ logo_y = (screen_height / 2) - (logo_height / 2);
- star_width = ply_image_get_width (plugin->star_image);
- star_height = ply_image_get_height (plugin->star_image);
+ star_width = ply_image_get_width (plugin->star_image);
+ star_height = ply_image_get_height (plugin->star_image);
- node = ply_list_get_first_node (view->stars);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- star_t *star;
+ node = ply_list_get_first_node (view->stars);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ star_t *star;
- star = (star_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (view->stars, node);
+ star = (star_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (view->stars, node);
- star->opacity = .5 * sin (((plugin->now - star->start_time) / star->speed) * (2 * M_PI)) + .5;
- star->opacity = CLAMP (star->opacity, 0, 1.0);
+ star->opacity = .5 * sin (((plugin->now - star->start_time) / star->speed) * (2 * M_PI)) + .5;
+ star->opacity = CLAMP (star->opacity, 0, 1.0);
- ply_pixel_display_draw_area (view->display,
- star->x, star->y,
- star_width, star_height);
- node = next_node;
- }
+ ply_pixel_display_draw_area (view->display,
+ star->x, star->y,
+ star_width, star_height);
+ node = next_node;
+ }
- logo_opacity = .5 * sin ((time / 5) * (2 * M_PI)) + .8;
- logo_opacity = CLAMP (logo_opacity, 0, 1.0);
+ logo_opacity = .5 * sin ((time / 5) * (2 * M_PI)) + .8;
+ logo_opacity = CLAMP (logo_opacity, 0, 1.0);
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- logo_opacity = 1.0;
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
+ logo_opacity = 1.0;
- if (fabs (logo_opacity - view->logo_opacity) <= DBL_MIN)
- return;
+ if (fabs (logo_opacity - view->logo_opacity) <= DBL_MIN)
+ return;
- view->logo_opacity = logo_opacity;
+ view->logo_opacity = logo_opacity;
- ply_pixel_display_draw_area (view->display,
- logo_x, logo_y,
- logo_width, logo_height);
+ ply_pixel_display_draw_area (view->display,
+ logo_x, logo_y,
+ logo_width, logo_height);
}
static void
animate_at_time (ply_boot_splash_plugin_t *plugin,
double time)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_animate_at_time (view, time);
+ view_animate_at_time (view, time);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
on_timeout (ply_boot_splash_plugin_t *plugin)
{
- double sleep_time;
-
- plugin->now = ply_get_timestamp ();
-
- /* The choice below is between
- *
- * 1) keeping a constant animation speed, and dropping
- * frames when necessary
- * 2) showing every frame, but slowing down the animation
- * when a frame would be otherwise dropped.
- *
- * It turns out there are parts of boot up where the animation
- * can get sort of choppy. By default we choose 2, since the
- * nature of this animation means it looks natural even when it
- * is slowed down
- */
+ double sleep_time;
+
+ plugin->now = ply_get_timestamp ();
+
+ /* The choice below is between
+ *
+ * 1) keeping a constant animation speed, and dropping
+ * frames when necessary
+ * 2) showing every frame, but slowing down the animation
+ * when a frame would be otherwise dropped.
+ *
+ * It turns out there are parts of boot up where the animation
+ * can get sort of choppy. By default we choose 2, since the
+ * nature of this animation means it looks natural even when it
+ * is slowed down
+ */
#ifdef REAL_TIME_ANIMATION
- animate_at_time (plugin,
- plugin->now - plugin->start_time);
+ animate_at_time (plugin,
+ plugin->now - plugin->start_time);
#else
- static double time = 0.0;
- time += 1.0 / FRAMES_PER_SECOND;
- animate_at_time (plugin, time);
+ static double time = 0.0;
+ time += 1.0 / FRAMES_PER_SECOND;
+ animate_at_time (plugin, time);
#endif
- sleep_time = 1.0 / FRAMES_PER_SECOND;
- sleep_time = MAX (sleep_time - (ply_get_timestamp () - plugin->now),
- 0.005);
+ sleep_time = 1.0 / FRAMES_PER_SECOND;
+ sleep_time = MAX (sleep_time - (ply_get_timestamp () - plugin->now),
+ 0.005);
- ply_event_loop_watch_for_timeout (plugin->loop,
- sleep_time,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
+ ply_event_loop_watch_for_timeout (plugin->loop,
+ sleep_time,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
}
static void
view_start_animation (view_t *view)
{
- unsigned long screen_width, screen_height;
-
- assert (view != NULL);
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ assert (view != NULL);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
start_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (plugin->is_animating)
- return;
+ if (plugin->is_animating)
+ return;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_start_animation (view);
+ view_start_animation (view);
- node = next_node;
- }
+ node = next_node;
+ }
+
+ plugin->is_animating = true;
+
+ plugin->start_time = ply_get_timestamp ();
+ animate_at_time (plugin, plugin->start_time);
- plugin->is_animating = true;
-
- plugin->start_time = ply_get_timestamp ();
- animate_at_time (plugin, plugin->start_time);
-
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- return;
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
+ return;
- ply_event_loop_watch_for_timeout (plugin->loop,
- 1.0 / FRAMES_PER_SECOND,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
+ ply_event_loop_watch_for_timeout (plugin->loop,
+ 1.0 / FRAMES_PER_SECOND,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin)
{
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
+ if (!plugin->is_animating)
+ return;
- plugin->is_animating = false;
+ plugin->is_animating = false;
- if (plugin->loop != NULL)
- {
- ply_event_loop_stop_watching_for_timeout (plugin->loop,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
- }
- redraw_views (plugin);
+ if (plugin->loop != NULL) {
+ ply_event_loop_stop_watching_for_timeout (plugin->loop,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
+ }
+ redraw_views (plugin);
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
}
static void
@@ -628,16 +614,16 @@ draw_background (view_t *view,
int width,
int height)
{
- ply_rectangle_t area;
+ ply_rectangle_t area;
- area.x = x;
- area.y = y;
- area.width = width;
- area.height = height;
+ area.x = x;
+ area.y = y;
+ area.width = width;
+ area.height = height;
- ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area,
- PLYMOUTH_BACKGROUND_START_COLOR,
- PLYMOUTH_BACKGROUND_END_COLOR);
+ ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area,
+ PLYMOUTH_BACKGROUND_START_COLOR,
+ PLYMOUTH_BACKGROUND_END_COLOR);
}
static void
@@ -648,54 +634,53 @@ draw_normal_view (view_t *view,
int width,
int height)
{
- ply_boot_splash_plugin_t *plugin;
- ply_list_node_t *node;
- ply_rectangle_t logo_area;
- ply_rectangle_t star_area;
- uint32_t *logo_data, *star_data;
- unsigned long screen_width, screen_height;
-
- plugin = view->plugin;
-
- if (!plugin->is_animating)
- return;
-
- logo_area.width = ply_image_get_width (plugin->logo_image);
- logo_area.height = ply_image_get_height (plugin->logo_image);
- logo_data = ply_image_get_data (plugin->logo_image);
-
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
-
- logo_area.x = (screen_width / 2) - (logo_area.width / 2);
- logo_area.y = (screen_height / 2) - (logo_area.height / 2);
-
- star_data = ply_image_get_data (plugin->star_image);
- star_area.width = ply_image_get_width (plugin->star_image);
- star_area.height = ply_image_get_height (plugin->star_image);
-
- node = ply_list_get_first_node (view->stars);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- star_t *star;
-
- star = (star_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (view->stars, node);
-
- star_area.x = star->x;
- star_area.y = star->y;
- ply_pixel_buffer_fill_with_argb32_data_at_opacity (pixel_buffer,
- &star_area,
- star_data,
- star->opacity);
- node = next_node;
- }
-
- ply_pixel_buffer_fill_with_argb32_data_at_opacity (pixel_buffer,
- &logo_area,
- logo_data,
- view->logo_opacity);
+ ply_boot_splash_plugin_t *plugin;
+ ply_list_node_t *node;
+ ply_rectangle_t logo_area;
+ ply_rectangle_t star_area;
+ uint32_t *logo_data, *star_data;
+ unsigned long screen_width, screen_height;
+
+ plugin = view->plugin;
+
+ if (!plugin->is_animating)
+ return;
+
+ logo_area.width = ply_image_get_width (plugin->logo_image);
+ logo_area.height = ply_image_get_height (plugin->logo_image);
+ logo_data = ply_image_get_data (plugin->logo_image);
+
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+
+ logo_area.x = (screen_width / 2) - (logo_area.width / 2);
+ logo_area.y = (screen_height / 2) - (logo_area.height / 2);
+
+ star_data = ply_image_get_data (plugin->star_image);
+ star_area.width = ply_image_get_width (plugin->star_image);
+ star_area.height = ply_image_get_height (plugin->star_image);
+
+ node = ply_list_get_first_node (view->stars);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ star_t *star;
+
+ star = (star_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (view->stars, node);
+
+ star_area.x = star->x;
+ star_area.y = star->y;
+ ply_pixel_buffer_fill_with_argb32_data_at_opacity (pixel_buffer,
+ &star_area,
+ star_data,
+ star->opacity);
+ node = next_node;
+ }
+
+ ply_pixel_buffer_fill_with_argb32_data_at_opacity (pixel_buffer,
+ &logo_area,
+ logo_data,
+ view->logo_opacity);
}
static void
@@ -706,89 +691,86 @@ draw_prompt_view (view_t *view,
int width,
int height)
{
- ply_boot_splash_plugin_t *plugin;
- uint32_t *lock_data;
-
- plugin = view->plugin;
-
- ply_entry_draw_area (view->entry,
- pixel_buffer,
- x, y, width, height);
- ply_label_draw_area (view->label,
- pixel_buffer,
- x, y, width, height);
-
- lock_data = ply_image_get_data (plugin->lock_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->lock_area,
- lock_data);
+ ply_boot_splash_plugin_t *plugin;
+ uint32_t *lock_data;
+
+ plugin = view->plugin;
+
+ ply_entry_draw_area (view->entry,
+ pixel_buffer,
+ x, y, width, height);
+ ply_label_draw_area (view->label,
+ pixel_buffer,
+ x, y, width, height);
+
+ lock_data = ply_image_get_data (plugin->lock_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->lock_area,
+ lock_data);
}
static void
-on_draw (view_t *view,
- ply_pixel_buffer_t *pixel_buffer,
- int x,
- int y,
- int width,
- int height)
+on_draw (view_t *view,
+ ply_pixel_buffer_t *pixel_buffer,
+ int x,
+ int y,
+ int width,
+ int height)
{
- ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_plugin_t *plugin;
- plugin = view->plugin;
+ plugin = view->plugin;
- draw_background (view, pixel_buffer, x, y, width, height);
+ draw_background (view, pixel_buffer, x, y, width, height);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- draw_normal_view (view, pixel_buffer, x, y, width, height);
- else
- draw_prompt_view (view, pixel_buffer, x, y, width, height);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ draw_normal_view (view, pixel_buffer, x, y, width, height);
+ else
+ draw_prompt_view (view, pixel_buffer, x, y, width, height);
- ply_label_draw_area (view->message_label,
- pixel_buffer,
- x, y, width, height);
+ ply_label_draw_area (view->message_label,
+ pixel_buffer,
+ x, y, width, height);
}
static void
add_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = view_new (plugin, display);
+ view = view_new (plugin, display);
- ply_pixel_display_set_draw_handler (view->display,
- (ply_pixel_display_draw_handler_t)
- on_draw, view);
+ ply_pixel_display_set_draw_handler (view->display,
+ (ply_pixel_display_draw_handler_t)
+ on_draw, view);
- ply_list_append_data (plugin->views, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
+ if (view->display == display) {
+ ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
- return;
+ node = next_node;
}
-
- node = next_node;
- }
}
static bool
@@ -797,182 +779,175 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
- assert (plugin->logo_image != NULL);
+ assert (plugin != NULL);
+ assert (plugin->logo_image != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
+ plugin->loop = loop;
+ plugin->mode = mode;
- ply_trace ("loading logo image");
- if (!ply_image_load (plugin->logo_image))
- return false;
+ ply_trace ("loading logo image");
+ if (!ply_image_load (plugin->logo_image))
+ return false;
- ply_trace ("loading star image");
- if (!ply_image_load (plugin->star_image))
- return false;
+ ply_trace ("loading star image");
+ if (!ply_image_load (plugin->star_image))
+ return false;
- ply_trace ("loading lock image");
- if (!ply_image_load (plugin->lock_image))
- return false;
+ ply_trace ("loading lock image");
+ if (!ply_image_load (plugin->lock_image))
+ return false;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- if (!load_views (plugin))
- {
- ply_trace ("couldn't load views");
- return false;
- }
+ if (!load_views (plugin)) {
+ ply_trace ("couldn't load views");
+ return false;
+ }
- ply_trace ("starting boot animation");
- start_animation (plugin);
+ ply_trace ("starting boot animation");
+ start_animation (plugin);
- return true;
+ return true;
}
static void
view_add_star (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
- ply_rectangle_t logo_area;
- star_t *star;
- unsigned int x, y;
- unsigned int width, height;
- unsigned long screen_width, screen_height;
- ply_list_node_t *node;
-
- assert (view != NULL);
-
- plugin = view->plugin;
-
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
- width = ply_image_get_width (plugin->logo_image);
- height = ply_image_get_height (plugin->logo_image);
- logo_area.x = (screen_width / 2) - (width / 2);
- logo_area.y = (screen_height / 2) - (height / 2);
- logo_area.width = width;
- logo_area.height = height;
-
- width = ply_image_get_width (plugin->star_image);
- height = ply_image_get_height (plugin->star_image);
-
- node = NULL;
- do
- {
- x = rand () % screen_width;
- y = rand () % screen_height;
-
- if ((x <= logo_area.x + logo_area.width)
- && (x >= logo_area.x)
- && (y >= logo_area.y)
- && (y <= logo_area.y + logo_area.height))
- continue;
-
- if ((x + width >= logo_area.x)
- && (x + width <= logo_area.x + logo_area.width)
- && (y + height >= logo_area.y)
- && (y + height <= logo_area.y + logo_area.height))
- continue;
-
- node = ply_list_get_first_node (view->stars);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
-
- star = (star_t *) ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (view->stars, node);
-
- if ((x <= star->x + width)
- && (x >= star->x)
- && (y >= star->y)
- && (y <= star->y + height))
- break;
-
- if ((x + width >= star->x)
- && (x + width <= star->x + width)
- && (y + height >= star->y)
- && (y + height <= star->y + height))
- break;
-
- node = next_node;
- }
-
- } while (node != NULL);
-
- star = star_new (x, y, (double) ((rand () % 50) + 1));
- ply_list_append_data (view->stars, star);
+ ply_boot_splash_plugin_t *plugin;
+ ply_rectangle_t logo_area;
+ star_t *star;
+ unsigned int x, y;
+ unsigned int width, height;
+ unsigned long screen_width, screen_height;
+ ply_list_node_t *node;
+
+ assert (view != NULL);
+
+ plugin = view->plugin;
+
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+ width = ply_image_get_width (plugin->logo_image);
+ height = ply_image_get_height (plugin->logo_image);
+ logo_area.x = (screen_width / 2) - (width / 2);
+ logo_area.y = (screen_height / 2) - (height / 2);
+ logo_area.width = width;
+ logo_area.height = height;
+
+ width = ply_image_get_width (plugin->star_image);
+ height = ply_image_get_height (plugin->star_image);
+
+ node = NULL;
+ do {
+ x = rand () % screen_width;
+ y = rand () % screen_height;
+
+ if ((x <= logo_area.x + logo_area.width)
+ && (x >= logo_area.x)
+ && (y >= logo_area.y)
+ && (y <= logo_area.y + logo_area.height))
+ continue;
+
+ if ((x + width >= logo_area.x)
+ && (x + width <= logo_area.x + logo_area.width)
+ && (y + height >= logo_area.y)
+ && (y + height <= logo_area.y + logo_area.height))
+ continue;
+
+ node = ply_list_get_first_node (view->stars);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+
+ star = (star_t *) ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (view->stars, node);
+
+ if ((x <= star->x + width)
+ && (x >= star->x)
+ && (y >= star->y)
+ && (y <= star->y + height))
+ break;
+
+ if ((x + width >= star->x)
+ && (x + width <= star->x + width)
+ && (y + height >= star->y)
+ && (y + height <= star->y + height))
+ break;
+
+ node = next_node;
+ }
+ } while (node != NULL);
+
+ star = star_new (x, y, (double) ((rand () % 50) + 1));
+ ply_list_append_data (view->stars, star);
}
static void
add_stars (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_add_star (view);
+ view_add_star (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- add_stars (plugin);
+ add_stars (plugin);
}
static void
show_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- ply_trace ("Showing message '%s'", message);
- ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
-
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
- ply_label_set_text (view->message_label, message);
- ply_label_show (view->message_label, view->display, 10, 10);
-
- ply_pixel_display_draw_area (view->display, 10, 10,
- ply_label_get_width (view->message_label),
- ply_label_get_height(view->message_label));
- node = next_node;
- }
+ ply_trace ("Showing message '%s'", message);
+ ply_list_node_t *node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
+
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+ ply_label_set_text (view->message_label, message);
+ ply_label_show (view->message_label, view->display, 10, 10);
+
+ ply_pixel_display_draw_area (view->display, 10, 10,
+ ply_label_get_width (view->message_label),
+ ply_label_get_height (view->message_label));
+ node = next_node;
+ }
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- if (plugin->loop != NULL)
- {
- stop_animation (plugin);
+ if (plugin->loop != NULL) {
+ stop_animation (plugin);
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
}
static void
@@ -980,22 +955,21 @@ show_password_prompt (ply_boot_splash_plugin_t *plugin,
const char *text,
int number_of_bullets)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, text);
- ply_entry_set_bullet_count (view->entry, number_of_bullets);
+ view_show_prompt (view, text);
+ ply_entry_set_bullet_count (view->entry, number_of_bullets);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -1003,55 +977,53 @@ show_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt);
- ply_entry_set_text (view->entry, entry_text);
+ view_show_prompt (view, prompt);
+ ply_entry_set_text (view->entry, entry_text);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
hide_prompt (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_hide_prompt (view);
+ view_hide_prompt (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_views (plugin);
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- hide_prompt (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- start_animation (plugin);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ hide_prompt (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ start_animation (plugin);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -1059,14 +1031,14 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- show_password_prompt (plugin, prompt, bullets);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ show_password_prompt (plugin, prompt, bullets);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -1074,14 +1046,14 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
- show_prompt (plugin, prompt, entry_text);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
+ show_prompt (plugin, prompt, entry_text);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
@@ -1089,28 +1061,28 @@ static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- show_message (plugin, message);
+ show_message (plugin, message);
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_pixel_display = add_pixel_display,
- .remove_pixel_display = remove_pixel_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .hide_splash_screen = hide_splash_screen,
- .display_normal = display_normal,
- .display_password = display_password,
- .display_question = display_question,
- .display_message = display_message,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_pixel_display = add_pixel_display,
+ .remove_pixel_display = remove_pixel_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .hide_splash_screen = hide_splash_screen,
+ .display_normal = display_normal,
+ .display_password = display_password,
+ .display_question = display_question,
+ .display_message = display_message,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/script/plugin.c b/src/plugins/splash/script/plugin.c
index c5c1e169..a89c114b 100644
--- a/src/plugins/splash/script/plugin.c
+++ b/src/plugins/splash/script/plugin.c
@@ -71,31 +71,31 @@
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
- ply_list_t *displays;
- ply_keyboard_t *keyboard;
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
+ ply_list_t *displays;
+ ply_keyboard_t *keyboard;
- char *script_filename;
- char *image_dir;
+ char *script_filename;
+ char *image_dir;
- ply_list_t *script_env_vars;
- script_op_t *script_main_op;
+ ply_list_t *script_env_vars;
+ script_op_t *script_main_op;
- script_state_t *script_state;
- script_lib_sprite_data_t *script_sprite_lib;
- script_lib_image_data_t *script_image_lib;
- script_lib_plymouth_data_t *script_plymouth_lib;
- script_lib_math_data_t *script_math_lib;
- script_lib_string_data_t *script_string_lib;
+ script_state_t *script_state;
+ script_lib_sprite_data_t *script_sprite_lib;
+ script_lib_image_data_t *script_image_lib;
+ script_lib_plymouth_data_t *script_plymouth_lib;
+ script_lib_math_data_t *script_math_lib;
+ script_lib_string_data_t *script_string_lib;
- uint32_t is_animating : 1;
+ uint32_t is_animating : 1;
};
-typedef struct
+typedef struct
{
- char *key;
- char *value;
+ char *key;
+ char *value;
} script_env_var_t;
static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin);
@@ -108,134 +108,130 @@ static void on_keyboard_input (ply_boot_splash_plugin_t *plugin,
static void
pause_displays (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->displays);
- while (node != NULL)
- {
- ply_pixel_display_t *display;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->displays);
+ while (node != NULL) {
+ ply_pixel_display_t *display;
+ ply_list_node_t *next_node;
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->displays, node);
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->displays, node);
- ply_pixel_display_pause_updates (display);
+ ply_pixel_display_pause_updates (display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_displays (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->displays);
- while (node != NULL)
- {
- ply_pixel_display_t *display;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->displays);
+ while (node != NULL) {
+ ply_pixel_display_t *display;
+ ply_list_node_t *next_node;
- display = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->displays, node);
+ display = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->displays, node);
- ply_pixel_display_unpause_updates (display);
+ ply_pixel_display_unpause_updates (display);
- node = next_node;
- }
+ node = next_node;
+ }
}
-static void
+static void
add_script_env_var (const char *group_name,
const char *key,
const char *value,
void *user_data)
{
- ply_list_t *script_env_vars;
- script_env_var_t *new_env_var;
+ ply_list_t *script_env_vars;
+ script_env_var_t *new_env_var;
- if (strcmp (group_name, "script-env-vars") != 0)
- return;
+ if (strcmp (group_name, "script-env-vars") != 0)
+ return;
- script_env_vars = user_data;
- new_env_var = malloc (sizeof (script_env_var_t));
- new_env_var->key = strdup (key);
- new_env_var->value = strdup (value);
+ script_env_vars = user_data;
+ new_env_var = malloc (sizeof(script_env_var_t));
+ new_env_var->key = strdup (key);
+ new_env_var->value = strdup (value);
- ply_list_append_data (script_env_vars, new_env_var);
+ ply_list_append_data (script_env_vars, new_env_var);
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
- plugin->image_dir = ply_key_file_get_value (key_file,
- "script",
- "ImageDir");
- plugin->script_filename = ply_key_file_get_value (key_file,
+ ply_boot_splash_plugin_t *plugin;
+
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
+ plugin->image_dir = ply_key_file_get_value (key_file,
"script",
- "ScriptFile");
+ "ImageDir");
+ plugin->script_filename = ply_key_file_get_value (key_file,
+ "script",
+ "ScriptFile");
- plugin->script_env_vars = ply_list_new ();
- ply_key_file_foreach_entry (key_file, add_script_env_var, plugin->script_env_vars);
+ plugin->script_env_vars = ply_list_new ();
+ ply_key_file_foreach_entry (key_file, add_script_env_var, plugin->script_env_vars);
- plugin->displays = ply_list_new ();
- return plugin;
+ plugin->displays = ply_list_new ();
+ return plugin;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- script_env_var_t *env_var;
-
- if (plugin == NULL)
- return;
-
- if (plugin->loop != NULL)
- {
- stop_animation (plugin);
- ply_event_loop_stop_watching_for_exit (plugin->loop,
- (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
-
- for (node = ply_list_get_first_node (plugin->script_env_vars);
- node != NULL;
- node = ply_list_get_next_node (plugin->script_env_vars, node))
- {
- env_var = ply_list_node_get_data (node);
- free (env_var->key);
- free (env_var->value);
- free (env_var);
- }
- ply_list_free (plugin->script_env_vars);
- free (plugin->script_filename);
- free (plugin->image_dir);
- free (plugin);
+ ply_list_node_t *node;
+ script_env_var_t *env_var;
+
+ if (plugin == NULL)
+ return;
+
+ if (plugin->loop != NULL) {
+ stop_animation (plugin);
+ ply_event_loop_stop_watching_for_exit (plugin->loop,
+ (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
+
+ for (node = ply_list_get_first_node (plugin->script_env_vars);
+ node != NULL;
+ node = ply_list_get_next_node (plugin->script_env_vars, node)) {
+ env_var = ply_list_node_get_data (node);
+ free (env_var->key);
+ free (env_var->value);
+ free (env_var);
+ }
+ ply_list_free (plugin->script_env_vars);
+ free (plugin->script_filename);
+ free (plugin->image_dir);
+ free (plugin);
}
static void
on_timeout (ply_boot_splash_plugin_t *plugin)
{
- double sleep_time;
+ double sleep_time;
- sleep_time = 1.0 / FRAMES_PER_SECOND;
- ply_event_loop_watch_for_timeout (plugin->loop,
- sleep_time,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
+ sleep_time = 1.0 / FRAMES_PER_SECOND;
+ ply_event_loop_watch_for_timeout (plugin->loop,
+ sleep_time,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
- script_lib_plymouth_on_refresh (plugin->script_state,
- plugin->script_plymouth_lib);
-
- pause_displays (plugin);
- script_lib_sprite_refresh (plugin->script_sprite_lib);
- unpause_displays (plugin);
+ script_lib_plymouth_on_refresh (plugin->script_state,
+ plugin->script_plymouth_lib);
+ pause_displays (plugin);
+ script_lib_sprite_refresh (plugin->script_sprite_lib);
+ unpause_displays (plugin);
}
static void
@@ -243,122 +239,120 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
double duration,
double percent_done)
{
- script_lib_plymouth_on_boot_progress (plugin->script_state,
- plugin->script_plymouth_lib,
- duration,
- percent_done);
+ script_lib_plymouth_on_boot_progress (plugin->script_state,
+ plugin->script_plymouth_lib,
+ duration,
+ percent_done);
}
static bool
start_script_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- script_obj_t *target_obj;
- script_obj_t *value_obj;
- script_env_var_t *env_var;
-
- assert (plugin != NULL);
-
- plugin->script_state = script_state_new (plugin);
-
- for (node = ply_list_get_first_node (plugin->script_env_vars);
- node != NULL;
- node = ply_list_get_next_node (plugin->script_env_vars, node))
- {
- env_var = ply_list_node_get_data (node);
- target_obj = script_obj_hash_get_element (plugin->script_state->global,
- env_var->key);
- value_obj = script_obj_new_string (env_var->value);
- script_obj_assign (target_obj, value_obj);
- }
-
- plugin->script_image_lib = script_lib_image_setup (plugin->script_state,
- plugin->image_dir);
- plugin->script_sprite_lib = script_lib_sprite_setup (plugin->script_state,
- plugin->displays);
- plugin->script_plymouth_lib = script_lib_plymouth_setup (plugin->script_state,
- plugin->mode);
- plugin->script_math_lib = script_lib_math_setup (plugin->script_state);
- plugin->script_string_lib = script_lib_string_setup (plugin->script_state);
-
- ply_trace ("executing script file");
- script_return_t ret = script_execute (plugin->script_state,
- plugin->script_main_op);
- script_obj_unref (ret.object);
- if (plugin->keyboard != NULL)
- ply_keyboard_add_input_handler (plugin->keyboard,
- (ply_keyboard_input_handler_t)
- on_keyboard_input, plugin);
- on_timeout (plugin);
-
- return true;
+ ply_list_node_t *node;
+ script_obj_t *target_obj;
+ script_obj_t *value_obj;
+ script_env_var_t *env_var;
+
+ assert (plugin != NULL);
+
+ plugin->script_state = script_state_new (plugin);
+
+ for (node = ply_list_get_first_node (plugin->script_env_vars);
+ node != NULL;
+ node = ply_list_get_next_node (plugin->script_env_vars, node)) {
+ env_var = ply_list_node_get_data (node);
+ target_obj = script_obj_hash_get_element (plugin->script_state->global,
+ env_var->key);
+ value_obj = script_obj_new_string (env_var->value);
+ script_obj_assign (target_obj, value_obj);
+ }
+
+ plugin->script_image_lib = script_lib_image_setup (plugin->script_state,
+ plugin->image_dir);
+ plugin->script_sprite_lib = script_lib_sprite_setup (plugin->script_state,
+ plugin->displays);
+ plugin->script_plymouth_lib = script_lib_plymouth_setup (plugin->script_state,
+ plugin->mode);
+ plugin->script_math_lib = script_lib_math_setup (plugin->script_state);
+ plugin->script_string_lib = script_lib_string_setup (plugin->script_state);
+
+ ply_trace ("executing script file");
+ script_return_t ret = script_execute (plugin->script_state,
+ plugin->script_main_op);
+ script_obj_unref (ret.object);
+ if (plugin->keyboard != NULL)
+ ply_keyboard_add_input_handler (plugin->keyboard,
+ (ply_keyboard_input_handler_t)
+ on_keyboard_input, plugin);
+ on_timeout (plugin);
+
+ return true;
}
static bool
start_animation (ply_boot_splash_plugin_t *plugin)
{
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
+
+ if (plugin->is_animating)
+ return true;
- if (plugin->is_animating)
- return true;
+ ply_trace ("parsing script file");
+ plugin->script_main_op = script_parse_file (plugin->script_filename);
- ply_trace ("parsing script file");
- plugin->script_main_op = script_parse_file (plugin->script_filename);
-
- start_script_animation (plugin);
+ start_script_animation (plugin);
- plugin->is_animating = true;
- return true;
+ plugin->is_animating = true;
+ return true;
}
static void
stop_script_animation (ply_boot_splash_plugin_t *plugin)
{
- script_lib_plymouth_on_quit (plugin->script_state,
- plugin->script_plymouth_lib);
- script_lib_sprite_refresh (plugin->script_sprite_lib);
-
- if (plugin->loop != NULL)
- ply_event_loop_stop_watching_for_timeout (plugin->loop,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
-
- if (plugin->keyboard != NULL)
- {
- ply_keyboard_remove_input_handler (plugin->keyboard,
- (ply_keyboard_input_handler_t)
- on_keyboard_input);
- plugin->keyboard = NULL;
- }
-
- script_state_destroy (plugin->script_state);
- script_lib_sprite_destroy (plugin->script_sprite_lib);
- script_lib_image_destroy (plugin->script_image_lib);
- script_lib_plymouth_destroy (plugin->script_plymouth_lib);
- script_lib_math_destroy (plugin->script_math_lib);
- script_lib_string_destroy (plugin->script_string_lib);
+ script_lib_plymouth_on_quit (plugin->script_state,
+ plugin->script_plymouth_lib);
+ script_lib_sprite_refresh (plugin->script_sprite_lib);
+
+ if (plugin->loop != NULL)
+ ply_event_loop_stop_watching_for_timeout (plugin->loop,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
+
+ if (plugin->keyboard != NULL) {
+ ply_keyboard_remove_input_handler (plugin->keyboard,
+ (ply_keyboard_input_handler_t)
+ on_keyboard_input);
+ plugin->keyboard = NULL;
+ }
+
+ script_state_destroy (plugin->script_state);
+ script_lib_sprite_destroy (plugin->script_sprite_lib);
+ script_lib_image_destroy (plugin->script_image_lib);
+ script_lib_plymouth_destroy (plugin->script_plymouth_lib);
+ script_lib_math_destroy (plugin->script_math_lib);
+ script_lib_string_destroy (plugin->script_string_lib);
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin)
{
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
- plugin->is_animating = false;
+ if (!plugin->is_animating)
+ return;
+ plugin->is_animating = false;
- stop_script_animation (plugin);
+ stop_script_animation (plugin);
- script_parse_op_free (plugin->script_main_op);
+ script_parse_op_free (plugin->script_main_op);
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
}
static void
@@ -366,42 +360,42 @@ on_keyboard_input (ply_boot_splash_plugin_t *plugin,
const char *keyboard_input,
size_t character_size)
{
- char keyboard_string[character_size + 1];
+ char keyboard_string[character_size + 1];
- memcpy (keyboard_string, keyboard_input, character_size);
- keyboard_string[character_size] = '\0';
+ memcpy (keyboard_string, keyboard_input, character_size);
+ keyboard_string[character_size] = '\0';
- script_lib_plymouth_on_keyboard_input (plugin->script_state,
- plugin->script_plymouth_lib,
- keyboard_string);
+ script_lib_plymouth_on_keyboard_input (plugin->script_state,
+ plugin->script_plymouth_lib,
+ keyboard_string);
}
static void
set_keyboard (ply_boot_splash_plugin_t *plugin,
ply_keyboard_t *keyboard)
{
- plugin->keyboard = keyboard;
+ plugin->keyboard = keyboard;
}
static void
unset_keyboard (ply_boot_splash_plugin_t *plugin,
ply_keyboard_t *keyboard)
{
- plugin->keyboard = NULL;
+ plugin->keyboard = NULL;
}
static void
add_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- ply_list_append_data (plugin->displays, display);
+ ply_list_append_data (plugin->displays, display);
}
static void
remove_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- ply_list_remove_data(plugin->displays, display);
+ ply_list_remove_data (plugin->displays, display);
}
static bool
@@ -410,73 +404,71 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- if (ply_list_get_length (plugin->displays) == 0)
- {
- ply_trace ("no pixel displays");
- return false;
- }
+ if (ply_list_get_length (plugin->displays) == 0) {
+ ply_trace ("no pixel displays");
+ return false;
+ }
- plugin->loop = loop;
- plugin->mode = mode;
+ plugin->loop = loop;
+ plugin->mode = mode;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- ply_trace ("starting boot animation");
- return start_animation (plugin);
+ ply_trace ("starting boot animation");
+ return start_animation (plugin);
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- script_lib_plymouth_on_update_status (plugin->script_state,
- plugin->script_plymouth_lib,
- status);
+ script_lib_plymouth_on_update_status (plugin->script_state,
+ plugin->script_plymouth_lib,
+ status);
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
-
- if (plugin->loop != NULL)
- {
- stop_animation (plugin);
-
- ply_event_loop_stop_watching_for_exit (plugin->loop,
- (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ assert (plugin != NULL);
+
+ if (plugin->loop != NULL) {
+ stop_animation (plugin);
+
+ ply_event_loop_stop_watching_for_exit (plugin->loop,
+ (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
}
static void
on_root_mounted (ply_boot_splash_plugin_t *plugin)
{
- script_lib_plymouth_on_root_mounted (plugin->script_state,
- plugin->script_plymouth_lib);
+ script_lib_plymouth_on_root_mounted (plugin->script_state,
+ plugin->script_plymouth_lib);
}
static void
become_idle (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *idle_trigger)
{
- ply_trigger_pull (idle_trigger, NULL);
+ ply_trigger_pull (idle_trigger, NULL);
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_displays (plugin);
- script_lib_plymouth_on_display_normal (plugin->script_state,
- plugin->script_plymouth_lib);
- unpause_displays (plugin);
+ pause_displays (plugin);
+ script_lib_plymouth_on_display_normal (plugin->script_state,
+ plugin->script_plymouth_lib);
+ unpause_displays (plugin);
}
static void
@@ -484,12 +476,12 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_displays (plugin);
- script_lib_plymouth_on_display_password (plugin->script_state,
- plugin->script_plymouth_lib,
- prompt,
- bullets);
- unpause_displays (plugin);
+ pause_displays (plugin);
+ script_lib_plymouth_on_display_password (plugin->script_state,
+ plugin->script_plymouth_lib,
+ prompt,
+ bullets);
+ unpause_displays (plugin);
}
static void
@@ -497,61 +489,61 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_displays (plugin);
- script_lib_plymouth_on_display_question (plugin->script_state,
- plugin->script_plymouth_lib,
- prompt,
- entry_text);
- unpause_displays (plugin);
+ pause_displays (plugin);
+ script_lib_plymouth_on_display_question (plugin->script_state,
+ plugin->script_plymouth_lib,
+ prompt,
+ entry_text);
+ unpause_displays (plugin);
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- pause_displays (plugin);
- script_lib_plymouth_on_display_message (plugin->script_state,
- plugin->script_plymouth_lib,
- message);
- unpause_displays (plugin);
+ pause_displays (plugin);
+ script_lib_plymouth_on_display_message (plugin->script_state,
+ plugin->script_plymouth_lib,
+ message);
+ unpause_displays (plugin);
}
static void
hide_message (ply_boot_splash_plugin_t *plugin,
- const char *message)
+ const char *message)
{
- pause_displays (plugin);
- script_lib_plymouth_on_hide_message (plugin->script_state,
- plugin->script_plymouth_lib,
- message);
- unpause_displays (plugin);
+ pause_displays (plugin);
+ script_lib_plymouth_on_hide_message (plugin->script_state,
+ plugin->script_plymouth_lib,
+ message);
+ unpause_displays (plugin);
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .set_keyboard = set_keyboard,
- .unset_keyboard = unset_keyboard,
- .add_pixel_display = add_pixel_display,
- .remove_pixel_display = remove_pixel_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_progress = on_boot_progress,
- .hide_splash_screen = hide_splash_screen,
- .on_root_mounted = on_root_mounted,
- .become_idle = become_idle,
- .display_normal = display_normal,
- .display_password = display_password,
- .display_question = display_question,
- .display_message = display_message,
- .hide_message = hide_message,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .set_keyboard = set_keyboard,
+ .unset_keyboard = unset_keyboard,
+ .add_pixel_display = add_pixel_display,
+ .remove_pixel_display = remove_pixel_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_progress = on_boot_progress,
+ .hide_splash_screen = hide_splash_screen,
+ .on_root_mounted = on_root_mounted,
+ .become_idle = become_idle,
+ .display_normal = display_normal,
+ .display_password = display_password,
+ .display_question = display_question,
+ .display_message = display_message,
+ .hide_message = hide_message,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/script/script-debug.c b/src/plugins/splash/script/script-debug.c
index 118574b0..245ee794 100644
--- a/src/plugins/splash/script/script-debug.c
+++ b/src/plugins/splash/script/script-debug.c
@@ -34,42 +34,40 @@ static ply_hashtable_t *script_debug_name_hash = NULL;
static void script_debug_setup (void)
{
- if (!script_debug_location_hash)
- {
- script_debug_location_hash = ply_hashtable_new(NULL, NULL);
- script_debug_name_hash = ply_hashtable_new(ply_hashtable_string_hash,
- ply_hashtable_string_compare);
- }
+ if (!script_debug_location_hash) {
+ script_debug_location_hash = ply_hashtable_new (NULL, NULL);
+ script_debug_name_hash = ply_hashtable_new (ply_hashtable_string_hash,
+ ply_hashtable_string_compare);
+ }
}
void script_debug_add_element (void *element,
script_debug_location_t *location)
{
- script_debug_setup();
- script_debug_location_t *new_location = malloc (sizeof(script_debug_location_t));
- new_location->line_index = location->line_index;
- new_location->column_index = location->column_index;
- new_location->name = ply_hashtable_lookup (script_debug_name_hash, location->name);
- if (!new_location->name)
- {
- new_location->name = strdup(location->name);
- ply_hashtable_insert (script_debug_name_hash, new_location->name, new_location->name);
- }
- ply_hashtable_insert (script_debug_location_hash, element, new_location);
+ script_debug_setup ();
+ script_debug_location_t *new_location = malloc (sizeof(script_debug_location_t));
+ new_location->line_index = location->line_index;
+ new_location->column_index = location->column_index;
+ new_location->name = ply_hashtable_lookup (script_debug_name_hash, location->name);
+ if (!new_location->name) {
+ new_location->name = strdup (location->name);
+ ply_hashtable_insert (script_debug_name_hash, new_location->name, new_location->name);
+ }
+ ply_hashtable_insert (script_debug_location_hash, element, new_location);
}
void script_debug_remove_element (void *element)
{
- script_debug_setup();
- script_debug_location_t *old_location = ply_hashtable_remove (script_debug_location_hash,
- element);
- free(old_location);
+ script_debug_setup ();
+ script_debug_location_t *old_location = ply_hashtable_remove (script_debug_location_hash,
+ element);
+ free (old_location);
}
script_debug_location_t *script_debug_lookup_element (void *element)
{
- script_debug_setup();
- script_debug_location_t *location = ply_hashtable_lookup (script_debug_location_hash,
- element);
- return location;
+ script_debug_setup ();
+ script_debug_location_t *location = ply_hashtable_lookup (script_debug_location_hash,
+ element);
+ return location;
}
diff --git a/src/plugins/splash/script/script-debug.h b/src/plugins/splash/script/script-debug.h
index a9ddf0c7..b4eaa5b5 100644
--- a/src/plugins/splash/script/script-debug.h
+++ b/src/plugins/splash/script/script-debug.h
@@ -25,9 +25,9 @@
typedef struct
{
- int line_index;
- int column_index;
- char* name;
+ int line_index;
+ int column_index;
+ char *name;
} script_debug_location_t;
diff --git a/src/plugins/splash/script/script-execute.c b/src/plugins/splash/script/script-execute.c
index c06959bb..75b07274 100644
--- a/src/plugins/splash/script/script-execute.c
+++ b/src/plugins/splash/script/script-execute.c
@@ -53,537 +53,519 @@ static script_return_t script_execute_function_with_parlist (script_state_t *
static void script_execute_error (void *element,
const char *message)
{
- script_debug_location_t *location = script_debug_lookup_element (element);
- if (location)
- ply_error ("Execution error \"%s\" L:%d C:%d : %s\n",
- location->name,
- location->line_index,
- location->column_index,
- message);
- else
- ply_error ("Execution error: %s\n", message);
+ script_debug_location_t *location = script_debug_lookup_element (element);
+
+ if (location) {
+ ply_error ("Execution error \"%s\" L:%d C:%d : %s\n",
+ location->name,
+ location->line_index,
+ location->column_index,
+ message);
+ } else {
+ ply_error ("Execution error: %s\n", message);
+ }
}
-static script_obj_t *script_evaluate_apply_function (script_state_t *state,
- script_exp_t *exp,
- script_obj_t *(*function)(script_obj_t *, script_obj_t *))
+static script_obj_t *script_evaluate_apply_function (script_state_t *state,
+ script_exp_t *exp,
+ script_obj_t *(*function)(script_obj_t *,
+ script_obj_t *))
{
- script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
- script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
- script_obj_t *obj = function (script_obj_a, script_obj_b);
+ script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
+ script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
+ script_obj_t *obj = function (script_obj_a, script_obj_b);
- script_obj_unref (script_obj_a);
- script_obj_unref (script_obj_b);
- return obj;
+ script_obj_unref (script_obj_a);
+ script_obj_unref (script_obj_b);
+ return obj;
}
-static script_obj_t *script_evaluate_apply_function_and_assign (script_state_t *state,
- script_exp_t *exp,
- script_obj_t *(*function)(script_obj_t *, script_obj_t *))
+static script_obj_t *script_evaluate_apply_function_and_assign (script_state_t *state,
+ script_exp_t *exp,
+ script_obj_t *(*function)(script_obj_t *,
+ script_obj_t *))
{
- script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
- script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
- script_obj_t *obj = function (script_obj_a, script_obj_b);
-
- script_obj_assign (script_obj_a, obj);
- script_obj_unref (script_obj_a);
- script_obj_unref (script_obj_b);
- return obj;
+ script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
+ script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
+ script_obj_t *obj = function (script_obj_a, script_obj_b);
+
+ script_obj_assign (script_obj_a, obj);
+ script_obj_unref (script_obj_a);
+ script_obj_unref (script_obj_b);
+ return obj;
}
static script_obj_t *script_evaluate_hash (script_state_t *state,
script_exp_t *exp)
{
- script_obj_t *hash = script_evaluate (state, exp->data.dual.sub_a);
- script_obj_t *key = script_evaluate (state, exp->data.dual.sub_b);
- script_obj_t *obj;
- char *name = script_obj_as_string (key);
-
- if (!script_obj_is_hash(hash))
- {
- script_obj_t *newhash = script_obj_new_hash ();
- script_obj_assign (hash, newhash);
- script_obj_unref (newhash);
- }
-
- obj = script_obj_hash_get_element (hash, name);
- free(name);
-
- script_obj_unref (hash);
- script_obj_unref (key);
- return obj;
+ script_obj_t *hash = script_evaluate (state, exp->data.dual.sub_a);
+ script_obj_t *key = script_evaluate (state, exp->data.dual.sub_b);
+ script_obj_t *obj;
+ char *name = script_obj_as_string (key);
+
+ if (!script_obj_is_hash (hash)) {
+ script_obj_t *newhash = script_obj_new_hash ();
+ script_obj_assign (hash, newhash);
+ script_obj_unref (newhash);
+ }
+
+ obj = script_obj_hash_get_element (hash, name);
+ free (name);
+
+ script_obj_unref (hash);
+ script_obj_unref (key);
+ return obj;
}
static script_obj_t *script_evaluate_var (script_state_t *state,
script_exp_t *exp)
{
- char *name = exp->data.string;
- script_obj_t *obj = script_obj_hash_peek_element (state->local, name);
- if (obj) return obj;
- obj = script_obj_hash_peek_element (state->this, name);
- if (obj) return obj;
- obj = script_obj_hash_peek_element (state->global, name);
- if (obj) return obj;
- obj = script_obj_hash_get_element (state->local, name);
- return obj;
+ char *name = exp->data.string;
+ script_obj_t *obj = script_obj_hash_peek_element (state->local, name);
+
+ if (obj) return obj;
+ obj = script_obj_hash_peek_element (state->this, name);
+ if (obj) return obj;
+ obj = script_obj_hash_peek_element (state->global, name);
+ if (obj) return obj;
+ obj = script_obj_hash_get_element (state->local, name);
+ return obj;
}
static script_obj_t *script_evaluate_set (script_state_t *state,
script_exp_t *exp)
{
-
- ply_list_t *parameter_data = exp->data.parameters;
- ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
- int index = 0;
- script_obj_t *obj = script_obj_new_hash ();
- while (node_data)
- {
- script_exp_t *data_exp = ply_list_node_get_data (node_data);
- script_obj_t *data_obj = script_evaluate (state, data_exp);
- char *name;
- asprintf (&name, "%d", index);
- index++;
- script_obj_hash_add_element (obj, data_obj, name);
- free(name);
-
- node_data = ply_list_get_next_node (parameter_data, node_data);
- }
- return obj;
+ ply_list_t *parameter_data = exp->data.parameters;
+ ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
+ int index = 0;
+ script_obj_t *obj = script_obj_new_hash ();
+
+ while (node_data) {
+ script_exp_t *data_exp = ply_list_node_get_data (node_data);
+ script_obj_t *data_obj = script_evaluate (state, data_exp);
+ char *name;
+ asprintf (&name, "%d", index);
+ index++;
+ script_obj_hash_add_element (obj, data_obj, name);
+ free (name);
+
+ node_data = ply_list_get_next_node (parameter_data, node_data);
+ }
+ return obj;
}
static script_obj_t *script_evaluate_assign (script_state_t *state,
script_exp_t *exp)
{
- script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
- script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
+ script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
+ script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
- script_obj_assign (script_obj_a, script_obj_b);
+ script_obj_assign (script_obj_a, script_obj_b);
- script_obj_unref (script_obj_b);
- return script_obj_a;
+ script_obj_unref (script_obj_b);
+ return script_obj_a;
}
-static script_obj_t *script_evaluate_cmp (script_state_t *state,
- script_exp_t *exp,
- script_obj_cmp_result_t condition)
+static script_obj_t *script_evaluate_cmp (script_state_t *state,
+ script_exp_t *exp,
+ script_obj_cmp_result_t condition)
{
- script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
- script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
- script_obj_cmp_result_t cmp_result = script_obj_cmp(script_obj_a, script_obj_b);
- script_obj_unref (script_obj_a);
- script_obj_unref (script_obj_b);
-
- if (cmp_result & condition)
- return script_obj_new_number (1);
- return script_obj_new_number (0);
+ script_obj_t *script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
+ script_obj_t *script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
+ script_obj_cmp_result_t cmp_result = script_obj_cmp (script_obj_a, script_obj_b);
+
+ script_obj_unref (script_obj_a);
+ script_obj_unref (script_obj_b);
+
+ if (cmp_result & condition)
+ return script_obj_new_number (1);
+ return script_obj_new_number (0);
}
static script_obj_t *script_evaluate_logic (script_state_t *state,
script_exp_t *exp)
{
- script_obj_t *obj = script_evaluate (state, exp->data.dual.sub_a);
-
- if ((exp->type == SCRIPT_EXP_TYPE_AND) && !script_obj_as_bool (obj))
- return obj;
- else if (exp->type == SCRIPT_EXP_TYPE_OR && script_obj_as_bool (obj))
- return obj;
- script_obj_unref (obj);
- obj = script_evaluate (state, exp->data.dual.sub_b);
- return obj;
+ script_obj_t *obj = script_evaluate (state, exp->data.dual.sub_a);
+
+ if ((exp->type == SCRIPT_EXP_TYPE_AND) && !script_obj_as_bool (obj))
+ return obj;
+ else if (exp->type == SCRIPT_EXP_TYPE_OR && script_obj_as_bool (obj))
+ return obj;
+ script_obj_unref (obj);
+ obj = script_evaluate (state, exp->data.dual.sub_b);
+ return obj;
}
static script_obj_t *script_evaluate_unary (script_state_t *state,
script_exp_t *exp)
{
- script_obj_t *obj = script_evaluate (state, exp->data.sub);
- script_obj_t *new_obj;
-
- if (exp->type == SCRIPT_EXP_TYPE_NOT)
- {
- new_obj = script_obj_new_number (!script_obj_as_bool (obj));
- script_obj_unref (obj);
- return new_obj;
- }
- if (exp->type == SCRIPT_EXP_TYPE_POS) /* FIXME what should happen on non number operands? */
- return obj; /* Does nothing, maybe just remove at parse stage */
- if (exp->type == SCRIPT_EXP_TYPE_NEG)
- {
- if (script_obj_is_number(obj))
- new_obj = script_obj_new_number (-script_obj_as_number (obj));
- else
- {
- script_execute_error(exp, "Cannot negate non number objects");
- new_obj = script_obj_new_null ();
- }
- script_obj_unref (obj);
- return new_obj;
- }
- int change_pre = 0;
- int change = -1;
-
- if ((exp->type == SCRIPT_EXP_TYPE_PRE_INC) ||
- (exp->type == SCRIPT_EXP_TYPE_POST_INC))
- change = 1;
- if ((exp->type == SCRIPT_EXP_TYPE_PRE_INC) ||
- (exp->type == SCRIPT_EXP_TYPE_PRE_DEC))
- change_pre = 1;
-
- if (script_obj_is_number(obj))
- {
- if (change_pre)
- {
- new_obj = script_obj_new_number (script_obj_as_number(obj) + change);
- script_obj_assign (obj, new_obj);
- }
- else
- {
- new_obj = script_obj_deref_direct (obj);
- script_obj_ref (new_obj);
- script_obj_t *new_obj2 = script_obj_new_number (script_obj_as_number(obj) + change);
- script_obj_assign (obj, new_obj2);
- script_obj_unref (new_obj2);
- }
- }
- else
- {
- script_execute_error(exp, "Cannot increment/decrement non number objects");
- new_obj = script_obj_new_null (); /* If performeing something like a=hash++; a and hash become NULL */
- script_obj_reset (obj);
- }
- script_obj_unref (obj);
- return new_obj;
+ script_obj_t *obj = script_evaluate (state, exp->data.sub);
+ script_obj_t *new_obj;
+
+ if (exp->type == SCRIPT_EXP_TYPE_NOT) {
+ new_obj = script_obj_new_number (!script_obj_as_bool (obj));
+ script_obj_unref (obj);
+ return new_obj;
+ }
+ if (exp->type == SCRIPT_EXP_TYPE_POS) /* FIXME what should happen on non number operands? */
+ return obj; /* Does nothing, maybe just remove at parse stage */
+ if (exp->type == SCRIPT_EXP_TYPE_NEG) {
+ if (script_obj_is_number (obj)) {
+ new_obj = script_obj_new_number (-script_obj_as_number (obj));
+ } else {
+ script_execute_error (exp, "Cannot negate non number objects");
+ new_obj = script_obj_new_null ();
+ }
+ script_obj_unref (obj);
+ return new_obj;
+ }
+ int change_pre = 0;
+ int change = -1;
+
+ if ((exp->type == SCRIPT_EXP_TYPE_PRE_INC) ||
+ (exp->type == SCRIPT_EXP_TYPE_POST_INC))
+ change = 1;
+ if ((exp->type == SCRIPT_EXP_TYPE_PRE_INC) ||
+ (exp->type == SCRIPT_EXP_TYPE_PRE_DEC))
+ change_pre = 1;
+
+ if (script_obj_is_number (obj)) {
+ if (change_pre) {
+ new_obj = script_obj_new_number (script_obj_as_number (obj) + change);
+ script_obj_assign (obj, new_obj);
+ } else {
+ new_obj = script_obj_deref_direct (obj);
+ script_obj_ref (new_obj);
+ script_obj_t *new_obj2 = script_obj_new_number (script_obj_as_number (obj) + change);
+ script_obj_assign (obj, new_obj2);
+ script_obj_unref (new_obj2);
+ }
+ } else {
+ script_execute_error (exp, "Cannot increment/decrement non number objects");
+ new_obj = script_obj_new_null (); /* If performeing something like a=hash++; a and hash become NULL */
+ script_obj_reset (obj);
+ }
+ script_obj_unref (obj);
+ return new_obj;
}
-typedef struct
+typedef struct
{
- script_state_t *state;
- script_obj_t *this;
- ply_list_t *parameter_data;
+ script_state_t *state;
+ script_obj_t *this;
+ ply_list_t *parameter_data;
} script_obj_execute_data_t;
static void *script_obj_execute (script_obj_t *obj,
void *user_data)
{
- script_obj_execute_data_t *execute_data = user_data;
- if (obj->type == SCRIPT_OBJ_TYPE_FUNCTION){
- script_function_t *function = obj->data.function;
- script_return_t reply = script_execute_function_with_parlist (execute_data->state,
- function,
- execute_data->this,
- execute_data->parameter_data);
- if (reply.type != SCRIPT_RETURN_TYPE_FAIL)
- return reply.object ? reply.object : script_obj_new_null ();
- }
- return NULL;
+ script_obj_execute_data_t *execute_data = user_data;
+
+ if (obj->type == SCRIPT_OBJ_TYPE_FUNCTION) {
+ script_function_t *function = obj->data.function;
+ script_return_t reply = script_execute_function_with_parlist (execute_data->state,
+ function,
+ execute_data->this,
+ execute_data->parameter_data);
+ if (reply.type != SCRIPT_RETURN_TYPE_FAIL)
+ return reply.object ? reply.object : script_obj_new_null ();
+ }
+ return NULL;
}
-static script_return_t script_execute_object_with_parlist (script_state_t *state,
- script_obj_t *obj,
- script_obj_t *this,
- ply_list_t *parameter_data)
+static script_return_t script_execute_object_with_parlist (script_state_t *state,
+ script_obj_t *obj,
+ script_obj_t *this,
+ ply_list_t *parameter_data)
{
- script_obj_execute_data_t execute_data;
- execute_data.state = state;
- execute_data.this = this;
- execute_data.parameter_data = parameter_data;
+ script_obj_execute_data_t execute_data;
+
+ execute_data.state = state;
+ execute_data.this = this;
+ execute_data.parameter_data = parameter_data;
- obj = script_obj_as_custom (obj, script_obj_execute, &execute_data);
+ obj = script_obj_as_custom (obj, script_obj_execute, &execute_data);
- if (obj) return script_return_obj(obj);
- return script_return_fail();
+ if (obj) return script_return_obj (obj);
+ return script_return_fail ();
}
static script_obj_t *script_evaluate_func (script_state_t *state,
script_exp_t *exp)
{
- script_obj_t *this_obj = NULL; ;
- script_obj_t *func_obj;
- script_exp_t *name_exp = exp->data.function_exe.name;
-
- if (name_exp->type == SCRIPT_EXP_TYPE_HASH)
- {
- script_obj_t *this_key = script_evaluate (state, name_exp->data.dual.sub_b);
- this_obj = script_evaluate (state, name_exp->data.dual.sub_a);
- char *this_key_name = script_obj_as_string (this_key);
- script_obj_unref (this_key);
- func_obj = script_obj_hash_peek_element (this_obj, this_key_name);
-
- if (!func_obj && script_obj_is_string (this_obj))
- {
- script_obj_t *string_hash = script_obj_hash_peek_element (state->global, "String");
- func_obj = script_obj_hash_peek_element (string_hash, this_key_name);
- script_obj_unref (string_hash);
- }
-
- if (!func_obj)
- func_obj = script_obj_hash_get_element (this_obj, this_key_name);
-
- free(this_key_name);
- }
- else if (name_exp->type == SCRIPT_EXP_TYPE_TERM_VAR)
- {
- char *name = name_exp->data.string;
- func_obj = script_obj_hash_peek_element (state->local, name);
- if (!func_obj)
- {
- func_obj = script_obj_hash_peek_element (state->this, name);
- if (func_obj)
- {
- this_obj = state->this;
- script_obj_ref(this_obj);
- }
- else
- {
- func_obj = script_obj_hash_peek_element (state->global, name);
- if (!func_obj) func_obj = script_obj_new_null ();
- }
- }
- }
- else
- {
- func_obj = script_evaluate (state, name_exp);
- }
-
- ply_list_t *parameter_expressions = exp->data.function_exe.parameters;
- ply_list_t *parameter_data = ply_list_new ();
-
- ply_list_node_t *node_expression = ply_list_get_first_node (parameter_expressions);
- while (node_expression)
- {
- script_exp_t *data_exp = ply_list_node_get_data (node_expression);
- script_obj_t *data_obj = script_evaluate (state, data_exp);
- ply_list_append_data (parameter_data, data_obj);
- node_expression = ply_list_get_next_node (parameter_expressions,
- node_expression);
- }
-
- script_return_t reply = script_execute_object_with_parlist (state, func_obj, this_obj, parameter_data);
-
- ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
- while (node_data)
- {
- script_obj_t *data_obj = ply_list_node_get_data (node_data);
- script_obj_unref (data_obj);
- node_data = ply_list_get_next_node (parameter_data, node_data);
- }
- ply_list_free (parameter_data);
-
- script_obj_unref (func_obj);
- if (this_obj) script_obj_unref (this_obj);
-
- return reply.object ? reply.object : script_obj_new_null ();
+ script_obj_t *this_obj = NULL;
+ script_obj_t *func_obj;
+ script_exp_t *name_exp = exp->data.function_exe.name;
+
+ if (name_exp->type == SCRIPT_EXP_TYPE_HASH) {
+ script_obj_t *this_key = script_evaluate (state, name_exp->data.dual.sub_b);
+ this_obj = script_evaluate (state, name_exp->data.dual.sub_a);
+ char *this_key_name = script_obj_as_string (this_key);
+ script_obj_unref (this_key);
+ func_obj = script_obj_hash_peek_element (this_obj, this_key_name);
+
+ if (!func_obj && script_obj_is_string (this_obj)) {
+ script_obj_t *string_hash = script_obj_hash_peek_element (state->global, "String");
+ func_obj = script_obj_hash_peek_element (string_hash, this_key_name);
+ script_obj_unref (string_hash);
+ }
+
+ if (!func_obj)
+ func_obj = script_obj_hash_get_element (this_obj, this_key_name);
+
+ free (this_key_name);
+ } else if (name_exp->type == SCRIPT_EXP_TYPE_TERM_VAR) {
+ char *name = name_exp->data.string;
+ func_obj = script_obj_hash_peek_element (state->local, name);
+ if (!func_obj) {
+ func_obj = script_obj_hash_peek_element (state->this, name);
+ if (func_obj) {
+ this_obj = state->this;
+ script_obj_ref (this_obj);
+ } else {
+ func_obj = script_obj_hash_peek_element (state->global, name);
+ if (!func_obj) func_obj = script_obj_new_null ();
+ }
+ }
+ } else {
+ func_obj = script_evaluate (state, name_exp);
+ }
+
+ ply_list_t *parameter_expressions = exp->data.function_exe.parameters;
+ ply_list_t *parameter_data = ply_list_new ();
+
+ ply_list_node_t *node_expression = ply_list_get_first_node (parameter_expressions);
+ while (node_expression) {
+ script_exp_t *data_exp = ply_list_node_get_data (node_expression);
+ script_obj_t *data_obj = script_evaluate (state, data_exp);
+ ply_list_append_data (parameter_data, data_obj);
+ node_expression = ply_list_get_next_node (parameter_expressions,
+ node_expression);
+ }
+
+ script_return_t reply = script_execute_object_with_parlist (state, func_obj, this_obj, parameter_data);
+
+ ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
+ while (node_data) {
+ script_obj_t *data_obj = ply_list_node_get_data (node_data);
+ script_obj_unref (data_obj);
+ node_data = ply_list_get_next_node (parameter_data, node_data);
+ }
+ ply_list_free (parameter_data);
+
+ script_obj_unref (func_obj);
+ if (this_obj) script_obj_unref (this_obj);
+
+ return reply.object ? reply.object : script_obj_new_null ();
}
static script_obj_t *script_evaluate (script_state_t *state,
script_exp_t *exp)
{
- switch (exp->type)
- {
- case SCRIPT_EXP_TYPE_PLUS:
+ switch (exp->type) {
+ case SCRIPT_EXP_TYPE_PLUS:
{
- return script_evaluate_apply_function (state, exp, script_obj_plus);
+ return script_evaluate_apply_function (state, exp, script_obj_plus);
}
- case SCRIPT_EXP_TYPE_MINUS:
+ case SCRIPT_EXP_TYPE_MINUS:
{
- return script_evaluate_apply_function (state, exp, script_obj_minus);
+ return script_evaluate_apply_function (state, exp, script_obj_minus);
}
- case SCRIPT_EXP_TYPE_MUL:
+ case SCRIPT_EXP_TYPE_MUL:
{
- return script_evaluate_apply_function (state, exp, script_obj_mul);
+ return script_evaluate_apply_function (state, exp, script_obj_mul);
}
- case SCRIPT_EXP_TYPE_DIV:
+ case SCRIPT_EXP_TYPE_DIV:
{
- return script_evaluate_apply_function (state, exp, script_obj_div);
+ return script_evaluate_apply_function (state, exp, script_obj_div);
}
- case SCRIPT_EXP_TYPE_MOD:
+ case SCRIPT_EXP_TYPE_MOD:
{
- return script_evaluate_apply_function (state, exp, script_obj_mod);
+ return script_evaluate_apply_function (state, exp, script_obj_mod);
}
- case SCRIPT_EXP_TYPE_EQ:
+ case SCRIPT_EXP_TYPE_EQ:
{
- return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_EQ);
+ return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_EQ);
}
- case SCRIPT_EXP_TYPE_NE:
+ case SCRIPT_EXP_TYPE_NE:
{
- return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_NE |
- SCRIPT_OBJ_CMP_RESULT_LT |
- SCRIPT_OBJ_CMP_RESULT_GT);
+ return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_NE |
+ SCRIPT_OBJ_CMP_RESULT_LT |
+ SCRIPT_OBJ_CMP_RESULT_GT);
}
- case SCRIPT_EXP_TYPE_GT:
+ case SCRIPT_EXP_TYPE_GT:
{
- return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_GT);
+ return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_GT);
}
- case SCRIPT_EXP_TYPE_GE:
+ case SCRIPT_EXP_TYPE_GE:
{
- return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_GT |
- SCRIPT_OBJ_CMP_RESULT_EQ);
+ return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_GT |
+ SCRIPT_OBJ_CMP_RESULT_EQ);
}
- case SCRIPT_EXP_TYPE_LT:
+ case SCRIPT_EXP_TYPE_LT:
{
- return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_LT);
+ return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_LT);
}
- case SCRIPT_EXP_TYPE_LE:
+ case SCRIPT_EXP_TYPE_LE:
{
- return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_LT |
- SCRIPT_OBJ_CMP_RESULT_EQ);
+ return script_evaluate_cmp (state, exp, SCRIPT_OBJ_CMP_RESULT_LT |
+ SCRIPT_OBJ_CMP_RESULT_EQ);
}
- case SCRIPT_EXP_TYPE_AND:
- case SCRIPT_EXP_TYPE_OR:
+ case SCRIPT_EXP_TYPE_AND:
+ case SCRIPT_EXP_TYPE_OR:
{
- return script_evaluate_logic (state, exp);
+ return script_evaluate_logic (state, exp);
}
- case SCRIPT_EXP_TYPE_EXTEND:
+ case SCRIPT_EXP_TYPE_EXTEND:
{
- return script_evaluate_apply_function (state, exp, script_obj_new_extend);
+ return script_evaluate_apply_function (state, exp, script_obj_new_extend);
}
- case SCRIPT_EXP_TYPE_NOT:
- case SCRIPT_EXP_TYPE_POS:
- case SCRIPT_EXP_TYPE_NEG:
- case SCRIPT_EXP_TYPE_PRE_INC:
- case SCRIPT_EXP_TYPE_PRE_DEC:
- case SCRIPT_EXP_TYPE_POST_INC:
- case SCRIPT_EXP_TYPE_POST_DEC:
+ case SCRIPT_EXP_TYPE_NOT:
+ case SCRIPT_EXP_TYPE_POS:
+ case SCRIPT_EXP_TYPE_NEG:
+ case SCRIPT_EXP_TYPE_PRE_INC:
+ case SCRIPT_EXP_TYPE_PRE_DEC:
+ case SCRIPT_EXP_TYPE_POST_INC:
+ case SCRIPT_EXP_TYPE_POST_DEC:
{
- return script_evaluate_unary (state, exp);
+ return script_evaluate_unary (state, exp);
}
- case SCRIPT_EXP_TYPE_TERM_NUMBER:
+ case SCRIPT_EXP_TYPE_TERM_NUMBER:
{
- return script_obj_new_number (exp->data.number);
+ return script_obj_new_number (exp->data.number);
}
- case SCRIPT_EXP_TYPE_TERM_STRING:
+ case SCRIPT_EXP_TYPE_TERM_STRING:
{
- return script_obj_new_string (exp->data.string);
+ return script_obj_new_string (exp->data.string);
}
- case SCRIPT_EXP_TYPE_TERM_NULL:
+ case SCRIPT_EXP_TYPE_TERM_NULL:
{
- return script_obj_new_null ();
+ return script_obj_new_null ();
}
- case SCRIPT_EXP_TYPE_TERM_LOCAL:
+ case SCRIPT_EXP_TYPE_TERM_LOCAL:
{
- script_obj_ref (state->local);
- return state->local;
+ script_obj_ref (state->local);
+ return state->local;
}
- case SCRIPT_EXP_TYPE_TERM_GLOBAL:
+ case SCRIPT_EXP_TYPE_TERM_GLOBAL:
{
- script_obj_ref (state->global);
- return state->global;
+ script_obj_ref (state->global);
+ return state->global;
}
- case SCRIPT_EXP_TYPE_TERM_THIS:
+ case SCRIPT_EXP_TYPE_TERM_THIS:
{
- script_obj_ref (state->this);
- return state->this;
+ script_obj_ref (state->this);
+ return state->this;
}
- case SCRIPT_EXP_TYPE_TERM_SET:
+ case SCRIPT_EXP_TYPE_TERM_SET:
{
- return script_evaluate_set (state, exp);
+ return script_evaluate_set (state, exp);
}
- case SCRIPT_EXP_TYPE_TERM_VAR:
+ case SCRIPT_EXP_TYPE_TERM_VAR:
{
- return script_evaluate_var (state, exp);
+ return script_evaluate_var (state, exp);
}
- case SCRIPT_EXP_TYPE_ASSIGN:
+ case SCRIPT_EXP_TYPE_ASSIGN:
{
- return script_evaluate_assign (state, exp);
+ return script_evaluate_assign (state, exp);
}
- case SCRIPT_EXP_TYPE_ASSIGN_PLUS:
+ case SCRIPT_EXP_TYPE_ASSIGN_PLUS:
{
- return script_evaluate_apply_function_and_assign (state,
- exp,
- script_obj_plus);
+ return script_evaluate_apply_function_and_assign (state,
+ exp,
+ script_obj_plus);
}
- case SCRIPT_EXP_TYPE_ASSIGN_MINUS:
+ case SCRIPT_EXP_TYPE_ASSIGN_MINUS:
{
- return script_evaluate_apply_function_and_assign (state,
- exp,
- script_obj_minus);
+ return script_evaluate_apply_function_and_assign (state,
+ exp,
+ script_obj_minus);
}
- case SCRIPT_EXP_TYPE_ASSIGN_MUL:
+ case SCRIPT_EXP_TYPE_ASSIGN_MUL:
{
- return script_evaluate_apply_function_and_assign (state,
- exp,
- script_obj_mul);
+ return script_evaluate_apply_function_and_assign (state,
+ exp,
+ script_obj_mul);
}
- case SCRIPT_EXP_TYPE_ASSIGN_DIV:
+ case SCRIPT_EXP_TYPE_ASSIGN_DIV:
{
- return script_evaluate_apply_function_and_assign (state,
- exp,
- script_obj_div);
+ return script_evaluate_apply_function_and_assign (state,
+ exp,
+ script_obj_div);
}
- case SCRIPT_EXP_TYPE_ASSIGN_MOD:
+ case SCRIPT_EXP_TYPE_ASSIGN_MOD:
{
- return script_evaluate_apply_function_and_assign (state,
- exp,
- script_obj_mod);
+ return script_evaluate_apply_function_and_assign (state,
+ exp,
+ script_obj_mod);
}
- case SCRIPT_EXP_TYPE_ASSIGN_EXTEND:
+ case SCRIPT_EXP_TYPE_ASSIGN_EXTEND:
{
- return script_evaluate_apply_function_and_assign (state,
- exp,
- script_obj_new_extend);
+ return script_evaluate_apply_function_and_assign (state,
+ exp,
+ script_obj_new_extend);
}
- case SCRIPT_EXP_TYPE_HASH:
+ case SCRIPT_EXP_TYPE_HASH:
{
- return script_evaluate_hash (state, exp);
+ return script_evaluate_hash (state, exp);
}
- case SCRIPT_EXP_TYPE_FUNCTION_EXE:
+ case SCRIPT_EXP_TYPE_FUNCTION_EXE:
{
- return script_evaluate_func (state, exp);
+ return script_evaluate_func (state, exp);
}
- case SCRIPT_EXP_TYPE_FUNCTION_DEF:
+ case SCRIPT_EXP_TYPE_FUNCTION_DEF:
{
- return script_obj_new_function (exp->data.function_def);
+ return script_obj_new_function (exp->data.function_def);
+ }
}
- }
- return script_obj_new_null ();
+ return script_obj_new_null ();
}
static script_return_t script_execute_list (script_state_t *state,
- ply_list_t *op_list) /* FIXME script_execute returns the return obj */
+ ply_list_t *op_list) /* FIXME script_execute returns the return obj */
{
- script_return_t reply = script_return_normal ();
- ply_list_node_t *node = ply_list_get_first_node (op_list);
-
- for (node = ply_list_get_first_node (op_list);
- node;
- node = ply_list_get_next_node (op_list, node))
- {
- script_op_t *op = ply_list_node_get_data (node);
- script_obj_unref (reply.object);
- reply = script_execute (state, op);
- switch (reply.type)
- {
- case SCRIPT_RETURN_TYPE_NORMAL:
- break;
- case SCRIPT_RETURN_TYPE_RETURN:
- case SCRIPT_RETURN_TYPE_FAIL:
- case SCRIPT_RETURN_TYPE_BREAK:
- case SCRIPT_RETURN_TYPE_CONTINUE:
- return reply;
- }
- }
- return reply;
+ script_return_t reply = script_return_normal ();
+ ply_list_node_t *node = ply_list_get_first_node (op_list);
+
+ for (node = ply_list_get_first_node (op_list);
+ node;
+ node = ply_list_get_next_node (op_list, node)) {
+ script_op_t *op = ply_list_node_get_data (node);
+ script_obj_unref (reply.object);
+ reply = script_execute (state, op);
+ switch (reply.type) {
+ case SCRIPT_RETURN_TYPE_NORMAL:
+ break;
+ case SCRIPT_RETURN_TYPE_RETURN:
+ case SCRIPT_RETURN_TYPE_FAIL:
+ case SCRIPT_RETURN_TYPE_BREAK:
+ case SCRIPT_RETURN_TYPE_CONTINUE:
+ return reply;
+ }
+ }
+ return reply;
}
/* parameter_data list should be freed by caller */
@@ -592,195 +574,183 @@ static script_return_t script_execute_function_with_parlist (script_state_t *
script_obj_t *this,
ply_list_t *parameter_data)
{
- script_state_t *sub_state = script_state_init_sub (state, this);
- ply_list_t *parameter_names = function->parameters;
- ply_list_node_t *node_name = ply_list_get_first_node (parameter_names);
- ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
- int index = 0;;
- script_obj_t *arg_obj = script_obj_new_hash ();
-
- while (node_data)
- {
- script_obj_t *data_obj = ply_list_node_get_data (node_data);
- char *name;
- asprintf (&name, "%d", index);
- index++;
- script_obj_hash_add_element (arg_obj, data_obj, name);
- free(name);
-
- if (node_name)
- {
- name = ply_list_node_get_data (node_name);
- script_obj_hash_add_element (sub_state->local, data_obj, name);
- node_name = ply_list_get_next_node (parameter_names, node_name);
- }
- node_data = ply_list_get_next_node (parameter_data, node_data);
- }
-
- script_obj_t *count_obj = script_obj_new_number (index);
- script_obj_hash_add_element (arg_obj, count_obj, "count");
- script_obj_hash_add_element (sub_state->local, arg_obj, "_args");
- script_obj_unref (count_obj);
- script_obj_unref (arg_obj);
-
- if (this)
- script_obj_hash_add_element (sub_state->local, this, "this");
-
- script_return_t reply;
- switch (function->type)
- {
- case SCRIPT_FUNCTION_TYPE_SCRIPT:
- {
- script_op_t *op = function->data.script;
- reply = script_execute (sub_state, op);
- break;
- }
-
- case SCRIPT_FUNCTION_TYPE_NATIVE:
- {
- reply = function->data.native (sub_state, function->user_data);
- break;
- }
- }
- script_state_destroy (sub_state);
- if (reply.type != SCRIPT_RETURN_TYPE_FAIL)
- reply.type = SCRIPT_RETURN_TYPE_RETURN;
- return reply;
-}
+ script_state_t *sub_state = script_state_init_sub (state, this);
+ ply_list_t *parameter_names = function->parameters;
+ ply_list_node_t *node_name = ply_list_get_first_node (parameter_names);
+ ply_list_node_t *node_data = ply_list_get_first_node (parameter_data);
+ int index = 0;
+ script_obj_t *arg_obj = script_obj_new_hash ();
+
+ while (node_data) {
+ script_obj_t *data_obj = ply_list_node_get_data (node_data);
+ char *name;
+ asprintf (&name, "%d", index);
+ index++;
+ script_obj_hash_add_element (arg_obj, data_obj, name);
+ free (name);
+
+ if (node_name) {
+ name = ply_list_node_get_data (node_name);
+ script_obj_hash_add_element (sub_state->local, data_obj, name);
+ node_name = ply_list_get_next_node (parameter_names, node_name);
+ }
+ node_data = ply_list_get_next_node (parameter_data, node_data);
+ }
-script_return_t script_execute_object (script_state_t *state,
- script_obj_t *function,
- script_obj_t *this,
- script_obj_t *first_arg,
- ...)
-{
- script_return_t reply;
- va_list args;
- script_obj_t *arg;
- ply_list_t *parameter_data = ply_list_new ();
-
- arg = first_arg;
- va_start (args, first_arg);
- while (arg)
- {
- ply_list_append_data (parameter_data, arg);
- arg = va_arg (args, script_obj_t *);
- }
- va_end (args);
-
- reply = script_execute_object_with_parlist (state, function, this, parameter_data);
- ply_list_free (parameter_data);
-
- return reply;
-}
+ script_obj_t *count_obj = script_obj_new_number (index);
+ script_obj_hash_add_element (arg_obj, count_obj, "count");
+ script_obj_hash_add_element (sub_state->local, arg_obj, "_args");
+ script_obj_unref (count_obj);
+ script_obj_unref (arg_obj);
-script_return_t script_execute (script_state_t *state,
- script_op_t *op)
-{
- script_return_t reply = script_return_normal ();
- if (!op) return reply;
- switch (op->type)
- {
- case SCRIPT_OP_TYPE_EXPRESSION:
- {
- reply.object = script_evaluate (state, op->data.exp);
- break;
- }
+ if (this)
+ script_obj_hash_add_element (sub_state->local, this, "this");
- case SCRIPT_OP_TYPE_OP_BLOCK:
+ script_return_t reply;
+ switch (function->type) {
+ case SCRIPT_FUNCTION_TYPE_SCRIPT:
{
- reply = script_execute_list (state, op->data.list);
- break;
+ script_op_t *op = function->data.script;
+ reply = script_execute (sub_state, op);
+ break;
}
- case SCRIPT_OP_TYPE_IF:
+ case SCRIPT_FUNCTION_TYPE_NATIVE:
{
- script_obj_t *obj = script_evaluate (state, op->data.cond_op.cond);
- if (script_obj_as_bool (obj))
- reply = script_execute (state, op->data.cond_op.op1);
- else
- reply = script_execute (state, op->data.cond_op.op2);
- script_obj_unref (obj);
- break;
+ reply = function->data.native (sub_state, function->user_data);
+ break;
}
+ }
+ script_state_destroy (sub_state);
+ if (reply.type != SCRIPT_RETURN_TYPE_FAIL)
+ reply.type = SCRIPT_RETURN_TYPE_RETURN;
+ return reply;
+}
- case SCRIPT_OP_TYPE_DO_WHILE:
- case SCRIPT_OP_TYPE_WHILE:
- case SCRIPT_OP_TYPE_FOR:
- {
- script_obj_t *obj = NULL;
- bool cond = false;
- if (op->type == SCRIPT_OP_TYPE_DO_WHILE) cond = true;
- while (1)
- {
- if (!cond)
- {
- obj = script_evaluate (state, op->data.cond_op.cond);
- cond = script_obj_as_bool (obj);
- script_obj_unref (obj);
- }
-
- if (cond)
- {
- script_obj_unref (reply.object);
- reply = script_execute (state, op->data.cond_op.op1);
- switch (reply.type)
- {
- case SCRIPT_RETURN_TYPE_NORMAL:
- break;
+script_return_t script_execute_object (script_state_t *state,
+ script_obj_t *function,
+ script_obj_t *this,
+ script_obj_t *first_arg,
+ ...)
+{
+ script_return_t reply;
+ va_list args;
+ script_obj_t *arg;
+ ply_list_t *parameter_data = ply_list_new ();
- case SCRIPT_RETURN_TYPE_RETURN:
- case SCRIPT_RETURN_TYPE_FAIL:
- return reply;
+ arg = first_arg;
+ va_start (args, first_arg);
+ while (arg) {
+ ply_list_append_data (parameter_data, arg);
+ arg = va_arg (args, script_obj_t *);
+ }
+ va_end (args);
- case SCRIPT_RETURN_TYPE_BREAK:
- return script_return_normal();
+ reply = script_execute_object_with_parlist (state, function, this, parameter_data);
+ ply_list_free (parameter_data);
- case SCRIPT_RETURN_TYPE_CONTINUE:
- break;
- }
- if (op->data.cond_op.op2)
- {
- script_obj_unref (reply.object);
- reply = script_execute (state, op->data.cond_op.op2);
- }
- }
- else
- {
- break;
+ return reply;
+}
+
+script_return_t script_execute (script_state_t *state,
+ script_op_t *op)
+{
+ script_return_t reply = script_return_normal ();
+
+ if (!op) return reply;
+ switch (op->type) {
+ case SCRIPT_OP_TYPE_EXPRESSION:
+ {
+ reply.object = script_evaluate (state, op->data.exp);
+ break;
+ }
+
+ case SCRIPT_OP_TYPE_OP_BLOCK:
+ {
+ reply = script_execute_list (state, op->data.list);
+ break;
+ }
+
+ case SCRIPT_OP_TYPE_IF:
+ {
+ script_obj_t *obj = script_evaluate (state, op->data.cond_op.cond);
+ if (script_obj_as_bool (obj))
+ reply = script_execute (state, op->data.cond_op.op1);
+ else
+ reply = script_execute (state, op->data.cond_op.op2);
+ script_obj_unref (obj);
+ break;
+ }
+
+ case SCRIPT_OP_TYPE_DO_WHILE:
+ case SCRIPT_OP_TYPE_WHILE:
+ case SCRIPT_OP_TYPE_FOR:
+ {
+ script_obj_t *obj = NULL;
+ bool cond = false;
+ if (op->type == SCRIPT_OP_TYPE_DO_WHILE) cond = true;
+ while (1) {
+ if (!cond) {
+ obj = script_evaluate (state, op->data.cond_op.cond);
+ cond = script_obj_as_bool (obj);
+ script_obj_unref (obj);
+ }
+
+ if (cond) {
+ script_obj_unref (reply.object);
+ reply = script_execute (state, op->data.cond_op.op1);
+ switch (reply.type) {
+ case SCRIPT_RETURN_TYPE_NORMAL:
+ break;
+
+ case SCRIPT_RETURN_TYPE_RETURN:
+ case SCRIPT_RETURN_TYPE_FAIL:
+ return reply;
+
+ case SCRIPT_RETURN_TYPE_BREAK:
+ return script_return_normal ();
+
+ case SCRIPT_RETURN_TYPE_CONTINUE:
+ break;
+ }
+ if (op->data.cond_op.op2) {
+ script_obj_unref (reply.object);
+ reply = script_execute (state, op->data.cond_op.op2);
+ }
+ } else {
+ break;
+ }
+ cond = false;
}
- cond = false;
- }
- break;
+ break;
}
- case SCRIPT_OP_TYPE_RETURN:
+ case SCRIPT_OP_TYPE_RETURN:
{
- script_obj_t *obj;
- if (op->data.exp) obj = script_evaluate (state, op->data.exp);
- else obj = script_obj_new_null ();
- reply = script_return_obj (obj);
- break;
+ script_obj_t *obj;
+ if (op->data.exp) obj = script_evaluate (state, op->data.exp);
+ else obj = script_obj_new_null ();
+ reply = script_return_obj (obj);
+ break;
}
- case SCRIPT_OP_TYPE_FAIL:
+ case SCRIPT_OP_TYPE_FAIL:
{
- reply = script_return_fail ();
- break;
+ reply = script_return_fail ();
+ break;
}
- case SCRIPT_OP_TYPE_BREAK:
+ case SCRIPT_OP_TYPE_BREAK:
{
- reply = script_return_break ();
- break;
+ reply = script_return_break ();
+ break;
}
- case SCRIPT_OP_TYPE_CONTINUE:
+ case SCRIPT_OP_TYPE_CONTINUE:
{
- reply = script_return_continue ();
- break;
+ reply = script_return_continue ();
+ break;
+ }
}
- }
- return reply;
+ return reply;
}
-
diff --git a/src/plugins/splash/script/script-execute.h b/src/plugins/splash/script/script-execute.h
index efba3ed8..74a0a47c 100644
--- a/src/plugins/splash/script/script-execute.h
+++ b/src/plugins/splash/script/script-execute.h
@@ -26,10 +26,10 @@
script_return_t script_execute (script_state_t *state,
script_op_t *op);
-script_return_t script_execute_object (script_state_t *state,
- script_obj_t *function,
- script_obj_t *this,
- script_obj_t *first_arg,
+script_return_t script_execute_object (script_state_t * state,
+ script_obj_t * function,
+ script_obj_t * this,
+ script_obj_t * first_arg,
...);
#endif /* SCRIPT_EXECUTE_H */
diff --git a/src/plugins/splash/script/script-lib-image.c b/src/plugins/splash/script/script-lib-image.c
index f08be313..a2027021 100644
--- a/src/plugins/splash/script/script-lib-image.c
+++ b/src/plugins/splash/script/script-lib-image.c
@@ -42,260 +42,250 @@
static void image_free (script_obj_t *obj)
{
- ply_pixel_buffer_t *image = obj->data.native.object_data;
+ ply_pixel_buffer_t *image = obj->data.native.object_data;
- ply_pixel_buffer_free (image);
+ ply_pixel_buffer_free (image);
}
static script_return_t image_new (script_state_t *state,
void *user_data)
{
- script_lib_image_data_t *data = user_data;
- script_obj_t *reply;
- char *path_filename;
- char *filename = script_obj_hash_get_string (state->local, "filename");
- char *test_string = filename;
- const char *prefix_string = "special://";
-
- while (*test_string && *prefix_string && *test_string == *prefix_string)
- {
- test_string++;
- prefix_string++;
- }
- if (!*prefix_string)
- {
- if (strcmp (test_string, "logo") == 0)
- path_filename = strdup (PLYMOUTH_LOGO_FILE);
- else
- path_filename = strdup ("");
- }
- else
- asprintf (&path_filename, "%s/%s", data->image_dir, filename);
- ply_image_t *file_image = ply_image_new (path_filename);
- if (ply_image_load (file_image))
- {
- ply_pixel_buffer_t *buffer = ply_image_convert_to_pixel_buffer (file_image);
- reply = script_obj_new_native (buffer, data->class);
- }
- else
- {
- ply_image_free (file_image);
- reply = script_obj_new_null ();
- }
- free (filename);
- free (path_filename);
- return script_return_obj (reply);
+ script_lib_image_data_t *data = user_data;
+ script_obj_t *reply;
+ char *path_filename;
+ char *filename = script_obj_hash_get_string (state->local, "filename");
+ char *test_string = filename;
+ const char *prefix_string = "special://";
+
+ while (*test_string && *prefix_string && *test_string == *prefix_string) {
+ test_string++;
+ prefix_string++;
+ }
+ if (!*prefix_string) {
+ if (strcmp (test_string, "logo") == 0)
+ path_filename = strdup (PLYMOUTH_LOGO_FILE);
+ else
+ path_filename = strdup ("");
+ } else {
+ asprintf (&path_filename, "%s/%s", data->image_dir, filename);
+ }
+ ply_image_t *file_image = ply_image_new (path_filename);
+ if (ply_image_load (file_image)) {
+ ply_pixel_buffer_t *buffer = ply_image_convert_to_pixel_buffer (file_image);
+ reply = script_obj_new_native (buffer, data->class);
+ } else {
+ ply_image_free (file_image);
+ reply = script_obj_new_null ();
+ }
+ free (filename);
+ free (path_filename);
+ return script_return_obj (reply);
}
static script_return_t image_get_width (script_state_t *state,
void *user_data)
{
- script_lib_image_data_t *data = user_data;
- ply_rectangle_t size;
- ply_pixel_buffer_t *image;
-
- image = script_obj_as_native_of_class (state->this, data->class);
- if (!image) return script_return_obj_null ();
-
- ply_pixel_buffer_get_size (image, &size);
-
- return script_return_obj (script_obj_new_number (size.width));
+ script_lib_image_data_t *data = user_data;
+ ply_rectangle_t size;
+ ply_pixel_buffer_t *image;
+
+ image = script_obj_as_native_of_class (state->this, data->class);
+ if (!image) return script_return_obj_null ();
+
+ ply_pixel_buffer_get_size (image, &size);
+
+ return script_return_obj (script_obj_new_number (size.width));
}
static script_return_t image_get_height (script_state_t *state,
void *user_data)
{
- script_lib_image_data_t *data = user_data;
- ply_rectangle_t size;
- ply_pixel_buffer_t *image;
-
- image = script_obj_as_native_of_class (state->this, data->class);
- if (!image) return script_return_obj_null ();
-
- ply_pixel_buffer_get_size (image, &size);
-
- return script_return_obj (script_obj_new_number (size.height));
+ script_lib_image_data_t *data = user_data;
+ ply_rectangle_t size;
+ ply_pixel_buffer_t *image;
+
+ image = script_obj_as_native_of_class (state->this, data->class);
+ if (!image) return script_return_obj_null ();
+
+ ply_pixel_buffer_get_size (image, &size);
+
+ return script_return_obj (script_obj_new_number (size.height));
}
static script_return_t image_rotate (script_state_t *state,
void *user_data)
{
- script_lib_image_data_t *data = user_data;
- ply_pixel_buffer_t *image = script_obj_as_native_of_class (state->this, data->class);
- float angle = script_obj_hash_get_number (state->local, "angle");
- ply_rectangle_t size;
-
- if (image)
- {
- ply_pixel_buffer_get_size (image, &size);
- ply_pixel_buffer_t *new_image = ply_pixel_buffer_rotate (image,
- size.width / 2,
- size.height / 2,
- angle);
- return script_return_obj (script_obj_new_native (new_image, data->class));
- }
- return script_return_obj_null ();
+ script_lib_image_data_t *data = user_data;
+ ply_pixel_buffer_t *image = script_obj_as_native_of_class (state->this, data->class);
+ float angle = script_obj_hash_get_number (state->local, "angle");
+ ply_rectangle_t size;
+
+ if (image) {
+ ply_pixel_buffer_get_size (image, &size);
+ ply_pixel_buffer_t *new_image = ply_pixel_buffer_rotate (image,
+ size.width / 2,
+ size.height / 2,
+ angle);
+ return script_return_obj (script_obj_new_native (new_image, data->class));
+ }
+ return script_return_obj_null ();
}
static script_return_t image_scale (script_state_t *state,
void *user_data)
{
- script_lib_image_data_t *data = user_data;
- ply_pixel_buffer_t *image = script_obj_as_native_of_class (state->this, data->class);
- int width = script_obj_hash_get_number (state->local, "width");
- int height = script_obj_hash_get_number (state->local, "height");
-
- if (image)
- {
- ply_pixel_buffer_t *new_image = ply_pixel_buffer_resize (image, width, height);
- return script_return_obj (script_obj_new_native (new_image, data->class));
- }
- return script_return_obj_null ();
+ script_lib_image_data_t *data = user_data;
+ ply_pixel_buffer_t *image = script_obj_as_native_of_class (state->this, data->class);
+ int width = script_obj_hash_get_number (state->local, "width");
+ int height = script_obj_hash_get_number (state->local, "height");
+
+ if (image) {
+ ply_pixel_buffer_t *new_image = ply_pixel_buffer_resize (image, width, height);
+ return script_return_obj (script_obj_new_native (new_image, data->class));
+ }
+ return script_return_obj_null ();
}
static script_return_t image_text (script_state_t *state,
void *user_data)
{
- script_lib_image_data_t *data = user_data;
- ply_pixel_buffer_t *image;
- ply_label_t *label;
- script_obj_t *alpha_obj, *font_obj, *align_obj;
- int width, height;
- int align = PLY_LABEL_ALIGN_LEFT;
- char *font;
-
- char *text = script_obj_hash_get_string (state->local, "text");
-
- float alpha;
- float red = CLAMP(script_obj_hash_get_number (state->local, "red"), 0, 1);
- float green = CLAMP(script_obj_hash_get_number (state->local, "green"), 0, 1);
- float blue = CLAMP(script_obj_hash_get_number (state->local, "blue"), 0, 1);
-
- alpha_obj = script_obj_hash_peek_element (state->local, "alpha");
-
- if (script_obj_is_number (alpha_obj))
- {
- alpha = CLAMP(script_obj_as_number (alpha_obj), 0, 1);
- }
- else
- alpha = 1;
- script_obj_unref(alpha_obj);
-
- font_obj = script_obj_hash_peek_element (state->local, "font");
-
- if (script_obj_is_string (font_obj))
- font = script_obj_as_string (font_obj);
- else
- font = NULL;
-
- script_obj_unref(font_obj);
-
- align_obj = script_obj_hash_peek_element(state->local, "align");
-
- if (script_obj_is_string(align_obj)) {
- char *align_str = script_obj_as_string(align_obj);
-
- if(!strcmp("left", align_str))
- align = PLY_LABEL_ALIGN_LEFT;
- else if(!strcmp("center", align_str))
- align = PLY_LABEL_ALIGN_CENTER;
- else if(!strcmp("right", align_str))
- align = PLY_LABEL_ALIGN_RIGHT;
- else
- ply_error("Unrecognized Image.Text alignment string '%s'. "
- "Expecting 'left', 'center', or 'right'\n",
- align_str);
- free(align_str);
- }
- script_obj_unref(align_obj);
-
- if (!text) return script_return_obj_null ();
-
- label = ply_label_new ();
- ply_label_set_text (label, text);
- if (font)
- ply_label_set_font (label, font);
- ply_label_set_alignment(label, align);
- ply_label_set_color (label, red, green, blue, alpha);
- ply_label_show (label, NULL, 0, 0);
-
- width = ply_label_get_width (label);
- height = ply_label_get_height (label);
-
- image = ply_pixel_buffer_new (width, height);
- ply_label_draw_area (label, image, 0, 0, width, height);
-
- free (text);
- free (font);
- ply_label_free (label);
-
- return script_return_obj (script_obj_new_native (image, data->class));
+ script_lib_image_data_t *data = user_data;
+ ply_pixel_buffer_t *image;
+ ply_label_t *label;
+ script_obj_t *alpha_obj, *font_obj, *align_obj;
+ int width, height;
+ int align = PLY_LABEL_ALIGN_LEFT;
+ char *font;
+
+ char *text = script_obj_hash_get_string (state->local, "text");
+
+ float alpha;
+ float red = CLAMP (script_obj_hash_get_number (state->local, "red"), 0, 1);
+ float green = CLAMP (script_obj_hash_get_number (state->local, "green"), 0, 1);
+ float blue = CLAMP (script_obj_hash_get_number (state->local, "blue"), 0, 1);
+
+ alpha_obj = script_obj_hash_peek_element (state->local, "alpha");
+
+ if (script_obj_is_number (alpha_obj))
+ alpha = CLAMP (script_obj_as_number (alpha_obj), 0, 1);
+ else
+ alpha = 1;
+ script_obj_unref (alpha_obj);
+
+ font_obj = script_obj_hash_peek_element (state->local, "font");
+
+ if (script_obj_is_string (font_obj))
+ font = script_obj_as_string (font_obj);
+ else
+ font = NULL;
+
+ script_obj_unref (font_obj);
+
+ align_obj = script_obj_hash_peek_element (state->local, "align");
+
+ if (script_obj_is_string (align_obj)) {
+ char *align_str = script_obj_as_string (align_obj);
+
+ if (!strcmp ("left", align_str))
+ align = PLY_LABEL_ALIGN_LEFT;
+ else if (!strcmp ("center", align_str))
+ align = PLY_LABEL_ALIGN_CENTER;
+ else if (!strcmp ("right", align_str))
+ align = PLY_LABEL_ALIGN_RIGHT;
+ else
+ ply_error ("Unrecognized Image.Text alignment string '%s'. "
+ "Expecting 'left', 'center', or 'right'\n",
+ align_str);
+ free (align_str);
+ }
+ script_obj_unref (align_obj);
+
+ if (!text) return script_return_obj_null ();
+
+ label = ply_label_new ();
+ ply_label_set_text (label, text);
+ if (font)
+ ply_label_set_font (label, font);
+ ply_label_set_alignment (label, align);
+ ply_label_set_color (label, red, green, blue, alpha);
+ ply_label_show (label, NULL, 0, 0);
+
+ width = ply_label_get_width (label);
+ height = ply_label_get_height (label);
+
+ image = ply_pixel_buffer_new (width, height);
+ ply_label_draw_area (label, image, 0, 0, width, height);
+
+ free (text);
+ free (font);
+ ply_label_free (label);
+
+ return script_return_obj (script_obj_new_native (image, data->class));
}
script_lib_image_data_t *script_lib_image_setup (script_state_t *state,
- char *image_dir)
+ char *image_dir)
{
- script_lib_image_data_t *data = malloc (sizeof (script_lib_image_data_t));
-
- data->class = script_obj_native_class_new (image_free, "image", data);
- data->image_dir = strdup (image_dir);
-
- script_obj_t *image_hash = script_obj_hash_get_element (state->global, "Image");
-
- script_add_native_function (image_hash,
- "_New",
- image_new,
- data,
- "filename",
- NULL);
- script_add_native_function (image_hash,
- "_Rotate",
- image_rotate,
- data,
- "angle",
- NULL);
- script_add_native_function (image_hash,
- "_Scale",
- image_scale,
- data,
- "width",
- "height",
- NULL);
- script_add_native_function (image_hash,
- "GetWidth",
- image_get_width,
- data,
- NULL);
- script_add_native_function (image_hash,
- "GetHeight",
- image_get_height,
- data,
- NULL);
- script_add_native_function (image_hash,
- "_Text",
- image_text,
- data,
- "text",
- "red",
- "green",
- "blue",
- "alpha",
- "font",
- "align",
- NULL);
-
- script_obj_unref (image_hash);
- data->script_main_op = script_parse_string (script_lib_image_string, "script-lib-image.script");
- script_return_t ret = script_execute (state, data->script_main_op);
- script_obj_unref (ret.object);
- return data;
+ script_lib_image_data_t *data = malloc (sizeof(script_lib_image_data_t));
+
+ data->class = script_obj_native_class_new (image_free, "image", data);
+ data->image_dir = strdup (image_dir);
+
+ script_obj_t *image_hash = script_obj_hash_get_element (state->global, "Image");
+
+ script_add_native_function (image_hash,
+ "_New",
+ image_new,
+ data,
+ "filename",
+ NULL);
+ script_add_native_function (image_hash,
+ "_Rotate",
+ image_rotate,
+ data,
+ "angle",
+ NULL);
+ script_add_native_function (image_hash,
+ "_Scale",
+ image_scale,
+ data,
+ "width",
+ "height",
+ NULL);
+ script_add_native_function (image_hash,
+ "GetWidth",
+ image_get_width,
+ data,
+ NULL);
+ script_add_native_function (image_hash,
+ "GetHeight",
+ image_get_height,
+ data,
+ NULL);
+ script_add_native_function (image_hash,
+ "_Text",
+ image_text,
+ data,
+ "text",
+ "red",
+ "green",
+ "blue",
+ "alpha",
+ "font",
+ "align",
+ NULL);
+
+ script_obj_unref (image_hash);
+ data->script_main_op = script_parse_string (script_lib_image_string, "script-lib-image.script");
+ script_return_t ret = script_execute (state, data->script_main_op);
+ script_obj_unref (ret.object);
+ return data;
}
void script_lib_image_destroy (script_lib_image_data_t *data)
{
- script_obj_native_class_destroy (data->class);
- free (data->image_dir);
- script_parse_op_free (data->script_main_op);
- free (data);
+ script_obj_native_class_destroy (data->class);
+ free (data->image_dir);
+ script_parse_op_free (data->script_main_op);
+ free (data);
}
-
diff --git a/src/plugins/splash/script/script-lib-image.h b/src/plugins/splash/script/script-lib-image.h
index d6b95081..7a1371ae 100644
--- a/src/plugins/splash/script/script-lib-image.h
+++ b/src/plugins/splash/script/script-lib-image.h
@@ -26,9 +26,9 @@
typedef struct
{
- script_obj_native_class_t *class;
- script_op_t *script_main_op;
- char *image_dir;
+ script_obj_native_class_t *class;
+ script_op_t *script_main_op;
+ char *image_dir;
} script_lib_image_data_t;
script_lib_image_data_t *script_lib_image_setup (script_state_t *state,
diff --git a/src/plugins/splash/script/script-lib-math.c b/src/plugins/splash/script/script-lib-math.c
index 3f2dc797..db763b25 100644
--- a/src/plugins/splash/script/script-lib-math.c
+++ b/src/plugins/splash/script/script-lib-math.c
@@ -40,90 +40,91 @@
static script_return_t script_lib_math_double_from_double_function (script_state_t *state,
void *user_data)
{
- double (*function)(double) = user_data;
- double value = script_obj_hash_get_number (state->local, "value");
- double reply_double = function (value);
- return script_return_obj (script_obj_new_number (reply_double));
+ double (*function)(double) = user_data;
+ double value = script_obj_hash_get_number (state->local, "value");
+ double reply_double = function (value);
+ return script_return_obj (script_obj_new_number (reply_double));
}
static script_return_t script_lib_math_double_from_double_double_function (script_state_t *state,
void *user_data)
{
- double (*function)(double, double) = user_data;
- double value1 = script_obj_hash_get_number (state->local, "value_a");
- double value2 = script_obj_hash_get_number (state->local, "value_b");
- double reply_double = function (value1, value2);
- return script_return_obj (script_obj_new_number (reply_double));
+ double (*function)(double,
+ double) = user_data;
+ double value1 = script_obj_hash_get_number (state->local, "value_a");
+ double value2 = script_obj_hash_get_number (state->local, "value_b");
+ double reply_double = function (value1, value2);
+ return script_return_obj (script_obj_new_number (reply_double));
}
static script_return_t script_lib_math_random (script_state_t *state,
void *user_data)
{
- double reply_double = random() / ((double)RAND_MAX + 1);
- return script_return_obj (script_obj_new_number (reply_double));
+ double reply_double = random () / ((double) RAND_MAX + 1);
+
+ return script_return_obj (script_obj_new_number (reply_double));
}
script_lib_math_data_t *script_lib_math_setup (script_state_t *state)
{
- script_lib_math_data_t *data = malloc (sizeof (script_lib_math_data_t));
+ script_lib_math_data_t *data = malloc (sizeof(script_lib_math_data_t));
- srand ((int) ply_get_timestamp ());
+ srand ((int) ply_get_timestamp ());
- script_obj_t *math_hash = script_obj_hash_get_element (state->global, "Math");
- script_add_native_function (math_hash,
- "Cos",
- script_lib_math_double_from_double_function,
- cos,
- "value",
- NULL);
- script_add_native_function (math_hash,
- "Sin",
- script_lib_math_double_from_double_function,
- sin,
- "value",
- NULL);
- script_add_native_function (math_hash,
- "Tan",
- script_lib_math_double_from_double_function,
- tan,
- "value",
- NULL);
- script_add_native_function (math_hash,
- "ATan2",
- script_lib_math_double_from_double_double_function,
- atan2,
- "value_a",
- "value_b",
- NULL);
- script_add_native_function (math_hash,
- "Sqrt",
- script_lib_math_double_from_double_function,
- sqrt,
- "value",
- NULL);
- script_add_native_function (math_hash,
- "Int",
- script_lib_math_double_from_double_function,
- floor,
- "value",
- NULL);
- script_add_native_function (math_hash,
- "Random",
- script_lib_math_random,
- NULL,
- NULL);
- script_obj_unref (math_hash);
+ script_obj_t *math_hash = script_obj_hash_get_element (state->global, "Math");
+ script_add_native_function (math_hash,
+ "Cos",
+ script_lib_math_double_from_double_function,
+ cos,
+ "value",
+ NULL);
+ script_add_native_function (math_hash,
+ "Sin",
+ script_lib_math_double_from_double_function,
+ sin,
+ "value",
+ NULL);
+ script_add_native_function (math_hash,
+ "Tan",
+ script_lib_math_double_from_double_function,
+ tan,
+ "value",
+ NULL);
+ script_add_native_function (math_hash,
+ "ATan2",
+ script_lib_math_double_from_double_double_function,
+ atan2,
+ "value_a",
+ "value_b",
+ NULL);
+ script_add_native_function (math_hash,
+ "Sqrt",
+ script_lib_math_double_from_double_function,
+ sqrt,
+ "value",
+ NULL);
+ script_add_native_function (math_hash,
+ "Int",
+ script_lib_math_double_from_double_function,
+ floor,
+ "value",
+ NULL);
+ script_add_native_function (math_hash,
+ "Random",
+ script_lib_math_random,
+ NULL,
+ NULL);
+ script_obj_unref (math_hash);
- data->script_main_op = script_parse_string (script_lib_math_string, "script-lib-math.script");
- script_return_t ret = script_execute (state, data->script_main_op);
- script_obj_unref (ret.object);
+ data->script_main_op = script_parse_string (script_lib_math_string, "script-lib-math.script");
+ script_return_t ret = script_execute (state, data->script_main_op);
+ script_obj_unref (ret.object);
- return data;
+ return data;
}
void script_lib_math_destroy (script_lib_math_data_t *data)
{
- script_parse_op_free (data->script_main_op);
- free (data);
+ script_parse_op_free (data->script_main_op);
+ free (data);
}
-
diff --git a/src/plugins/splash/script/script-lib-math.h b/src/plugins/splash/script/script-lib-math.h
index 10204b74..b13c824b 100644
--- a/src/plugins/splash/script/script-lib-math.h
+++ b/src/plugins/splash/script/script-lib-math.h
@@ -26,7 +26,7 @@
typedef struct
{
- script_op_t *script_main_op;
+ script_op_t *script_main_op;
} script_lib_math_data_t;
script_lib_math_data_t *script_lib_math_setup (script_state_t *state);
diff --git a/src/plugins/splash/script/script-lib-plymouth.c b/src/plugins/splash/script/script-lib-plymouth.c
index ab2ec443..57050791 100644
--- a/src/plugins/splash/script/script-lib-plymouth.c
+++ b/src/plugins/splash/script/script-lib-plymouth.c
@@ -39,229 +39,235 @@
static script_return_t plymouth_set_function (script_state_t *state,
void *user_data)
{
- script_obj_t **script_func = user_data;
- script_obj_t *obj = script_obj_hash_get_element (state->local, "function");
+ script_obj_t **script_func = user_data;
+ script_obj_t *obj = script_obj_hash_get_element (state->local, "function");
- script_obj_deref (&obj);
- script_obj_unref (*script_func);
- *script_func = obj;
- return script_return_obj_null ();
+ script_obj_deref (&obj);
+ script_obj_unref (*script_func);
+ *script_func = obj;
+ return script_return_obj_null ();
}
static script_return_t plymouth_get_mode (script_state_t *state,
void *user_data)
{
- script_lib_plymouth_data_t *data = user_data;
- script_obj_t *obj;
- switch (data->mode)
- {
- case PLY_BOOT_SPLASH_MODE_BOOT_UP:
- obj = script_obj_new_string ("boot");
- break;
- case PLY_BOOT_SPLASH_MODE_SHUTDOWN:
- obj = script_obj_new_string ("shutdown");
- break;
- case PLY_BOOT_SPLASH_MODE_UPDATES:
- obj = script_obj_new_string ("updates");
- break;
- case PLY_BOOT_SPLASH_MODE_INVALID:
- default:
- obj = script_obj_new_string ("unknown");
- break;
- }
- return script_return_obj (obj);
+ script_lib_plymouth_data_t *data = user_data;
+ script_obj_t *obj;
+
+ switch (data->mode) {
+ case PLY_BOOT_SPLASH_MODE_BOOT_UP:
+ obj = script_obj_new_string ("boot");
+ break;
+ case PLY_BOOT_SPLASH_MODE_SHUTDOWN:
+ obj = script_obj_new_string ("shutdown");
+ break;
+ case PLY_BOOT_SPLASH_MODE_UPDATES:
+ obj = script_obj_new_string ("updates");
+ break;
+ case PLY_BOOT_SPLASH_MODE_INVALID:
+ default:
+ obj = script_obj_new_string ("unknown");
+ break;
+ }
+ return script_return_obj (obj);
}
-script_lib_plymouth_data_t *script_lib_plymouth_setup (script_state_t *state,
- ply_boot_splash_mode_t mode)
+script_lib_plymouth_data_t *script_lib_plymouth_setup (script_state_t *state,
+ ply_boot_splash_mode_t mode)
{
- script_lib_plymouth_data_t *data = malloc (sizeof (script_lib_plymouth_data_t));
-
- data->script_refresh_func = script_obj_new_null ();
- data->script_boot_progress_func = script_obj_new_null ();
- data->script_root_mounted_func = script_obj_new_null ();
- data->script_keyboard_input_func = script_obj_new_null ();
- data->script_update_status_func = script_obj_new_null ();
- data->script_display_normal_func = script_obj_new_null ();
- data->script_display_password_func = script_obj_new_null ();
- data->script_display_question_func = script_obj_new_null ();
- data->script_display_message_func = script_obj_new_null ();
- data->script_hide_message_func = script_obj_new_null ();
- data->script_quit_func = script_obj_new_null ();
- data->mode = mode;
-
- script_obj_t *plymouth_hash = script_obj_hash_get_element (state->global, "Plymouth");
- script_add_native_function (plymouth_hash,
- "SetRefreshFunction",
- plymouth_set_function,
- &data->script_refresh_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetBootProgressFunction",
- plymouth_set_function,
- &data->script_boot_progress_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetRootMountedFunction",
- plymouth_set_function,
- &data->script_root_mounted_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetKeyboardInputFunction",
- plymouth_set_function,
- &data->script_keyboard_input_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetUpdateStatusFunction",
- plymouth_set_function,
- &data->script_update_status_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetDisplayNormalFunction",
- plymouth_set_function,
- &data->script_display_normal_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetDisplayPasswordFunction",
- plymouth_set_function,
- &data->script_display_password_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetDisplayQuestionFunction",
- plymouth_set_function,
- &data->script_display_question_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetDisplayMessageFunction",
- plymouth_set_function,
- &data->script_display_message_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetHideMessageFunction",
- plymouth_set_function,
- &data->script_hide_message_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "SetQuitFunction",
- plymouth_set_function,
- &data->script_quit_func,
- "function",
- NULL);
- script_add_native_function (plymouth_hash,
- "GetMode",
- plymouth_get_mode,
- data,
- NULL);
- script_obj_unref (plymouth_hash);
-
- data->script_main_op = script_parse_string (script_lib_plymouth_string, "script-lib-plymouth.script");
- script_return_t ret = script_execute (state, data->script_main_op);
- script_obj_unref (ret.object); /* Throw anything sent back away */
-
- return data;
+ script_lib_plymouth_data_t *data = malloc (sizeof(script_lib_plymouth_data_t));
+
+ data->script_refresh_func = script_obj_new_null ();
+ data->script_boot_progress_func = script_obj_new_null ();
+ data->script_root_mounted_func = script_obj_new_null ();
+ data->script_keyboard_input_func = script_obj_new_null ();
+ data->script_update_status_func = script_obj_new_null ();
+ data->script_display_normal_func = script_obj_new_null ();
+ data->script_display_password_func = script_obj_new_null ();
+ data->script_display_question_func = script_obj_new_null ();
+ data->script_display_message_func = script_obj_new_null ();
+ data->script_hide_message_func = script_obj_new_null ();
+ data->script_quit_func = script_obj_new_null ();
+ data->mode = mode;
+
+ script_obj_t *plymouth_hash = script_obj_hash_get_element (state->global, "Plymouth");
+ script_add_native_function (plymouth_hash,
+ "SetRefreshFunction",
+ plymouth_set_function,
+ &data->script_refresh_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetBootProgressFunction",
+ plymouth_set_function,
+ &data->script_boot_progress_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetRootMountedFunction",
+ plymouth_set_function,
+ &data->script_root_mounted_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetKeyboardInputFunction",
+ plymouth_set_function,
+ &data->script_keyboard_input_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetUpdateStatusFunction",
+ plymouth_set_function,
+ &data->script_update_status_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetDisplayNormalFunction",
+ plymouth_set_function,
+ &data->script_display_normal_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetDisplayPasswordFunction",
+ plymouth_set_function,
+ &data->script_display_password_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetDisplayQuestionFunction",
+ plymouth_set_function,
+ &data->script_display_question_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetDisplayMessageFunction",
+ plymouth_set_function,
+ &data->script_display_message_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetHideMessageFunction",
+ plymouth_set_function,
+ &data->script_hide_message_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "SetQuitFunction",
+ plymouth_set_function,
+ &data->script_quit_func,
+ "function",
+ NULL);
+ script_add_native_function (plymouth_hash,
+ "GetMode",
+ plymouth_get_mode,
+ data,
+ NULL);
+ script_obj_unref (plymouth_hash);
+
+ data->script_main_op = script_parse_string (script_lib_plymouth_string, "script-lib-plymouth.script");
+ script_return_t ret = script_execute (state, data->script_main_op);
+ script_obj_unref (ret.object); /* Throw anything sent back away */
+
+ return data;
}
void script_lib_plymouth_destroy (script_lib_plymouth_data_t *data)
{
- script_parse_op_free (data->script_main_op);
- script_obj_unref (data->script_refresh_func);
- script_obj_unref (data->script_boot_progress_func);
- script_obj_unref (data->script_root_mounted_func);
- script_obj_unref (data->script_keyboard_input_func);
- script_obj_unref (data->script_update_status_func);
- script_obj_unref (data->script_display_normal_func);
- script_obj_unref (data->script_display_password_func);
- script_obj_unref (data->script_display_question_func);
- script_obj_unref (data->script_display_message_func);
- script_obj_unref (data->script_hide_message_func);
- script_obj_unref (data->script_quit_func);
- free (data);
+ script_parse_op_free (data->script_main_op);
+ script_obj_unref (data->script_refresh_func);
+ script_obj_unref (data->script_boot_progress_func);
+ script_obj_unref (data->script_root_mounted_func);
+ script_obj_unref (data->script_keyboard_input_func);
+ script_obj_unref (data->script_update_status_func);
+ script_obj_unref (data->script_display_normal_func);
+ script_obj_unref (data->script_display_password_func);
+ script_obj_unref (data->script_display_question_func);
+ script_obj_unref (data->script_display_message_func);
+ script_obj_unref (data->script_hide_message_func);
+ script_obj_unref (data->script_quit_func);
+ free (data);
}
void script_lib_plymouth_on_refresh (script_state_t *state,
script_lib_plymouth_data_t *data)
{
- script_return_t ret = script_execute_object (state,
- data->script_refresh_func,
- NULL,
- NULL);
- script_obj_unref (ret.object);
+ script_return_t ret = script_execute_object (state,
+ data->script_refresh_func,
+ NULL,
+ NULL);
+
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_boot_progress (script_state_t *state,
script_lib_plymouth_data_t *data,
- double duration,
- double progress)
+ double duration,
+ double progress)
{
- script_obj_t *duration_obj = script_obj_new_number (duration);
- script_obj_t *progress_obj = script_obj_new_number (progress);
- script_return_t ret = script_execute_object (state,
- data->script_boot_progress_func,
- NULL,
- duration_obj,
- progress_obj,
- NULL);
- script_obj_unref (ret.object);
- script_obj_unref (duration_obj);
- script_obj_unref (progress_obj);
+ script_obj_t *duration_obj = script_obj_new_number (duration);
+ script_obj_t *progress_obj = script_obj_new_number (progress);
+ script_return_t ret = script_execute_object (state,
+ data->script_boot_progress_func,
+ NULL,
+ duration_obj,
+ progress_obj,
+ NULL);
+
+ script_obj_unref (ret.object);
+ script_obj_unref (duration_obj);
+ script_obj_unref (progress_obj);
}
void script_lib_plymouth_on_root_mounted (script_state_t *state,
script_lib_plymouth_data_t *data)
{
- script_return_t ret = script_execute_object (state,
- data->script_root_mounted_func,
- NULL,
- NULL);
- script_obj_unref (ret.object);
+ script_return_t ret = script_execute_object (state,
+ data->script_root_mounted_func,
+ NULL,
+ NULL);
+
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_keyboard_input (script_state_t *state,
script_lib_plymouth_data_t *data,
const char *keyboard_input)
{
- script_obj_t *keyboard_input_obj = script_obj_new_string (keyboard_input);
- script_return_t ret = script_execute_object (state,
- data->script_keyboard_input_func,
- NULL,
- keyboard_input_obj,
- NULL);
- script_obj_unref (keyboard_input_obj);
- script_obj_unref (ret.object);
+ script_obj_t *keyboard_input_obj = script_obj_new_string (keyboard_input);
+ script_return_t ret = script_execute_object (state,
+ data->script_keyboard_input_func,
+ NULL,
+ keyboard_input_obj,
+ NULL);
+
+ script_obj_unref (keyboard_input_obj);
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_update_status (script_state_t *state,
script_lib_plymouth_data_t *data,
const char *new_status)
{
- script_obj_t *new_status_obj = script_obj_new_string (new_status);
- script_return_t ret = script_execute_object (state,
- data->script_update_status_func,
- NULL,
- new_status_obj,
- NULL);
- script_obj_unref (new_status_obj);
- script_obj_unref (ret.object);
+ script_obj_t *new_status_obj = script_obj_new_string (new_status);
+ script_return_t ret = script_execute_object (state,
+ data->script_update_status_func,
+ NULL,
+ new_status_obj,
+ NULL);
+
+ script_obj_unref (new_status_obj);
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_display_normal (script_state_t *state,
script_lib_plymouth_data_t *data)
{
- script_return_t ret = script_execute_object (state,
- data->script_display_normal_func,
- NULL,
- NULL);
- script_obj_unref (ret.object);
+ script_return_t ret = script_execute_object (state,
+ data->script_display_normal_func,
+ NULL,
+ NULL);
+
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_display_password (script_state_t *state,
@@ -269,17 +275,18 @@ void script_lib_plymouth_on_display_password (script_state_t *state,
const char *prompt,
int bullets)
{
- script_obj_t *prompt_obj = script_obj_new_string (prompt);
- script_obj_t *bullets_obj = script_obj_new_number (bullets);
- script_return_t ret = script_execute_object (state,
- data->script_display_password_func,
- NULL,
- prompt_obj,
- bullets_obj,
- NULL);
- script_obj_unref (prompt_obj);
- script_obj_unref (bullets_obj);
- script_obj_unref (ret.object);
+ script_obj_t *prompt_obj = script_obj_new_string (prompt);
+ script_obj_t *bullets_obj = script_obj_new_number (bullets);
+ script_return_t ret = script_execute_object (state,
+ data->script_display_password_func,
+ NULL,
+ prompt_obj,
+ bullets_obj,
+ NULL);
+
+ script_obj_unref (prompt_obj);
+ script_obj_unref (bullets_obj);
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_display_question (script_state_t *state,
@@ -287,53 +294,57 @@ void script_lib_plymouth_on_display_question (script_state_t *state,
const char *prompt,
const char *entry_text)
{
- script_obj_t *prompt_obj = script_obj_new_string (prompt);
- script_obj_t *entry_text_obj = script_obj_new_string (entry_text);
- script_return_t ret = script_execute_object (state,
- data->script_display_question_func,
- NULL,
- prompt_obj,
- entry_text_obj,
- NULL);
- script_obj_unref (prompt_obj);
- script_obj_unref (entry_text_obj);
- script_obj_unref (ret.object);
+ script_obj_t *prompt_obj = script_obj_new_string (prompt);
+ script_obj_t *entry_text_obj = script_obj_new_string (entry_text);
+ script_return_t ret = script_execute_object (state,
+ data->script_display_question_func,
+ NULL,
+ prompt_obj,
+ entry_text_obj,
+ NULL);
+
+ script_obj_unref (prompt_obj);
+ script_obj_unref (entry_text_obj);
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_display_message (script_state_t *state,
script_lib_plymouth_data_t *data,
const char *message)
{
- script_obj_t *new_message_obj = script_obj_new_string (message);
- script_return_t ret = script_execute_object (state,
- data->script_display_message_func,
- NULL,
- new_message_obj,
- NULL);
- script_obj_unref (new_message_obj);
- script_obj_unref (ret.object);
+ script_obj_t *new_message_obj = script_obj_new_string (message);
+ script_return_t ret = script_execute_object (state,
+ data->script_display_message_func,
+ NULL,
+ new_message_obj,
+ NULL);
+
+ script_obj_unref (new_message_obj);
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_hide_message (script_state_t *state,
script_lib_plymouth_data_t *data,
const char *message)
{
- script_obj_t *new_message_obj = script_obj_new_string (message);
- script_return_t ret = script_execute_object (state,
- data->script_hide_message_func,
- NULL,
- new_message_obj,
- NULL);
- script_obj_unref (new_message_obj);
- script_obj_unref (ret.object);
+ script_obj_t *new_message_obj = script_obj_new_string (message);
+ script_return_t ret = script_execute_object (state,
+ data->script_hide_message_func,
+ NULL,
+ new_message_obj,
+ NULL);
+
+ script_obj_unref (new_message_obj);
+ script_obj_unref (ret.object);
}
void script_lib_plymouth_on_quit (script_state_t *state,
script_lib_plymouth_data_t *data)
{
- script_return_t ret = script_execute_object (state,
- data->script_quit_func,
- NULL,
- NULL);
- script_obj_unref (ret.object);
+ script_return_t ret = script_execute_object (state,
+ data->script_quit_func,
+ NULL,
+ NULL);
+
+ script_obj_unref (ret.object);
}
diff --git a/src/plugins/splash/script/script-lib-plymouth.h b/src/plugins/splash/script/script-lib-plymouth.h
index c4ec5a66..dafdec3c 100644
--- a/src/plugins/splash/script/script-lib-plymouth.h
+++ b/src/plugins/splash/script/script-lib-plymouth.h
@@ -27,31 +27,31 @@
typedef struct
{
- script_op_t *script_main_op;
- script_obj_t *script_refresh_func;
- script_obj_t *script_boot_progress_func;
- script_obj_t *script_root_mounted_func;
- script_obj_t *script_keyboard_input_func;
- script_obj_t *script_update_status_func;
- script_obj_t *script_display_normal_func;
- script_obj_t *script_display_password_func;
- script_obj_t *script_display_question_func;
- script_obj_t *script_display_message_func;
- script_obj_t *script_hide_message_func;
- script_obj_t *script_quit_func;
- ply_boot_splash_mode_t mode;
+ script_op_t *script_main_op;
+ script_obj_t *script_refresh_func;
+ script_obj_t *script_boot_progress_func;
+ script_obj_t *script_root_mounted_func;
+ script_obj_t *script_keyboard_input_func;
+ script_obj_t *script_update_status_func;
+ script_obj_t *script_display_normal_func;
+ script_obj_t *script_display_password_func;
+ script_obj_t *script_display_question_func;
+ script_obj_t *script_display_message_func;
+ script_obj_t *script_hide_message_func;
+ script_obj_t *script_quit_func;
+ ply_boot_splash_mode_t mode;
} script_lib_plymouth_data_t;
-script_lib_plymouth_data_t *script_lib_plymouth_setup (script_state_t *state,
- ply_boot_splash_mode_t mode);
+script_lib_plymouth_data_t *script_lib_plymouth_setup (script_state_t *state,
+ ply_boot_splash_mode_t mode);
void script_lib_plymouth_destroy (script_lib_plymouth_data_t *data);
void script_lib_plymouth_on_refresh (script_state_t *state,
script_lib_plymouth_data_t *data);
void script_lib_plymouth_on_boot_progress (script_state_t *state,
script_lib_plymouth_data_t *data,
- double duration,
- double progress);
+ double duration,
+ double progress);
void script_lib_plymouth_on_root_mounted (script_state_t *state,
script_lib_plymouth_data_t *data);
void script_lib_plymouth_on_keyboard_input (script_state_t *state,
diff --git a/src/plugins/splash/script/script-lib-sprite.c b/src/plugins/splash/script/script-lib-sprite.c
index e0ced7e4..a4772e8c 100644
--- a/src/plugins/splash/script/script-lib-sprite.c
+++ b/src/plugins/splash/script/script-lib-sprite.c
@@ -40,392 +40,380 @@
static void sprite_free (script_obj_t *obj)
{
- sprite_t *sprite = obj->data.native.object_data;
- sprite->remove_me = true;
+ sprite_t *sprite = obj->data.native.object_data;
+
+ sprite->remove_me = true;
}
static script_return_t sprite_new (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- script_obj_t *reply;
-
- sprite_t *sprite = calloc (1, sizeof (sprite_t));
-
- sprite->x = 0;
- sprite->y = 0;
- sprite->z = 0;
- sprite->opacity = 1.0;
- sprite->old_x = 0;
- sprite->old_y = 0;
- sprite->old_z = 0;
- sprite->old_width = 0;
- sprite->old_height = 0;
- sprite->old_opacity = 1.0;
- sprite->refresh_me = false;
- sprite->remove_me = false;
- sprite->image = NULL;
- sprite->image_obj = NULL;
- ply_list_append_data (data->sprite_list, sprite);
-
- reply = script_obj_new_native (sprite, data->class);
- return script_return_obj (reply);
+ script_lib_sprite_data_t *data = user_data;
+ script_obj_t *reply;
+
+ sprite_t *sprite = calloc (1, sizeof(sprite_t));
+
+ sprite->x = 0;
+ sprite->y = 0;
+ sprite->z = 0;
+ sprite->opacity = 1.0;
+ sprite->old_x = 0;
+ sprite->old_y = 0;
+ sprite->old_z = 0;
+ sprite->old_width = 0;
+ sprite->old_height = 0;
+ sprite->old_opacity = 1.0;
+ sprite->refresh_me = false;
+ sprite->remove_me = false;
+ sprite->image = NULL;
+ sprite->image_obj = NULL;
+ ply_list_append_data (data->sprite_list, sprite);
+
+ reply = script_obj_new_native (sprite, data->class);
+ return script_return_obj (reply);
}
static script_return_t sprite_get_image (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
-
- if (sprite && sprite->image_obj)
- {
- script_obj_ref (sprite->image_obj);
- return script_return_obj (sprite->image_obj);
- }
- return script_return_obj_null ();
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+
+ if (sprite && sprite->image_obj) {
+ script_obj_ref (sprite->image_obj);
+ return script_return_obj (sprite->image_obj);
+ }
+ return script_return_obj_null ();
}
static script_return_t sprite_set_image (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- script_obj_t *script_obj_image = script_obj_hash_get_element (state->local,
- "image");
- script_obj_deref (&script_obj_image);
- ply_pixel_buffer_t *image = script_obj_as_native_of_class_name (script_obj_image,
- "image");
-
- if (image && sprite)
- {
- script_obj_unref (sprite->image_obj);
- script_obj_ref (script_obj_image);
- sprite->image = image;
- sprite->image_obj = script_obj_image;
- sprite->refresh_me = true;
- }
- script_obj_unref (script_obj_image);
-
- return script_return_obj_null ();
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_obj_t *script_obj_image = script_obj_hash_get_element (state->local,
+ "image");
+
+ script_obj_deref (&script_obj_image);
+ ply_pixel_buffer_t *image = script_obj_as_native_of_class_name (script_obj_image,
+ "image");
+
+ if (image && sprite) {
+ script_obj_unref (sprite->image_obj);
+ script_obj_ref (script_obj_image);
+ sprite->image = image;
+ sprite->image_obj = script_obj_image;
+ sprite->refresh_me = true;
+ }
+ script_obj_unref (script_obj_image);
+
+ return script_return_obj_null ();
}
static script_return_t sprite_get_x (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- return script_return_obj (script_obj_new_number (sprite->x));
- return script_return_obj_null ();
+ if (sprite)
+ return script_return_obj (script_obj_new_number (sprite->x));
+ return script_return_obj_null ();
}
static script_return_t sprite_get_y (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- return script_return_obj (script_obj_new_number (sprite->y));
- return script_return_obj_null ();
+ if (sprite)
+ return script_return_obj (script_obj_new_number (sprite->y));
+ return script_return_obj_null ();
}
static script_return_t sprite_get_z (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- return script_return_obj (script_obj_new_number (sprite->z));
- return script_return_obj_null ();
+ if (sprite)
+ return script_return_obj (script_obj_new_number (sprite->z));
+ return script_return_obj_null ();
}
static script_return_t sprite_get_opacity (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- return script_return_obj (script_obj_new_number (sprite->opacity));
- return script_return_obj_null ();
+ if (sprite)
+ return script_return_obj (script_obj_new_number (sprite->opacity));
+ return script_return_obj_null ();
}
static script_return_t sprite_set_x (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- sprite->x = script_obj_hash_get_number (state->local, "value");
- return script_return_obj_null ();
+ if (sprite)
+ sprite->x = script_obj_hash_get_number (state->local, "value");
+ return script_return_obj_null ();
}
static script_return_t sprite_set_y (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- sprite->y = script_obj_hash_get_number (state->local, "value");
- return script_return_obj_null ();
+ if (sprite)
+ sprite->y = script_obj_hash_get_number (state->local, "value");
+ return script_return_obj_null ();
}
static script_return_t sprite_set_z (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- sprite->z = script_obj_hash_get_number (state->local, "value");
- return script_return_obj_null ();
+ if (sprite)
+ sprite->z = script_obj_hash_get_number (state->local, "value");
+ return script_return_obj_null ();
}
static script_return_t sprite_set_opacity (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
+ script_lib_sprite_data_t *data = user_data;
+ sprite_t *sprite = script_obj_as_native_of_class (state->this, data->class);
- if (sprite)
- sprite->opacity = script_obj_hash_get_number (state->local, "value");
- return script_return_obj_null ();
+ if (sprite)
+ sprite->opacity = script_obj_hash_get_number (state->local, "value");
+ return script_return_obj_null ();
}
static script_return_t sprite_window_get_width (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- ply_list_node_t *node;
- int index;
- script_obj_t *index_obj;
- script_lib_display_t *display;
- unsigned int width;
-
- index_obj = script_obj_hash_peek_element (state->local, "window");
-
- if (index_obj)
- {
- index = script_obj_as_number (index_obj);
- script_obj_unref(index_obj);
- if (index < 0)
- return script_return_obj_null ();
- node = ply_list_get_nth_node (data->displays, index);
- if (node == NULL)
- return script_return_obj_null ();
- display = ply_list_node_get_data (node);
- width = ply_pixel_display_get_width (display->pixel_display);
- return script_return_obj (script_obj_new_number (width));
- }
-
- width = 0;
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- display = ply_list_node_get_data (node);
- if (width == 0)
- width = ply_pixel_display_get_width (display->pixel_display);
- else
- width = MIN (width, ply_pixel_display_get_width (display->pixel_display));
- }
- return script_return_obj (script_obj_new_number (width));
+ script_lib_sprite_data_t *data = user_data;
+ ply_list_node_t *node;
+ int index;
+ script_obj_t *index_obj;
+ script_lib_display_t *display;
+ unsigned int width;
+
+ index_obj = script_obj_hash_peek_element (state->local, "window");
+
+ if (index_obj) {
+ index = script_obj_as_number (index_obj);
+ script_obj_unref (index_obj);
+ if (index < 0)
+ return script_return_obj_null ();
+ node = ply_list_get_nth_node (data->displays, index);
+ if (node == NULL)
+ return script_return_obj_null ();
+ display = ply_list_node_get_data (node);
+ width = ply_pixel_display_get_width (display->pixel_display);
+ return script_return_obj (script_obj_new_number (width));
+ }
+
+ width = 0;
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ display = ply_list_node_get_data (node);
+ if (width == 0)
+ width = ply_pixel_display_get_width (display->pixel_display);
+ else
+ width = MIN (width, ply_pixel_display_get_width (display->pixel_display));
+ }
+ return script_return_obj (script_obj_new_number (width));
}
static script_return_t sprite_window_get_height (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- ply_list_node_t *node;
- int index;
- script_obj_t *index_obj;
- script_lib_display_t *display;
- unsigned int height;
-
- index_obj = script_obj_hash_peek_element (state->local, "window");
-
- if (index_obj)
- {
- index = script_obj_as_number (index_obj);
- script_obj_unref(index_obj);
- if (index < 0)
- return script_return_obj_null ();
- node = ply_list_get_nth_node (data->displays, index);
- if (node == NULL)
- return script_return_obj_null ();
- display = ply_list_node_get_data (node);
- height = ply_pixel_display_get_height (display->pixel_display);
- return script_return_obj (script_obj_new_number (height));
- }
-
- height = 0;
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- display = ply_list_node_get_data (node);
- if (height == 0)
- height = ply_pixel_display_get_height (display->pixel_display);
- else
- height = MIN (height, ply_pixel_display_get_height (display->pixel_display));
- }
- return script_return_obj (script_obj_new_number (height));
+ script_lib_sprite_data_t *data = user_data;
+ ply_list_node_t *node;
+ int index;
+ script_obj_t *index_obj;
+ script_lib_display_t *display;
+ unsigned int height;
+
+ index_obj = script_obj_hash_peek_element (state->local, "window");
+
+ if (index_obj) {
+ index = script_obj_as_number (index_obj);
+ script_obj_unref (index_obj);
+ if (index < 0)
+ return script_return_obj_null ();
+ node = ply_list_get_nth_node (data->displays, index);
+ if (node == NULL)
+ return script_return_obj_null ();
+ display = ply_list_node_get_data (node);
+ height = ply_pixel_display_get_height (display->pixel_display);
+ return script_return_obj (script_obj_new_number (height));
+ }
+
+ height = 0;
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ display = ply_list_node_get_data (node);
+ if (height == 0)
+ height = ply_pixel_display_get_height (display->pixel_display);
+ else
+ height = MIN (height, ply_pixel_display_get_height (display->pixel_display));
+ }
+ return script_return_obj (script_obj_new_number (height));
}
static script_return_t sprite_window_get_x (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- ply_list_node_t *node;
- int index;
- script_obj_t *index_obj;
- script_lib_display_t *display;
- int x;
-
- index_obj = script_obj_hash_peek_element (state->local, "window");
-
- if (index_obj)
- {
- index = script_obj_as_number (index_obj);
- script_obj_unref(index_obj);
- if (index < 0)
- return script_return_obj_null ();
- node = ply_list_get_nth_node (data->displays, index);
- if (node == NULL)
- return script_return_obj_null ();
- display = ply_list_node_get_data (node);
- return script_return_obj (script_obj_new_number (display->x));
- }
-
- x = 0;
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- display = ply_list_node_get_data (node);
- x = MAX (x, display->x);
- }
- return script_return_obj (script_obj_new_number (x));
+ script_lib_sprite_data_t *data = user_data;
+ ply_list_node_t *node;
+ int index;
+ script_obj_t *index_obj;
+ script_lib_display_t *display;
+ int x;
+
+ index_obj = script_obj_hash_peek_element (state->local, "window");
+
+ if (index_obj) {
+ index = script_obj_as_number (index_obj);
+ script_obj_unref (index_obj);
+ if (index < 0)
+ return script_return_obj_null ();
+ node = ply_list_get_nth_node (data->displays, index);
+ if (node == NULL)
+ return script_return_obj_null ();
+ display = ply_list_node_get_data (node);
+ return script_return_obj (script_obj_new_number (display->x));
+ }
+
+ x = 0;
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ display = ply_list_node_get_data (node);
+ x = MAX (x, display->x);
+ }
+ return script_return_obj (script_obj_new_number (x));
}
static script_return_t sprite_window_get_y (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- ply_list_node_t *node;
- int index;
- script_obj_t *index_obj;
- script_lib_display_t *display;
- int y;
-
- index_obj = script_obj_hash_peek_element (state->local, "window");
-
- if (index_obj)
- {
- index = script_obj_as_number (index_obj);
- script_obj_unref(index_obj);
- if (index < 0)
- return script_return_obj_null ();
- node = ply_list_get_nth_node (data->displays, index);
- if (node == NULL)
- return script_return_obj_null ();
- display = ply_list_node_get_data (node);
- return script_return_obj (script_obj_new_number (display->y));
- }
-
- y = 0;
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- display = ply_list_node_get_data (node);
- y = MAX (y, display->y);
- }
- return script_return_obj (script_obj_new_number (y));
+ script_lib_sprite_data_t *data = user_data;
+ ply_list_node_t *node;
+ int index;
+ script_obj_t *index_obj;
+ script_lib_display_t *display;
+ int y;
+
+ index_obj = script_obj_hash_peek_element (state->local, "window");
+
+ if (index_obj) {
+ index = script_obj_as_number (index_obj);
+ script_obj_unref (index_obj);
+ if (index < 0)
+ return script_return_obj_null ();
+ node = ply_list_get_nth_node (data->displays, index);
+ if (node == NULL)
+ return script_return_obj_null ();
+ display = ply_list_node_get_data (node);
+ return script_return_obj (script_obj_new_number (display->y));
+ }
+
+ y = 0;
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ display = ply_list_node_get_data (node);
+ y = MAX (y, display->y);
+ }
+ return script_return_obj (script_obj_new_number (y));
}
static script_return_t sprite_window_set_x (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- ply_list_node_t *node;
- script_lib_display_t *display;
- int index;
- int x;
-
- index = script_obj_hash_get_number (state->local, "window");
- x = script_obj_hash_get_number (state->local, "value");
- node = ply_list_get_nth_node (data->displays, index);
- if (node)
- {
- display = ply_list_node_get_data (node);
- if (display->x != x)
- {
- display->x = x;
- data->full_refresh = true;
+ script_lib_sprite_data_t *data = user_data;
+ ply_list_node_t *node;
+ script_lib_display_t *display;
+ int index;
+ int x;
+
+ index = script_obj_hash_get_number (state->local, "window");
+ x = script_obj_hash_get_number (state->local, "value");
+ node = ply_list_get_nth_node (data->displays, index);
+ if (node) {
+ display = ply_list_node_get_data (node);
+ if (display->x != x) {
+ display->x = x;
+ data->full_refresh = true;
+ }
}
- }
- return script_return_obj_null ();
+ return script_return_obj_null ();
}
static script_return_t sprite_window_set_y (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
- ply_list_node_t *node;
- script_lib_display_t *display;
- int index;
- int y;
-
- index = script_obj_hash_get_number (state->local, "window");
- y = script_obj_hash_get_number (state->local, "value");
- node = ply_list_get_nth_node (data->displays, index);
- if (node)
- {
- display = ply_list_node_get_data (node);
- if (display->y != y)
- {
- display->y = y;
- data->full_refresh = true;
+ script_lib_sprite_data_t *data = user_data;
+ ply_list_node_t *node;
+ script_lib_display_t *display;
+ int index;
+ int y;
+
+ index = script_obj_hash_get_number (state->local, "window");
+ y = script_obj_hash_get_number (state->local, "value");
+ node = ply_list_get_nth_node (data->displays, index);
+ if (node) {
+ display = ply_list_node_get_data (node);
+ if (display->y != y) {
+ display->y = y;
+ data->full_refresh = true;
+ }
}
- }
- return script_return_obj_null ();
+ return script_return_obj_null ();
}
static uint32_t extract_rgb_color (script_state_t *state)
{
- uint8_t red = CLAMP (255 * script_obj_hash_get_number (state->local, "red"), 0, 255);
- uint8_t green = CLAMP (255 * script_obj_hash_get_number (state->local, "green"), 0, 255);
- uint8_t blue = CLAMP (255 * script_obj_hash_get_number (state->local, "blue"), 0, 255);
+ uint8_t red = CLAMP (255 * script_obj_hash_get_number (state->local, "red"), 0, 255);
+ uint8_t green = CLAMP (255 * script_obj_hash_get_number (state->local, "green"), 0, 255);
+ uint8_t blue = CLAMP (255 * script_obj_hash_get_number (state->local, "blue"), 0, 255);
- return (uint32_t) red << 16 | green << 8 | blue;
+ return (uint32_t) red << 16 | green << 8 | blue;
}
static script_return_t sprite_window_set_background_top_color (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
+ script_lib_sprite_data_t *data = user_data;
- data->background_color_start = extract_rgb_color (state);
- data->full_refresh = true;
- return script_return_obj_null ();
+ data->background_color_start = extract_rgb_color (state);
+ data->full_refresh = true;
+ return script_return_obj_null ();
}
static script_return_t sprite_window_set_background_bottom_color (script_state_t *state,
void *user_data)
{
- script_lib_sprite_data_t *data = user_data;
+ script_lib_sprite_data_t *data = user_data;
- data->background_color_end = extract_rgb_color (state);
- data->full_refresh = true;
- return script_return_obj_null ();
+ data->background_color_end = extract_rgb_color (state);
+ data->full_refresh = true;
+ return script_return_obj_null ();
}
static void script_lib_sprite_draw_area (script_lib_display_t *display,
@@ -435,398 +423,389 @@ static void script_lib_sprite_draw_area (script_lib_display_t *display,
int width,
int height)
{
- ply_rectangle_t clip_area;
- ply_list_node_t *node;
- script_lib_sprite_data_t *data = display->data;
-
- clip_area.x = x;
- clip_area.y = y;
- clip_area.width = width;
- clip_area.height = height;
-
- if (data->background_color_start == data->background_color_end)
- ply_pixel_buffer_fill_with_hex_color (pixel_buffer,
- &clip_area,
- data->background_color_start);
- else
- ply_pixel_buffer_fill_with_gradient (pixel_buffer,
- &clip_area,
- data->background_color_start,
- data->background_color_end);
- for (node = ply_list_get_first_node (data->sprite_list);
- node;
- node = ply_list_get_next_node (data->sprite_list, node))
- {
- sprite_t *sprite = ply_list_node_get_data (node);
- int position_x, position_y;
-
- if (!sprite->image) continue;
- if (sprite->remove_me) continue;
- if (sprite->opacity < 0.011) continue;
-
- position_x = sprite->x - display->x;
- position_y = sprite->y - display->y;
-
- if (position_x >= (x + width)) continue;
- if (position_y >= (y + height)) continue;
-
- if ((position_x + (int) ply_pixel_buffer_get_width (sprite->image)) <= x) continue;
- if ((position_y + (int) ply_pixel_buffer_get_height (sprite->image)) <= y) continue;
- ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (pixel_buffer,
- sprite->image,
- position_x,
- position_y,
- &clip_area,
- sprite->opacity);
- }
+ ply_rectangle_t clip_area;
+ ply_list_node_t *node;
+ script_lib_sprite_data_t *data = display->data;
+
+ clip_area.x = x;
+ clip_area.y = y;
+ clip_area.width = width;
+ clip_area.height = height;
+
+ if (data->background_color_start == data->background_color_end) {
+ ply_pixel_buffer_fill_with_hex_color (pixel_buffer,
+ &clip_area,
+ data->background_color_start);
+ } else {
+ ply_pixel_buffer_fill_with_gradient (pixel_buffer,
+ &clip_area,
+ data->background_color_start,
+ data->background_color_end);
+ }
+ for (node = ply_list_get_first_node (data->sprite_list);
+ node;
+ node = ply_list_get_next_node (data->sprite_list, node)) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ int position_x, position_y;
+
+ if (!sprite->image) continue;
+ if (sprite->remove_me) continue;
+ if (sprite->opacity < 0.011) continue;
+
+ position_x = sprite->x - display->x;
+ position_y = sprite->y - display->y;
+
+ if (position_x >= (x + width)) continue;
+ if (position_y >= (y + height)) continue;
+
+ if ((position_x + (int) ply_pixel_buffer_get_width (sprite->image)) <= x) continue;
+ if ((position_y + (int) ply_pixel_buffer_get_height (sprite->image)) <= y) continue;
+ ply_pixel_buffer_fill_with_buffer_at_opacity_with_clip (pixel_buffer,
+ sprite->image,
+ position_x,
+ position_y,
+ &clip_area,
+ sprite->opacity);
+ }
}
-static void
+static void
draw_area (script_lib_sprite_data_t *data,
int x,
int y,
int width,
int height)
{
- ply_list_node_t *node;
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- script_lib_display_t* display = ply_list_node_get_data (node);
-
- ply_pixel_display_draw_area (display->pixel_display,
- x - display->x,
- y - display->y,
- width,
- height);
- }
+ ply_list_node_t *node;
+
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ script_lib_display_t *display = ply_list_node_get_data (node);
+
+ ply_pixel_display_draw_area (display->pixel_display,
+ x - display->x,
+ y - display->y,
+ width,
+ height);
+ }
}
script_lib_sprite_data_t *script_lib_sprite_setup (script_state_t *state,
ply_list_t *pixel_displays)
{
- ply_list_node_t *node;
- unsigned int max_width, max_height;
- script_lib_sprite_data_t *data = malloc (sizeof (script_lib_sprite_data_t));
-
- data->class = script_obj_native_class_new (sprite_free, "sprite", data);
- data->sprite_list = ply_list_new ();
- data->displays = ply_list_new ();
-
- max_width = 0;
- max_height = 0;
-
- for (node = ply_list_get_first_node (pixel_displays);
- node;
- node = ply_list_get_next_node (pixel_displays, node))
- {
- ply_pixel_display_t *pixel_display = ply_list_node_get_data (node);
- max_width = MAX(max_width, ply_pixel_display_get_width (pixel_display));
- max_height = MAX(max_height, ply_pixel_display_get_height (pixel_display));
- }
-
- for (node = ply_list_get_first_node (pixel_displays);
- node;
- node = ply_list_get_next_node (pixel_displays, node))
- {
- ply_pixel_display_t *pixel_display = ply_list_node_get_data (node);
- script_lib_display_t *script_display = malloc (sizeof(script_lib_display_t));
- script_display->pixel_display = pixel_display;
-
- script_display->x = (max_width - ply_pixel_display_get_width (pixel_display)) / 2;
- script_display->y = (max_height - ply_pixel_display_get_height (pixel_display)) / 2;
-
- script_display->data = data;
- ply_pixel_display_set_draw_handler (pixel_display,
- (ply_pixel_display_draw_handler_t)
- script_lib_sprite_draw_area, script_display);
-
- ply_list_append_data (data->displays, script_display);
- }
-
- script_obj_t *sprite_hash = script_obj_hash_get_element (state->global, "Sprite");
- script_add_native_function (sprite_hash,
- "_New",
- sprite_new,
- data,
- NULL);
- script_add_native_function (sprite_hash,
- "GetImage",
- sprite_get_image,
- data,
- NULL);
- script_add_native_function (sprite_hash,
- "SetImage",
- sprite_set_image,
- data,
- "image",
- NULL);
- script_add_native_function (sprite_hash,
- "GetX",
- sprite_get_x,
- data,
- NULL);
- script_add_native_function (sprite_hash,
- "SetX",
- sprite_set_x,
- data,
- "value",
- NULL);
- script_add_native_function (sprite_hash,
- "GetY",
- sprite_get_y,
- data,
- NULL);
- script_add_native_function (sprite_hash,
- "SetY",
- sprite_set_y,
- data,
- "value",
- NULL);
- script_add_native_function (sprite_hash,
- "GetZ",
- sprite_get_z,
- data,
- NULL);
- script_add_native_function (sprite_hash,
- "SetZ",
- sprite_set_z,
- data,
- "value",
- NULL);
- script_add_native_function (sprite_hash,
- "GetOpacity",
- sprite_get_opacity,
- data,
- NULL);
- script_add_native_function (sprite_hash,
- "SetOpacity",
- sprite_set_opacity,
- data,
- "value",
- NULL);
- script_obj_unref (sprite_hash);
-
-
- script_obj_t *window_hash = script_obj_hash_get_element (state->global, "Window");
- script_add_native_function (window_hash,
- "GetWidth",
- sprite_window_get_width,
- data,
- "window",
- NULL);
- script_add_native_function (window_hash,
- "GetHeight",
- sprite_window_get_height,
- data,
- "window",
- NULL);
- script_add_native_function (window_hash,
- "GetX",
- sprite_window_get_x,
- data,
- "window",
- NULL);
- script_add_native_function (window_hash,
- "GetY",
- sprite_window_get_y,
- data,
- "window",
- NULL);
- script_add_native_function (window_hash,
- "SetX",
- sprite_window_set_x,
- data,
- "window",
- "value",
- NULL);
- script_add_native_function (window_hash,
- "SetY",
- sprite_window_set_y,
- data,
- "window",
- "value",
- NULL);
- script_add_native_function (window_hash,
- "SetBackgroundTopColor",
- sprite_window_set_background_top_color,
- data,
- "red",
- "green",
- "blue",
- NULL);
- script_add_native_function (window_hash,
- "SetBackgroundBottomColor",
- sprite_window_set_background_bottom_color,
- data,
- "red",
- "green",
- "blue",
- NULL);
- script_obj_unref (window_hash);
-
- data->script_main_op = script_parse_string (script_lib_sprite_string, "script-lib-sprite.script");
- data->background_color_start = 0x000000;
- data->background_color_end = 0x000000;
- data->full_refresh = true;
- script_return_t ret = script_execute (state, data->script_main_op);
- script_obj_unref (ret.object);
- return data;
+ ply_list_node_t *node;
+ unsigned int max_width, max_height;
+ script_lib_sprite_data_t *data = malloc (sizeof(script_lib_sprite_data_t));
+
+ data->class = script_obj_native_class_new (sprite_free, "sprite", data);
+ data->sprite_list = ply_list_new ();
+ data->displays = ply_list_new ();
+
+ max_width = 0;
+ max_height = 0;
+
+ for (node = ply_list_get_first_node (pixel_displays);
+ node;
+ node = ply_list_get_next_node (pixel_displays, node)) {
+ ply_pixel_display_t *pixel_display = ply_list_node_get_data (node);
+ max_width = MAX (max_width, ply_pixel_display_get_width (pixel_display));
+ max_height = MAX (max_height, ply_pixel_display_get_height (pixel_display));
+ }
+
+ for (node = ply_list_get_first_node (pixel_displays);
+ node;
+ node = ply_list_get_next_node (pixel_displays, node)) {
+ ply_pixel_display_t *pixel_display = ply_list_node_get_data (node);
+ script_lib_display_t *script_display = malloc (sizeof(script_lib_display_t));
+ script_display->pixel_display = pixel_display;
+
+ script_display->x = (max_width - ply_pixel_display_get_width (pixel_display)) / 2;
+ script_display->y = (max_height - ply_pixel_display_get_height (pixel_display)) / 2;
+
+ script_display->data = data;
+ ply_pixel_display_set_draw_handler (pixel_display,
+ (ply_pixel_display_draw_handler_t)
+ script_lib_sprite_draw_area, script_display);
+
+ ply_list_append_data (data->displays, script_display);
+ }
+
+ script_obj_t *sprite_hash = script_obj_hash_get_element (state->global, "Sprite");
+ script_add_native_function (sprite_hash,
+ "_New",
+ sprite_new,
+ data,
+ NULL);
+ script_add_native_function (sprite_hash,
+ "GetImage",
+ sprite_get_image,
+ data,
+ NULL);
+ script_add_native_function (sprite_hash,
+ "SetImage",
+ sprite_set_image,
+ data,
+ "image",
+ NULL);
+ script_add_native_function (sprite_hash,
+ "GetX",
+ sprite_get_x,
+ data,
+ NULL);
+ script_add_native_function (sprite_hash,
+ "SetX",
+ sprite_set_x,
+ data,
+ "value",
+ NULL);
+ script_add_native_function (sprite_hash,
+ "GetY",
+ sprite_get_y,
+ data,
+ NULL);
+ script_add_native_function (sprite_hash,
+ "SetY",
+ sprite_set_y,
+ data,
+ "value",
+ NULL);
+ script_add_native_function (sprite_hash,
+ "GetZ",
+ sprite_get_z,
+ data,
+ NULL);
+ script_add_native_function (sprite_hash,
+ "SetZ",
+ sprite_set_z,
+ data,
+ "value",
+ NULL);
+ script_add_native_function (sprite_hash,
+ "GetOpacity",
+ sprite_get_opacity,
+ data,
+ NULL);
+ script_add_native_function (sprite_hash,
+ "SetOpacity",
+ sprite_set_opacity,
+ data,
+ "value",
+ NULL);
+ script_obj_unref (sprite_hash);
+
+
+ script_obj_t *window_hash = script_obj_hash_get_element (state->global, "Window");
+ script_add_native_function (window_hash,
+ "GetWidth",
+ sprite_window_get_width,
+ data,
+ "window",
+ NULL);
+ script_add_native_function (window_hash,
+ "GetHeight",
+ sprite_window_get_height,
+ data,
+ "window",
+ NULL);
+ script_add_native_function (window_hash,
+ "GetX",
+ sprite_window_get_x,
+ data,
+ "window",
+ NULL);
+ script_add_native_function (window_hash,
+ "GetY",
+ sprite_window_get_y,
+ data,
+ "window",
+ NULL);
+ script_add_native_function (window_hash,
+ "SetX",
+ sprite_window_set_x,
+ data,
+ "window",
+ "value",
+ NULL);
+ script_add_native_function (window_hash,
+ "SetY",
+ sprite_window_set_y,
+ data,
+ "window",
+ "value",
+ NULL);
+ script_add_native_function (window_hash,
+ "SetBackgroundTopColor",
+ sprite_window_set_background_top_color,
+ data,
+ "red",
+ "green",
+ "blue",
+ NULL);
+ script_add_native_function (window_hash,
+ "SetBackgroundBottomColor",
+ sprite_window_set_background_bottom_color,
+ data,
+ "red",
+ "green",
+ "blue",
+ NULL);
+ script_obj_unref (window_hash);
+
+ data->script_main_op = script_parse_string (script_lib_sprite_string, "script-lib-sprite.script");
+ data->background_color_start = 0x000000;
+ data->background_color_end = 0x000000;
+ data->full_refresh = true;
+ script_return_t ret = script_execute (state, data->script_main_op);
+ script_obj_unref (ret.object);
+ return data;
}
static int
sprite_compare_z (void *data_a, void *data_b)
{
- sprite_t *sprite_a = data_a;
- sprite_t *sprite_b = data_b;
- return sprite_a->z - sprite_b->z;
+ sprite_t *sprite_a = data_a;
+ sprite_t *sprite_b = data_b;
+
+ return sprite_a->z - sprite_b->z;
}
static void
-region_add_area (ply_region_t *region,
- long x,
- long y,
- unsigned long width,
- unsigned long height)
+region_add_area (ply_region_t *region,
+ long x,
+ long y,
+ unsigned long width,
+ unsigned long height)
{
- ply_rectangle_t rectangle;
- rectangle.x = x;
- rectangle.y = y;
- rectangle.width = width;
- rectangle.height = height;
- ply_region_add_rectangle (region, &rectangle);
+ ply_rectangle_t rectangle;
+
+ rectangle.x = x;
+ rectangle.y = y;
+ rectangle.width = width;
+ rectangle.height = height;
+ ply_region_add_rectangle (region, &rectangle);
}
void
script_lib_sprite_refresh (script_lib_sprite_data_t *data)
{
- ply_list_node_t *node;
- ply_region_t *region = ply_region_new ();
- ply_list_t *rectable_list;
-
- ply_list_sort_stable (data->sprite_list, &sprite_compare_z);
-
- node = ply_list_get_first_node (data->sprite_list);
-
-
- if (data->full_refresh)
- {
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- script_lib_display_t* display = ply_list_node_get_data (node);
- region_add_area (region,
- display->x,
- display->y,
- ply_pixel_display_get_width (display->pixel_display),
- ply_pixel_display_get_height (display->pixel_display));
+ ply_list_node_t *node;
+ ply_region_t *region = ply_region_new ();
+ ply_list_t *rectable_list;
+
+ ply_list_sort_stable (data->sprite_list, &sprite_compare_z);
+
+ node = ply_list_get_first_node (data->sprite_list);
+
+
+ if (data->full_refresh) {
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ script_lib_display_t *display = ply_list_node_get_data (node);
+ region_add_area (region,
+ display->x,
+ display->y,
+ ply_pixel_display_get_width (display->pixel_display),
+ ply_pixel_display_get_height (display->pixel_display));
+ }
+
+ data->full_refresh = false;
+ }
+
+ while (node) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ ply_list_node_t *next_node = ply_list_get_next_node (data->sprite_list,
+ node);
+ if (sprite->remove_me) {
+ if (sprite->image) {
+ region_add_area (region,
+ sprite->old_x,
+ sprite->old_y,
+ sprite->old_width,
+ sprite->old_height);
+ }
+ ply_list_remove_node (data->sprite_list, node);
+ script_obj_unref (sprite->image_obj);
+ free (sprite);
+ }
+ node = next_node;
}
- data->full_refresh = false;
- }
-
- while (node)
- {
- sprite_t *sprite = ply_list_node_get_data (node);
- ply_list_node_t *next_node = ply_list_get_next_node (data->sprite_list,
- node);
- if (sprite->remove_me)
- {
- if (sprite->image)
- region_add_area (region,
- sprite->old_x,
- sprite->old_y,
- sprite->old_width,
- sprite->old_height);
- ply_list_remove_node (data->sprite_list, node);
- script_obj_unref (sprite->image_obj);
- free (sprite);
+ for (node = ply_list_get_first_node (data->sprite_list);
+ node;
+ node = ply_list_get_next_node (data->sprite_list, node)) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ if (!sprite->image) continue;
+ if ((sprite->x != sprite->old_x)
+ || (sprite->y != sprite->old_y)
+ || (sprite->z != sprite->old_z)
+ || (fabs (sprite->old_opacity - sprite->opacity) > 0.01) /* People can't see the difference between */
+ || sprite->refresh_me) {
+ ply_rectangle_t size;
+ ply_pixel_buffer_get_size (sprite->image, &size);
+ region_add_area (region,
+ sprite->x,
+ sprite->y,
+ size.width,
+ size.height);
+ region_add_area (region,
+ sprite->old_x,
+ sprite->old_y,
+ sprite->old_width,
+ sprite->old_height);
+
+ sprite->old_x = sprite->x;
+ sprite->old_y = sprite->y;
+ sprite->old_z = sprite->z;
+ sprite->old_width = size.width;
+ sprite->old_height = size.height;
+ sprite->old_opacity = sprite->opacity;
+ sprite->refresh_me = false;
+ }
}
- node = next_node;
- }
-
- for (node = ply_list_get_first_node (data->sprite_list);
- node;
- node = ply_list_get_next_node (data->sprite_list, node))
- {
- sprite_t *sprite = ply_list_node_get_data (node);
- if (!sprite->image) continue;
- if ((sprite->x != sprite->old_x)
- || (sprite->y != sprite->old_y)
- || (sprite->z != sprite->old_z)
- || (fabs (sprite->old_opacity - sprite->opacity) > 0.01) /* People can't see the difference between */
- || sprite->refresh_me)
- {
- ply_rectangle_t size;
- ply_pixel_buffer_get_size (sprite->image, &size);
- region_add_area (region,
- sprite->x,
- sprite->y,
- size.width,
- size.height);
- region_add_area (region,
- sprite->old_x,
- sprite->old_y,
- sprite->old_width,
- sprite->old_height);
-
- sprite->old_x = sprite->x;
- sprite->old_y = sprite->y;
- sprite->old_z = sprite->z;
- sprite->old_width = size.width;
- sprite->old_height = size.height;
- sprite->old_opacity = sprite->opacity;
- sprite->refresh_me = false;
+
+ rectable_list = ply_region_get_rectangle_list (region);
+
+ for (node = ply_list_get_first_node (rectable_list);
+ node;
+ node = ply_list_get_next_node (rectable_list, node)) {
+ ply_rectangle_t *rectangle = ply_list_node_get_data (node);
+ draw_area (data,
+ rectangle->x,
+ rectangle->y,
+ rectangle->width,
+ rectangle->height);
}
- }
-
- rectable_list = ply_region_get_rectangle_list (region);
-
- for (node = ply_list_get_first_node (rectable_list);
- node;
- node = ply_list_get_next_node (rectable_list, node))
- {
- ply_rectangle_t *rectangle = ply_list_node_get_data (node);
- draw_area (data,
- rectangle->x,
- rectangle->y,
- rectangle->width,
- rectangle->height);
- }
-
- ply_region_free (region);
+
+ ply_region_free (region);
}
void script_lib_sprite_destroy (script_lib_sprite_data_t *data)
{
- ply_list_node_t *node;
-
- for (node = ply_list_get_first_node (data->displays);
- node;
- node = ply_list_get_next_node (data->displays, node))
- {
- script_lib_display_t* display = ply_list_node_get_data (node);
- ply_pixel_display_set_draw_handler (display->pixel_display, NULL, NULL);
- }
-
- node = ply_list_get_first_node (data->sprite_list);
-
- while (node)
- {
- sprite_t *sprite = ply_list_node_get_data (node);
- ply_list_node_t *next_node = ply_list_get_next_node (data->sprite_list,
- node);
- ply_list_remove_node (data->sprite_list, node);
- script_obj_unref (sprite->image_obj);
- free (sprite);
- node = next_node;
- }
-
- ply_list_free (data->sprite_list);
- script_parse_op_free (data->script_main_op);
- script_obj_native_class_destroy (data->class);
- free (data);
-}
+ ply_list_node_t *node;
+
+ for (node = ply_list_get_first_node (data->displays);
+ node;
+ node = ply_list_get_next_node (data->displays, node)) {
+ script_lib_display_t *display = ply_list_node_get_data (node);
+ ply_pixel_display_set_draw_handler (display->pixel_display, NULL, NULL);
+ }
+ node = ply_list_get_first_node (data->sprite_list);
+
+ while (node) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ ply_list_node_t *next_node = ply_list_get_next_node (data->sprite_list,
+ node);
+ ply_list_remove_node (data->sprite_list, node);
+ script_obj_unref (sprite->image_obj);
+ free (sprite);
+ node = next_node;
+ }
+
+ ply_list_free (data->sprite_list);
+ script_parse_op_free (data->script_main_op);
+ script_obj_native_class_destroy (data->class);
+ free (data);
+}
diff --git a/src/plugins/splash/script/script-lib-sprite.h b/src/plugins/splash/script/script-lib-sprite.h
index 0cb06817..55105c3d 100644
--- a/src/plugins/splash/script/script-lib-sprite.h
+++ b/src/plugins/splash/script/script-lib-sprite.h
@@ -28,39 +28,39 @@
typedef struct
{
- ply_list_t *displays;
- ply_list_t *sprite_list;
- script_obj_native_class_t *class;
- script_op_t *script_main_op;
- uint32_t background_color_start;
- uint32_t background_color_end;
- bool full_refresh;
+ ply_list_t *displays;
+ ply_list_t *sprite_list;
+ script_obj_native_class_t *class;
+ script_op_t *script_main_op;
+ uint32_t background_color_start;
+ uint32_t background_color_end;
+ bool full_refresh;
} script_lib_sprite_data_t;
typedef struct
{
- ply_pixel_display_t *pixel_display;
- script_lib_sprite_data_t *data;
- int x;
- int y;
+ ply_pixel_display_t *pixel_display;
+ script_lib_sprite_data_t *data;
+ int x;
+ int y;
} script_lib_display_t;
typedef struct
{
- int x;
- int y;
- int z;
- double opacity;
- int old_x;
- int old_y;
- int old_z;
- int old_width;
- int old_height;
- double old_opacity;
- bool refresh_me;
- bool remove_me;
- ply_pixel_buffer_t *image;
- script_obj_t *image_obj;
+ int x;
+ int y;
+ int z;
+ double opacity;
+ int old_x;
+ int old_y;
+ int old_z;
+ int old_width;
+ int old_height;
+ double old_opacity;
+ bool refresh_me;
+ bool remove_me;
+ ply_pixel_buffer_t *image;
+ script_obj_t *image_obj;
} sprite_t;
script_lib_sprite_data_t *script_lib_sprite_setup (script_state_t *state,
diff --git a/src/plugins/splash/script/script-lib-string.c b/src/plugins/splash/script/script-lib-string.c
index 0b836ebd..6fb5e7d7 100644
--- a/src/plugins/splash/script/script-lib-string.c
+++ b/src/plugins/splash/script/script-lib-string.c
@@ -39,91 +39,85 @@
static script_return_t script_lib_string_char_at (script_state_t *state,
void *user_data)
{
- char *text = script_obj_as_string (state->this);
- int index = script_obj_hash_get_number (state->local, "index");
- int count;
- char charstring [2];
-
- if (!text || index < 0)
- {
- free (text);
- return script_return_obj_null ();
- }
- for (count = 0; count < index; count++)
- {
- if (text[count] == '\0')
- {
- free (text);
- return script_return_obj(script_obj_new_string (""));
+ char *text = script_obj_as_string (state->this);
+ int index = script_obj_hash_get_number (state->local, "index");
+ int count;
+ char charstring [2];
+
+ if (!text || index < 0) {
+ free (text);
+ return script_return_obj_null ();
+ }
+ for (count = 0; count < index; count++) {
+ if (text[count] == '\0') {
+ free (text);
+ return script_return_obj (script_obj_new_string (""));
+ }
}
- }
- charstring[0] = text[index];
- charstring[1] = '\0';
- free (text);
- return script_return_obj(script_obj_new_string (charstring));
+ charstring[0] = text[index];
+ charstring[1] = '\0';
+ free (text);
+ return script_return_obj (script_obj_new_string (charstring));
}
static script_return_t script_lib_string_sub_string (script_state_t *state,
void *user_data)
{
- char *text = script_obj_as_string (state->this);
- int start = script_obj_hash_get_number (state->local, "start");
- int end = script_obj_hash_get_number (state->local, "end");
- int text_count;
- char* substring;
- script_obj_t *substring_obj;
+ char *text = script_obj_as_string (state->this);
+ int start = script_obj_hash_get_number (state->local, "start");
+ int end = script_obj_hash_get_number (state->local, "end");
+ int text_count;
+ char *substring;
+ script_obj_t *substring_obj;
- if (!text || start < 0 || end < start)
- {
- free (text);
- return script_return_obj_null ();
- }
+ if (!text || start < 0 || end < start) {
+ free (text);
+ return script_return_obj_null ();
+ }
- for (text_count = 0; text_count < start; text_count++)
- {
- if (text[text_count] == '\0')
- {
- free (text);
- return script_return_obj(script_obj_new_string (""));
+ for (text_count = 0; text_count < start; text_count++) {
+ if (text[text_count] == '\0') {
+ free (text);
+ return script_return_obj (script_obj_new_string (""));
+ }
}
- }
- substring = strndup(&text[text_count], end - start);
- substring_obj = script_obj_new_string (substring);
- free (substring);
- free (text);
- return script_return_obj(substring_obj);
+ substring = strndup (&text[text_count], end - start);
+ substring_obj = script_obj_new_string (substring);
+ free (substring);
+ free (text);
+ return script_return_obj (substring_obj);
}
script_lib_string_data_t *script_lib_string_setup (script_state_t *state)
{
- script_lib_string_data_t *data = malloc (sizeof (script_lib_string_data_t));
+ script_lib_string_data_t *data = malloc (sizeof(script_lib_string_data_t));
- script_obj_t *string_hash = script_obj_hash_get_element (state->global, "String");
- script_add_native_function (string_hash,
- "CharAt",
- script_lib_string_char_at,
- NULL,
- "index",
- NULL);
- script_add_native_function (string_hash,
- "SubString",
- script_lib_string_sub_string,
- NULL,
- "start",
- "end",
- NULL);
- script_obj_unref (string_hash);
- data->script_main_op = script_parse_string (script_lib_string_string, "script-lib-string.script");
- script_return_t ret = script_execute (state, data->script_main_op);
- script_obj_unref (ret.object);
+ script_obj_t *string_hash = script_obj_hash_get_element (state->global, "String");
- return data;
+ script_add_native_function (string_hash,
+ "CharAt",
+ script_lib_string_char_at,
+ NULL,
+ "index",
+ NULL);
+ script_add_native_function (string_hash,
+ "SubString",
+ script_lib_string_sub_string,
+ NULL,
+ "start",
+ "end",
+ NULL);
+ script_obj_unref (string_hash);
+ data->script_main_op = script_parse_string (script_lib_string_string, "script-lib-string.script");
+ script_return_t ret = script_execute (state, data->script_main_op);
+ script_obj_unref (ret.object);
+
+ return data;
}
void script_lib_string_destroy (script_lib_string_data_t *data)
{
- script_parse_op_free (data->script_main_op);
- free (data);
+ script_parse_op_free (data->script_main_op);
+ free (data);
}
-
diff --git a/src/plugins/splash/script/script-lib-string.h b/src/plugins/splash/script/script-lib-string.h
index 1ea6db89..642ac2e3 100644
--- a/src/plugins/splash/script/script-lib-string.h
+++ b/src/plugins/splash/script/script-lib-string.h
@@ -26,7 +26,7 @@
typedef struct
{
- script_op_t *script_main_op;
+ script_op_t *script_main_op;
} script_lib_string_data_t;
script_lib_string_data_t *script_lib_string_setup (script_state_t *state);
diff --git a/src/plugins/splash/script/script-object.c b/src/plugins/splash/script/script-object.c
index 7c16c94d..54b6d4c6 100644
--- a/src/plugins/splash/script/script-object.c
+++ b/src/plugins/splash/script/script-object.c
@@ -44,583 +44,570 @@ void script_obj_reset (script_obj_t *obj);
void script_obj_free (script_obj_t *obj)
{
- assert (!obj->refcount);
- script_obj_reset (obj);
- free (obj);
+ assert (!obj->refcount);
+ script_obj_reset (obj);
+ free (obj);
}
void script_obj_ref (script_obj_t *obj)
{
- obj->refcount++;
+ obj->refcount++;
}
void script_obj_unref (script_obj_t *obj)
{
- if (!obj) return;
- assert (obj->refcount > 0);
- obj->refcount--;
- if (obj->refcount <= 0)
- script_obj_free (obj);
+ if (!obj) return;
+ assert (obj->refcount > 0);
+ obj->refcount--;
+ if (obj->refcount <= 0)
+ script_obj_free (obj);
}
static void foreach_free_variable (void *key,
void *data,
void *user_data)
{
- script_variable_t *variable = data;
+ script_variable_t *variable = data;
- script_obj_unref (variable->object);
- free (variable->name);
- free (variable);
+ script_obj_unref (variable->object);
+ free (variable->name);
+ free (variable);
}
void script_obj_reset (script_obj_t *obj)
{
- switch (obj->type)
- {
- case SCRIPT_OBJ_TYPE_REF:
- script_obj_unref (obj->data.obj);
- break;
+ switch (obj->type) {
+ case SCRIPT_OBJ_TYPE_REF:
+ script_obj_unref (obj->data.obj);
+ break;
- case SCRIPT_OBJ_TYPE_EXTEND:
- script_obj_unref (obj->data.dual_obj.obj_a);
- script_obj_unref (obj->data.dual_obj.obj_b);
- break;
+ case SCRIPT_OBJ_TYPE_EXTEND:
+ script_obj_unref (obj->data.dual_obj.obj_a);
+ script_obj_unref (obj->data.dual_obj.obj_b);
+ break;
- case SCRIPT_OBJ_TYPE_NUMBER:
- break;
+ case SCRIPT_OBJ_TYPE_NUMBER:
+ break;
- case SCRIPT_OBJ_TYPE_STRING:
- free (obj->data.string);
- break;
+ case SCRIPT_OBJ_TYPE_STRING:
+ free (obj->data.string);
+ break;
- case SCRIPT_OBJ_TYPE_HASH: /* FIXME nightmare */
- ply_hashtable_foreach (obj->data.hash, foreach_free_variable, NULL);
- ply_hashtable_free (obj->data.hash);
- break;
+ case SCRIPT_OBJ_TYPE_HASH: /* FIXME nightmare */
+ ply_hashtable_foreach (obj->data.hash, foreach_free_variable, NULL);
+ ply_hashtable_free (obj->data.hash);
+ break;
- case SCRIPT_OBJ_TYPE_FUNCTION:
+ case SCRIPT_OBJ_TYPE_FUNCTION:
{
- if (obj->data.function->freeable)
- {
- ply_list_node_t *node;
- for (node =
- ply_list_get_first_node (obj->data.function->parameters);
- node;
- node =
- ply_list_get_next_node (obj->data.function->parameters,
- node))
- {
- char *operand = ply_list_node_get_data (node);
- free (operand);
+ if (obj->data.function->freeable) {
+ ply_list_node_t *node;
+ for (node =
+ ply_list_get_first_node (obj->data.function->parameters);
+ node;
+ node =
+ ply_list_get_next_node (obj->data.function->parameters,
+ node)) {
+ char *operand = ply_list_node_get_data (node);
+ free (operand);
+ }
+ ply_list_free (obj->data.function->parameters);
+ free (obj->data.function);
}
- ply_list_free (obj->data.function->parameters);
- free (obj->data.function);
- }
}
break;
- case SCRIPT_OBJ_TYPE_NATIVE:
- if (obj->data.native.class->free_func)
- obj->data.native.class->free_func (obj);
- break;
+ case SCRIPT_OBJ_TYPE_NATIVE:
+ if (obj->data.native.class->free_func)
+ obj->data.native.class->free_func (obj);
+ break;
- case SCRIPT_OBJ_TYPE_NULL:
- break;
- }
- obj->type = SCRIPT_OBJ_TYPE_NULL;
+ case SCRIPT_OBJ_TYPE_NULL:
+ break;
+ }
+ obj->type = SCRIPT_OBJ_TYPE_NULL;
}
script_obj_t *script_obj_deref_direct (script_obj_t *obj)
{
- while (obj->type == SCRIPT_OBJ_TYPE_REF)
- obj = obj->data.obj;
- return obj;
+ while (obj->type == SCRIPT_OBJ_TYPE_REF) {
+ obj = obj->data.obj;
+ }
+ return obj;
}
void script_obj_deref (script_obj_t **obj_ptr)
{
- script_obj_t *obj = *obj_ptr;
+ script_obj_t *obj = *obj_ptr;
- obj = script_obj_deref_direct (obj);
- script_obj_ref (obj);
- script_obj_unref (*obj_ptr);
- *obj_ptr = obj;
+ obj = script_obj_deref_direct (obj);
+ script_obj_ref (obj);
+ script_obj_unref (*obj_ptr);
+ *obj_ptr = obj;
}
script_obj_t *script_obj_new_null (void)
{
- script_obj_t *obj = malloc (sizeof (script_obj_t));
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
- obj->type = SCRIPT_OBJ_TYPE_NULL;
- obj->refcount = 1;
- return obj;
+ obj->type = SCRIPT_OBJ_TYPE_NULL;
+ obj->refcount = 1;
+ return obj;
}
script_obj_t *script_obj_new_number (script_number_t number)
{
- script_obj_t *obj = malloc (sizeof (script_obj_t));
- obj->type = SCRIPT_OBJ_TYPE_NUMBER;
- obj->refcount = 1;
- obj->data.number = number;
- return obj;
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
+
+ obj->type = SCRIPT_OBJ_TYPE_NUMBER;
+ obj->refcount = 1;
+ obj->data.number = number;
+ return obj;
}
script_obj_t *script_obj_new_string (const char *string)
{
- if (!string) return script_obj_new_null ();
- script_obj_t *obj = malloc (sizeof (script_obj_t));
- obj->type = SCRIPT_OBJ_TYPE_STRING;
- obj->refcount = 1;
- obj->data.string = strdup (string);
- return obj;
+ if (!string) return script_obj_new_null ();
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
+ obj->type = SCRIPT_OBJ_TYPE_STRING;
+ obj->refcount = 1;
+ obj->data.string = strdup (string);
+ return obj;
}
script_obj_t *script_obj_new_hash (void)
{
- script_obj_t *obj = malloc (sizeof (script_obj_t));
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
- obj->type = SCRIPT_OBJ_TYPE_HASH;
- obj->data.hash = ply_hashtable_new (ply_hashtable_string_hash,
- ply_hashtable_string_compare);
- obj->refcount = 1;
- return obj;
+ obj->type = SCRIPT_OBJ_TYPE_HASH;
+ obj->data.hash = ply_hashtable_new (ply_hashtable_string_hash,
+ ply_hashtable_string_compare);
+ obj->refcount = 1;
+ return obj;
}
script_obj_t *script_obj_new_function (script_function_t *function)
{
- script_obj_t *obj = malloc (sizeof (script_obj_t));
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
- obj->type = SCRIPT_OBJ_TYPE_FUNCTION;
- obj->data.function = function;
- obj->refcount = 1;
- return obj;
+ obj->type = SCRIPT_OBJ_TYPE_FUNCTION;
+ obj->data.function = function;
+ obj->refcount = 1;
+ return obj;
}
script_obj_t *script_obj_new_ref (script_obj_t *sub_obj)
{
- script_obj_t *obj = malloc (sizeof (script_obj_t));
- sub_obj = script_obj_deref_direct (sub_obj);
- script_obj_ref (sub_obj);
- obj->type = SCRIPT_OBJ_TYPE_REF;
- obj->data.obj = sub_obj;
- obj->refcount = 1;
- return obj;
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
+
+ sub_obj = script_obj_deref_direct (sub_obj);
+ script_obj_ref (sub_obj);
+ obj->type = SCRIPT_OBJ_TYPE_REF;
+ obj->data.obj = sub_obj;
+ obj->refcount = 1;
+ return obj;
}
script_obj_t *script_obj_new_extend (script_obj_t *obj_a, script_obj_t *obj_b)
{
- script_obj_t *obj = malloc (sizeof (script_obj_t));
- obj_a = script_obj_deref_direct (obj_a);
- obj_b = script_obj_deref_direct (obj_b);
- script_obj_ref (obj_a);
- script_obj_ref (obj_b);
- obj->type = SCRIPT_OBJ_TYPE_EXTEND;
- obj->data.dual_obj.obj_a = obj_a;
- obj->data.dual_obj.obj_b = obj_b;
- obj->refcount = 1;
- return obj;
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
+
+ obj_a = script_obj_deref_direct (obj_a);
+ obj_b = script_obj_deref_direct (obj_b);
+ script_obj_ref (obj_a);
+ script_obj_ref (obj_b);
+ obj->type = SCRIPT_OBJ_TYPE_EXTEND;
+ obj->data.dual_obj.obj_a = obj_a;
+ obj->data.dual_obj.obj_b = obj_b;
+ obj->refcount = 1;
+ return obj;
}
script_obj_t *script_obj_new_native (void *object_data,
script_obj_native_class_t *class)
{
- if (!object_data) return script_obj_new_null ();
- script_obj_t *obj = malloc (sizeof (script_obj_t));
- obj->type = SCRIPT_OBJ_TYPE_NATIVE;
- obj->data.native.class = class;
- obj->data.native.object_data = object_data;
- obj->refcount = 1;
- return obj;
-}
-
-void *script_obj_as_custom (script_obj_t *obj,
- script_obj_direct_func_t user_func,
- void *user_data)
-{
- obj = script_obj_deref_direct (obj);
- void *reply = user_func(obj, user_data);
- if (reply) return reply;
- if (obj->type == SCRIPT_OBJ_TYPE_EXTEND)
- {
- reply = script_obj_as_custom(obj->data.dual_obj.obj_a, user_func, user_data);
- if (reply) return reply;
- reply = script_obj_as_custom(obj->data.dual_obj.obj_b, user_func, user_data);
- if (reply) return reply;
- }
- return NULL;
-}
-
-script_obj_t *script_obj_as_obj_type (script_obj_t *obj,
- script_obj_type_t type)
-{
- obj = script_obj_deref_direct (obj);
- if (obj->type == type) return obj;
- if (obj->type == SCRIPT_OBJ_TYPE_EXTEND)
- {
- script_obj_t *reply;
- reply = script_obj_as_obj_type(obj->data.dual_obj.obj_a, type);
- if (reply) return reply;
- reply = script_obj_as_obj_type(obj->data.dual_obj.obj_b, type);
- if (reply) return reply;
- }
- return NULL;
+ if (!object_data) return script_obj_new_null ();
+ script_obj_t *obj = malloc (sizeof(script_obj_t));
+ obj->type = SCRIPT_OBJ_TYPE_NATIVE;
+ obj->data.native.class = class;
+ obj->data.native.object_data = object_data;
+ obj->refcount = 1;
+ return obj;
+}
+
+void *script_obj_as_custom (script_obj_t *obj,
+ script_obj_direct_func_t user_func,
+ void *user_data)
+{
+ obj = script_obj_deref_direct (obj);
+ void *reply = user_func (obj, user_data);
+ if (reply) return reply;
+ if (obj->type == SCRIPT_OBJ_TYPE_EXTEND) {
+ reply = script_obj_as_custom (obj->data.dual_obj.obj_a, user_func, user_data);
+ if (reply) return reply;
+ reply = script_obj_as_custom (obj->data.dual_obj.obj_b, user_func, user_data);
+ if (reply) return reply;
+ }
+ return NULL;
+}
+
+script_obj_t *script_obj_as_obj_type (script_obj_t *obj,
+ script_obj_type_t type)
+{
+ obj = script_obj_deref_direct (obj);
+ if (obj->type == type) return obj;
+ if (obj->type == SCRIPT_OBJ_TYPE_EXTEND) {
+ script_obj_t *reply;
+ reply = script_obj_as_obj_type (obj->data.dual_obj.obj_a, type);
+ if (reply) return reply;
+ reply = script_obj_as_obj_type (obj->data.dual_obj.obj_b, type);
+ if (reply) return reply;
+ }
+ return NULL;
}
script_number_t script_obj_as_number (script_obj_t *obj)
{ /* If in then reply contents, otherwise reply NAN */
- obj = script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NUMBER);
- if (obj) return obj->data.number;
- return NAN;
+ obj = script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NUMBER);
+ if (obj) return obj->data.number;
+ return NAN;
}
static void *script_obj_direct_as_bool (script_obj_t *obj,
void *user_data)
{ /* False objects are NULL, 0, NAN, "" */
- switch (obj->type)
- {
- case SCRIPT_OBJ_TYPE_NUMBER:
+ switch (obj->type) {
+ case SCRIPT_OBJ_TYPE_NUMBER:
{
- int num_type = fpclassify(obj->data.number);
- if (num_type == FP_ZERO || num_type == FP_NAN) return NULL;
- return obj;
+ int num_type = fpclassify (obj->data.number);
+ if (num_type == FP_ZERO || num_type == FP_NAN) return NULL;
+ return obj;
+ }
+ case SCRIPT_OBJ_TYPE_NULL:
+ case SCRIPT_OBJ_TYPE_REF:
+ case SCRIPT_OBJ_TYPE_EXTEND:
+ return NULL;
+ case SCRIPT_OBJ_TYPE_HASH:
+ case SCRIPT_OBJ_TYPE_FUNCTION:
+ case SCRIPT_OBJ_TYPE_NATIVE:
+ return obj;
+ case SCRIPT_OBJ_TYPE_STRING:
+ if (*obj->data.string) return obj;
+ return NULL;
}
- case SCRIPT_OBJ_TYPE_NULL:
- case SCRIPT_OBJ_TYPE_REF:
- case SCRIPT_OBJ_TYPE_EXTEND:
- return NULL;
- case SCRIPT_OBJ_TYPE_HASH:
- case SCRIPT_OBJ_TYPE_FUNCTION:
- case SCRIPT_OBJ_TYPE_NATIVE:
- return obj;
- case SCRIPT_OBJ_TYPE_STRING:
- if (*obj->data.string) return obj;
return NULL;
- }
- return NULL;
}
bool script_obj_as_bool (script_obj_t *obj)
{
- return script_obj_as_custom(obj, script_obj_direct_as_bool, NULL);
+ return script_obj_as_custom (obj, script_obj_direct_as_bool, NULL);
}
char *script_obj_as_string (script_obj_t *obj) /* reply is strdupped and may be NULL */
{
- char *reply;
- script_obj_t *string_obj = script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_STRING);
- if (string_obj) return strdup (string_obj->data.string);
- string_obj = script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NUMBER);
- if (string_obj)
- {
- asprintf (&reply, "%g", string_obj->data.number);
+ char *reply;
+ script_obj_t *string_obj = script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_STRING);
+
+ if (string_obj) return strdup (string_obj->data.string);
+ string_obj = script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NUMBER);
+ if (string_obj) {
+ asprintf (&reply, "%g", string_obj->data.number);
+ return reply;
+ }
+ if (script_obj_is_null (obj))
+ return strdup ("#NULL");
+ asprintf (&reply, "#(0x%p)", obj);
return reply;
- }
- if (script_obj_is_null (obj))
- return strdup("#NULL");
- asprintf (&reply, "#(0x%p)", obj);
- return reply;
}
static void *script_obj_direct_as_native_of_class (script_obj_t *obj,
void *user_data)
{
- script_obj_native_class_t *class = user_data;
- if (obj->type == SCRIPT_OBJ_TYPE_NATIVE && obj->data.native.class == class)
- return obj->data.native.object_data;
- return NULL;
+ script_obj_native_class_t *class = user_data;
+
+ if (obj->type == SCRIPT_OBJ_TYPE_NATIVE && obj->data.native.class == class)
+ return obj->data.native.object_data;
+ return NULL;
}
void *script_obj_as_native_of_class (script_obj_t *obj,
script_obj_native_class_t *class)
{
- return script_obj_as_custom(obj, script_obj_direct_as_native_of_class, class);
+ return script_obj_as_custom (obj, script_obj_direct_as_native_of_class, class);
}
static void *script_obj_direct_as_native_of_class_name (script_obj_t *obj,
void *user_data)
{
- const char *class_name = user_data;
- if (obj->type == SCRIPT_OBJ_TYPE_NATIVE &&
- !strcmp (obj->data.native.class->name, class_name))
- return obj->data.native.object_data;
- return NULL;
+ const char *class_name = user_data;
+
+ if (obj->type == SCRIPT_OBJ_TYPE_NATIVE &&
+ !strcmp (obj->data.native.class->name, class_name))
+ return obj->data.native.object_data;
+ return NULL;
}
void *script_obj_as_native_of_class_name (script_obj_t *obj,
const char *class_name)
{
- return script_obj_as_custom(obj,
- script_obj_direct_as_native_of_class_name,
- (void*) class_name);
+ return script_obj_as_custom (obj,
+ script_obj_direct_as_native_of_class_name,
+ (void *) class_name);
}
bool script_obj_is_null (script_obj_t *obj)
{
- return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NULL);
+ return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NULL);
}
bool script_obj_is_number (script_obj_t *obj)
{
- return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NUMBER);
+ return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NUMBER);
}
bool script_obj_is_string (script_obj_t *obj)
{
- return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_STRING);
+ return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_STRING);
}
bool script_obj_is_hash (script_obj_t *obj)
{
- return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_HASH);
+ return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_HASH);
}
bool script_obj_is_native (script_obj_t *obj)
{
- return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NATIVE);
+ return script_obj_as_obj_type (obj, SCRIPT_OBJ_TYPE_NATIVE);
}
bool script_obj_is_native_of_class (script_obj_t *obj,
script_obj_native_class_t *class)
{
- return script_obj_as_custom(obj,
- script_obj_direct_as_native_of_class,
- class);
+ return script_obj_as_custom (obj,
+ script_obj_direct_as_native_of_class,
+ class);
}
bool script_obj_is_native_of_class_name (script_obj_t *obj,
const char *class_name)
{
- return script_obj_as_custom(obj,
- script_obj_direct_as_native_of_class_name,
- (void*)class_name);
+ return script_obj_as_custom (obj,
+ script_obj_direct_as_native_of_class_name,
+ (void *) class_name);
}
void script_obj_assign (script_obj_t *obj_a,
script_obj_t *obj_b)
{
- obj_b = script_obj_deref_direct (obj_b);
- script_obj_ref (obj_b);
- script_obj_reset (obj_a);
- obj_a->type = SCRIPT_OBJ_TYPE_REF;
- obj_a->data.obj = obj_b;
+ obj_b = script_obj_deref_direct (obj_b);
+ script_obj_ref (obj_b);
+ script_obj_reset (obj_a);
+ obj_a->type = SCRIPT_OBJ_TYPE_REF;
+ obj_a->data.obj = obj_b;
}
static void *script_obj_direct_as_hash_element (script_obj_t *obj,
void *user_data)
{
- const char *name = user_data;
- if (obj->type == SCRIPT_OBJ_TYPE_HASH)
- {
- script_variable_t *variable = ply_hashtable_lookup (obj->data.hash, (void *) name);
- if (variable)
- return variable->object;
- }
- return NULL;
+ const char *name = user_data;
+
+ if (obj->type == SCRIPT_OBJ_TYPE_HASH) {
+ script_variable_t *variable = ply_hashtable_lookup (obj->data.hash, (void *) name);
+ if (variable)
+ return variable->object;
+ }
+ return NULL;
}
script_obj_t *script_obj_hash_peek_element (script_obj_t *hash,
const char *name)
{
- script_obj_t *object;
- if (!name) return script_obj_new_null ();
- object = script_obj_as_custom(hash,
- script_obj_direct_as_hash_element,
- (void*) name);
- if (object) script_obj_ref (object);
- return object;
+ script_obj_t *object;
+
+ if (!name) return script_obj_new_null ();
+ object = script_obj_as_custom (hash,
+ script_obj_direct_as_hash_element,
+ (void *) name);
+ if (object) script_obj_ref (object);
+ return object;
}
script_obj_t *script_obj_hash_get_element (script_obj_t *hash,
const char *name)
{
- script_obj_t *obj = script_obj_hash_peek_element (hash, name);
- if (obj) return obj;
- script_obj_t *realhash = script_obj_as_obj_type (hash, SCRIPT_OBJ_TYPE_HASH);
- if (!realhash)
- {
- realhash = script_obj_new_hash(); /* If it wasn't a hash then make it into one */
- script_obj_assign (hash, realhash);
- }
- script_variable_t *variable = malloc (sizeof (script_variable_t));
- variable->name = strdup (name);
- variable->object = script_obj_new_null ();
- ply_hashtable_insert (realhash->data.hash, variable->name, variable);
- script_obj_ref (variable->object);
- return variable->object;
+ script_obj_t *obj = script_obj_hash_peek_element (hash, name);
+
+ if (obj) return obj;
+ script_obj_t *realhash = script_obj_as_obj_type (hash, SCRIPT_OBJ_TYPE_HASH);
+ if (!realhash) {
+ realhash = script_obj_new_hash (); /* If it wasn't a hash then make it into one */
+ script_obj_assign (hash, realhash);
+ }
+ script_variable_t *variable = malloc (sizeof(script_variable_t));
+ variable->name = strdup (name);
+ variable->object = script_obj_new_null ();
+ ply_hashtable_insert (realhash->data.hash, variable->name, variable);
+ script_obj_ref (variable->object);
+ return variable->object;
}
script_number_t script_obj_hash_get_number (script_obj_t *hash,
const char *name)
{
- script_obj_t *obj = script_obj_hash_get_element (hash, name);
- script_number_t reply = script_obj_as_number (obj);
+ script_obj_t *obj = script_obj_hash_get_element (hash, name);
+ script_number_t reply = script_obj_as_number (obj);
- script_obj_unref (obj);
- return reply;
+ script_obj_unref (obj);
+ return reply;
}
bool script_obj_hash_get_bool (script_obj_t *hash,
const char *name)
{
- script_obj_t *obj = script_obj_hash_get_element (hash, name);
- bool reply = script_obj_as_bool (obj);
+ script_obj_t *obj = script_obj_hash_get_element (hash, name);
+ bool reply = script_obj_as_bool (obj);
- script_obj_unref (obj);
- return reply;
+ script_obj_unref (obj);
+ return reply;
}
char *script_obj_hash_get_string (script_obj_t *hash,
const char *name)
{
- script_obj_t *obj = script_obj_hash_get_element (hash, name);
- char *reply = script_obj_as_string (obj);
+ script_obj_t *obj = script_obj_hash_get_element (hash, name);
+ char *reply = script_obj_as_string (obj);
- script_obj_unref (obj);
- return reply;
+ script_obj_unref (obj);
+ return reply;
}
void *script_obj_hash_get_native_of_class (script_obj_t *hash,
const char *name,
script_obj_native_class_t *class)
{
- script_obj_t *obj = script_obj_hash_get_element (hash, name);
- void *reply = script_obj_as_native_of_class (obj, class);
+ script_obj_t *obj = script_obj_hash_get_element (hash, name);
+ void *reply = script_obj_as_native_of_class (obj, class);
- script_obj_unref (obj);
- return reply;
+ script_obj_unref (obj);
+ return reply;
}
void *script_obj_hash_get_native_of_class_name (script_obj_t *hash,
const char *name,
const char *class_name)
{
- script_obj_t *obj = script_obj_hash_get_element (hash, name);
- void *reply = script_obj_as_native_of_class_name (obj, class_name);
+ script_obj_t *obj = script_obj_hash_get_element (hash, name);
+ void *reply = script_obj_as_native_of_class_name (obj, class_name);
- script_obj_unref (obj);
- return reply;
+ script_obj_unref (obj);
+ return reply;
}
void script_obj_hash_add_element (script_obj_t *hash,
script_obj_t *element,
const char *name)
{
- script_obj_t *obj = script_obj_hash_get_element (hash, name);
- script_obj_assign (obj, element);
- script_obj_unref (obj);
+ script_obj_t *obj = script_obj_hash_get_element (hash, name);
+
+ script_obj_assign (obj, element);
+ script_obj_unref (obj);
}
script_obj_t *script_obj_plus (script_obj_t *script_obj_a,
script_obj_t *script_obj_b)
{
- if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
- {
- script_number_t value = script_obj_as_number (script_obj_a) + script_obj_as_number (script_obj_b);
- return script_obj_new_number (value);
- }
- if (script_obj_is_string (script_obj_a) || script_obj_is_string (script_obj_b))
- {
- script_obj_t *obj;
- char *string_a = script_obj_as_string (script_obj_a);
- char *string_b = script_obj_as_string (script_obj_b);
- if (string_a && string_b)
- {
- char *newstring;
- asprintf (&newstring, "%s%s", string_a, string_b);
- obj = script_obj_new_string (newstring);
- free (newstring);
+ if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b)) {
+ script_number_t value = script_obj_as_number (script_obj_a) + script_obj_as_number (script_obj_b);
+ return script_obj_new_number (value);
}
- else
- obj = script_obj_new_null ();
- free (string_a);
- free (string_b);
- return obj;
- }
- return script_obj_new_null ();
+ if (script_obj_is_string (script_obj_a) || script_obj_is_string (script_obj_b)) {
+ script_obj_t *obj;
+ char *string_a = script_obj_as_string (script_obj_a);
+ char *string_b = script_obj_as_string (script_obj_b);
+ if (string_a && string_b) {
+ char *newstring;
+ asprintf (&newstring, "%s%s", string_a, string_b);
+ obj = script_obj_new_string (newstring);
+ free (newstring);
+ } else {
+ obj = script_obj_new_null ();
+ }
+ free (string_a);
+ free (string_b);
+ return obj;
+ }
+ return script_obj_new_null ();
}
script_obj_t *script_obj_minus (script_obj_t *script_obj_a,
script_obj_t *script_obj_b)
{
- if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
- {
- script_number_t value = script_obj_as_number (script_obj_a) - script_obj_as_number (script_obj_b);
- return script_obj_new_number (value);
- }
- return script_obj_new_null ();
+ if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b)) {
+ script_number_t value = script_obj_as_number (script_obj_a) - script_obj_as_number (script_obj_b);
+ return script_obj_new_number (value);
+ }
+ return script_obj_new_null ();
}
script_obj_t *script_obj_mul (script_obj_t *script_obj_a,
script_obj_t *script_obj_b)
{
- if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
- {
- script_number_t value = script_obj_as_number (script_obj_a) * script_obj_as_number (script_obj_b);
- return script_obj_new_number (value);
- }
- return script_obj_new_null ();
+ if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b)) {
+ script_number_t value = script_obj_as_number (script_obj_a) * script_obj_as_number (script_obj_b);
+ return script_obj_new_number (value);
+ }
+ return script_obj_new_null ();
}
script_obj_t *script_obj_div (script_obj_t *script_obj_a,
script_obj_t *script_obj_b)
{
- if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
- {
- script_number_t value = script_obj_as_number (script_obj_a) / script_obj_as_number (script_obj_b);
- return script_obj_new_number (value);
- }
- return script_obj_new_null ();
+ if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b)) {
+ script_number_t value = script_obj_as_number (script_obj_a) / script_obj_as_number (script_obj_b);
+ return script_obj_new_number (value);
+ }
+ return script_obj_new_null ();
}
script_obj_t *script_obj_mod (script_obj_t *script_obj_a,
script_obj_t *script_obj_b)
{
- if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
- {
- script_number_t value = fmodl (script_obj_as_number (script_obj_a), script_obj_as_number (script_obj_b));
- return script_obj_new_number (value);
- }
- return script_obj_new_null ();
+ if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b)) {
+ script_number_t value = fmodl (script_obj_as_number (script_obj_a), script_obj_as_number (script_obj_b));
+ return script_obj_new_number (value);
+ }
+ return script_obj_new_null ();
}
script_obj_cmp_result_t script_obj_cmp (script_obj_t *script_obj_a,
script_obj_t *script_obj_b)
{
- if (script_obj_is_null (script_obj_a) && script_obj_is_null (script_obj_b))
- {
- return SCRIPT_OBJ_CMP_RESULT_EQ;
- }
- else if (script_obj_is_number (script_obj_a))
- {
- if (script_obj_is_number (script_obj_b))
- {
- script_number_t num_a = script_obj_as_number (script_obj_a);
- script_number_t num_b = script_obj_as_number (script_obj_b);
-
- if (num_a < num_b) return SCRIPT_OBJ_CMP_RESULT_LT;
- if (num_a > num_b) return SCRIPT_OBJ_CMP_RESULT_GT;
- if (num_a == num_b) return SCRIPT_OBJ_CMP_RESULT_EQ;
- return SCRIPT_OBJ_CMP_RESULT_NE;
- }
- }
- else if (script_obj_is_string (script_obj_a))
- {
- if (script_obj_is_string (script_obj_b))
- {
- char* string_a = script_obj_as_string (script_obj_a);
- char* string_b = script_obj_as_string (script_obj_b);
- int diff = strcmp (string_a, string_b);
- free(string_a);
- free(string_b);
- if (diff < 0) return SCRIPT_OBJ_CMP_RESULT_LT;
- if (diff > 0) return SCRIPT_OBJ_CMP_RESULT_GT;
- return SCRIPT_OBJ_CMP_RESULT_EQ;
+ if (script_obj_is_null (script_obj_a) && script_obj_is_null (script_obj_b)) {
+ return SCRIPT_OBJ_CMP_RESULT_EQ;
+ } else if (script_obj_is_number (script_obj_a)) {
+ if (script_obj_is_number (script_obj_b)) {
+ script_number_t num_a = script_obj_as_number (script_obj_a);
+ script_number_t num_b = script_obj_as_number (script_obj_b);
+
+ if (num_a < num_b) return SCRIPT_OBJ_CMP_RESULT_LT;
+ if (num_a > num_b) return SCRIPT_OBJ_CMP_RESULT_GT;
+ if (num_a == num_b) return SCRIPT_OBJ_CMP_RESULT_EQ;
+ return SCRIPT_OBJ_CMP_RESULT_NE;
+ }
+ } else if (script_obj_is_string (script_obj_a)) {
+ if (script_obj_is_string (script_obj_b)) {
+ char *string_a = script_obj_as_string (script_obj_a);
+ char *string_b = script_obj_as_string (script_obj_b);
+ int diff = strcmp (string_a, string_b);
+ free (string_a);
+ free (string_b);
+ if (diff < 0) return SCRIPT_OBJ_CMP_RESULT_LT;
+ if (diff > 0) return SCRIPT_OBJ_CMP_RESULT_GT;
+ return SCRIPT_OBJ_CMP_RESULT_EQ;
+ }
+ } else if (script_obj_deref_direct (script_obj_a) == script_obj_deref_direct (script_obj_b)) {
+ return SCRIPT_OBJ_CMP_RESULT_EQ;
}
- }
- else if (script_obj_deref_direct (script_obj_a) == script_obj_deref_direct (script_obj_b))
- return SCRIPT_OBJ_CMP_RESULT_EQ;
- return SCRIPT_OBJ_CMP_RESULT_NE;
+ return SCRIPT_OBJ_CMP_RESULT_NE;
}
-
diff --git a/src/plugins/splash/script/script-object.h b/src/plugins/splash/script/script-object.h
index 8d5981b4..9c9bf1c8 100644
--- a/src/plugins/splash/script/script-object.h
+++ b/src/plugins/splash/script/script-object.h
@@ -28,14 +28,15 @@
typedef enum
{
- SCRIPT_OBJ_CMP_RESULT_EQ = 1<<1,
- SCRIPT_OBJ_CMP_RESULT_GT = 1<<2,
- SCRIPT_OBJ_CMP_RESULT_LT = 1<<3,
- SCRIPT_OBJ_CMP_RESULT_NE = 1<<4,
+ SCRIPT_OBJ_CMP_RESULT_EQ = 1 << 1,
+ SCRIPT_OBJ_CMP_RESULT_GT = 1 << 2,
+ SCRIPT_OBJ_CMP_RESULT_LT = 1 << 3,
+ SCRIPT_OBJ_CMP_RESULT_NE = 1 << 4,
} script_obj_cmp_result_t;
-typedef void *(*script_obj_direct_func_t)(script_obj_t *, void *);
+typedef void *(*script_obj_direct_func_t)(script_obj_t *,
+ void *);
void script_obj_free (script_obj_t *obj);
@@ -50,20 +51,21 @@ script_obj_t *script_obj_new_null (void);
script_obj_t *script_obj_new_hash (void);
script_obj_t *script_obj_new_function (script_function_t *function);
script_obj_t *script_obj_new_ref (script_obj_t *sub_obj);
-script_obj_t *script_obj_new_extend (script_obj_t *obj_a, script_obj_t *obj_b);
+script_obj_t *script_obj_new_extend (script_obj_t *obj_a,
+ script_obj_t *obj_b);
-script_obj_t *script_obj_new_native (void *object_data,
- script_obj_native_class_t *class );
-void *script_obj_as_custom (script_obj_t *obj,
- script_obj_direct_func_t user_func,
- void *user_data);
-script_obj_t *script_obj_as_obj_type (script_obj_t *obj,
- script_obj_type_t type);
+script_obj_t *script_obj_new_native (void *object_data,
+ script_obj_native_class_t *class);
+void *script_obj_as_custom (script_obj_t *obj,
+ script_obj_direct_func_t user_func,
+ void *user_data);
+script_obj_t *script_obj_as_obj_type (script_obj_t *obj,
+ script_obj_type_t type);
script_number_t script_obj_as_number (script_obj_t *obj);
bool script_obj_as_bool (script_obj_t *obj);
char *script_obj_as_string (script_obj_t *obj);
void *script_obj_as_native_of_class (script_obj_t *obj,
- script_obj_native_class_t *class );
+ script_obj_native_class_t *class);
void *script_obj_as_native_of_class_name (script_obj_t *obj,
const char *class_name);
bool script_obj_is_null (script_obj_t *obj);
@@ -72,8 +74,8 @@ bool script_obj_is_string (script_obj_t *obj);
bool script_obj_is_hash (script_obj_t *obj);
bool script_obj_is_native (script_obj_t *obj);
-bool script_obj_is_native_of_class (script_obj_t * obj,
- script_obj_native_class_t *class );
+bool script_obj_is_native_of_class (script_obj_t *obj,
+ script_obj_native_class_t *class);
bool script_obj_is_native_of_class_name (script_obj_t *obj,
const char *class_name);
void script_obj_assign (script_obj_t *obj_a,
@@ -88,9 +90,9 @@ bool script_obj_hash_get_bool (script_obj_t *hash,
const char *name);
char *script_obj_hash_get_string (script_obj_t *hash,
const char *name);
-void *script_obj_hash_get_native_of_class (script_obj_t *hash,
- const char *name,
- script_obj_native_class_t *class );
+void *script_obj_hash_get_native_of_class (script_obj_t *hash,
+ const char *name,
+ script_obj_native_class_t *class);
void *script_obj_hash_get_native_of_class_name (script_obj_t *hash,
const char *name,
const char *class_name);
diff --git a/src/plugins/splash/script/script-parse.c b/src/plugins/splash/script/script-parse.c
index 4adf2737..a4c7656e 100644
--- a/src/plugins/splash/script/script-parse.c
+++ b/src/plugins/splash/script/script-parse.c
@@ -45,9 +45,9 @@
typedef struct
{
- const char *symbol;
- script_exp_type_t exp_type;
- int presedence;
+ const char *symbol;
+ script_exp_type_t exp_type;
+ int presedence;
}script_parse_operator_table_entry_t;
static script_op_t *script_parse_op (script_scan_t *scan);
@@ -58,19 +58,21 @@ static void script_parse_op_list_free (ply_list_t *op_list);
static script_exp_t *script_parse_new_exp (script_exp_type_t type,
script_debug_location_t *location)
{
- script_exp_t *exp = malloc (sizeof (script_exp_t));
- exp->type = type;
- script_debug_add_element (exp, location);
- return exp;
+ script_exp_t *exp = malloc (sizeof(script_exp_t));
+
+ exp->type = type;
+ script_debug_add_element (exp, location);
+ return exp;
}
static script_exp_t *script_parse_new_exp_single (script_exp_type_t type,
script_exp_t *sub,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(type, location);
- exp->data.sub = sub;
- return exp;
+ script_exp_t *exp = script_parse_new_exp (type, location);
+
+ exp->data.sub = sub;
+ return exp;
}
static script_exp_t *script_parse_new_exp_dual (script_exp_type_t type,
@@ -78,85 +80,95 @@ static script_exp_t *script_parse_new_exp_dual (script_exp_type_t type,
script_exp_t *sub_b,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(type, location);
- exp->data.dual.sub_a = sub_a;
- exp->data.dual.sub_b = sub_b;
- return exp;
+ script_exp_t *exp = script_parse_new_exp (type, location);
+
+ exp->data.dual.sub_a = sub_a;
+ exp->data.dual.sub_b = sub_b;
+ return exp;
}
static script_exp_t *script_parse_new_exp_number (script_number_t number,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_NUMBER, location);
- exp->data.number = number;
- return exp;
+ script_exp_t *exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_NUMBER, location);
+
+ exp->data.number = number;
+ return exp;
}
static script_exp_t *script_parse_new_exp_string (char *string,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_STRING, location);
- exp->data.string = strdup(string);
- return exp;
+ script_exp_t *exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_STRING, location);
+
+ exp->data.string = strdup (string);
+ return exp;
}
static script_exp_t *script_parse_new_exp_var (char *string,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_VAR, location);
- exp->data.string = strdup(string);
- return exp;
+ script_exp_t *exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_VAR, location);
+
+ exp->data.string = strdup (string);
+ return exp;
}
static script_exp_t *script_parse_new_exp_function_exe (script_exp_t *name,
ply_list_t *parameters,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_FUNCTION_EXE, location);
- exp->data.function_exe.name = name;
- exp->data.function_exe.parameters = parameters;
- return exp;
+ script_exp_t *exp = script_parse_new_exp (SCRIPT_EXP_TYPE_FUNCTION_EXE, location);
+
+ exp->data.function_exe.name = name;
+ exp->data.function_exe.parameters = parameters;
+ return exp;
}
static script_exp_t *script_parse_new_exp_function_def (script_function_t *function_def,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_FUNCTION_DEF, location);
- exp->data.function_def = function_def;
- return exp;
+ script_exp_t *exp = script_parse_new_exp (SCRIPT_EXP_TYPE_FUNCTION_DEF, location);
+
+ exp->data.function_def = function_def;
+ return exp;
}
static script_exp_t *script_parse_new_exp_set (ply_list_t *parameters,
script_debug_location_t *location)
{
- script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_SET, location);
- exp->data.parameters = parameters;
- return exp;
+ script_exp_t *exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_SET, location);
+
+ exp->data.parameters = parameters;
+ return exp;
}
static script_op_t *script_parse_new_op (script_op_type_t type,
script_debug_location_t *location)
{
- script_op_t *op = malloc (sizeof (script_op_t));
- op->type = type;
- script_debug_add_element (op, location);
- return op;
+ script_op_t *op = malloc (sizeof(script_op_t));
+
+ op->type = type;
+ script_debug_add_element (op, location);
+ return op;
}
static script_op_t *script_parse_new_op_exp (script_exp_t *exp,
script_debug_location_t *location)
{
- script_op_t *op = script_parse_new_op (SCRIPT_OP_TYPE_EXPRESSION, location);
- op->data.exp = exp;
- return op;
+ script_op_t *op = script_parse_new_op (SCRIPT_OP_TYPE_EXPRESSION, location);
+
+ op->data.exp = exp;
+ return op;
}
static script_op_t *script_parse_new_op_block (ply_list_t *list,
script_debug_location_t *location)
{
- script_op_t *op = script_parse_new_op (SCRIPT_OP_TYPE_OP_BLOCK, location);
- op->data.list = list;
- return op;
+ script_op_t *op = script_parse_new_op (SCRIPT_OP_TYPE_OP_BLOCK, location);
+
+ op->data.list = list;
+ return op;
}
static script_op_t *script_parse_new_op_cond (script_op_type_t type,
@@ -165,911 +177,847 @@ static script_op_t *script_parse_new_op_cond (script_op_type_t type,
script_op_t *op2,
script_debug_location_t *location)
{
- script_op_t *op = script_parse_new_op (type, location);
- op->data.cond_op.cond = cond;
- op->data.cond_op.op1 = op1;
- op->data.cond_op.op2 = op2;
- return op;
+ script_op_t *op = script_parse_new_op (type, location);
+
+ op->data.cond_op.cond = cond;
+ op->data.cond_op.op1 = op1;
+ op->data.cond_op.op2 = op2;
+ return op;
}
static void script_parse_error (script_debug_location_t *location,
const char *message)
{
- ply_error ("Parser error \"%s\" L:%d C:%d : %s\n",
- location->name,
- location->line_index,
- location->column_index,
- message);
+ ply_error ("Parser error \"%s\" L:%d C:%d : %s\n",
+ location->name,
+ location->line_index,
+ location->column_index,
+ message);
}
-static const script_parse_operator_table_entry_t* /* Only allows 1 or 2 character symbols */
+static const script_parse_operator_table_entry_t * /* Only allows 1 or 2 character symbols */
script_parse_operator_table_entry_lookup (script_scan_t *scan,
const script_parse_operator_table_entry_t *table)
{
- int entry_index;
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_scan_token_t *peektoken = script_scan_peek_next_token (scan);
- for (entry_index = 0; table[entry_index].symbol; entry_index++)
- {
- if (!script_scan_token_is_symbol (curtoken)) continue;
- if (curtoken->data.symbol != table[entry_index].symbol[0]) continue;
- if (table[entry_index].symbol[1])
- {
- if (!script_scan_token_is_symbol (peektoken)) continue;
- if (peektoken->data.symbol != table[entry_index].symbol[1]) continue;
- if (peektoken->whitespace) continue;
+ int entry_index;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_scan_token_t *peektoken = script_scan_peek_next_token (scan);
+
+ for (entry_index = 0; table[entry_index].symbol; entry_index++) {
+ if (!script_scan_token_is_symbol (curtoken)) continue;
+ if (curtoken->data.symbol != table[entry_index].symbol[0]) continue;
+ if (table[entry_index].symbol[1]) {
+ if (!script_scan_token_is_symbol (peektoken)) continue;
+ if (peektoken->data.symbol != table[entry_index].symbol[1]) continue;
+ if (peektoken->whitespace) continue;
+ }
+ break;
}
- break;
- }
- return &table[entry_index];
+ return &table[entry_index];
}
static void script_parse_advance_scan_by_string (script_scan_t *scan,
- const char *string)
+ const char *string)
{
- while (*string)
- {
- script_scan_get_next_token(scan);
- string++;
- }
+ while (*string) {
+ script_scan_get_next_token (scan);
+ string++;
+ }
}
static script_function_t *script_parse_function_def (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- ply_list_t *parameter_list;
-
- if (!script_scan_token_is_symbol_of_value (curtoken, '('))
- {
- script_parse_error (&curtoken->location,
- "Function declaration requires parameters to be declared within '(' brackets");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
- parameter_list = ply_list_new ();
-
- while (true)
- {
- if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
- if (!script_scan_token_is_identifier (curtoken))
- {
- script_parse_error (&curtoken->location,
- "Function declaration parameters must be valid identifiers");
- return NULL;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ ply_list_t *parameter_list;
+
+ if (!script_scan_token_is_symbol_of_value (curtoken, '(')) {
+ script_parse_error (&curtoken->location,
+ "Function declaration requires parameters to be declared within '(' brackets");
+ return NULL;
}
- char *parameter = strdup (curtoken->data.string);
- ply_list_append_data (parameter_list, parameter);
+ curtoken = script_scan_get_next_token (scan);
+ parameter_list = ply_list_new ();
+
+ while (true) {
+ if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
+ if (!script_scan_token_is_identifier (curtoken)) {
+ script_parse_error (&curtoken->location,
+ "Function declaration parameters must be valid identifiers");
+ return NULL;
+ }
+ char *parameter = strdup (curtoken->data.string);
+ ply_list_append_data (parameter_list, parameter);
- curtoken = script_scan_get_next_token (scan);
+ curtoken = script_scan_get_next_token (scan);
- if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
- if (!script_scan_token_is_symbol_of_value (curtoken, ','))
- {
- script_parse_error (&curtoken->location,
- "Function declaration parameters must separated with ',' and terminated with a ')'");
- return NULL;
+ if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
+ if (!script_scan_token_is_symbol_of_value (curtoken, ',')) {
+ script_parse_error (&curtoken->location,
+ "Function declaration parameters must separated with ',' and terminated with a ')'");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
}
- curtoken = script_scan_get_next_token (scan);
- }
- curtoken = script_scan_get_next_token (scan);
+ curtoken = script_scan_get_next_token (scan);
- script_op_t *func_op = script_parse_op (scan);
-
- script_function_t *function = script_function_script_new (func_op,
- NULL,
- parameter_list);
- return function;
+ script_op_t *func_op = script_parse_op (scan);
+
+ script_function_t *function = script_function_script_new (func_op,
+ NULL,
+ parameter_list);
+ return function;
}
static script_exp_t *script_parse_exp_tm (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_exp_t *exp = NULL;
-
- if (script_scan_token_is_integer (curtoken))
- {
- exp = script_parse_new_exp_number (curtoken->data.integer, &curtoken->location);
- script_scan_get_next_token (scan);
- return exp;
- }
- if (script_scan_token_is_float (curtoken))
- {
- exp = script_parse_new_exp_number (curtoken->data.floatpoint, &curtoken->location);
- script_scan_get_next_token (scan);
- return exp;
- }
- if (script_scan_token_is_identifier (curtoken))
- {
- if (script_scan_token_is_identifier_of_value (curtoken, "NULL"))
- exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_NULL, &curtoken->location);
- else if (script_scan_token_is_identifier_of_value (curtoken, "INFINITY"))
- exp = script_parse_new_exp_number (INFINITY, &curtoken->location);
- else if (script_scan_token_is_identifier_of_value (curtoken, "NAN"))
- exp = script_parse_new_exp_number (NAN, &curtoken->location);
- else if (script_scan_token_is_identifier_of_value (curtoken, "global"))
- exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_GLOBAL, &curtoken->location);
- else if (script_scan_token_is_identifier_of_value (curtoken, "local"))
- exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_LOCAL, &curtoken->location);
- else if (script_scan_token_is_identifier_of_value (curtoken, "this"))
- exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_THIS, &curtoken->location);
- else if (script_scan_token_is_identifier_of_value (curtoken, "fun"))
- {
- script_debug_location_t location = curtoken->location;
- script_scan_get_next_token (scan);
- exp = script_parse_new_exp_function_def (script_parse_function_def (scan), &location);
- return exp;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_exp_t *exp = NULL;
+
+ if (script_scan_token_is_integer (curtoken)) {
+ exp = script_parse_new_exp_number (curtoken->data.integer, &curtoken->location);
+ script_scan_get_next_token (scan);
+ return exp;
}
- else
- {
- exp = script_parse_new_exp_var (curtoken->data.string, &curtoken->location);
+ if (script_scan_token_is_float (curtoken)) {
+ exp = script_parse_new_exp_number (curtoken->data.floatpoint, &curtoken->location);
+ script_scan_get_next_token (scan);
+ return exp;
}
- curtoken = script_scan_get_next_token (scan);
- return exp;
- }
- if (script_scan_token_is_string (curtoken))
- {
- exp = script_parse_new_exp_string (curtoken->data.string, &curtoken->location);
- script_scan_get_next_token (scan);
- return exp;
- }
-
- if (script_scan_token_is_symbol_of_value (curtoken, '['))
- {
- ply_list_t *parameters = ply_list_new ();
- script_debug_location_t location = curtoken->location;
- script_scan_get_next_token (scan);
- while (true)
- {
- if (script_scan_token_is_symbol_of_value (curtoken, ']')) break;
- script_exp_t *parameter = script_parse_exp (scan);
-
- ply_list_append_data (parameters, parameter);
-
- curtoken = script_scan_get_current_token (scan);
- if (script_scan_token_is_symbol_of_value (curtoken, ']')) break;
- if (!script_scan_token_is_symbol_of_value (curtoken, ','))
- {
- script_parse_error (&curtoken->location,
- "Set parameters should be separated with a ',' and terminated with a ']'");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
+ if (script_scan_token_is_identifier (curtoken)) {
+ if (script_scan_token_is_identifier_of_value (curtoken, "NULL")) {
+ exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_NULL, &curtoken->location);
+ } else if (script_scan_token_is_identifier_of_value (curtoken, "INFINITY")) {
+ exp = script_parse_new_exp_number (INFINITY, &curtoken->location);
+ } else if (script_scan_token_is_identifier_of_value (curtoken, "NAN")) {
+ exp = script_parse_new_exp_number (NAN, &curtoken->location);
+ } else if (script_scan_token_is_identifier_of_value (curtoken, "global")) {
+ exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_GLOBAL, &curtoken->location);
+ } else if (script_scan_token_is_identifier_of_value (curtoken, "local")) {
+ exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_LOCAL, &curtoken->location);
+ } else if (script_scan_token_is_identifier_of_value (curtoken, "this")) {
+ exp = script_parse_new_exp (SCRIPT_EXP_TYPE_TERM_THIS, &curtoken->location);
+ } else if (script_scan_token_is_identifier_of_value (curtoken, "fun")) {
+ script_debug_location_t location = curtoken->location;
+ script_scan_get_next_token (scan);
+ exp = script_parse_new_exp_function_def (script_parse_function_def (scan), &location);
+ return exp;
+ } else {
+ exp = script_parse_new_exp_var (curtoken->data.string, &curtoken->location);
+ }
+ curtoken = script_scan_get_next_token (scan);
+ return exp;
}
- script_scan_get_next_token (scan);
- exp = script_parse_new_exp_set (parameters, &location);
- return exp;
- }
- if (script_scan_token_is_symbol_of_value (curtoken, '('))
- {
- script_scan_get_next_token (scan);
- exp = script_parse_exp (scan);
- curtoken = script_scan_get_current_token (scan);
- if (!exp)
- {
- script_parse_error (&curtoken->location,
- "Expected valid contents of bracketed expression");
- return NULL;
+ if (script_scan_token_is_string (curtoken)) {
+ exp = script_parse_new_exp_string (curtoken->data.string, &curtoken->location);
+ script_scan_get_next_token (scan);
+ return exp;
}
- if (!script_scan_token_is_symbol_of_value (curtoken, ')'))
- {
- script_parse_error (&curtoken->location,
- "Expected bracketed block to be terminated with a ')'");
- return NULL;
+
+ if (script_scan_token_is_symbol_of_value (curtoken, '[')) {
+ ply_list_t *parameters = ply_list_new ();
+ script_debug_location_t location = curtoken->location;
+ script_scan_get_next_token (scan);
+ while (true) {
+ if (script_scan_token_is_symbol_of_value (curtoken, ']')) break;
+ script_exp_t *parameter = script_parse_exp (scan);
+
+ ply_list_append_data (parameters, parameter);
+
+ curtoken = script_scan_get_current_token (scan);
+ if (script_scan_token_is_symbol_of_value (curtoken, ']')) break;
+ if (!script_scan_token_is_symbol_of_value (curtoken, ',')) {
+ script_parse_error (&curtoken->location,
+ "Set parameters should be separated with a ',' and terminated with a ']'");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ }
+ script_scan_get_next_token (scan);
+ exp = script_parse_new_exp_set (parameters, &location);
+ return exp;
+ }
+ if (script_scan_token_is_symbol_of_value (curtoken, '(')) {
+ script_scan_get_next_token (scan);
+ exp = script_parse_exp (scan);
+ curtoken = script_scan_get_current_token (scan);
+ if (!exp) {
+ script_parse_error (&curtoken->location,
+ "Expected valid contents of bracketed expression");
+ return NULL;
+ }
+ if (!script_scan_token_is_symbol_of_value (curtoken, ')')) {
+ script_parse_error (&curtoken->location,
+ "Expected bracketed block to be terminated with a ')'");
+ return NULL;
+ }
+ script_scan_get_next_token (scan);
+ return exp;
}
- script_scan_get_next_token (scan);
- return exp;
- }
- return NULL;
+ return NULL;
}
static script_exp_t *script_parse_exp_pi (script_scan_t *scan)
{
- script_exp_t *exp = script_parse_exp_tm (scan);
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
-
- while (true)
- {
- script_debug_location_t location = curtoken->location;
- if (!script_scan_token_is_symbol (curtoken)) break;
- if (script_scan_token_is_symbol_of_value (curtoken, '('))
- {
- ply_list_t *parameters = ply_list_new ();
- script_scan_get_next_token (scan);
- while (true)
- {
- if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
- script_exp_t *parameter = script_parse_exp (scan);
-
- ply_list_append_data (parameters, parameter);
-
- curtoken = script_scan_get_current_token (scan);
- if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
- if (!script_scan_token_is_symbol_of_value (curtoken, ','))
- {
- script_parse_error (&curtoken->location,
- "Function parameters should be separated with a ',' and terminated with a ')'");
- return NULL;
+ script_exp_t *exp = script_parse_exp_tm (scan);
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+
+ while (true) {
+ script_debug_location_t location = curtoken->location;
+ if (!script_scan_token_is_symbol (curtoken)) break;
+ if (script_scan_token_is_symbol_of_value (curtoken, '(')) {
+ ply_list_t *parameters = ply_list_new ();
+ script_scan_get_next_token (scan);
+ while (true) {
+ if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
+ script_exp_t *parameter = script_parse_exp (scan);
+
+ ply_list_append_data (parameters, parameter);
+
+ curtoken = script_scan_get_current_token (scan);
+ if (script_scan_token_is_symbol_of_value (curtoken, ')')) break;
+ if (!script_scan_token_is_symbol_of_value (curtoken, ',')) {
+ script_parse_error (&curtoken->location,
+ "Function parameters should be separated with a ',' and terminated with a ')'");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ }
+ script_scan_get_next_token (scan);
+ exp = script_parse_new_exp_function_exe (exp, parameters, &location);
+ continue;
}
- curtoken = script_scan_get_next_token (scan);
- }
- script_scan_get_next_token (scan);
- exp = script_parse_new_exp_function_exe (exp, parameters, &location);
- continue;
- }
- script_exp_t *key;
-
- if (script_scan_token_is_symbol_of_value (curtoken, '.'))
- {
- script_scan_get_next_token (scan);
- if (script_scan_token_is_identifier (curtoken))
- {
- key = script_parse_new_exp_string (curtoken->data.string, &curtoken->location);
- }
- else
- {
- script_parse_error (&curtoken->location,
- "A dot based hash index must be an identifier");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
- }
- else if (script_scan_token_is_symbol_of_value (curtoken, '['))
- {
- script_scan_get_next_token (scan);
- key = script_parse_exp (scan);
- if (!key)
- {
- script_parse_error (&curtoken->location,
- "Expected a valid index expression");
- return NULL;
- }
- curtoken = script_scan_get_current_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, ']'))
- {
- script_parse_error (&curtoken->location,
- "Expected a ']' to terminate the index expression");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
+ script_exp_t *key;
+
+ if (script_scan_token_is_symbol_of_value (curtoken, '.')) {
+ script_scan_get_next_token (scan);
+ if (script_scan_token_is_identifier (curtoken)) {
+ key = script_parse_new_exp_string (curtoken->data.string, &curtoken->location);
+ } else {
+ script_parse_error (&curtoken->location,
+ "A dot based hash index must be an identifier");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ } else if (script_scan_token_is_symbol_of_value (curtoken, '[')) {
+ script_scan_get_next_token (scan);
+ key = script_parse_exp (scan);
+ if (!key) {
+ script_parse_error (&curtoken->location,
+ "Expected a valid index expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_current_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ']')) {
+ script_parse_error (&curtoken->location,
+ "Expected a ']' to terminate the index expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ } else { break; }
+ exp = script_parse_new_exp_dual (SCRIPT_EXP_TYPE_HASH, exp, key, &location);
}
- else break;
- exp = script_parse_new_exp_dual (SCRIPT_EXP_TYPE_HASH, exp, key, &location);
- }
- return exp;
+ return exp;
}
static script_exp_t *script_parse_exp_pr (script_scan_t *scan)
{
- static const script_parse_operator_table_entry_t operator_table[] =
- {
- {"++", SCRIPT_EXP_TYPE_PRE_INC, 0},
- {"+", SCRIPT_EXP_TYPE_POS, 0},
- {"--", SCRIPT_EXP_TYPE_PRE_DEC, 0},
- {"-", SCRIPT_EXP_TYPE_NEG, 0},
- {"!", SCRIPT_EXP_TYPE_NOT, 0},
- {NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1},
- };
- const script_parse_operator_table_entry_t* entry;
- entry = script_parse_operator_table_entry_lookup(scan, operator_table);
- if (entry->presedence < 0) return script_parse_exp_pi (scan);
- script_debug_location_t location = script_scan_get_current_token (scan)->location;
- script_parse_advance_scan_by_string(scan, entry->symbol);
- return script_parse_new_exp_single(entry->exp_type, script_parse_exp_pr (scan), &location);
+ static const script_parse_operator_table_entry_t operator_table[] =
+ {
+ { "++", SCRIPT_EXP_TYPE_PRE_INC, 0 },
+ { "+", SCRIPT_EXP_TYPE_POS, 0 },
+ { "--", SCRIPT_EXP_TYPE_PRE_DEC, 0 },
+ { "-", SCRIPT_EXP_TYPE_NEG, 0 },
+ { "!", SCRIPT_EXP_TYPE_NOT, 0 },
+ { NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ };
+ const script_parse_operator_table_entry_t *entry;
+
+ entry = script_parse_operator_table_entry_lookup (scan, operator_table);
+ if (entry->presedence < 0) return script_parse_exp_pi (scan);
+ script_debug_location_t location = script_scan_get_current_token (scan)->location;
+ script_parse_advance_scan_by_string (scan, entry->symbol);
+ return script_parse_new_exp_single (entry->exp_type, script_parse_exp_pr (scan), &location);
}
static script_exp_t *script_parse_exp_po (script_scan_t *scan)
{
- static const script_parse_operator_table_entry_t operator_table[] =
- {
- {"++", SCRIPT_EXP_TYPE_POST_INC, 0},
- {"--", SCRIPT_EXP_TYPE_POST_DEC, 0},
- {NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1},
- };
- script_exp_t *exp = script_parse_exp_pr (scan);
-
- while (true)
- {
- const script_parse_operator_table_entry_t* entry;
- entry = script_parse_operator_table_entry_lookup(scan, operator_table);
- if (entry->presedence < 0) break;
- exp = script_parse_new_exp_single(entry->exp_type, exp, &script_scan_get_current_token (scan)->location);
- script_parse_advance_scan_by_string(scan, entry->symbol);
- }
- return exp;
+ static const script_parse_operator_table_entry_t operator_table[] =
+ {
+ { "++", SCRIPT_EXP_TYPE_POST_INC, 0 },
+ { "--", SCRIPT_EXP_TYPE_POST_DEC, 0 },
+ { NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ };
+ script_exp_t *exp = script_parse_exp_pr (scan);
+
+ while (true) {
+ const script_parse_operator_table_entry_t *entry;
+ entry = script_parse_operator_table_entry_lookup (scan, operator_table);
+ if (entry->presedence < 0) break;
+ exp = script_parse_new_exp_single (entry->exp_type, exp, &script_scan_get_current_token (scan)->location);
+ script_parse_advance_scan_by_string (scan, entry->symbol);
+ }
+ return exp;
}
static script_exp_t *script_parse_exp_ltr (script_scan_t *scan, int presedence)
{
- static const script_parse_operator_table_entry_t operator_table[] =
- {
- {"||", SCRIPT_EXP_TYPE_OR, 1}, /* FIXME Does const imply static? */
- {"&&", SCRIPT_EXP_TYPE_AND, 2},
- {"==", SCRIPT_EXP_TYPE_EQ, 3},
- {"!=", SCRIPT_EXP_TYPE_NE, 3},
- {">=", SCRIPT_EXP_TYPE_GE, 4},
- {"<=", SCRIPT_EXP_TYPE_LE, 4},
- {"+=", SCRIPT_EXP_TYPE_TERM_NULL, -1}, /* A few things it shouldn't consume */
- {"-=", SCRIPT_EXP_TYPE_TERM_NULL, -1},
- {"*=", SCRIPT_EXP_TYPE_TERM_NULL, -1},
- {"/=", SCRIPT_EXP_TYPE_TERM_NULL, -1},
- {"%=", SCRIPT_EXP_TYPE_TERM_NULL, -1},
- {"|=", SCRIPT_EXP_TYPE_TERM_NULL, -1},
- {"|", SCRIPT_EXP_TYPE_EXTEND, 0},
- {">", SCRIPT_EXP_TYPE_GT, 4},
- {"<", SCRIPT_EXP_TYPE_LT, 4},
- {"+", SCRIPT_EXP_TYPE_PLUS, 5},
- {"-", SCRIPT_EXP_TYPE_MINUS, 5},
- {"*", SCRIPT_EXP_TYPE_MUL, 6},
- {"/", SCRIPT_EXP_TYPE_DIV, 6},
- {"%", SCRIPT_EXP_TYPE_MOD, 6}, /* Put this number into the "presedence > ?" line below*/
- {NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1},
- };
-
- if (presedence > 6) return script_parse_exp_po (scan);
- script_exp_t *exp = script_parse_exp_ltr (scan, presedence + 1);
- if (!exp) return NULL;
-
- while (true)
- {
- const script_parse_operator_table_entry_t* entry;
- entry = script_parse_operator_table_entry_lookup(scan, operator_table);
- if (entry->presedence != presedence) break;
- script_debug_location_t location = script_scan_get_current_token (scan)->location;
- script_parse_advance_scan_by_string(scan, entry->symbol);
- exp = script_parse_new_exp_dual(entry->exp_type, exp, script_parse_exp_ltr (scan, presedence + 1), &location);
- if (!exp->data.dual.sub_b)
+ static const script_parse_operator_table_entry_t operator_table[] =
{
- script_parse_error (&script_scan_get_current_token (scan)->location,
- "An invalid RHS of an operation");
- return NULL;
+ { "||", SCRIPT_EXP_TYPE_OR, 1 }, /* FIXME Does const imply static? */
+ { "&&", SCRIPT_EXP_TYPE_AND, 2 },
+ { "==", SCRIPT_EXP_TYPE_EQ, 3 },
+ { "!=", SCRIPT_EXP_TYPE_NE, 3 },
+ { ">=", SCRIPT_EXP_TYPE_GE, 4 },
+ { "<=", SCRIPT_EXP_TYPE_LE, 4 },
+ { "+=", SCRIPT_EXP_TYPE_TERM_NULL, -1 }, /* A few things it shouldn't consume */
+ { "-=", SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ { "*=", SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ { "/=", SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ { "%=", SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ { "|=", SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ { "|", SCRIPT_EXP_TYPE_EXTEND, 0 },
+ { ">", SCRIPT_EXP_TYPE_GT, 4 },
+ { "<", SCRIPT_EXP_TYPE_LT, 4 },
+ { "+", SCRIPT_EXP_TYPE_PLUS, 5 },
+ { "-", SCRIPT_EXP_TYPE_MINUS, 5 },
+ { "*", SCRIPT_EXP_TYPE_MUL, 6 },
+ { "/", SCRIPT_EXP_TYPE_DIV, 6 },
+ { "%", SCRIPT_EXP_TYPE_MOD, 6 }, /* Put this number into the "presedence > ?" line below*/
+ { NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ };
+
+ if (presedence > 6) return script_parse_exp_po (scan);
+ script_exp_t *exp = script_parse_exp_ltr (scan, presedence + 1);
+ if (!exp) return NULL;
+
+ while (true) {
+ const script_parse_operator_table_entry_t *entry;
+ entry = script_parse_operator_table_entry_lookup (scan, operator_table);
+ if (entry->presedence != presedence) break;
+ script_debug_location_t location = script_scan_get_current_token (scan)->location;
+ script_parse_advance_scan_by_string (scan, entry->symbol);
+ exp = script_parse_new_exp_dual (entry->exp_type, exp, script_parse_exp_ltr (scan, presedence + 1), &location);
+ if (!exp->data.dual.sub_b) {
+ script_parse_error (&script_scan_get_current_token (scan)->location,
+ "An invalid RHS of an operation");
+ return NULL;
+ }
}
- }
- return exp;
+ return exp;
}
static script_exp_t *script_parse_exp_as (script_scan_t *scan)
{
- static const script_parse_operator_table_entry_t operator_table[] =
- {
- {"+=", SCRIPT_EXP_TYPE_ASSIGN_PLUS, 0},
- {"-=", SCRIPT_EXP_TYPE_ASSIGN_MINUS, 0},
- {"*=", SCRIPT_EXP_TYPE_ASSIGN_MUL, 0},
- {"/=", SCRIPT_EXP_TYPE_ASSIGN_DIV, 0},
- {"%=", SCRIPT_EXP_TYPE_ASSIGN_MOD, 0},
- {"|=", SCRIPT_EXP_TYPE_ASSIGN_EXTEND,0},
- {"=", SCRIPT_EXP_TYPE_ASSIGN, 0},
- {NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1},
- };
- script_exp_t *lhs = script_parse_exp_ltr (scan, 0);
- if (!lhs) return NULL;
-
- const script_parse_operator_table_entry_t* entry;
- entry = script_parse_operator_table_entry_lookup(scan, operator_table);
- if (entry->presedence < 0) return lhs;
- script_debug_location_t location = script_scan_get_current_token (scan)->location;
- script_parse_advance_scan_by_string(scan, entry->symbol);
- script_exp_t *rhs = script_parse_exp_as (scan);
- if (!rhs)
- {
- script_parse_error (&script_scan_get_current_token (scan)->location,
- "An invalid RHS of an assign");
- return NULL;
- }
- return script_parse_new_exp_dual (entry->exp_type, lhs, rhs, &location);
+ static const script_parse_operator_table_entry_t operator_table[] =
+ {
+ { "+=", SCRIPT_EXP_TYPE_ASSIGN_PLUS, 0 },
+ { "-=", SCRIPT_EXP_TYPE_ASSIGN_MINUS, 0 },
+ { "*=", SCRIPT_EXP_TYPE_ASSIGN_MUL, 0 },
+ { "/=", SCRIPT_EXP_TYPE_ASSIGN_DIV, 0 },
+ { "%=", SCRIPT_EXP_TYPE_ASSIGN_MOD, 0 },
+ { "|=", SCRIPT_EXP_TYPE_ASSIGN_EXTEND, 0 },
+ { "=", SCRIPT_EXP_TYPE_ASSIGN, 0 },
+ { NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1 },
+ };
+ script_exp_t *lhs = script_parse_exp_ltr (scan, 0);
+
+ if (!lhs) return NULL;
+
+ const script_parse_operator_table_entry_t *entry;
+ entry = script_parse_operator_table_entry_lookup (scan, operator_table);
+ if (entry->presedence < 0) return lhs;
+ script_debug_location_t location = script_scan_get_current_token (scan)->location;
+ script_parse_advance_scan_by_string (scan, entry->symbol);
+ script_exp_t *rhs = script_parse_exp_as (scan);
+ if (!rhs) {
+ script_parse_error (&script_scan_get_current_token (scan)->location,
+ "An invalid RHS of an assign");
+ return NULL;
+ }
+ return script_parse_new_exp_dual (entry->exp_type, lhs, rhs, &location);
}
static script_exp_t *script_parse_exp (script_scan_t *scan)
{
- return script_parse_exp_as (scan);
+ return script_parse_exp_as (scan);
}
static script_op_t *script_parse_op_block (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
-
- if (!script_scan_token_is_symbol_of_value (curtoken, '{'))
- return NULL;
- script_debug_location_t location = curtoken->location;
-
- script_scan_get_next_token (scan);
- ply_list_t *sublist = script_parse_op_list (scan);
-
- curtoken = script_scan_get_current_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, '}'))
- {
- script_parse_error (&curtoken->location,
- "Expected a '}' to terminate the operation block");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
-
- script_op_t *op = script_parse_new_op_block (sublist, &location);
- return op;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+
+ if (!script_scan_token_is_symbol_of_value (curtoken, '{'))
+ return NULL;
+ script_debug_location_t location = curtoken->location;
+
+ script_scan_get_next_token (scan);
+ ply_list_t *sublist = script_parse_op_list (scan);
+
+ curtoken = script_scan_get_current_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, '}')) {
+ script_parse_error (&curtoken->location,
+ "Expected a '}' to terminate the operation block");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+
+ script_op_t *op = script_parse_new_op_block (sublist, &location);
+ return op;
}
static script_op_t *script_parse_if_while (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_op_type_t type;
-
- if (script_scan_token_is_identifier_of_value (curtoken, "if"))
- type = SCRIPT_OP_TYPE_IF;
- else if (script_scan_token_is_identifier_of_value (curtoken, "while"))
- type = SCRIPT_OP_TYPE_WHILE;
- else return NULL;
-
- script_debug_location_t location = curtoken->location;
- curtoken = script_scan_get_next_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, '('))
- {
- script_parse_error (&curtoken->location,
- "Expected a '(' at the start of a condition block");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
-
- script_exp_t *cond = script_parse_exp (scan);
- curtoken = script_scan_get_current_token (scan);
- if (!cond)
- {
- script_parse_error (&curtoken->location, "Expected a valid condition expression");
- return NULL;
- }
- if (!script_scan_token_is_symbol_of_value (curtoken, ')'))
- {
- script_parse_error (&curtoken->location,
- "Expected a ')' at the end of a condition block");
- return NULL;
- }
- script_scan_get_next_token (scan);
- script_op_t *cond_op = script_parse_op (scan);
- script_op_t *else_op = NULL;
-
- curtoken = script_scan_get_current_token (scan);
- if ((type == SCRIPT_OP_TYPE_IF)
- && (script_scan_token_is_identifier_of_value (curtoken, "else")))
- {
- script_scan_get_next_token (scan);
- else_op = script_parse_op (scan);
- }
- script_op_t *op = script_parse_new_op_cond (type, cond, cond_op, else_op, &location);
- return op;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_op_type_t type;
+
+ if (script_scan_token_is_identifier_of_value (curtoken, "if"))
+ type = SCRIPT_OP_TYPE_IF;
+ else if (script_scan_token_is_identifier_of_value (curtoken, "while"))
+ type = SCRIPT_OP_TYPE_WHILE;
+ else return NULL;
+
+ script_debug_location_t location = curtoken->location;
+ curtoken = script_scan_get_next_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, '(')) {
+ script_parse_error (&curtoken->location,
+ "Expected a '(' at the start of a condition block");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+
+ script_exp_t *cond = script_parse_exp (scan);
+ curtoken = script_scan_get_current_token (scan);
+ if (!cond) {
+ script_parse_error (&curtoken->location, "Expected a valid condition expression");
+ return NULL;
+ }
+ if (!script_scan_token_is_symbol_of_value (curtoken, ')')) {
+ script_parse_error (&curtoken->location,
+ "Expected a ')' at the end of a condition block");
+ return NULL;
+ }
+ script_scan_get_next_token (scan);
+ script_op_t *cond_op = script_parse_op (scan);
+ script_op_t *else_op = NULL;
+
+ curtoken = script_scan_get_current_token (scan);
+ if ((type == SCRIPT_OP_TYPE_IF)
+ && (script_scan_token_is_identifier_of_value (curtoken, "else"))) {
+ script_scan_get_next_token (scan);
+ else_op = script_parse_op (scan);
+ }
+ script_op_t *op = script_parse_new_op_cond (type, cond, cond_op, else_op, &location);
+ return op;
}
static script_op_t *script_parse_do_while (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
-
- if (!script_scan_token_is_identifier_of_value (curtoken, "do"))
- return NULL;
- script_debug_location_t location = curtoken->location;
- curtoken = script_scan_get_next_token (scan);
- script_op_t *cond_op = script_parse_op (scan);
- curtoken = script_scan_get_current_token (scan);
-
- if (!script_scan_token_is_identifier_of_value (curtoken, "while"))
- {
- script_parse_error (&curtoken->location,
- "Expected a 'while' after a 'do' block");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
-
- if (!script_scan_token_is_symbol_of_value (curtoken, '('))
- {
- script_parse_error (&curtoken->location,
- "Expected a '(' at the start of a do-while condition block");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
- script_exp_t *cond = script_parse_exp (scan);
- curtoken = script_scan_get_current_token (scan);
- if (!cond)
- {
- script_parse_error (&curtoken->location, "Expected a valid condition expression");
- return NULL;
- }
- if (!script_scan_token_is_symbol_of_value (curtoken, ')'))
- {
- script_parse_error (&curtoken->location,
- "Expected a ')' at the end of a condition block");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, ';'))
- {
- script_parse_error (&curtoken->location,
- "Expected a ';' after a do-while expression");
- return NULL;
- }
- script_scan_get_next_token (scan);
- script_op_t *op = script_parse_new_op_cond (SCRIPT_OP_TYPE_DO_WHILE, cond, cond_op, NULL, &location);
- return op;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+
+ if (!script_scan_token_is_identifier_of_value (curtoken, "do"))
+ return NULL;
+ script_debug_location_t location = curtoken->location;
+ curtoken = script_scan_get_next_token (scan);
+ script_op_t *cond_op = script_parse_op (scan);
+ curtoken = script_scan_get_current_token (scan);
+
+ if (!script_scan_token_is_identifier_of_value (curtoken, "while")) {
+ script_parse_error (&curtoken->location,
+ "Expected a 'while' after a 'do' block");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+
+ if (!script_scan_token_is_symbol_of_value (curtoken, '(')) {
+ script_parse_error (&curtoken->location,
+ "Expected a '(' at the start of a do-while condition block");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ script_exp_t *cond = script_parse_exp (scan);
+ curtoken = script_scan_get_current_token (scan);
+ if (!cond) {
+ script_parse_error (&curtoken->location, "Expected a valid condition expression");
+ return NULL;
+ }
+ if (!script_scan_token_is_symbol_of_value (curtoken, ')')) {
+ script_parse_error (&curtoken->location,
+ "Expected a ')' at the end of a condition block");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ';')) {
+ script_parse_error (&curtoken->location,
+ "Expected a ';' after a do-while expression");
+ return NULL;
+ }
+ script_scan_get_next_token (scan);
+ script_op_t *op = script_parse_new_op_cond (SCRIPT_OP_TYPE_DO_WHILE, cond, cond_op, NULL, &location);
+ return op;
}
static script_op_t *script_parse_for (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
-
- if (!script_scan_token_is_identifier_of_value (curtoken, "for")) return NULL;
- script_debug_location_t location_for = curtoken->location;
- curtoken = script_scan_get_next_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, '('))
- {
- script_parse_error (&curtoken->location,
- "Expected a '(' at the start of a condition block");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
- script_debug_location_t location_first = curtoken->location;
-
- script_exp_t *first = script_parse_exp (scan);
- if (!first)
- {
- script_parse_error (&curtoken->location, "Expected a valid first expression");
- return NULL;
- }
- curtoken = script_scan_get_current_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, ';'))
- {
- script_parse_error (&curtoken->location,
- "Expected a ';' after the first 'for' expression");
- return NULL;
- }
- script_scan_get_next_token (scan);
-
- script_exp_t *cond = script_parse_exp (scan);
- if (!cond)
- {
- script_parse_error (&curtoken->location, "Expected a valid condition expression");
- return NULL;
- }
- curtoken = script_scan_get_current_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, ';'))
- {
- script_parse_error (&curtoken->location, "Expected a ';' after the 'for' condition");
- return NULL;
- }
- script_scan_get_next_token (scan);
- script_debug_location_t location_last = curtoken->location;
-
- script_exp_t *last = script_parse_exp (scan);
- if (!last)
- {
- script_parse_error (&curtoken->location, "Expected a valid last expression");
- return NULL;
- }
- curtoken = script_scan_get_current_token (scan);
- if (!script_scan_token_is_symbol_of_value (curtoken, ')'))
- {
- script_parse_error (&curtoken->location, "Expected a ')' at the end of a for block");
- return NULL;
- }
- script_scan_get_next_token (scan);
- script_op_t *op_body = script_parse_op (scan);
-
- script_op_t *op_first = script_parse_new_op_exp (first, &location_first);
- script_op_t *op_last = script_parse_new_op_exp (last, &location_last);
- script_op_t *op_for = script_parse_new_op_cond (SCRIPT_OP_TYPE_FOR, cond, op_body, op_last, &location_for);
-
- ply_list_t *op_list = ply_list_new ();
- ply_list_append_data (op_list, op_first);
- ply_list_append_data (op_list, op_for);
-
- script_op_t *op_block = script_parse_new_op_block (op_list, &location_for);
-
- return op_block;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+
+ if (!script_scan_token_is_identifier_of_value (curtoken, "for")) return NULL;
+ script_debug_location_t location_for = curtoken->location;
+ curtoken = script_scan_get_next_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, '(')) {
+ script_parse_error (&curtoken->location,
+ "Expected a '(' at the start of a condition block");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
+ script_debug_location_t location_first = curtoken->location;
+
+ script_exp_t *first = script_parse_exp (scan);
+ if (!first) {
+ script_parse_error (&curtoken->location, "Expected a valid first expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_current_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ';')) {
+ script_parse_error (&curtoken->location,
+ "Expected a ';' after the first 'for' expression");
+ return NULL;
+ }
+ script_scan_get_next_token (scan);
+
+ script_exp_t *cond = script_parse_exp (scan);
+ if (!cond) {
+ script_parse_error (&curtoken->location, "Expected a valid condition expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_current_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ';')) {
+ script_parse_error (&curtoken->location, "Expected a ';' after the 'for' condition");
+ return NULL;
+ }
+ script_scan_get_next_token (scan);
+ script_debug_location_t location_last = curtoken->location;
+
+ script_exp_t *last = script_parse_exp (scan);
+ if (!last) {
+ script_parse_error (&curtoken->location, "Expected a valid last expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_current_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ')')) {
+ script_parse_error (&curtoken->location, "Expected a ')' at the end of a for block");
+ return NULL;
+ }
+ script_scan_get_next_token (scan);
+ script_op_t *op_body = script_parse_op (scan);
+
+ script_op_t *op_first = script_parse_new_op_exp (first, &location_first);
+ script_op_t *op_last = script_parse_new_op_exp (last, &location_last);
+ script_op_t *op_for = script_parse_new_op_cond (SCRIPT_OP_TYPE_FOR, cond, op_body, op_last, &location_for);
+
+ ply_list_t *op_list = ply_list_new ();
+ ply_list_append_data (op_list, op_first);
+ ply_list_append_data (op_list, op_for);
+
+ script_op_t *op_block = script_parse_new_op_block (op_list, &location_for);
+
+ return op_block;
}
static script_op_t *script_parse_function (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
-
- if (!script_scan_token_is_identifier_of_value (curtoken, "fun")) return NULL;
- script_debug_location_t location = curtoken->location;
- curtoken = script_scan_get_next_token (scan);
- if (!script_scan_token_is_identifier (curtoken))
- {
- script_parse_error (&curtoken->location,
- "A function declaration requires a valid name");
- return NULL;
- }
- script_exp_t *name = script_parse_new_exp_var (curtoken->data.string, &curtoken->location);
-
- curtoken = script_scan_get_next_token (scan); /* FIXME parse any type of exp as target and do an assign*/
-
- script_function_t *function = script_parse_function_def (scan);
- if (!function) return NULL;
- script_exp_t *func_exp = script_parse_new_exp_function_def (function, &location);
- script_exp_t *func_def = script_parse_new_exp_dual (SCRIPT_EXP_TYPE_ASSIGN, name, func_exp, &location);
-
- script_op_t *op = script_parse_new_op_exp (func_def, &location);
- return op;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+
+ if (!script_scan_token_is_identifier_of_value (curtoken, "fun")) return NULL;
+ script_debug_location_t location = curtoken->location;
+ curtoken = script_scan_get_next_token (scan);
+ if (!script_scan_token_is_identifier (curtoken)) {
+ script_parse_error (&curtoken->location,
+ "A function declaration requires a valid name");
+ return NULL;
+ }
+ script_exp_t *name = script_parse_new_exp_var (curtoken->data.string, &curtoken->location);
+
+ curtoken = script_scan_get_next_token (scan); /* FIXME parse any type of exp as target and do an assign*/
+
+ script_function_t *function = script_parse_function_def (scan);
+ if (!function) return NULL;
+ script_exp_t *func_exp = script_parse_new_exp_function_def (function, &location);
+ script_exp_t *func_def = script_parse_new_exp_dual (SCRIPT_EXP_TYPE_ASSIGN, name, func_exp, &location);
+
+ script_op_t *op = script_parse_new_op_exp (func_def, &location);
+ return op;
}
static script_op_t *script_parse_return (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_op_type_t type;
- if (script_scan_token_is_identifier_of_value (curtoken, "return"))
- type = SCRIPT_OP_TYPE_RETURN;
- else if (script_scan_token_is_identifier_of_value (curtoken, "fail"))
- type = SCRIPT_OP_TYPE_FAIL;
- else if (script_scan_token_is_identifier_of_value (curtoken, "break"))
- type = SCRIPT_OP_TYPE_BREAK;
- else if (script_scan_token_is_identifier_of_value (curtoken, "continue"))
- type = SCRIPT_OP_TYPE_CONTINUE;
- else return NULL;
- curtoken = script_scan_get_next_token (scan);
-
- script_op_t *op = script_parse_new_op (type, &curtoken->location);
- if (type == SCRIPT_OP_TYPE_RETURN)
- {
- op->data.exp = script_parse_exp (scan); /* May be NULL */
- curtoken = script_scan_get_current_token (scan);
- }
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_op_type_t type;
+
+ if (script_scan_token_is_identifier_of_value (curtoken, "return"))
+ type = SCRIPT_OP_TYPE_RETURN;
+ else if (script_scan_token_is_identifier_of_value (curtoken, "fail"))
+ type = SCRIPT_OP_TYPE_FAIL;
+ else if (script_scan_token_is_identifier_of_value (curtoken, "break"))
+ type = SCRIPT_OP_TYPE_BREAK;
+ else if (script_scan_token_is_identifier_of_value (curtoken, "continue"))
+ type = SCRIPT_OP_TYPE_CONTINUE;
+ else return NULL;
+ curtoken = script_scan_get_next_token (scan);
+
+ script_op_t *op = script_parse_new_op (type, &curtoken->location);
+ if (type == SCRIPT_OP_TYPE_RETURN) {
+ op->data.exp = script_parse_exp (scan); /* May be NULL */
+ curtoken = script_scan_get_current_token (scan);
+ }
#ifdef WITH_SEMIES
- if (!script_scan_token_is_symbol_of_value (curtoken, ';'))
- {
- script_parse_error (&curtoken->location, "Expected ';' after an expression");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ';')) {
+ script_parse_error (&curtoken->location, "Expected ';' after an expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
#endif
- return op;
+ return op;
}
static script_op_t *script_parse_op (script_scan_t *scan)
{
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_op_t *reply = NULL;
-
- reply = script_parse_op_block (scan);
- if (reply) return reply;
- reply = script_parse_if_while (scan);
- if (reply) return reply;
- reply = script_parse_do_while (scan);
- if (reply) return reply;
- reply = script_parse_for (scan);
- if (reply) return reply;
- reply = script_parse_return (scan);
- if (reply) return reply;
- reply = script_parse_function (scan);
- if (reply) return reply;
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_op_t *reply = NULL;
+
+ reply = script_parse_op_block (scan);
+ if (reply) return reply;
+ reply = script_parse_if_while (scan);
+ if (reply) return reply;
+ reply = script_parse_do_while (scan);
+ if (reply) return reply;
+ reply = script_parse_for (scan);
+ if (reply) return reply;
+ reply = script_parse_return (scan);
+ if (reply) return reply;
+ reply = script_parse_function (scan);
+ if (reply) return reply;
/* if curtoken->data.string == "if/for/while... */
/* default is expression */
- {
- script_debug_location_t location = curtoken->location;
- script_exp_t *exp = script_parse_exp (scan);
- if (!exp) return NULL;
- curtoken = script_scan_get_current_token (scan);
+ {
+ script_debug_location_t location = curtoken->location;
+ script_exp_t *exp = script_parse_exp (scan);
+ if (!exp) return NULL;
+ curtoken = script_scan_get_current_token (scan);
#ifdef WITH_SEMIES
- if (!script_scan_token_is_symbol_of_value (curtoken, ';'))
- {
- script_parse_error (&curtoken->location, "Expected ';' after an expression");
- return NULL;
- }
- curtoken = script_scan_get_next_token (scan);
+ if (!script_scan_token_is_symbol_of_value (curtoken, ';')) {
+ script_parse_error (&curtoken->location, "Expected ';' after an expression");
+ return NULL;
+ }
+ curtoken = script_scan_get_next_token (scan);
#endif
- script_op_t *op = script_parse_new_op_exp (exp, &location);
- return op;
- }
- return NULL;
+ script_op_t *op = script_parse_new_op_exp (exp, &location);
+ return op;
+ }
+ return NULL;
}
static ply_list_t *script_parse_op_list (script_scan_t *scan)
{
- ply_list_t *op_list = ply_list_new ();
+ ply_list_t *op_list = ply_list_new ();
- while (true)
- {
- script_op_t *op = script_parse_op (scan);
- if (!op) break;
- ply_list_append_data (op_list, op);
- }
+ while (true) {
+ script_op_t *op = script_parse_op (scan);
+ if (!op) break;
+ ply_list_append_data (op_list, op);
+ }
- return op_list;
+ return op_list;
}
static void script_parse_exp_free (script_exp_t *exp)
{
- if (!exp) return;
- switch (exp->type)
- {
- case SCRIPT_EXP_TYPE_PLUS:
- case SCRIPT_EXP_TYPE_MINUS:
- case SCRIPT_EXP_TYPE_MUL:
- case SCRIPT_EXP_TYPE_DIV:
- case SCRIPT_EXP_TYPE_MOD:
- case SCRIPT_EXP_TYPE_EQ:
- case SCRIPT_EXP_TYPE_NE:
- case SCRIPT_EXP_TYPE_GT:
- case SCRIPT_EXP_TYPE_GE:
- case SCRIPT_EXP_TYPE_LT:
- case SCRIPT_EXP_TYPE_LE:
- case SCRIPT_EXP_TYPE_AND:
- case SCRIPT_EXP_TYPE_OR:
- case SCRIPT_EXP_TYPE_EXTEND:
- case SCRIPT_EXP_TYPE_ASSIGN:
- case SCRIPT_EXP_TYPE_ASSIGN_PLUS:
- case SCRIPT_EXP_TYPE_ASSIGN_MINUS:
- case SCRIPT_EXP_TYPE_ASSIGN_MUL:
- case SCRIPT_EXP_TYPE_ASSIGN_DIV:
- case SCRIPT_EXP_TYPE_ASSIGN_MOD:
- case SCRIPT_EXP_TYPE_ASSIGN_EXTEND:
- case SCRIPT_EXP_TYPE_HASH:
- script_parse_exp_free (exp->data.dual.sub_a);
- script_parse_exp_free (exp->data.dual.sub_b);
- break;
-
- case SCRIPT_EXP_TYPE_NOT:
- case SCRIPT_EXP_TYPE_POS:
- case SCRIPT_EXP_TYPE_NEG:
- case SCRIPT_EXP_TYPE_PRE_INC:
- case SCRIPT_EXP_TYPE_PRE_DEC:
- case SCRIPT_EXP_TYPE_POST_INC:
- case SCRIPT_EXP_TYPE_POST_DEC:
- script_parse_exp_free (exp->data.sub);
- break;
-
- case SCRIPT_EXP_TYPE_TERM_NUMBER:
- case SCRIPT_EXP_TYPE_TERM_NULL:
- case SCRIPT_EXP_TYPE_TERM_LOCAL:
- case SCRIPT_EXP_TYPE_TERM_GLOBAL:
- case SCRIPT_EXP_TYPE_TERM_THIS:
- break;
- case SCRIPT_EXP_TYPE_TERM_SET:
+ if (!exp) return;
+ switch (exp->type) {
+ case SCRIPT_EXP_TYPE_PLUS:
+ case SCRIPT_EXP_TYPE_MINUS:
+ case SCRIPT_EXP_TYPE_MUL:
+ case SCRIPT_EXP_TYPE_DIV:
+ case SCRIPT_EXP_TYPE_MOD:
+ case SCRIPT_EXP_TYPE_EQ:
+ case SCRIPT_EXP_TYPE_NE:
+ case SCRIPT_EXP_TYPE_GT:
+ case SCRIPT_EXP_TYPE_GE:
+ case SCRIPT_EXP_TYPE_LT:
+ case SCRIPT_EXP_TYPE_LE:
+ case SCRIPT_EXP_TYPE_AND:
+ case SCRIPT_EXP_TYPE_OR:
+ case SCRIPT_EXP_TYPE_EXTEND:
+ case SCRIPT_EXP_TYPE_ASSIGN:
+ case SCRIPT_EXP_TYPE_ASSIGN_PLUS:
+ case SCRIPT_EXP_TYPE_ASSIGN_MINUS:
+ case SCRIPT_EXP_TYPE_ASSIGN_MUL:
+ case SCRIPT_EXP_TYPE_ASSIGN_DIV:
+ case SCRIPT_EXP_TYPE_ASSIGN_MOD:
+ case SCRIPT_EXP_TYPE_ASSIGN_EXTEND:
+ case SCRIPT_EXP_TYPE_HASH:
+ script_parse_exp_free (exp->data.dual.sub_a);
+ script_parse_exp_free (exp->data.dual.sub_b);
+ break;
+
+ case SCRIPT_EXP_TYPE_NOT:
+ case SCRIPT_EXP_TYPE_POS:
+ case SCRIPT_EXP_TYPE_NEG:
+ case SCRIPT_EXP_TYPE_PRE_INC:
+ case SCRIPT_EXP_TYPE_PRE_DEC:
+ case SCRIPT_EXP_TYPE_POST_INC:
+ case SCRIPT_EXP_TYPE_POST_DEC:
+ script_parse_exp_free (exp->data.sub);
+ break;
+
+ case SCRIPT_EXP_TYPE_TERM_NUMBER:
+ case SCRIPT_EXP_TYPE_TERM_NULL:
+ case SCRIPT_EXP_TYPE_TERM_LOCAL:
+ case SCRIPT_EXP_TYPE_TERM_GLOBAL:
+ case SCRIPT_EXP_TYPE_TERM_THIS:
+ break;
+ case SCRIPT_EXP_TYPE_TERM_SET:
{
- ply_list_node_t *node;
- for (node = ply_list_get_first_node (exp->data.parameters);
- node;
- node = ply_list_get_next_node (exp->data.parameters, node))
- {
- script_exp_t *sub = ply_list_node_get_data (node);
- script_parse_exp_free (sub);
- }
- ply_list_free (exp->data.parameters);
- break;
+ ply_list_node_t *node;
+ for (node = ply_list_get_first_node (exp->data.parameters);
+ node;
+ node = ply_list_get_next_node (exp->data.parameters, node)) {
+ script_exp_t *sub = ply_list_node_get_data (node);
+ script_parse_exp_free (sub);
+ }
+ ply_list_free (exp->data.parameters);
+ break;
}
- case SCRIPT_EXP_TYPE_FUNCTION_EXE:
+ case SCRIPT_EXP_TYPE_FUNCTION_EXE:
{
- ply_list_node_t *node;
- for (node = ply_list_get_first_node (exp->data.function_exe.parameters);
- node;
- node = ply_list_get_next_node (exp->data.function_exe.parameters, node))
- {
- script_exp_t *sub = ply_list_node_get_data (node);
- script_parse_exp_free (sub);
- }
- ply_list_free (exp->data.function_exe.parameters);
- script_parse_exp_free (exp->data.function_exe.name);
- break;
+ ply_list_node_t *node;
+ for (node = ply_list_get_first_node (exp->data.function_exe.parameters);
+ node;
+ node = ply_list_get_next_node (exp->data.function_exe.parameters, node)) {
+ script_exp_t *sub = ply_list_node_get_data (node);
+ script_parse_exp_free (sub);
+ }
+ ply_list_free (exp->data.function_exe.parameters);
+ script_parse_exp_free (exp->data.function_exe.name);
+ break;
}
- case SCRIPT_EXP_TYPE_FUNCTION_DEF: /* FIXME merge the frees with one from op_free */
+ case SCRIPT_EXP_TYPE_FUNCTION_DEF: /* FIXME merge the frees with one from op_free */
{
- if (exp->data.function_def->type == SCRIPT_FUNCTION_TYPE_SCRIPT)
- script_parse_op_free (exp->data.function_def->data.script);
- ply_list_node_t *node;
- for (node = ply_list_get_first_node (exp->data.function_def->parameters);
- node;
- node = ply_list_get_next_node (exp->data.function_def->parameters, node))
- {
- char *arg = ply_list_node_get_data (node);
- free (arg);
- }
- ply_list_free (exp->data.function_def->parameters);
- free (exp->data.function_def);
- break;
+ if (exp->data.function_def->type == SCRIPT_FUNCTION_TYPE_SCRIPT)
+ script_parse_op_free (exp->data.function_def->data.script);
+ ply_list_node_t *node;
+ for (node = ply_list_get_first_node (exp->data.function_def->parameters);
+ node;
+ node = ply_list_get_next_node (exp->data.function_def->parameters, node)) {
+ char *arg = ply_list_node_get_data (node);
+ free (arg);
+ }
+ ply_list_free (exp->data.function_def->parameters);
+ free (exp->data.function_def);
+ break;
}
- case SCRIPT_EXP_TYPE_TERM_STRING:
- case SCRIPT_EXP_TYPE_TERM_VAR:
- free (exp->data.string);
- break;
- }
- script_debug_remove_element (exp);
- free (exp);
+ case SCRIPT_EXP_TYPE_TERM_STRING:
+ case SCRIPT_EXP_TYPE_TERM_VAR:
+ free (exp->data.string);
+ break;
+ }
+ script_debug_remove_element (exp);
+ free (exp);
}
void script_parse_op_free (script_op_t *op)
{
- if (!op) return;
- switch (op->type)
- {
- case SCRIPT_OP_TYPE_EXPRESSION:
- script_parse_exp_free (op->data.exp);
- break;
-
- case SCRIPT_OP_TYPE_OP_BLOCK:
- script_parse_op_list_free (op->data.list);
- break;
-
- case SCRIPT_OP_TYPE_IF:
- case SCRIPT_OP_TYPE_WHILE:
- case SCRIPT_OP_TYPE_DO_WHILE:
- case SCRIPT_OP_TYPE_FOR:
- script_parse_exp_free (op->data.cond_op.cond);
- script_parse_op_free (op->data.cond_op.op1);
- script_parse_op_free (op->data.cond_op.op2);
- break;
-
- case SCRIPT_OP_TYPE_RETURN:
- if (op->data.exp) script_parse_exp_free (op->data.exp);
- break;
-
- case SCRIPT_OP_TYPE_FAIL:
- case SCRIPT_OP_TYPE_BREAK:
- case SCRIPT_OP_TYPE_CONTINUE:
- break;
- }
- script_debug_remove_element (op);
- free (op);
+ if (!op) return;
+ switch (op->type) {
+ case SCRIPT_OP_TYPE_EXPRESSION:
+ script_parse_exp_free (op->data.exp);
+ break;
+
+ case SCRIPT_OP_TYPE_OP_BLOCK:
+ script_parse_op_list_free (op->data.list);
+ break;
+
+ case SCRIPT_OP_TYPE_IF:
+ case SCRIPT_OP_TYPE_WHILE:
+ case SCRIPT_OP_TYPE_DO_WHILE:
+ case SCRIPT_OP_TYPE_FOR:
+ script_parse_exp_free (op->data.cond_op.cond);
+ script_parse_op_free (op->data.cond_op.op1);
+ script_parse_op_free (op->data.cond_op.op2);
+ break;
+
+ case SCRIPT_OP_TYPE_RETURN:
+ if (op->data.exp) script_parse_exp_free (op->data.exp);
+ break;
+
+ case SCRIPT_OP_TYPE_FAIL:
+ case SCRIPT_OP_TYPE_BREAK:
+ case SCRIPT_OP_TYPE_CONTINUE:
+ break;
+ }
+ script_debug_remove_element (op);
+ free (op);
}
static void script_parse_op_list_free (ply_list_t *op_list)
{
- ply_list_node_t *node;
-
- for (node = ply_list_get_first_node (op_list);
- node;
- node = ply_list_get_next_node (op_list, node))
- {
- script_op_t *op = ply_list_node_get_data (node);
- script_parse_op_free (op);
- }
- ply_list_free (op_list);
- return;
+ ply_list_node_t *node;
+
+ for (node = ply_list_get_first_node (op_list);
+ node;
+ node = ply_list_get_next_node (op_list, node)) {
+ script_op_t *op = ply_list_node_get_data (node);
+ script_parse_op_free (op);
+ }
+ ply_list_free (op_list);
+ return;
}
script_op_t *script_parse_file (const char *filename)
{
- script_scan_t *scan = script_scan_file (filename);
-
- if (!scan)
- {
- ply_error ("Parser error : Error opening file %s\n", filename);
- return NULL;
- }
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_debug_location_t location = curtoken->location;
- ply_list_t *list = script_parse_op_list (scan);
-
- curtoken = script_scan_get_current_token (scan);
- if (curtoken->type != SCRIPT_SCAN_TOKEN_TYPE_EOF)
- {
- script_parse_error (&curtoken->location, "Unparsed characters at end of file");
- return NULL;
- }
- script_op_t *op = script_parse_new_op_block (list, &location);
- script_scan_free (scan);
- return op;
+ script_scan_t *scan = script_scan_file (filename);
+
+ if (!scan) {
+ ply_error ("Parser error : Error opening file %s\n", filename);
+ return NULL;
+ }
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_debug_location_t location = curtoken->location;
+ ply_list_t *list = script_parse_op_list (scan);
+
+ curtoken = script_scan_get_current_token (scan);
+ if (curtoken->type != SCRIPT_SCAN_TOKEN_TYPE_EOF) {
+ script_parse_error (&curtoken->location, "Unparsed characters at end of file");
+ return NULL;
+ }
+ script_op_t *op = script_parse_new_op_block (list, &location);
+ script_scan_free (scan);
+ return op;
}
script_op_t *script_parse_string (const char *string,
const char *name)
{
- script_scan_t *scan = script_scan_string (string, name);
-
- if (!scan)
- {
- ply_error ("Parser error : Error creating a parser with a string");
- return NULL;
- }
- script_scan_token_t *curtoken = script_scan_get_current_token (scan);
- script_debug_location_t location = curtoken->location;
- ply_list_t *list = script_parse_op_list (scan);
-
- curtoken = script_scan_get_current_token (scan);
- if (curtoken->type != SCRIPT_SCAN_TOKEN_TYPE_EOF)
- {
- script_parse_error (&curtoken->location, "Unparsed characters at end of file");
- return NULL;
- }
- script_op_t *op = script_parse_new_op_block (list, &location);
- script_scan_free (scan);
- return op;
+ script_scan_t *scan = script_scan_string (string, name);
+
+ if (!scan) {
+ ply_error ("Parser error : Error creating a parser with a string");
+ return NULL;
+ }
+ script_scan_token_t *curtoken = script_scan_get_current_token (scan);
+ script_debug_location_t location = curtoken->location;
+ ply_list_t *list = script_parse_op_list (scan);
+
+ curtoken = script_scan_get_current_token (scan);
+ if (curtoken->type != SCRIPT_SCAN_TOKEN_TYPE_EOF) {
+ script_parse_error (&curtoken->location, "Unparsed characters at end of file");
+ return NULL;
+ }
+ script_op_t *op = script_parse_new_op_block (list, &location);
+ script_scan_free (scan);
+ return op;
}
diff --git a/src/plugins/splash/script/script-scan.c b/src/plugins/splash/script/script-scan.c
index 5d1aa64a..c27ffcfc 100644
--- a/src/plugins/splash/script/script-scan.c
+++ b/src/plugins/splash/script/script-scan.c
@@ -39,383 +39,352 @@
static script_scan_t *script_scan_new (void)
{
- unsigned char *chars;
- script_scan_t *scan = calloc (1, sizeof (script_scan_t));
-
- scan->tokens = NULL;
- scan->tokencount = 0;
- scan->cur_char = '\0';
- scan->line_index = 1; /* According to Nedit the first line is 1 but first column is 0 */
- scan->column_index = COLUMN_START_INDEX;
-
- scan->identifier_1st_char = ply_bitarray_new (256);
- scan->identifier_nth_char = ply_bitarray_new (256);
-
- for (chars =
- (unsigned char *) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_";
- *chars;
- chars++)
- ply_bitarray_set (scan->identifier_1st_char, *chars);
- for (chars =
- (unsigned char *) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789";
- *chars;
- chars++)
- ply_bitarray_set (scan->identifier_nth_char, *chars);
- return scan;
+ unsigned char *chars;
+ script_scan_t *scan = calloc (1, sizeof(script_scan_t));
+
+ scan->tokens = NULL;
+ scan->tokencount = 0;
+ scan->cur_char = '\0';
+ scan->line_index = 1; /* According to Nedit the first line is 1 but first column is 0 */
+ scan->column_index = COLUMN_START_INDEX;
+
+ scan->identifier_1st_char = ply_bitarray_new (256);
+ scan->identifier_nth_char = ply_bitarray_new (256);
+
+ for (chars =
+ (unsigned char *) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_";
+ *chars;
+ chars++) {
+ ply_bitarray_set (scan->identifier_1st_char, *chars);
+ }
+ for (chars =
+ (unsigned char *) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789";
+ *chars;
+ chars++) {
+ ply_bitarray_set (scan->identifier_nth_char, *chars);
+ }
+ return scan;
}
script_scan_t *script_scan_file (const char *filename)
{
- int fd = open (filename, O_RDONLY|O_CLOEXEC);
- if (fd < 0) return NULL;
- script_scan_t *scan = script_scan_new ();
- scan->name = strdup (filename);
- scan->source.fd = fd;
- scan->source_is_file = true;
- script_scan_get_next_char (scan);
- return scan;
+ int fd = open (filename, O_RDONLY | O_CLOEXEC);
+
+ if (fd < 0) return NULL;
+ script_scan_t *scan = script_scan_new ();
+ scan->name = strdup (filename);
+ scan->source.fd = fd;
+ scan->source_is_file = true;
+ script_scan_get_next_char (scan);
+ return scan;
}
script_scan_t *script_scan_string (const char *string,
const char *name)
{
- script_scan_t *scan = script_scan_new ();
- scan->name = strdup (name);
- scan->source.string = string;
- scan->source_is_file = false;
- script_scan_get_next_char (scan);
- return scan;
+ script_scan_t *scan = script_scan_new ();
+
+ scan->name = strdup (name);
+ scan->source.string = string;
+ scan->source_is_file = false;
+ script_scan_get_next_char (scan);
+ return scan;
}
void script_scan_token_clean (script_scan_token_t *token)
{
- switch (token->type)
- {
- case SCRIPT_SCAN_TOKEN_TYPE_EMPTY:
- case SCRIPT_SCAN_TOKEN_TYPE_EOF:
- case SCRIPT_SCAN_TOKEN_TYPE_INTEGER:
- case SCRIPT_SCAN_TOKEN_TYPE_FLOAT:
- case SCRIPT_SCAN_TOKEN_TYPE_SYMBOL:
- break;
- case SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER:
- case SCRIPT_SCAN_TOKEN_TYPE_STRING:
- case SCRIPT_SCAN_TOKEN_TYPE_COMMENT:
- case SCRIPT_SCAN_TOKEN_TYPE_ERROR:
- free (token->data.string);
- break;
- }
- token->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
- token->whitespace = 0;
+ switch (token->type) {
+ case SCRIPT_SCAN_TOKEN_TYPE_EMPTY:
+ case SCRIPT_SCAN_TOKEN_TYPE_EOF:
+ case SCRIPT_SCAN_TOKEN_TYPE_INTEGER:
+ case SCRIPT_SCAN_TOKEN_TYPE_FLOAT:
+ case SCRIPT_SCAN_TOKEN_TYPE_SYMBOL:
+ break;
+ case SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER:
+ case SCRIPT_SCAN_TOKEN_TYPE_STRING:
+ case SCRIPT_SCAN_TOKEN_TYPE_COMMENT:
+ case SCRIPT_SCAN_TOKEN_TYPE_ERROR:
+ free (token->data.string);
+ break;
+ }
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
+ token->whitespace = 0;
}
void script_scan_free (script_scan_t *scan)
{
- int i;
- if (scan->source_is_file) close (scan->source.fd);
- for (i = 0; i < scan->tokencount; i++)
- {
- script_scan_token_clean (scan->tokens[i]);
- free (scan->tokens[i]);
- }
- ply_bitarray_free (scan->identifier_1st_char);
- ply_bitarray_free (scan->identifier_nth_char);
- free (scan->name);
- free (scan->tokens);
- free (scan);
+ int i;
+
+ if (scan->source_is_file) close (scan->source.fd);
+ for (i = 0; i < scan->tokencount; i++) {
+ script_scan_token_clean (scan->tokens[i]);
+ free (scan->tokens[i]);
+ }
+ ply_bitarray_free (scan->identifier_1st_char);
+ ply_bitarray_free (scan->identifier_nth_char);
+ free (scan->name);
+ free (scan->tokens);
+ free (scan);
}
unsigned char script_scan_get_current_char (script_scan_t *scan)
{
- return scan->cur_char;
+ return scan->cur_char;
}
unsigned char script_scan_get_next_char (script_scan_t *scan)
{
- if (scan->cur_char == '\n')
- {
- scan->line_index++;
- scan->column_index = COLUMN_START_INDEX;
- }
- else if (scan->cur_char != '\0')
- scan->column_index++;
- if (scan->source_is_file)
- {
- int got = read (scan->source.fd, &scan->cur_char, 1);
- if (!got) scan->cur_char = 0; /* FIXME a better way of doing EOF etc */
- }
- else
- {
- scan->cur_char = *scan->source.string;
- if (scan->cur_char) scan->source.string++;
- }
- return scan->cur_char;
+ if (scan->cur_char == '\n') {
+ scan->line_index++;
+ scan->column_index = COLUMN_START_INDEX;
+ } else if (scan->cur_char != '\0') {
+ scan->column_index++;
+ }
+ if (scan->source_is_file) {
+ int got = read (scan->source.fd, &scan->cur_char, 1);
+ if (!got) scan->cur_char = 0; /* FIXME a better way of doing EOF etc */
+ } else {
+ scan->cur_char = *scan->source.string;
+ if (scan->cur_char) scan->source.string++;
+ }
+ return scan->cur_char;
}
void script_scan_read_next_token (script_scan_t *scan,
- script_scan_token_t *token)
+ script_scan_token_t *token)
{
- unsigned char curchar = script_scan_get_current_char (scan); /* FIXME Double check these unsigned chars are ok */
- unsigned char nextchar;
+ unsigned char curchar = script_scan_get_current_char (scan); /* FIXME Double check these unsigned chars are ok */
+ unsigned char nextchar;
- token->whitespace = 0;
- while (true)
- {
- if (curchar == ' ')
- {
- curchar = script_scan_get_next_char (scan);
- token->whitespace++;
- continue;
- } /* FIXME restrcuture */
- if (curchar == '\n')
- {
- curchar = script_scan_get_next_char (scan);
- token->whitespace++;
- continue;
+ token->whitespace = 0;
+ while (true) {
+ if (curchar == ' ') {
+ curchar = script_scan_get_next_char (scan);
+ token->whitespace++;
+ continue;
+ } /* FIXME restrcuture */
+ if (curchar == '\n') {
+ curchar = script_scan_get_next_char (scan);
+ token->whitespace++;
+ continue;
+ }
+ if (curchar == '\t') {
+ curchar = script_scan_get_next_char (scan);
+ token->whitespace++;
+ continue;
+ }
+ break;
}
- if (curchar == '\t')
- {
- curchar = script_scan_get_next_char (scan);
- token->whitespace++;
- continue;
+ token->location.line_index = scan->line_index;
+ token->location.column_index = scan->column_index;
+ token->location.name = scan->name;
+ nextchar = script_scan_get_next_char (scan);
+
+ if (ply_bitarray_lookup (scan->identifier_1st_char, curchar)) {
+ int index = 1;
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER;
+ token->data.string = malloc (2 * sizeof(char));
+ token->data.string[0] = curchar;
+ token->data.string[1] = '\0';
+ curchar = nextchar;
+ while (ply_bitarray_lookup (scan->identifier_nth_char, curchar)) {
+ token->data.string = realloc (token->data.string,
+ (index + 2) * sizeof(char));
+ token->data.string[index] = curchar;
+ token->data.string[index + 1] = '\0';
+ index++;
+ curchar = script_scan_get_next_char (scan);
+ }
+ return;
}
- break;
- }
- token->location.line_index = scan->line_index;
- token->location.column_index = scan->column_index;
- token->location.name = scan->name;
- nextchar = script_scan_get_next_char (scan);
-
- if (ply_bitarray_lookup (scan->identifier_1st_char, curchar))
- {
- int index = 1;
- token->type = SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER;
- token->data.string = malloc (2 * sizeof (char));
- token->data.string[0] = curchar;
- token->data.string[1] = '\0';
- curchar = nextchar;
- while (ply_bitarray_lookup (scan->identifier_nth_char, curchar))
- {
- token->data.string = realloc (token->data.string,
- (index + 2) * sizeof (char));
- token->data.string[index] = curchar;
- token->data.string[index + 1] = '\0';
- index++;
- curchar = script_scan_get_next_char (scan);
+ if ((curchar >= '0') && (curchar <= '9')) {
+ long long int int_value = curchar - '0';
+ curchar = nextchar;
+ while (curchar >= '0' && curchar <= '9') {
+ int_value *= 10;
+ int_value += curchar - '0';
+ curchar = script_scan_get_next_char (scan);
+ }
+
+ if (curchar == '.') {
+ double floatpoint = int_value;
+ double scalar = 1;
+
+ curchar = script_scan_get_next_char (scan);
+ while (curchar >= '0' && curchar <= '9') {
+ scalar /= 10;
+ floatpoint += scalar * (curchar - '0');
+ curchar = script_scan_get_next_char (scan);
+ }
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_FLOAT;
+ token->data.floatpoint = floatpoint;
+ } else {
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_INTEGER;
+ token->data.integer = int_value;
+ }
+ return;
}
- return;
- }
- if ((curchar >= '0') && (curchar <= '9'))
- {
- long long int int_value = curchar - '0';
- curchar = nextchar;
- while (curchar >= '0' && curchar <= '9')
- {
- int_value *= 10;
- int_value += curchar - '0';
- curchar = script_scan_get_next_char (scan);
+ if (!curchar) {
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_EOF;
+ return;
}
+ if (curchar == '\"') {
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_STRING;
+ int index = 0;
+ token->data.string = malloc (sizeof(char));
+ token->data.string[0] = '\0';
+ curchar = nextchar;
- if (curchar == '.')
- {
- double floatpoint = int_value;
- double scalar = 1;
-
- curchar = script_scan_get_next_char (scan);
- while (curchar >= '0' && curchar <= '9')
- {
- scalar /= 10;
- floatpoint += scalar * (curchar - '0');
- curchar = script_scan_get_next_char (scan);
- }
- token->type = SCRIPT_SCAN_TOKEN_TYPE_FLOAT;
- token->data.floatpoint = floatpoint;
+ while (curchar != '\"') {
+ if (curchar == '\0') {
+ token->data.string = strdup ("End of file before end of string");
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
+ return;
+ }
+ if (curchar == '\n') {
+ token->data.string = strdup ("Line terminator before end of string");
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
+ return;
+ }
+ if (curchar == '\\') {
+ curchar = script_scan_get_next_char (scan);
+ switch (curchar) {
+ case 'n':
+ curchar = '\n';
+ break;
+
+ case '0':
+ curchar = '\0';
+ break;
+
+ case '"':
+ curchar = '\"';
+ break;
+
+ default:
+ break;
+ }
+ }
+ token->data.string = realloc (token->data.string,
+ (index + 2) * sizeof(char));
+ token->data.string[index] = curchar;
+ token->data.string[index + 1] = '\0';
+ index++;
+ curchar = script_scan_get_next_char (scan);
+ }
+ script_scan_get_next_char (scan);
+ return;
}
- else
{
- token->type = SCRIPT_SCAN_TOKEN_TYPE_INTEGER;
- token->data.integer = int_value;
+ bool linecomment = false;
+ if (curchar == '#') linecomment = true;
+ if ((curchar == '/') && (nextchar == '/')) {
+ linecomment = true;
+ nextchar = script_scan_get_next_char (scan);
+ }
+ if (linecomment) {
+ int index = 0;
+ token->data.string = malloc (sizeof(char));
+ token->data.string[0] = '\0';
+ curchar = nextchar;
+ for (curchar = nextchar;
+ curchar != '\n' && curchar != '\0';
+ curchar = script_scan_get_next_char (scan)) {
+ token->data.string = realloc (token->data.string,
+ (index + 2) * sizeof(char));
+ token->data.string[index] = curchar;
+ token->data.string[index + 1] = '\0';
+ index++;
+ }
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
+ return;
+ }
}
- return;
- }
- if (!curchar)
- {
- token->type = SCRIPT_SCAN_TOKEN_TYPE_EOF;
- return;
- }
- if (curchar == '\"')
- {
- token->type = SCRIPT_SCAN_TOKEN_TYPE_STRING;
- int index = 0;
- token->data.string = malloc (sizeof (char));
- token->data.string[0] = '\0';
- curchar = nextchar;
-
- while (curchar != '\"')
- {
- if (curchar == '\0')
- {
- token->data.string = strdup("End of file before end of string");
- token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
- return;
- }
- if (curchar == '\n')
- {
- token->data.string = strdup("Line terminator before end of string");
- token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
- return;
- }
- if (curchar == '\\')
- {
- curchar = script_scan_get_next_char (scan);
- switch (curchar)
- {
- case 'n':
- curchar = '\n';
- break;
-
- case '0':
- curchar = '\0';
- break;
-
- case '"':
- curchar = '\"';
- break;
-
- default:
- break;
+
+ if ((curchar == '/') && (nextchar == '*')) {
+ int index = 0;
+ int depth = 1;
+ token->data.string = malloc (sizeof(char));
+ token->data.string[0] = '\0';
+ curchar = script_scan_get_next_char (scan);
+ nextchar = script_scan_get_next_char (scan);
+
+ while (true) {
+ if (nextchar == '\0') {
+ free (token->data.string);
+ token->data.string = strdup ("End of file before end of comment");
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
+ return;
+ }
+ if ((curchar == '/') && (nextchar == '*'))
+ depth++;
+ if ((curchar == '*') && (nextchar == '/')) {
+ depth--;
+ if (!depth) break;
+ }
+ token->data.string = realloc (token->data.string,
+ (index + 2) * sizeof(char));
+ token->data.string[index] = curchar;
+ token->data.string[index + 1] = '\0';
+ index++;
+ curchar = nextchar;
+ nextchar = script_scan_get_next_char (scan);
}
- }
- token->data.string = realloc (token->data.string,
- (index + 2) * sizeof (char));
- token->data.string[index] = curchar;
- token->data.string[index + 1] = '\0';
- index++;
- curchar = script_scan_get_next_char (scan);
+ script_scan_get_next_char (scan);
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
+ return;
}
- script_scan_get_next_char (scan);
- return;
- }
- {
- bool linecomment = false;
- if (curchar == '#') linecomment = true;
- if ((curchar == '/') && (nextchar == '/'))
- {
- linecomment = true;
- nextchar = script_scan_get_next_char (scan);
- }
- if (linecomment)
- {
- int index = 0;
- token->data.string = malloc (sizeof (char));
- token->data.string[0] = '\0';
- curchar = nextchar;
- for (curchar = nextchar;
- curchar != '\n' && curchar != '\0';
- curchar = script_scan_get_next_char (scan))
- {
- token->data.string = realloc (token->data.string,
- (index + 2) * sizeof (char));
- token->data.string[index] = curchar;
- token->data.string[index + 1] = '\0';
- index++;
- }
- token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
+ /* all other */
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_SYMBOL;
+ token->data.symbol = curchar;
return;
- }
- }
-
- if ((curchar == '/') && (nextchar == '*'))
- {
- int index = 0;
- int depth = 1;
- token->data.string = malloc (sizeof (char));
- token->data.string[0] = '\0';
- curchar = script_scan_get_next_char (scan);
- nextchar = script_scan_get_next_char (scan);
-
- while (true)
- {
- if (nextchar == '\0')
- {
- free (token->data.string);
- token->data.string = strdup("End of file before end of comment");
- token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
- return;
- }
- if ((curchar == '/') && (nextchar == '*'))
- depth++;
- if ((curchar == '*') && (nextchar == '/'))
- {
- depth--;
- if (!depth) break;
- }
- token->data.string = realloc (token->data.string,
- (index + 2) * sizeof (char));
- token->data.string[index] = curchar;
- token->data.string[index + 1] = '\0';
- index++;
- curchar = nextchar;
- nextchar = script_scan_get_next_char (scan);
- }
- script_scan_get_next_char (scan);
- token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
- return;
- }
- /* all other */
- token->type = SCRIPT_SCAN_TOKEN_TYPE_SYMBOL;
- token->data.symbol = curchar;
- return;
}
static script_scan_token_t *script_scan_peek_token (script_scan_t *scan,
- int n)
+ int n)
{
- int i;
-
- /* we're screwed long before we ever actually hit INT_MAX; but at least
- * we shouldn't get ourselves stuck in an infinite loop. */
- if (scan->tokencount <= n && n < INT_MAX)
- {
- scan->tokens =
- realloc (scan->tokens, (n + 1) * sizeof (script_scan_token_t *));
- for (i = scan->tokencount; i <= n; i++)
- {
- scan->tokens[i] = malloc (sizeof (script_scan_token_t));
- scan->tokens[i]->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
+ int i;
+
+ /* we're screwed long before we ever actually hit INT_MAX; but at least
+ * we shouldn't get ourselves stuck in an infinite loop. */
+ if (scan->tokencount <= n && n < INT_MAX) {
+ scan->tokens =
+ realloc (scan->tokens, (n + 1) * sizeof(script_scan_token_t *));
+ for (i = scan->tokencount; i <= n; i++) {
+ scan->tokens[i] = malloc (sizeof(script_scan_token_t));
+ scan->tokens[i]->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
+ }
+ scan->tokencount = n + 1;
}
- scan->tokencount = n + 1;
- }
- if (scan->tokens[n]->type == SCRIPT_SCAN_TOKEN_TYPE_EMPTY)
- {
- if ((n > 0) && (scan->tokens[n - 1]->type == SCRIPT_SCAN_TOKEN_TYPE_EMPTY))
- script_scan_peek_token (scan, n - 1);
- do
- {
- script_scan_token_clean (scan->tokens[n]);
- script_scan_read_next_token (scan, scan->tokens[n]); /* FIXME if skipping comments, add whitespace to next token */
+ if (scan->tokens[n]->type == SCRIPT_SCAN_TOKEN_TYPE_EMPTY) {
+ if ((n > 0) && (scan->tokens[n - 1]->type == SCRIPT_SCAN_TOKEN_TYPE_EMPTY))
+ script_scan_peek_token (scan, n - 1);
+ do {
+ script_scan_token_clean (scan->tokens[n]);
+ script_scan_read_next_token (scan, scan->tokens[n]); /* FIXME if skipping comments, add whitespace to next token */
+ } while (scan->tokens[n]->type == SCRIPT_SCAN_TOKEN_TYPE_COMMENT); /* FIXME optionally pass comments back */
}
- while (scan->tokens[n]->type == SCRIPT_SCAN_TOKEN_TYPE_COMMENT); /* FIXME optionally pass comments back */
- }
- return scan->tokens[n];
+ return scan->tokens[n];
}
script_scan_token_t *script_scan_get_next_token (script_scan_t *scan)
{
- int i;
- script_scan_token_clean (scan->tokens[0]);
- for (i = 0; i < (scan->tokencount - 1); i++)
- *scan->tokens[i] = *scan->tokens[i + 1];
- scan->tokens[(scan->tokencount - 1)]->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
- return script_scan_peek_token (scan, 0);
+ int i;
+
+ script_scan_token_clean (scan->tokens[0]);
+ for (i = 0; i < (scan->tokencount - 1); i++) {
+ *scan->tokens[i] = *scan->tokens[i + 1];
+ }
+ scan->tokens[(scan->tokencount - 1)]->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
+ return script_scan_peek_token (scan, 0);
}
script_scan_token_t *script_scan_get_current_token (script_scan_t *scan)
{
- return script_scan_peek_token (scan, 0);
+ return script_scan_peek_token (scan, 0);
}
script_scan_token_t *script_scan_peek_next_token (script_scan_t *scan)
{
- return script_scan_peek_token (scan, 1);
+ return script_scan_peek_token (scan, 1);
}
-
diff --git a/src/plugins/splash/script/script-scan.h b/src/plugins/splash/script/script-scan.h
index 132451dd..0da83a76 100644
--- a/src/plugins/splash/script/script-scan.h
+++ b/src/plugins/splash/script/script-scan.h
@@ -28,66 +28,66 @@
typedef enum
{
- SCRIPT_SCAN_TOKEN_TYPE_EMPTY,
- SCRIPT_SCAN_TOKEN_TYPE_EOF,
- SCRIPT_SCAN_TOKEN_TYPE_INTEGER,
- SCRIPT_SCAN_TOKEN_TYPE_FLOAT,
- SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER,
- SCRIPT_SCAN_TOKEN_TYPE_STRING,
- SCRIPT_SCAN_TOKEN_TYPE_SYMBOL,
- SCRIPT_SCAN_TOKEN_TYPE_COMMENT,
- SCRIPT_SCAN_TOKEN_TYPE_ERROR,
+ SCRIPT_SCAN_TOKEN_TYPE_EMPTY,
+ SCRIPT_SCAN_TOKEN_TYPE_EOF,
+ SCRIPT_SCAN_TOKEN_TYPE_INTEGER,
+ SCRIPT_SCAN_TOKEN_TYPE_FLOAT,
+ SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER,
+ SCRIPT_SCAN_TOKEN_TYPE_STRING,
+ SCRIPT_SCAN_TOKEN_TYPE_SYMBOL,
+ SCRIPT_SCAN_TOKEN_TYPE_COMMENT,
+ SCRIPT_SCAN_TOKEN_TYPE_ERROR,
} script_scan_token_type_t;
typedef struct
{
- script_scan_token_type_t type;
- union
- {
- char *string;
- char symbol;
- long long int integer;
- double floatpoint;
- } data;
- int whitespace;
- script_debug_location_t location;
+ script_scan_token_type_t type;
+ union
+ {
+ char *string;
+ char symbol;
+ long long int integer;
+ double floatpoint;
+ } data;
+ int whitespace;
+ script_debug_location_t location;
} script_scan_token_t;
typedef struct
{
- union
- {
- int fd;
- const char *string;
- } source;
- char* name;
- unsigned char cur_char;
- ply_bitarray_t *identifier_1st_char;
- ply_bitarray_t *identifier_nth_char;
- int tokencount;
- script_scan_token_t **tokens;
- int line_index;
- int column_index;
- bool source_is_file;
+ union
+ {
+ int fd;
+ const char *string;
+ } source;
+ char *name;
+ unsigned char cur_char;
+ ply_bitarray_t *identifier_1st_char;
+ ply_bitarray_t *identifier_nth_char;
+ int tokencount;
+ script_scan_token_t **tokens;
+ int line_index;
+ int column_index;
+ bool source_is_file;
} script_scan_t;
#define script_scan_token_is_symbol(__token) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_SYMBOL)
-#define script_scan_token_is_symbol_of_value(__token,__value) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_SYMBOL \
- && __token->data.symbol == __value)
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_SYMBOL)
+#define script_scan_token_is_symbol_of_value(__token, __value) \
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_SYMBOL \
+ && __token->data.symbol == __value)
#define script_scan_token_is_identifier(__token) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER)
-#define script_scan_token_is_identifier_of_value(__token,__value) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER \
- && !strcmp(__token->data.string, __value))
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER)
+#define script_scan_token_is_identifier_of_value(__token, __value) \
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER \
+ && !strcmp (__token->data.string, __value))
#define script_scan_token_is_integer(__token) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_INTEGER)
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_INTEGER)
#define script_scan_token_is_string(__token) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_STRING)
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_STRING)
#define script_scan_token_is_float(__token) \
- (__token->type == SCRIPT_SCAN_TOKEN_TYPE_FLOAT)
+ (__token->type == SCRIPT_SCAN_TOKEN_TYPE_FLOAT)
diff --git a/src/plugins/splash/script/script.c b/src/plugins/splash/script/script.c
index 32908259..cd41d580 100644
--- a/src/plugins/splash/script/script.c
+++ b/src/plugins/splash/script/script.c
@@ -44,28 +44,28 @@ script_function_t *script_function_script_new (script_op_t *script,
void *user_data,
ply_list_t *parameter_list)
{
- script_function_t *function = malloc (sizeof (script_function_t));
-
- function->type = SCRIPT_FUNCTION_TYPE_SCRIPT;
- function->parameters = parameter_list;
- function->data.script = script;
- function->freeable = false;
- function->user_data = user_data;
- return function;
+ script_function_t *function = malloc (sizeof(script_function_t));
+
+ function->type = SCRIPT_FUNCTION_TYPE_SCRIPT;
+ function->parameters = parameter_list;
+ function->data.script = script;
+ function->freeable = false;
+ function->user_data = user_data;
+ return function;
}
-script_function_t *script_function_native_new (script_native_function_t native_function,
- void *user_data,
- ply_list_t *parameter_list)
+script_function_t *script_function_native_new (script_native_function_t native_function,
+ void *user_data,
+ ply_list_t *parameter_list)
{
- script_function_t *function = malloc (sizeof (script_function_t));
-
- function->type = SCRIPT_FUNCTION_TYPE_NATIVE;
- function->parameters = parameter_list;
- function->data.native = native_function;
- function->freeable = true;
- function->user_data = user_data;
- return function;
+ script_function_t *function = malloc (sizeof(script_function_t));
+
+ function->type = SCRIPT_FUNCTION_TYPE_NATIVE;
+ function->parameters = parameter_list;
+ function->data.native = native_function;
+ function->freeable = true;
+ function->user_data = user_data;
+ return function;
}
void script_add_native_function (script_obj_t *hash,
@@ -75,76 +75,76 @@ void script_add_native_function (script_obj_t *hash,
const char *first_arg,
...)
{
- va_list args;
- const char *arg;
- ply_list_t *parameter_list = ply_list_new ();
-
- arg = first_arg;
- va_start (args, first_arg);
- while (arg)
- {
- ply_list_append_data (parameter_list, strdup (arg));
- arg = va_arg (args, const char *);
- }
- va_end (args);
-
- script_function_t *function = script_function_native_new (native_function,
- user_data,
- parameter_list);
- script_obj_t *obj = script_obj_new_function (function);
- script_obj_hash_add_element (hash, obj, name);
- script_obj_unref (obj);
+ va_list args;
+ const char *arg;
+ ply_list_t *parameter_list = ply_list_new ();
+
+ arg = first_arg;
+ va_start (args, first_arg);
+ while (arg) {
+ ply_list_append_data (parameter_list, strdup (arg));
+ arg = va_arg (args, const char *);
+ }
+ va_end (args);
+
+ script_function_t *function = script_function_native_new (native_function,
+ user_data,
+ parameter_list);
+ script_obj_t *obj = script_obj_new_function (function);
+ script_obj_hash_add_element (hash, obj, name);
+ script_obj_unref (obj);
}
script_obj_native_class_t *script_obj_native_class_new (script_obj_function_t free_func,
const char *name,
void *user_data)
{
- script_obj_native_class_t *class = malloc (sizeof (script_obj_native_class_t));
+ script_obj_native_class_t *class = malloc (sizeof(script_obj_native_class_t));
- class->free_func = free_func;
- class->name = strdup (name);
- class->user_data = user_data;
- return class;
+ class->free_func = free_func;
+ class->name = strdup (name);
+ class->user_data = user_data;
+ return class;
}
void script_obj_native_class_destroy (script_obj_native_class_t *class)
{
- free (class->name);
- free (class);
- return;
+ free (class->name);
+ free (class);
+ return;
}
script_state_t *script_state_new (void *user_data)
{
- script_state_t *state = malloc (sizeof (script_state_t));
- script_obj_t *global_hash = script_obj_new_hash ();
- state->global = script_obj_new_ref (global_hash);
- script_obj_unref(global_hash);
- state->local = script_obj_new_ref (global_hash);
- state->this = script_obj_new_null();
- state->user_data = user_data;
- return state;
+ script_state_t *state = malloc (sizeof(script_state_t));
+ script_obj_t *global_hash = script_obj_new_hash ();
+
+ state->global = script_obj_new_ref (global_hash);
+ script_obj_unref (global_hash);
+ state->local = script_obj_new_ref (global_hash);
+ state->this = script_obj_new_null ();
+ state->user_data = user_data;
+ return state;
}
script_state_t *script_state_init_sub (script_state_t *oldstate, script_obj_t *this)
{
- script_state_t *newstate = malloc (sizeof (script_state_t));
- script_obj_t *local_hash = script_obj_new_hash ();
- newstate->local = script_obj_new_ref (local_hash);
- script_obj_unref(local_hash);
- newstate->global = script_obj_new_ref (oldstate->global);
- if (this) newstate->this = script_obj_new_ref (this);
- else newstate->this = script_obj_new_ref (oldstate->this);
- newstate->user_data = oldstate->user_data;
- return newstate;
+ script_state_t *newstate = malloc (sizeof(script_state_t));
+ script_obj_t *local_hash = script_obj_new_hash ();
+
+ newstate->local = script_obj_new_ref (local_hash);
+ script_obj_unref (local_hash);
+ newstate->global = script_obj_new_ref (oldstate->global);
+ if (this) newstate->this = script_obj_new_ref (this);
+ else newstate->this = script_obj_new_ref (oldstate->this);
+ newstate->user_data = oldstate->user_data;
+ return newstate;
}
void script_state_destroy (script_state_t *state)
{
- script_obj_unref (state->global);
- script_obj_unref (state->local);
- script_obj_unref (state->this);
- free (state);
+ script_obj_unref (state->global);
+ script_obj_unref (state->local);
+ script_obj_unref (state->this);
+ free (state);
}
-
diff --git a/src/plugins/splash/script/script.h b/src/plugins/splash/script/script.h
index 391deca1..2932c5fb 100644
--- a/src/plugins/splash/script/script.h
+++ b/src/plugins/splash/script/script.h
@@ -28,216 +28,217 @@
typedef enum /* FIXME add _t to all types */
{
- SCRIPT_RETURN_TYPE_NORMAL,
- SCRIPT_RETURN_TYPE_RETURN,
- SCRIPT_RETURN_TYPE_FAIL,
- SCRIPT_RETURN_TYPE_BREAK,
- SCRIPT_RETURN_TYPE_CONTINUE,
+ SCRIPT_RETURN_TYPE_NORMAL,
+ SCRIPT_RETURN_TYPE_RETURN,
+ SCRIPT_RETURN_TYPE_FAIL,
+ SCRIPT_RETURN_TYPE_BREAK,
+ SCRIPT_RETURN_TYPE_CONTINUE,
} script_return_type_t;
struct script_obj_t;
typedef struct
{
- script_return_type_t type;
- struct script_obj_t *object;
+ script_return_type_t type;
+ struct script_obj_t *object;
} script_return_t;
typedef struct
{
- void *user_data;
- struct script_obj_t *global;
- struct script_obj_t *local;
- struct script_obj_t *this;
+ void *user_data;
+ struct script_obj_t *global;
+ struct script_obj_t *local;
+ struct script_obj_t *this;
} script_state_t;
typedef enum
{
- SCRIPT_FUNCTION_TYPE_SCRIPT,
- SCRIPT_FUNCTION_TYPE_NATIVE,
+ SCRIPT_FUNCTION_TYPE_SCRIPT,
+ SCRIPT_FUNCTION_TYPE_NATIVE,
} script_function_type_t;
-typedef script_return_t (*script_native_function_t)(script_state_t *, void *);
+typedef script_return_t (*script_native_function_t)(script_state_t *,
+ void *);
typedef struct script_function_t
{
- script_function_type_t type;
- ply_list_t *parameters; /* list of char* typedef names */
- void *user_data;
- union
- {
- script_native_function_t native;
- struct script_op_t *script;
- } data;
- bool freeable;
+ script_function_type_t type;
+ ply_list_t *parameters; /* list of char* typedef names */
+ void *user_data;
+ union
+ {
+ script_native_function_t native;
+ struct script_op_t *script;
+ } data;
+ bool freeable;
} script_function_t;
typedef void (*script_obj_function_t)(struct script_obj_t *);
typedef struct
{
- script_obj_function_t free_func;
- char *name;
- void *user_data;
+ script_obj_function_t free_func;
+ char *name;
+ void *user_data;
} script_obj_native_class_t;
typedef double script_number_t;
typedef struct
{
- void *object_data;
- script_obj_native_class_t *class;
+ void *object_data;
+ script_obj_native_class_t *class;
} script_obj_native_t;
typedef enum
{
- SCRIPT_OBJ_TYPE_NULL,
- SCRIPT_OBJ_TYPE_REF,
- SCRIPT_OBJ_TYPE_EXTEND,
- SCRIPT_OBJ_TYPE_NUMBER,
- SCRIPT_OBJ_TYPE_STRING,
- SCRIPT_OBJ_TYPE_HASH,
- SCRIPT_OBJ_TYPE_FUNCTION,
- SCRIPT_OBJ_TYPE_NATIVE,
+ SCRIPT_OBJ_TYPE_NULL,
+ SCRIPT_OBJ_TYPE_REF,
+ SCRIPT_OBJ_TYPE_EXTEND,
+ SCRIPT_OBJ_TYPE_NUMBER,
+ SCRIPT_OBJ_TYPE_STRING,
+ SCRIPT_OBJ_TYPE_HASH,
+ SCRIPT_OBJ_TYPE_FUNCTION,
+ SCRIPT_OBJ_TYPE_NATIVE,
} script_obj_type_t;
typedef struct script_obj_t
{
- script_obj_type_t type;
- int refcount;
- union
- {
- script_number_t number;
- char *string;
- struct script_obj_t *obj;
- struct
- {
- struct script_obj_t *obj_a;
- struct script_obj_t *obj_b;
- } dual_obj;
- script_function_t *function;
- ply_hashtable_t *hash;
- script_obj_native_t native;
- } data;
+ script_obj_type_t type;
+ int refcount;
+ union
+ {
+ script_number_t number;
+ char *string;
+ struct script_obj_t *obj;
+ struct
+ {
+ struct script_obj_t *obj_a;
+ struct script_obj_t *obj_b;
+ } dual_obj;
+ script_function_t *function;
+ ply_hashtable_t *hash;
+ script_obj_native_t native;
+ } data;
} script_obj_t;
typedef enum
{
- SCRIPT_EXP_TYPE_TERM_NULL,
- SCRIPT_EXP_TYPE_TERM_NUMBER,
- SCRIPT_EXP_TYPE_TERM_STRING,
- SCRIPT_EXP_TYPE_TERM_VAR,
- SCRIPT_EXP_TYPE_TERM_LOCAL,
- SCRIPT_EXP_TYPE_TERM_GLOBAL,
- SCRIPT_EXP_TYPE_TERM_THIS,
- SCRIPT_EXP_TYPE_TERM_SET,
- SCRIPT_EXP_TYPE_PLUS,
- SCRIPT_EXP_TYPE_MINUS,
- SCRIPT_EXP_TYPE_MUL,
- SCRIPT_EXP_TYPE_DIV,
- SCRIPT_EXP_TYPE_MOD,
- SCRIPT_EXP_TYPE_GT,
- SCRIPT_EXP_TYPE_GE,
- SCRIPT_EXP_TYPE_LT,
- SCRIPT_EXP_TYPE_LE,
- SCRIPT_EXP_TYPE_EQ,
- SCRIPT_EXP_TYPE_NE,
- SCRIPT_EXP_TYPE_AND,
- SCRIPT_EXP_TYPE_OR,
- SCRIPT_EXP_TYPE_EXTEND,
- SCRIPT_EXP_TYPE_NOT,
- SCRIPT_EXP_TYPE_POS,
- SCRIPT_EXP_TYPE_NEG,
- SCRIPT_EXP_TYPE_PRE_INC,
- SCRIPT_EXP_TYPE_PRE_DEC,
- SCRIPT_EXP_TYPE_POST_INC,
- SCRIPT_EXP_TYPE_POST_DEC,
- SCRIPT_EXP_TYPE_HASH,
- SCRIPT_EXP_TYPE_FUNCTION_EXE,
- SCRIPT_EXP_TYPE_FUNCTION_DEF,
- SCRIPT_EXP_TYPE_ASSIGN,
- SCRIPT_EXP_TYPE_ASSIGN_PLUS,
- SCRIPT_EXP_TYPE_ASSIGN_MINUS,
- SCRIPT_EXP_TYPE_ASSIGN_MUL,
- SCRIPT_EXP_TYPE_ASSIGN_DIV,
- SCRIPT_EXP_TYPE_ASSIGN_MOD,
- SCRIPT_EXP_TYPE_ASSIGN_EXTEND,
+ SCRIPT_EXP_TYPE_TERM_NULL,
+ SCRIPT_EXP_TYPE_TERM_NUMBER,
+ SCRIPT_EXP_TYPE_TERM_STRING,
+ SCRIPT_EXP_TYPE_TERM_VAR,
+ SCRIPT_EXP_TYPE_TERM_LOCAL,
+ SCRIPT_EXP_TYPE_TERM_GLOBAL,
+ SCRIPT_EXP_TYPE_TERM_THIS,
+ SCRIPT_EXP_TYPE_TERM_SET,
+ SCRIPT_EXP_TYPE_PLUS,
+ SCRIPT_EXP_TYPE_MINUS,
+ SCRIPT_EXP_TYPE_MUL,
+ SCRIPT_EXP_TYPE_DIV,
+ SCRIPT_EXP_TYPE_MOD,
+ SCRIPT_EXP_TYPE_GT,
+ SCRIPT_EXP_TYPE_GE,
+ SCRIPT_EXP_TYPE_LT,
+ SCRIPT_EXP_TYPE_LE,
+ SCRIPT_EXP_TYPE_EQ,
+ SCRIPT_EXP_TYPE_NE,
+ SCRIPT_EXP_TYPE_AND,
+ SCRIPT_EXP_TYPE_OR,
+ SCRIPT_EXP_TYPE_EXTEND,
+ SCRIPT_EXP_TYPE_NOT,
+ SCRIPT_EXP_TYPE_POS,
+ SCRIPT_EXP_TYPE_NEG,
+ SCRIPT_EXP_TYPE_PRE_INC,
+ SCRIPT_EXP_TYPE_PRE_DEC,
+ SCRIPT_EXP_TYPE_POST_INC,
+ SCRIPT_EXP_TYPE_POST_DEC,
+ SCRIPT_EXP_TYPE_HASH,
+ SCRIPT_EXP_TYPE_FUNCTION_EXE,
+ SCRIPT_EXP_TYPE_FUNCTION_DEF,
+ SCRIPT_EXP_TYPE_ASSIGN,
+ SCRIPT_EXP_TYPE_ASSIGN_PLUS,
+ SCRIPT_EXP_TYPE_ASSIGN_MINUS,
+ SCRIPT_EXP_TYPE_ASSIGN_MUL,
+ SCRIPT_EXP_TYPE_ASSIGN_DIV,
+ SCRIPT_EXP_TYPE_ASSIGN_MOD,
+ SCRIPT_EXP_TYPE_ASSIGN_EXTEND,
} script_exp_type_t;
typedef struct script_exp_t
{
- script_exp_type_t type;
- union
- {
- struct
- {
- struct script_exp_t *sub_a;
- struct script_exp_t *sub_b;
- } dual;
- struct script_exp_t *sub;
- char *string;
- script_number_t number;
- struct
- {
- struct script_exp_t *name;
- ply_list_t *parameters;
- } function_exe;
- ply_list_t *parameters;
- script_function_t *function_def;
- } data;
+ script_exp_type_t type;
+ union
+ {
+ struct
+ {
+ struct script_exp_t *sub_a;
+ struct script_exp_t *sub_b;
+ } dual;
+ struct script_exp_t *sub;
+ char *string;
+ script_number_t number;
+ struct
+ {
+ struct script_exp_t *name;
+ ply_list_t *parameters;
+ } function_exe;
+ ply_list_t *parameters;
+ script_function_t *function_def;
+ } data;
} script_exp_t;
typedef enum
{
- SCRIPT_OP_TYPE_EXPRESSION,
- SCRIPT_OP_TYPE_OP_BLOCK,
- SCRIPT_OP_TYPE_IF,
- SCRIPT_OP_TYPE_WHILE,
- SCRIPT_OP_TYPE_DO_WHILE,
- SCRIPT_OP_TYPE_FOR,
- SCRIPT_OP_TYPE_RETURN,
- SCRIPT_OP_TYPE_FAIL,
- SCRIPT_OP_TYPE_BREAK,
- SCRIPT_OP_TYPE_CONTINUE,
+ SCRIPT_OP_TYPE_EXPRESSION,
+ SCRIPT_OP_TYPE_OP_BLOCK,
+ SCRIPT_OP_TYPE_IF,
+ SCRIPT_OP_TYPE_WHILE,
+ SCRIPT_OP_TYPE_DO_WHILE,
+ SCRIPT_OP_TYPE_FOR,
+ SCRIPT_OP_TYPE_RETURN,
+ SCRIPT_OP_TYPE_FAIL,
+ SCRIPT_OP_TYPE_BREAK,
+ SCRIPT_OP_TYPE_CONTINUE,
} script_op_type_t;
typedef struct script_op_t
{
- script_op_type_t type;
- union
- {
- script_exp_t *exp;
- ply_list_t *list;
- struct
- {
- script_exp_t *cond;
- struct script_op_t *op1;
- struct script_op_t *op2;
- } cond_op;
- } data;
+ script_op_type_t type;
+ union
+ {
+ script_exp_t *exp;
+ ply_list_t *list;
+ struct
+ {
+ script_exp_t *cond;
+ struct script_op_t *op1;
+ struct script_op_t *op2;
+ } cond_op;
+ } data;
} script_op_t;
typedef struct
{
- char *name;
- script_obj_t *object;
+ char *name;
+ script_obj_t *object;
} script_variable_t;
-#define script_return_obj(_return_object) ((script_return_t) {SCRIPT_RETURN_TYPE_RETURN, _return_object})
-#define script_return_obj_null() ((script_return_t) {SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()})
-#define script_return_fail() ((script_return_t) {SCRIPT_RETURN_TYPE_FAIL, NULL})
-#define script_return_normal() ((script_return_t) {SCRIPT_RETURN_TYPE_NORMAL, NULL})
-#define script_return_normal_obj(_return_object) ((script_return_t) {SCRIPT_RETURN_TYPE_NORMAL, _return_object})
-#define script_return_break() ((script_return_t) {SCRIPT_RETURN_TYPE_BREAK, NULL})
-#define script_return_continue() ((script_return_t) {SCRIPT_RETURN_TYPE_CONTINUE, NULL})
+#define script_return_obj(_return_object) ((script_return_t) { SCRIPT_RETURN_TYPE_RETURN, _return_object })
+#define script_return_obj_null() ((script_return_t) { SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null () })
+#define script_return_fail() ((script_return_t) { SCRIPT_RETURN_TYPE_FAIL, NULL })
+#define script_return_normal() ((script_return_t) { SCRIPT_RETURN_TYPE_NORMAL, NULL })
+#define script_return_normal_obj(_return_object) ((script_return_t) { SCRIPT_RETURN_TYPE_NORMAL, _return_object })
+#define script_return_break() ((script_return_t) { SCRIPT_RETURN_TYPE_BREAK, NULL })
+#define script_return_continue() ((script_return_t) { SCRIPT_RETURN_TYPE_CONTINUE, NULL })
-script_function_t *script_function_script_new (script_op_t *script,
- void *user_data,
- ply_list_t *parameter_list);
-script_function_t *script_function_native_new (script_native_function_t native_function,
- void *user_data,
- ply_list_t *parameter_list);
+script_function_t *script_function_script_new (script_op_t *script,
+ void *user_data,
+ ply_list_t *parameter_list);
+script_function_t *script_function_native_new (script_native_function_t native_function,
+ void *user_data,
+ ply_list_t *parameter_list);
void script_add_native_function (script_obj_t *hash,
const char *name,
script_native_function_t native_function,
@@ -248,9 +249,9 @@ script_obj_native_class_t *script_obj_native_class_new (script_obj_function_t fr
const char *name,
void *user_data);
-void script_obj_native_class_destroy (script_obj_native_class_t * class);
+void script_obj_native_class_destroy (script_obj_native_class_t *class);
script_state_t *script_state_new (void *user_data);
-script_state_t *script_state_init_sub (script_state_t *oldstate, script_obj_t *this);
+script_state_t *script_state_init_sub (script_state_t * oldstate, script_obj_t * this);
void script_state_destroy (script_state_t *state);
#endif /* SCRIPT_H */
diff --git a/src/plugins/splash/space-flares/plugin.c b/src/plugins/splash/space-flares/plugin.c
index e31dce87..5212c38c 100644
--- a/src/plugins/splash/space-flares/plugin.c
+++ b/src/plugins/splash/space-flares/plugin.c
@@ -72,135 +72,136 @@
#define SHOW_PROGRESS_BAR
/*#define SHOW_LOGO_HALO */
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
typedef enum
{
- SPRITE_TYPE_STATIC,
- SPRITE_TYPE_FLARE,
- SPRITE_TYPE_SATELLITE,
- SPRITE_TYPE_PROGRESS,
- SPRITE_TYPE_STAR_BG,
+ SPRITE_TYPE_STATIC,
+ SPRITE_TYPE_FLARE,
+ SPRITE_TYPE_SATELLITE,
+ SPRITE_TYPE_PROGRESS,
+ SPRITE_TYPE_STAR_BG,
} sprite_type_t;
typedef struct
{
- int x;
- int y;
- int z;
- int oldx;
- int oldy;
- int oldz;
- int refresh_me;
- float opacity;
- ply_image_t *image;
- sprite_type_t type;
- void* data;
+ int x;
+ int y;
+ int z;
+ int oldx;
+ int oldy;
+ int oldz;
+ int refresh_me;
+ float opacity;
+ ply_image_t *image;
+ sprite_type_t type;
+ void *data;
} sprite_t;
typedef struct
{
- float stretch[FLARE_COUNT];
- float rotate_yz[FLARE_COUNT];
- float rotate_xy[FLARE_COUNT];
- float rotate_xz[FLARE_COUNT];
- float increase_speed[FLARE_COUNT];
- float z_offset_strength[FLARE_COUNT];
- float y_size[FLARE_COUNT];
- ply_image_t *image_a;
- ply_image_t *image_b;
- int frame_count;
+ float stretch[FLARE_COUNT];
+ float rotate_yz[FLARE_COUNT];
+ float rotate_xy[FLARE_COUNT];
+ float rotate_xz[FLARE_COUNT];
+ float increase_speed[FLARE_COUNT];
+ float z_offset_strength[FLARE_COUNT];
+ float y_size[FLARE_COUNT];
+ ply_image_t *image_a;
+ ply_image_t *image_b;
+ int frame_count;
} flare_t;
typedef enum
{
- SATELLITE_TYPE_PLANET,
- SATELLITE_TYPE_COMET,
+ SATELLITE_TYPE_PLANET,
+ SATELLITE_TYPE_COMET,
} satellite_type_t;
typedef struct
{
- satellite_type_t type;
- int start_x;
- int start_y;
- int end_x;
- int end_y;
- int distance;
- double theta;
- ply_image_t *image;
- ply_image_t *image_altered;
+ satellite_type_t type;
+ int start_x;
+ int start_y;
+ int end_x;
+ int end_y;
+ int distance;
+ double theta;
+ ply_image_t *image;
+ ply_image_t *image_altered;
} satellite_t;
typedef struct
{
- int start_width;
- int end_width;
- int current_width;
- ply_image_t *image;
- ply_image_t *image_altered;
+ int start_width;
+ int end_width;
+ int current_width;
+ ply_image_t *image;
+ ply_image_t *image_altered;
} progress_t;
typedef struct
{
- int star_count;
- int *star_x;
- int *star_y;
- int *star_refresh;
- int frame_count;
+ int star_count;
+ int *star_x;
+ int *star_y;
+ int *star_refresh;
+ int frame_count;
} star_bg_t;
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_pixel_display_t *display;
- ply_entry_t *entry;
- ply_label_t *label;
- ply_label_t *message_label;
- ply_list_t *sprites;
- ply_rectangle_t box_area, lock_area, logo_area;
- ply_image_t *scaled_background_image;
+ ply_boot_splash_plugin_t *plugin;
+ ply_pixel_display_t *display;
+ ply_entry_t *entry;
+ ply_label_t *label;
+ ply_label_t *message_label;
+ ply_list_t *sprites;
+ ply_rectangle_t box_area, lock_area, logo_area;
+ ply_image_t *scaled_background_image;
} view_t;
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
- ply_image_t *logo_image;
- ply_image_t *lock_image;
- ply_image_t *box_image;
- ply_image_t *star_image;
-
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
+ ply_image_t *logo_image;
+ ply_image_t *lock_image;
+ ply_image_t *box_image;
+ ply_image_t *star_image;
+
#ifdef SHOW_PLANETS
- ply_image_t *planet_image[5];
+ ply_image_t *planet_image[5];
#endif
#ifdef SHOW_PROGRESS_BAR
- ply_image_t *progress_barimage;
+ ply_image_t *progress_barimage;
#endif
#ifdef SHOW_LOGO_HALO
- ply_image_t *highlight_logo_image;
+ ply_image_t *highlight_logo_image;
#endif
- char *image_dir;
- ply_boot_splash_display_type_t state;
- ply_list_t *views;
+ char *image_dir;
+ ply_boot_splash_display_type_t state;
+ ply_list_t *views;
- double now;
-
- double progress;
- double progress_target;
+ double now;
- uint32_t root_is_mounted : 1;
- uint32_t is_visible : 1;
- uint32_t is_animating : 1;
+ double progress;
+ double progress_target;
+
+ uint32_t root_is_mounted : 1;
+ uint32_t is_visible : 1;
+ uint32_t is_animating : 1;
};
ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
@@ -210,19 +211,19 @@ static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- view->entry = ply_entry_new (plugin->image_dir);
- view->label = ply_label_new ();
- view->message_label = ply_label_new ();
+ view->entry = ply_entry_new (plugin->image_dir);
+ view->label = ply_label_new ();
+ view->message_label = ply_label_new ();
- view->sprites = ply_list_new ();
+ view->sprites = ply_list_new ();
- return view;
+ return view;
}
static void view_free_sprites (view_t *view);
@@ -230,172 +231,166 @@ static void view_free_sprites (view_t *view);
static void
view_free (view_t *view)
{
+ ply_entry_free (view->entry);
+ ply_label_free (view->label);
+ ply_label_free (view->message_label);
+ view_free_sprites (view);
+ ply_list_free (view->sprites);
- ply_entry_free (view->entry);
- ply_label_free (view->label);
- ply_label_free (view->message_label);
- view_free_sprites (view);
- ply_list_free (view->sprites);
-
- ply_image_free (view->scaled_background_image);
+ ply_image_free (view->scaled_background_image);
- free (view);
+ free (view);
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
+ view_free (view);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static bool
view_load (view_t *view)
{
- ply_trace ("loading entry");
- if (!ply_entry_load (view->entry))
- return false;
+ ply_trace ("loading entry");
+ if (!ply_entry_load (view->entry))
+ return false;
- return true;
+ return true;
}
static bool
load_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- bool view_loaded;
+ ply_list_node_t *node;
+ bool view_loaded;
- view_loaded = false;
- node = ply_list_get_first_node (plugin->views);
+ view_loaded = false;
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view_load (view))
- view_loaded = true;
+ if (view_load (view))
+ view_loaded = true;
- node = next_node;
- }
+ node = next_node;
+ }
- return view_loaded;
+ return view_loaded;
}
static void
view_redraw (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
redraw_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_redraw (view);
+ view_redraw (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
pause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_pause_updates (view->display);
+ ply_pixel_display_pause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_unpause_updates (view->display);
+ ply_pixel_display_unpause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
-static sprite_t*
+static sprite_t *
add_sprite (view_t *view,
ply_image_t *image,
int type,
void *data)
{
- sprite_t *new_sprite = calloc (1, sizeof (sprite_t));
-
- new_sprite->x = 0;
- new_sprite->y = 0;
- new_sprite->z = 0;
- new_sprite->oldx = 0;
- new_sprite->oldy = 0;
- new_sprite->oldz = 0;
- new_sprite->opacity = 1;
- new_sprite->refresh_me = 0;
- new_sprite->image = image;
- new_sprite->type = type;
- new_sprite->data = data;
-
- ply_list_append_data (view->sprites, new_sprite);
-
- return new_sprite;
+ sprite_t *new_sprite = calloc (1, sizeof(sprite_t));
+
+ new_sprite->x = 0;
+ new_sprite->y = 0;
+ new_sprite->z = 0;
+ new_sprite->oldx = 0;
+ new_sprite->oldy = 0;
+ new_sprite->oldz = 0;
+ new_sprite->opacity = 1;
+ new_sprite->refresh_me = 0;
+ new_sprite->image = image;
+ new_sprite->type = type;
+ new_sprite->data = data;
+
+ ply_list_append_data (view->sprites, new_sprite);
+
+ return new_sprite;
}
static void view_setup_scene (view_t *view);
@@ -403,784 +398,752 @@ static void view_setup_scene (view_t *view);
static void
view_start_animation (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- assert (view != NULL);
+ assert (view != NULL);
- view_setup_scene (view);
+ view_setup_scene (view);
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
view_show_prompt (view_t *view,
const char *prompt)
{
- ply_boot_splash_plugin_t *plugin;
- int x, y;
- int entry_width, entry_height;
+ ply_boot_splash_plugin_t *plugin;
+ int x, y;
+ int entry_width, entry_height;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- if (ply_entry_is_hidden (view->entry))
- {
- unsigned long screen_width, screen_height;
+ if (ply_entry_is_hidden (view->entry)) {
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- view->box_area.width = ply_image_get_width (plugin->box_image);
- view->box_area.height = ply_image_get_height (plugin->box_image);
- view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0;
- view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0;
+ view->box_area.width = ply_image_get_width (plugin->box_image);
+ view->box_area.height = ply_image_get_height (plugin->box_image);
+ view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0;
+ view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0;
- view->lock_area.width = ply_image_get_width (plugin->lock_image);
- view->lock_area.height = ply_image_get_height (plugin->lock_image);
+ view->lock_area.width = ply_image_get_width (plugin->lock_image);
+ view->lock_area.height = ply_image_get_height (plugin->lock_image);
- entry_width = ply_entry_get_width (view->entry);
- entry_height = ply_entry_get_height (view->entry);
+ entry_width = ply_entry_get_width (view->entry);
+ entry_height = ply_entry_get_height (view->entry);
- x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
- y = screen_height / 2.0 - entry_height / 2.0;
+ x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
+ y = screen_height / 2.0 - entry_height / 2.0;
- view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
- view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
+ view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
+ view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
- ply_entry_show (view->entry, plugin->loop, view->display, x, y);
- }
+ ply_entry_show (view->entry, plugin->loop, view->display, x, y);
+ }
- if (prompt != NULL)
- {
- ply_label_set_text (view->label, prompt);
+ if (prompt != NULL) {
+ ply_label_set_text (view->label, prompt);
- x = view->box_area.x + view->lock_area.width / 2;
- y = view->box_area.y + view->box_area.height;
+ x = view->box_area.x + view->lock_area.width / 2;
+ y = view->box_area.y + view->box_area.height;
- ply_label_show (view->label, view->display, x, y);
- }
+ ply_label_show (view->label, view->display, x, y);
+ }
}
static void
view_hide_prompt (view_t *view)
{
- assert (view != NULL);
+ assert (view != NULL);
- ply_entry_hide (view->entry);
- ply_label_hide (view->label);
+ ply_entry_hide (view->entry);
+ ply_label_hide (view->label);
}
static void
hide_prompt (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_hide_prompt (view);
+ view_hide_prompt (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
- char *image_dir, *image_path;
+ ply_boot_splash_plugin_t *plugin;
+ char *image_dir, *image_path;
- srand ((int) ply_get_timestamp ());
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
+ srand ((int) ply_get_timestamp ());
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
- plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE);
+ plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE);
- image_dir = ply_key_file_get_value (key_file, "space-flares", "ImageDir");
+ image_dir = ply_key_file_get_value (key_file, "space-flares", "ImageDir");
- asprintf (&image_path, "%s/lock.png", image_dir);
- plugin->lock_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/lock.png", image_dir);
+ plugin->lock_image = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/box.png", image_dir);
- plugin->box_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/box.png", image_dir);
+ plugin->box_image = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/star.png", image_dir);
- plugin->star_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/star.png", image_dir);
+ plugin->star_image = ply_image_new (image_path);
+ free (image_path);
#ifdef SHOW_PLANETS
- asprintf (&image_path, "%s/plant1.png", image_dir);
- plugin->planet_image[0] = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/plant1.png", image_dir);
+ plugin->planet_image[0] = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/plant2.png", image_dir);
- plugin->planet_image[1] = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/plant2.png", image_dir);
+ plugin->planet_image[1] = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/plant3.png", image_dir);
- plugin->planet_image[2] = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/plant3.png", image_dir);
+ plugin->planet_image[2] = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/plant4.png", image_dir);
- plugin->planet_image[3] = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/plant4.png", image_dir);
+ plugin->planet_image[3] = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/plant5.png", image_dir);
- plugin->planet_image[4] = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/plant5.png", image_dir);
+ plugin->planet_image[4] = ply_image_new (image_path);
+ free (image_path);
#endif
#ifdef SHOW_PROGRESS_BAR
- asprintf (&image_path, "%s/progress_bar.png", image_dir);
- plugin->progress_barimage = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/progress_bar.png", image_dir);
+ plugin->progress_barimage = ply_image_new (image_path);
+ free (image_path);
#endif
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- plugin->progress = 0;
- plugin->progress_target = -1;
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ plugin->progress = 0;
+ plugin->progress_target = -1;
- plugin->image_dir = image_dir;
+ plugin->image_dir = image_dir;
- plugin->views = ply_list_new ();
+ plugin->views = ply_list_new ();
- return plugin;
+ return plugin;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- if (plugin == NULL)
- return;
+ if (plugin == NULL)
+ return;
- free (plugin->image_dir);
+ free (plugin->image_dir);
- if (plugin->loop != NULL)
- {
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ if (plugin->loop != NULL) {
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- ply_image_free (plugin->logo_image);
- ply_image_free (plugin->lock_image);
- ply_image_free (plugin->box_image);
+ ply_image_free (plugin->logo_image);
+ ply_image_free (plugin->lock_image);
+ ply_image_free (plugin->box_image);
- ply_image_free (plugin->star_image);
+ ply_image_free (plugin->star_image);
#ifdef SHOW_PLANETS
- ply_image_free (plugin->planet_image[0]);
- ply_image_free (plugin->planet_image[1]);
- ply_image_free (plugin->planet_image[2]);
- ply_image_free (plugin->planet_image[3]);
- ply_image_free (plugin->planet_image[4]);
+ ply_image_free (plugin->planet_image[0]);
+ ply_image_free (plugin->planet_image[1]);
+ ply_image_free (plugin->planet_image[2]);
+ ply_image_free (plugin->planet_image[3]);
+ ply_image_free (plugin->planet_image[4]);
#endif
#ifdef SHOW_PROGRESS_BAR
- ply_image_free (plugin->progress_barimage);
+ ply_image_free (plugin->progress_barimage);
#endif
- free_views (plugin);
+ free_views (plugin);
- free (plugin);
+ free (plugin);
}
static void
-free_sprite (sprite_t* sprite)
+free_sprite (sprite_t *sprite)
{
- if (sprite)
- {
- switch (sprite->type){
- case SPRITE_TYPE_STATIC:
- break;
- case SPRITE_TYPE_SATELLITE:
- {
- satellite_t *satellite = sprite->data;
- ply_image_free (satellite->image_altered);
- break;
- }
- break;
- case SPRITE_TYPE_PROGRESS:
- {
- progress_t *progress = sprite->data;
- ply_image_free (progress->image_altered);
- break;
- }
- break;
- case SPRITE_TYPE_FLARE:
- {
- flare_t *flare = sprite->data;
- ply_image_free (flare->image_a);
- ply_image_free (flare->image_b);
- break;
- }
- case SPRITE_TYPE_STAR_BG:
- {
- star_bg_t *star_bg = sprite->data;
- free (star_bg->star_x);
- free (star_bg->star_y);
- free (star_bg->star_refresh);
- break;
- }
+ if (sprite) {
+ switch (sprite->type) {
+ case SPRITE_TYPE_STATIC:
+ break;
+ case SPRITE_TYPE_SATELLITE:
+ {
+ satellite_t *satellite = sprite->data;
+ ply_image_free (satellite->image_altered);
+ break;
+ }
+ break;
+ case SPRITE_TYPE_PROGRESS:
+ {
+ progress_t *progress = sprite->data;
+ ply_image_free (progress->image_altered);
+ break;
+ }
+ break;
+ case SPRITE_TYPE_FLARE:
+ {
+ flare_t *flare = sprite->data;
+ ply_image_free (flare->image_a);
+ ply_image_free (flare->image_b);
+ break;
+ }
+ case SPRITE_TYPE_STAR_BG:
+ {
+ star_bg_t *star_bg = sprite->data;
+ free (star_bg->star_x);
+ free (star_bg->star_y);
+ free (star_bg->star_refresh);
+ break;
+ }
+ }
+
+ if (sprite->data) free (sprite->data);
+ free (sprite);
}
-
- if (sprite->data) free(sprite->data);
- free(sprite);
- }
- return;
+ return;
}
static int
sprite_compare_z (void *data_a, void *data_b)
{
- sprite_t *sprite_a = data_a;
- sprite_t *sprite_b = data_b;
- return sprite_a->z - sprite_b->z;
+ sprite_t *sprite_a = data_a;
+ sprite_t *sprite_b = data_b;
+
+ return sprite_a->z - sprite_b->z;
}
-static void
-stretch_image(ply_image_t *scaled_image, ply_image_t *orig_image, int width)
+static void
+stretch_image (ply_image_t *scaled_image, ply_image_t *orig_image, int width)
{
- int x, y;
- int stretched_width = ply_image_get_width (scaled_image);
- int stretched_height = ply_image_get_height (scaled_image);
- int orig_width = ply_image_get_width (orig_image);
- uint32_t * scaled_image_data = ply_image_get_data (scaled_image);
- uint32_t * orig_image_data = ply_image_get_data (orig_image);
-
-
- for (y=0; y<stretched_height; y++)
- {
- float my_width = y+0.5;
- my_width /= (stretched_height);
- my_width *= 2;
- my_width -= 1;
- my_width *= my_width;
- my_width = sqrt(1-my_width)-1;
- my_width *= stretched_height;
- my_width /= 2;
- my_width = width+my_width;
- for (x=0; x<stretched_width; x++)
- {
- if(x<my_width)
- {
- uint32_t value = 0x0;
- int new_x = (x * orig_width) / width;
- value = orig_image_data[new_x + y * orig_width];
- scaled_image_data[x + y * stretched_width] = value;
- }
- else
- {
- scaled_image_data[x + y * stretched_width] = 0;
- }
+ int x, y;
+ int stretched_width = ply_image_get_width (scaled_image);
+ int stretched_height = ply_image_get_height (scaled_image);
+ int orig_width = ply_image_get_width (orig_image);
+ uint32_t *scaled_image_data = ply_image_get_data (scaled_image);
+ uint32_t *orig_image_data = ply_image_get_data (orig_image);
+
+
+ for (y = 0; y < stretched_height; y++) {
+ float my_width = y + 0.5;
+ my_width /= (stretched_height);
+ my_width *= 2;
+ my_width -= 1;
+ my_width *= my_width;
+ my_width = sqrt (1 - my_width) - 1;
+ my_width *= stretched_height;
+ my_width /= 2;
+ my_width = width + my_width;
+ for (x = 0; x < stretched_width; x++) {
+ if (x < my_width) {
+ uint32_t value = 0x0;
+ int new_x = (x * orig_width) / width;
+ value = orig_image_data[new_x + y * orig_width];
+ scaled_image_data[x + y * stretched_width] = value;
+ } else {
+ scaled_image_data[x + y * stretched_width] = 0;
+ }
+ }
}
- }
}
static void
-progress_update (view_t *view, sprite_t* sprite, double time)
+progress_update (view_t *view, sprite_t *sprite, double time)
{
- progress_t *progress = sprite->data;
- ply_boot_splash_plugin_t *plugin = view->plugin;
- int newwidth = plugin->progress * (progress->end_width - progress->start_width) + progress->start_width;
-
- if (progress->current_width >newwidth) return;
- progress->current_width = newwidth;
- stretch_image(progress->image_altered, progress->image, newwidth);
- sprite->opacity = plugin->progress;
- sprite->refresh_me=1;
+ progress_t *progress = sprite->data;
+ ply_boot_splash_plugin_t *plugin = view->plugin;
+ int newwidth = plugin->progress * (progress->end_width - progress->start_width) + progress->start_width;
+
+ if (progress->current_width > newwidth) return;
+ progress->current_width = newwidth;
+ stretch_image (progress->image_altered, progress->image, newwidth);
+ sprite->opacity = plugin->progress;
+ sprite->refresh_me = 1;
}
-static inline uint32_t
+static inline uint32_t
star_bg_gradient_colour (int x, int y, int width, int height, bool star, float time)
{
- int full_dist = sqrt(width*width+height*height);
- int my_dist = sqrt(x*x+y*y);
- float val;
-
- uint16_t r0 = 0x0000; /* start colour:033c73 */
- uint16_t g0 = 0x3c00;
- uint16_t b0 = 0x7300;
-
- uint16_t r1 = 0x0000; /* end colour:00193a */
- uint16_t g1 = 0x1900;
- uint16_t b1 = 0x3a00;
-
- uint16_t r = r0+((r1-r0)*my_dist)/full_dist;
- uint16_t g = g0+((g1-g0)*my_dist)/full_dist;
- uint16_t b = b0+((b1-b0)*my_dist)/full_dist;
-
- static uint16_t r_err = 0;
- static uint16_t g_err = 0;
- static uint16_t b_err = 0;
-
- r += r_err;
- g += g_err;
- b += b_err;
- r_err = ((r>>8) | ((r>>8)<<8)) - r;
- g_err = ((g>>8) | ((g>>8)<<8)) - g;
- b_err = ((b>>8) | ((b>>8)<<8)) - b;
- r >>= 8;
- g >>= 8;
- b >>= 8;
-
- if (!star) {
-
- return 0xff000000 | r<<16 | g<<8 | b;
- }
-
- x -= width+720-800;
- y -= height+300-480;
- val = sqrt(x*x+y*y)/100;
- val = (sin(val-time*(2*M_PI)*STAR_HZ+atan2(y, x)*2)+1)/2;
-
- val= val*0.3;
-
- r = r*(1-val) + val*0xff;
- g = g*(1-val) + val*0xff;
- b = b*(1-val) + val*0xff;
-
- return 0xff000000 | r<<16 | g<<8 | b;
+ int full_dist = sqrt (width * width + height * height);
+ int my_dist = sqrt (x * x + y * y);
+ float val;
+
+ uint16_t r0 = 0x0000; /* start colour:033c73 */
+ uint16_t g0 = 0x3c00;
+ uint16_t b0 = 0x7300;
+
+ uint16_t r1 = 0x0000; /* end colour:00193a */
+ uint16_t g1 = 0x1900;
+ uint16_t b1 = 0x3a00;
+
+ uint16_t r = r0 + ((r1 - r0) * my_dist) / full_dist;
+ uint16_t g = g0 + ((g1 - g0) * my_dist) / full_dist;
+ uint16_t b = b0 + ((b1 - b0) * my_dist) / full_dist;
+
+ static uint16_t r_err = 0;
+ static uint16_t g_err = 0;
+ static uint16_t b_err = 0;
+
+ r += r_err;
+ g += g_err;
+ b += b_err;
+ r_err = ((r >> 8) | ((r >> 8) << 8)) - r;
+ g_err = ((g >> 8) | ((g >> 8) << 8)) - g;
+ b_err = ((b >> 8) | ((b >> 8) << 8)) - b;
+ r >>= 8;
+ g >>= 8;
+ b >>= 8;
+
+ if (!star)
+
+ return 0xff000000 | r << 16 | g << 8 | b;
+
+ x -= width + 720 - 800;
+ y -= height + 300 - 480;
+ val = sqrt (x * x + y * y) / 100;
+ val = (sin (val - time * (2 * M_PI) * STAR_HZ + atan2 (y, x) * 2) + 1) / 2;
+
+ val = val * 0.3;
+
+ r = r * (1 - val) + val * 0xff;
+ g = g * (1 - val) + val * 0xff;
+ b = b * (1 - val) + val * 0xff;
+
+ return 0xff000000 | r << 16 | g << 8 | b;
}
static void
-star_bg_update (view_t *view, sprite_t* sprite, double time)
+star_bg_update (view_t *view, sprite_t *sprite, double time)
{
- star_bg_t *star_bg = sprite->data;
- int width = ply_image_get_width (sprite->image);
- int height = ply_image_get_height (sprite->image);
- uint32_t* image_data = ply_image_get_data (sprite->image);
- int i, x, y;
- star_bg->frame_count++;
- star_bg->frame_count%=FRAMES_PER_SECOND/BG_STARS_FRAMES_PER_SECOND;
-
- for (i = star_bg->frame_count; i < star_bg->star_count; i+=FRAMES_PER_SECOND/BG_STARS_FRAMES_PER_SECOND){
- x = star_bg->star_x[i];
- y = star_bg->star_y[i];
- uint32_t pixel_colour = star_bg_gradient_colour (x, y, width, height, true, time);
- if (abs(((image_data[x + y * width]>>16)&0xff) - ((pixel_colour>>16)&0xff))>8){
- image_data[x + y * width] = pixel_colour;
- star_bg->star_refresh[i]=1;
+ star_bg_t *star_bg = sprite->data;
+ int width = ply_image_get_width (sprite->image);
+ int height = ply_image_get_height (sprite->image);
+ uint32_t *image_data = ply_image_get_data (sprite->image);
+ int i, x, y;
+
+ star_bg->frame_count++;
+ star_bg->frame_count %= FRAMES_PER_SECOND / BG_STARS_FRAMES_PER_SECOND;
+
+ for (i = star_bg->frame_count; i < star_bg->star_count; i += FRAMES_PER_SECOND / BG_STARS_FRAMES_PER_SECOND) {
+ x = star_bg->star_x[i];
+ y = star_bg->star_y[i];
+ uint32_t pixel_colour = star_bg_gradient_colour (x, y, width, height, true, time);
+ if (abs (((image_data[x + y * width] >> 16) & 0xff) - ((pixel_colour >> 16) & 0xff)) > 8) {
+ image_data[x + y * width] = pixel_colour;
+ star_bg->star_refresh[i] = 1;
+ }
}
- }
-
-
- sprite->refresh_me=1;
+
+
+ sprite->refresh_me = 1;
}
static void
-satellite_move (view_t *view, sprite_t* sprite, double time)
+satellite_move (view_t *view, sprite_t *sprite, double time)
{
- ply_boot_splash_plugin_t *plugin = view->plugin;
- satellite_t *satellite = sprite->data;
-
- int width = ply_image_get_width (sprite->image);
- int height = ply_image_get_height (sprite->image);
- unsigned long screen_width, screen_height;
-
- sprite->x=cos(satellite->theta+(1-plugin->progress)*2000/(satellite->distance))*satellite->distance;
- sprite->y=sin(satellite->theta+(1-plugin->progress)*2000/(satellite->distance))*satellite->distance;
- sprite->z=0;
-
- float distance = sqrt(sprite->z*sprite->z+sprite->y*sprite->y);
- float angle_zy = atan2 (sprite->y, sprite->z)-M_PI*0.4;
- sprite->z = distance* cos(angle_zy);
- sprite->y = distance* sin(angle_zy);
-
- float angle_offset = atan2 (sprite->x, sprite->y);
- float cresent_angle = atan2 (sqrt(sprite->x*sprite->x+sprite->y*sprite->y), sprite->z);
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
-
- sprite->x+=(float)satellite->end_x*plugin->progress+(float)satellite->start_x*(1-plugin->progress)-width/2;
- sprite->y+=(float)satellite->end_y*plugin->progress+(float)satellite->start_y*(1-plugin->progress)-height/2;
-
- if (sprite->x > (signed int) screen_width) return;
- if (sprite->y > (signed int) screen_height) return;
-
- if (satellite->type == SATELLITE_TYPE_PLANET)
- {
- int x, y;
-
- uint32_t *image_data = ply_image_get_data (satellite->image);
- uint32_t *cresent_data = ply_image_get_data (satellite->image_altered);
-
- for (y=0; y<height; y++) for (x=0; x<width; x++)
- {
-
- float fx = x-(float)width/2;
- float fy = y-(float)height/2;
- float angle = atan2 (fy, fx)+angle_offset;
- float distance = sqrt(fy*fy+fx*fx);
- fx = cos(angle)*(distance/(width/2));
- fy = sin(angle)*(distance/(height/2));
- float want_y = sqrt(1-fx*fx);
- want_y *= -cos(cresent_angle);
- if (fy<want_y)
- {
- cresent_data[x+y*width] = image_data[x+y*width];
- }
- else
- {
- int strength =(fy-want_y)*16+2;
- uint32_t val =0;
- int alpha = ((image_data[x+y*width]>>24) & 0xFF);
- if (strength<=0)strength=1;
- if (strength>=8)strength=8;
- val |= (((image_data[x+y*width]>>24) & 0xFF)/1)<<24;
- val |= (((image_data[x+y*width]>>16) & 0xFF)/strength)<<16;
- val |= (((image_data[x+y*width]>>8 ) & 0xFF)/strength)<<8;
- val |= (((image_data[x+y*width]>>0 ) & 0xFF)/strength+(alpha-alpha/(strength))/8)<<0;
- cresent_data[x+y*width] =val;
- }
- }
- }
-
- if (satellite->type == SATELLITE_TYPE_COMET)
- {
- int x, y;
-
- uint32_t *image_data = ply_image_get_data (satellite->image);
- uint32_t *comet_data = ply_image_get_data (satellite->image_altered);
- x = width/2;
- image_data[x] = 0xFFFFFFFF;
- x = 2*sin(plugin->progress*62)+width/2;
- image_data[x] = 0xFFFFFFFF;
- x = 2*sin(plugin->progress*163)+width/2;
- image_data[x] = 0xFFFFFFFF;
- x = 2*sin(plugin->progress*275)+width/2;
- image_data[x] = 0xFFFFFFFF;
- for (y=height-1; y>0; y--)
- {
- for (x=1; x<width-1; x++)
- {
- uint32_t pixel;
- pixel = 2 * (image_data[x + (y - 1) * width] >> 24)
- + (image_data[(x - 1) + (y - 1) * width] >> 24)
- + (image_data[(x + 1) + (y - 1) * width] >> 24);
- pixel /= 4.05;
- pixel |= pixel<<8;
- pixel |= pixel<<16;
- image_data[x+y*width] = pixel;
- }
+ ply_boot_splash_plugin_t *plugin = view->plugin;
+ satellite_t *satellite = sprite->data;
+
+ int width = ply_image_get_width (sprite->image);
+ int height = ply_image_get_height (sprite->image);
+ unsigned long screen_width, screen_height;
+
+ sprite->x = cos (satellite->theta + (1 - plugin->progress) * 2000 / (satellite->distance)) * satellite->distance;
+ sprite->y = sin (satellite->theta + (1 - plugin->progress) * 2000 / (satellite->distance)) * satellite->distance;
+ sprite->z = 0;
+
+ float distance = sqrt (sprite->z * sprite->z + sprite->y * sprite->y);
+ float angle_zy = atan2 (sprite->y, sprite->z) - M_PI * 0.4;
+ sprite->z = distance * cos (angle_zy);
+ sprite->y = distance * sin (angle_zy);
+
+ float angle_offset = atan2 (sprite->x, sprite->y);
+ float cresent_angle = atan2 (sqrt (sprite->x * sprite->x + sprite->y * sprite->y), sprite->z);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+
+ sprite->x += (float) satellite->end_x * plugin->progress + (float) satellite->start_x * (1 - plugin->progress) - width / 2;
+ sprite->y += (float) satellite->end_y * plugin->progress + (float) satellite->start_y * (1 - plugin->progress) - height / 2;
+
+ if (sprite->x > (signed int) screen_width) return;
+ if (sprite->y > (signed int) screen_height) return;
+
+ if (satellite->type == SATELLITE_TYPE_PLANET) {
+ int x, y;
+
+ uint32_t *image_data = ply_image_get_data (satellite->image);
+ uint32_t *cresent_data = ply_image_get_data (satellite->image_altered);
+
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ float fx = x - (float) width / 2;
+ float fy = y - (float) height / 2;
+ float angle = atan2 (fy, fx) + angle_offset;
+ float distance = sqrt (fy * fy + fx * fx);
+ fx = cos (angle) * (distance / (width / 2));
+ fy = sin (angle) * (distance / (height / 2));
+ float want_y = sqrt (1 - fx * fx);
+ want_y *= -cos (cresent_angle);
+ if (fy < want_y) {
+ cresent_data[x + y * width] = image_data[x + y * width];
+ } else {
+ int strength = (fy - want_y) * 16 + 2;
+ uint32_t val = 0;
+ int alpha = ((image_data[x + y * width] >> 24) & 0xFF);
+ if (strength <= 0) strength = 1;
+ if (strength >= 8) strength = 8;
+ val |= (((image_data[x + y * width] >> 24) & 0xFF) / 1) << 24;
+ val |= (((image_data[x + y * width] >> 16) & 0xFF) / strength) << 16;
+ val |= (((image_data[x + y * width] >> 8) & 0xFF) / strength) << 8;
+ val |= (((image_data[x + y * width] >> 0) & 0xFF) / strength + (alpha - alpha / (strength)) / 8) << 0;
+ cresent_data[x + y * width] = val;
+ }
+ }
+ }
}
- for (x=1; x<width-1; x++) image_data[x] = 0x0;
- for (y=0; y<height; y++) for (x=0; x<width; x++)
- {
- float scale= cos(M_PI*0.4);
- float fx=x;
- float fy=y;
- fx -= (float) width/2;
- fy -= (float) height/2;
- fy /= scale;
- float angle = atan2 (fy, fx)-(satellite->theta+(1-plugin->progress)*2000/(satellite->distance))+M_PI/2*0.0;
- float distance = sqrt(fy*fy+fx*fx);
- fx = cos(angle)*distance;
- fy = sin(angle)*distance;
- fx += (fy*fy*2)/(satellite->distance);
- fx += (float) width/2;
- fy += (float) height/2;
- int ix=fx;
- int iy=fy;
- if (ix<0 || iy<0 || ix>=width || iy>=height){
- comet_data[x+y*width] = 0;
- }
- else
- {
- comet_data[x+y*width] = image_data[ix+iy*width];
- }
+
+ if (satellite->type == SATELLITE_TYPE_COMET) {
+ int x, y;
+
+ uint32_t *image_data = ply_image_get_data (satellite->image);
+ uint32_t *comet_data = ply_image_get_data (satellite->image_altered);
+ x = width / 2;
+ image_data[x] = 0xFFFFFFFF;
+ x = 2 * sin (plugin->progress * 62) + width / 2;
+ image_data[x] = 0xFFFFFFFF;
+ x = 2 * sin (plugin->progress * 163) + width / 2;
+ image_data[x] = 0xFFFFFFFF;
+ x = 2 * sin (plugin->progress * 275) + width / 2;
+ image_data[x] = 0xFFFFFFFF;
+ for (y = height - 1; y > 0; y--) {
+ for (x = 1; x < width - 1; x++) {
+ uint32_t pixel;
+ pixel = 2 * (image_data[x + (y - 1) * width] >> 24)
+ + (image_data[(x - 1) + (y - 1) * width] >> 24)
+ + (image_data[(x + 1) + (y - 1) * width] >> 24);
+ pixel /= 4.05;
+ pixel |= pixel << 8;
+ pixel |= pixel << 16;
+ image_data[x + y * width] = pixel;
+ }
+ }
+ for (x = 1; x < width - 1; x++) {
+ image_data[x] = 0x0;
+ }
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ float scale = cos (M_PI * 0.4);
+ float fx = x;
+ float fy = y;
+ fx -= (float) width / 2;
+ fy -= (float) height / 2;
+ fy /= scale;
+ float angle = atan2 (fy, fx) - (satellite->theta + (1 - plugin->progress) * 2000 / (satellite->distance)) + M_PI / 2 * 0.0;
+ float distance = sqrt (fy * fy + fx * fx);
+ fx = cos (angle) * distance;
+ fy = sin (angle) * distance;
+ fx += (fy * fy * 2) / (satellite->distance);
+ fx += (float) width / 2;
+ fy += (float) height / 2;
+ int ix = fx;
+ int iy = fy;
+ if (ix < 0 || iy < 0 || ix >= width || iy >= height)
+ comet_data[x + y * width] = 0;
+ else
+ comet_data[x + y * width] = image_data[ix + iy * width];
+ }
+ }
}
- }
- return;
+ return;
}
static void
sprite_list_sort (view_t *view)
{
- ply_list_sort_stable (view->sprites, &sprite_compare_z);
+ ply_list_sort_stable (view->sprites, &sprite_compare_z);
}
static void
flare_reset (flare_t *flare, int index)
{
- flare->rotate_yz[index]=((float)(rand()%1000)/1000)*2*M_PI;
- flare->rotate_xy[index]=((float)(rand()%1000)/1000)*2*M_PI;
- flare->rotate_xz[index]=((float)(rand()%1000)/1000)*2*M_PI;
- flare->y_size[index]=((float)(rand()%1000)/1000)*0.8+0.2;
- flare->increase_speed[index] = ((float)(rand()%1000)/1000)*0.08+0.08;
- flare->stretch[index]=(((float)(rand()%1000)/1000)*0.1+0.3)*flare->y_size[index];
- flare->z_offset_strength[index]=0.1;
+ flare->rotate_yz[index] = ((float) (rand () % 1000) / 1000) * 2 * M_PI;
+ flare->rotate_xy[index] = ((float) (rand () % 1000) / 1000) * 2 * M_PI;
+ flare->rotate_xz[index] = ((float) (rand () % 1000) / 1000) * 2 * M_PI;
+ flare->y_size[index] = ((float) (rand () % 1000) / 1000) * 0.8 + 0.2;
+ flare->increase_speed[index] = ((float) (rand () % 1000) / 1000) * 0.08 + 0.08;
+ flare->stretch[index] = (((float) (rand () % 1000) / 1000) * 0.1 + 0.3) * flare->y_size[index];
+ flare->z_offset_strength[index] = 0.1;
}
static void
-flare_update (sprite_t* sprite, double time)
+flare_update (sprite_t *sprite, double time)
{
- int width;
- int height;
- flare_t *flare = sprite->data;
- ply_image_t *old_image;
- ply_image_t *new_image;
- uint32_t * old_image_data;
- uint32_t * new_image_data;
-
- flare->frame_count++;
- if (flare->frame_count%(FRAMES_PER_SECOND/FLARE_FRAMES_PER_SECOND)){
- return;
- }
-
- old_image = flare->image_a;
- new_image = flare->image_b;
-
- old_image_data = ply_image_get_data (old_image);
- new_image_data = ply_image_get_data (new_image);
-
- width = ply_image_get_width (new_image);
- height = ply_image_get_height (new_image);
-
-
- int b;
- for (b=0; b<FLARE_COUNT; b++)
- {
- int flare_line;
- flare->stretch[b] += (flare->stretch[b] * flare->increase_speed[b]) * (1-(1/(3.01-flare->stretch[b])));
- flare->increase_speed[b]-=0.003;
- flare->z_offset_strength[b]+=0.01;
-
- if (flare->stretch[b]>2 || flare->stretch[b]<0.2)
- {
- flare_reset (flare, b);
+ int width;
+ int height;
+ flare_t *flare = sprite->data;
+ ply_image_t *old_image;
+ ply_image_t *new_image;
+ uint32_t *old_image_data;
+ uint32_t *new_image_data;
+
+ flare->frame_count++;
+ if (flare->frame_count % (FRAMES_PER_SECOND / FLARE_FRAMES_PER_SECOND))
+ return;
+
+ old_image = flare->image_a;
+ new_image = flare->image_b;
+
+ old_image_data = ply_image_get_data (old_image);
+ new_image_data = ply_image_get_data (new_image);
+
+ width = ply_image_get_width (new_image);
+ height = ply_image_get_height (new_image);
+
+
+ int b;
+ for (b = 0; b < FLARE_COUNT; b++) {
+ int flare_line;
+ flare->stretch[b] += (flare->stretch[b] * flare->increase_speed[b]) * (1 - (1 / (3.01 - flare->stretch[b])));
+ flare->increase_speed[b] -= 0.003;
+ flare->z_offset_strength[b] += 0.01;
+
+ if (flare->stretch[b] > 2 || flare->stretch[b] < 0.2)
+ flare_reset (flare, b);
+ for (flare_line = 0; flare_line < FLARE_LINE_COUNT; flare_line++) {
+ double x, y, z;
+ double angle, distance;
+ float theta;
+ for (theta = -M_PI + (0.05 * cos (flare->increase_speed[b] * 1000 + flare_line)); theta < M_PI; theta += 0.05) {
+ int ix;
+ int iy;
+
+ x = (cos (theta) + 0.5) * flare->stretch[b] * 0.8;
+ y = (sin (theta)) * flare->y_size[b];
+ z = x * (sin (b + flare_line * flare_line)) * flare->z_offset_strength[b];
+
+ float strength = 1.1 - (x / 2) + flare->increase_speed[b] * 3;
+ x += 4.5;
+ if ((x * x + y * y + z * z) < 25) continue;
+
+ strength = CLAMP (strength, 0, 1);
+ strength *= 32;
+
+ x += 0.05 * sin (4 * theta * (sin (b + flare_line * 5)));
+ y += 0.05 * cos (4 * theta * (sin (b + flare_line * 5)));
+ z += 0.05 * sin (4 * theta * (sin (b + flare_line * 5)));
+
+ distance = sqrt (x * x + y * y);
+ angle = atan2 (y, x) + flare->rotate_xy[b] + 0.02 * sin (b * flare_line);
+ x = distance * cos (angle);
+ y = distance * sin (angle);
+
+ distance = sqrt (z * z + y * y);
+ angle = atan2 (y, z) + flare->rotate_yz[b] + 0.02 * sin (3 * b * flare_line);
+ z = distance * cos (angle);
+ y = distance * sin (angle);
+
+ distance = sqrt (x * x + z * z);
+ angle = atan2 (z, x) + flare->rotate_xz[b] + 0.02 * sin (8 * b * flare_line);
+ x = distance * cos (angle);
+ z = distance * sin (angle);
+
+
+ x *= 41;
+ y *= 41;
+
+ x += 720 - 800 + width;
+ y += 300 - 480 + height;
+
+ ix = x;
+ iy = y;
+ if (ix >= (width - 1) || iy >= (height - 1) || ix <= 0 || iy <= 0) continue;
+
+ uint32_t colour = MIN (strength + (old_image_data[ix + iy * width] >> 24), 255);
+ colour <<= 24;
+ old_image_data[ix + iy * width] = colour;
+ }
+ }
}
- for (flare_line=0; flare_line<FLARE_LINE_COUNT; flare_line++)
- {
- double x, y, z;
- double angle, distance;
- float theta;
- for (theta = -M_PI+(0.05*cos(flare->increase_speed[b]*1000+flare_line)); theta < M_PI; theta+=0.05)
- {
- int ix;
- int iy;
-
- x=(cos(theta)+0.5)*flare->stretch[b]*0.8;
- y=(sin(theta))*flare->y_size[b];
- z=x*(sin(b+flare_line*flare_line))*flare->z_offset_strength[b];
-
- float strength = 1.1-(x/2)+flare->increase_speed[b]*3;
- x+=4.5;
- if ((x*x+y*y+z*z)<25) continue;
-
- strength = CLAMP(strength, 0, 1);
- strength*=32;
-
- x+=0.05*sin(4*theta*(sin(b+flare_line*5)));
- y+=0.05*cos(4*theta*(sin(b+flare_line*5)));
- z+=0.05*sin(4*theta*(sin(b+flare_line*5)));
-
- distance = sqrt(x*x+y*y);
- angle = atan2 (y, x) + flare->rotate_xy[b]+0.02*sin(b*flare_line) ;
- x = distance* cos(angle);
- y = distance* sin(angle);
-
- distance = sqrt(z*z+y*y);
- angle = atan2 (y, z) + flare->rotate_yz[b]+0.02*sin(3*b*flare_line);
- z = distance* cos(angle);
- y = distance* sin(angle);
-
- distance = sqrt(x*x+z*z);
- angle = atan2 (z, x) + flare->rotate_xz[b]+0.02*sin(8*b*flare_line);
- x = distance* cos(angle);
- z = distance* sin(angle);
-
-
- x*=41;
- y*=41;
-
- x+=720-800+width;
- y+=300-480+height;
-
- ix=x;
- iy=y;
- if (ix>=(width-1) || iy>=(height-1) || ix<=0 || iy<=0) continue;
-
- uint32_t colour = MIN (strength + (old_image_data[ix + iy * width]>>24), 255);
- colour <<= 24;
- old_image_data[ix + iy * width] = colour;
-
- }
- }
- }
- {
- int x, y;
- for (y = 1; y < (height-1); y++)
- {
- for (x = 1; x < (width-1); x++)
{
- uint32_t value = 0;
- value += (old_image_data[(x-1) + (y-1) * width]>>24)*1;
- value += (old_image_data[ x + (y-1) * width]>>24)*2;
- value += (old_image_data[(x+1) + (y-1) * width]>>24)*1;
- value += (old_image_data[(x-1) + y * width]>>24)*2;
- value += (old_image_data[ x + y * width]>>24)*8;
- value += (old_image_data[(x+1) + y * width]>>24)*2;
- value += (old_image_data[(x-1) + (y+1) * width]>>24)*1;
- value += (old_image_data[ x + (y+1) * width]>>24)*2;
- value += (old_image_data[(x+1) + (y+1) * width]>>24)*1;
- value /=21;
- value = (value<<24) | ((int)(value*0.7)<<16) | (value<<8) | (value<<0);
- new_image_data[x +y * width] = value;
+ int x, y;
+ for (y = 1; y < (height - 1); y++) {
+ for (x = 1; x < (width - 1); x++) {
+ uint32_t value = 0;
+ value += (old_image_data[(x - 1) + (y - 1) * width] >> 24) * 1;
+ value += (old_image_data[x + (y - 1) * width] >> 24) * 2;
+ value += (old_image_data[(x + 1) + (y - 1) * width] >> 24) * 1;
+ value += (old_image_data[(x - 1) + y * width] >> 24) * 2;
+ value += (old_image_data[x + y * width] >> 24) * 8;
+ value += (old_image_data[(x + 1) + y * width] >> 24) * 2;
+ value += (old_image_data[(x - 1) + (y + 1) * width] >> 24) * 1;
+ value += (old_image_data[x + (y + 1) * width] >> 24) * 2;
+ value += (old_image_data[(x + 1) + (y + 1) * width] >> 24) * 1;
+ value /= 21;
+ value = (value << 24) | ((int) (value * 0.7) << 16) | (value << 8) | (value << 0);
+ new_image_data[x + y * width] = value;
+ }
+ }
}
- }
- }
- flare->image_a = new_image;
- flare->image_b = old_image;
- sprite->image = new_image;
- sprite->refresh_me = 1;
- return;
+ flare->image_a = new_image;
+ flare->image_b = old_image;
+ sprite->image = new_image;
+ sprite->refresh_me = 1;
+ return;
}
static void
-sprite_move (view_t *view, sprite_t* sprite, double time)
+sprite_move (view_t *view, sprite_t *sprite, double time)
{
- sprite->oldx = sprite->x;
- sprite->oldy = sprite->y;
- sprite->oldz = sprite->z;
- switch (sprite->type){
- case SPRITE_TYPE_STATIC:
- break;
- case SPRITE_TYPE_PROGRESS:
- progress_update (view, sprite, time);
- break;
- case SPRITE_TYPE_FLARE:
- flare_update (sprite, time);
- break;
- case SPRITE_TYPE_SATELLITE:
- satellite_move (view, sprite, time);
- break;
- case SPRITE_TYPE_STAR_BG:
- star_bg_update (view, sprite, time);
- break;
- }
+ sprite->oldx = sprite->x;
+ sprite->oldy = sprite->y;
+ sprite->oldz = sprite->z;
+ switch (sprite->type) {
+ case SPRITE_TYPE_STATIC:
+ break;
+ case SPRITE_TYPE_PROGRESS:
+ progress_update (view, sprite, time);
+ break;
+ case SPRITE_TYPE_FLARE:
+ flare_update (sprite, time);
+ break;
+ case SPRITE_TYPE_SATELLITE:
+ satellite_move (view, sprite, time);
+ break;
+ case SPRITE_TYPE_STAR_BG:
+ star_bg_update (view, sprite, time);
+ break;
+ }
}
static void
view_animate_attime (view_t *view, double time)
{
- ply_list_node_t *node;
- ply_boot_splash_plugin_t *plugin;
-
- plugin = view->plugin;
-
- if (plugin->progress_target>=0)
- plugin->progress = (plugin->progress*10 + plugin->progress_target) /11;
-
- node = ply_list_get_first_node (view->sprites);
- while(node)
- {
- sprite_t* sprite = ply_list_node_get_data (node);
- sprite_move (view, sprite, time);
- node = ply_list_get_next_node (view->sprites, node);
- }
-
- sprite_list_sort (view);
-
- for(node = ply_list_get_first_node (view->sprites); node; node = ply_list_get_next_node (view->sprites, node))
- {
- sprite_t* sprite = ply_list_node_get_data (node);
- if (sprite->x != sprite->oldx ||
- sprite->y != sprite->oldy ||
- sprite->z != sprite->oldz ||
- sprite->refresh_me)
- {
- sprite->refresh_me=0;
-
- int width = ply_image_get_width (sprite->image);
- int height= ply_image_get_height (sprite->image);
-
- if (sprite->type == SPRITE_TYPE_STAR_BG){
- star_bg_t *star_bg = sprite->data;
- int i;
- for (i=0; i<star_bg->star_count; i++){
- if (star_bg->star_refresh[i]){
- ply_pixel_display_draw_area (view->display,
- sprite->x+star_bg->star_x[i], sprite->y+star_bg->star_y[i], 1, 1);
- star_bg->star_refresh[i]=0;
- }
- }
- continue;
- }
-
-
-
- int x = sprite->x - sprite->oldx;
- int y = sprite->y - sprite->oldy;
-
- if (x < width && x > -width && y < height && y > -height)
- {
- x=MIN(sprite->x, sprite->oldx);
- y=MIN(sprite->y, sprite->oldy);
- width =(MAX(sprite->x, sprite->oldx)-x)+ply_image_get_width (sprite->image);
- height=(MAX(sprite->y, sprite->oldy)-y)+ply_image_get_height (sprite->image);
- ply_pixel_display_draw_area (view->display,
- x, y, width, height);
- }
- else
- {
- ply_pixel_display_draw_area (view->display,
- sprite->x, sprite->y, width, height);
- ply_pixel_display_draw_area (view->display,
- sprite->oldx, sprite->oldy, width, height);
- }
+ ply_list_node_t *node;
+ ply_boot_splash_plugin_t *plugin;
+
+ plugin = view->plugin;
+
+ if (plugin->progress_target >= 0)
+ plugin->progress = (plugin->progress * 10 + plugin->progress_target) / 11;
+
+ node = ply_list_get_first_node (view->sprites);
+ while (node) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ sprite_move (view, sprite, time);
+ node = ply_list_get_next_node (view->sprites, node);
+ }
+
+ sprite_list_sort (view);
+
+ for (node = ply_list_get_first_node (view->sprites); node; node = ply_list_get_next_node (view->sprites, node)) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ if (sprite->x != sprite->oldx ||
+ sprite->y != sprite->oldy ||
+ sprite->z != sprite->oldz ||
+ sprite->refresh_me) {
+ sprite->refresh_me = 0;
+
+ int width = ply_image_get_width (sprite->image);
+ int height = ply_image_get_height (sprite->image);
+
+ if (sprite->type == SPRITE_TYPE_STAR_BG) {
+ star_bg_t *star_bg = sprite->data;
+ int i;
+ for (i = 0; i < star_bg->star_count; i++) {
+ if (star_bg->star_refresh[i]) {
+ ply_pixel_display_draw_area (view->display,
+ sprite->x + star_bg->star_x[i], sprite->y + star_bg->star_y[i], 1, 1);
+ star_bg->star_refresh[i] = 0;
+ }
+ }
+ continue;
+ }
+
+
+
+ int x = sprite->x - sprite->oldx;
+ int y = sprite->y - sprite->oldy;
+
+ if (x < width && x > -width && y < height && y > -height) {
+ x = MIN (sprite->x, sprite->oldx);
+ y = MIN (sprite->y, sprite->oldy);
+ width = (MAX (sprite->x, sprite->oldx) - x) + ply_image_get_width (sprite->image);
+ height = (MAX (sprite->y, sprite->oldy) - y) + ply_image_get_height (sprite->image);
+ ply_pixel_display_draw_area (view->display,
+ x, y, width, height);
+ } else {
+ ply_pixel_display_draw_area (view->display,
+ sprite->x, sprite->y, width, height);
+ ply_pixel_display_draw_area (view->display,
+ sprite->oldx, sprite->oldy, width, height);
+ }
+ }
}
- }
}
static void
on_timeout (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- double sleep_time;
- double now;
+ ply_list_node_t *node;
+ double sleep_time;
+ double now;
- now = ply_get_timestamp ();
+ now = ply_get_timestamp ();
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_animate_attime (view, now);
+ view_animate_attime (view, now);
- node = next_node;
- }
- plugin->now = now;
+ node = next_node;
+ }
+ plugin->now = now;
- sleep_time = 1.0 / FRAMES_PER_SECOND;
+ sleep_time = 1.0 / FRAMES_PER_SECOND;
- ply_event_loop_watch_for_timeout (plugin->loop,
- sleep_time,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
+ ply_event_loop_watch_for_timeout (plugin->loop,
+ sleep_time,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
}
static void
@@ -1188,88 +1151,84 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
double duration,
double percent_done)
{
- if (plugin->progress_target<0)
- plugin->progress = percent_done;
- plugin->progress_target = percent_done;
+ if (plugin->progress_target < 0)
+ plugin->progress = percent_done;
+ plugin->progress_target = percent_done;
}
static void
start_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (plugin->is_animating)
- return;
+ if (plugin->is_animating)
+ return;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_start_animation (view);
+ view_start_animation (view);
- node = next_node;
- }
+ node = next_node;
+ }
- on_timeout (plugin);
+ on_timeout (plugin);
- plugin->is_animating = true;
+ plugin->is_animating = true;
}
static void
view_free_sprites (view_t *view)
{
- ply_list_node_t *node;
-
- for (node = ply_list_get_first_node (view->sprites);
- node != NULL;
- node = ply_list_get_next_node (view->sprites, node))
- {
- sprite_t* sprite = ply_list_node_get_data (node);
- free_sprite (sprite);
- }
- ply_list_remove_all_nodes (view->sprites);
+ ply_list_node_t *node;
+
+ for (node = ply_list_get_first_node (view->sprites);
+ node != NULL;
+ node = ply_list_get_next_node (view->sprites, node)) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ free_sprite (sprite);
+ }
+ ply_list_remove_all_nodes (view->sprites);
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
+ if (!plugin->is_animating)
+ return;
- plugin->is_animating = false;
+ plugin->is_animating = false;
- if (plugin->loop != NULL)
- {
- ply_event_loop_stop_watching_for_timeout (plugin->loop,
- (ply_event_loop_timeout_handler_t)
- on_timeout, plugin);
- }
+ if (plugin->loop != NULL) {
+ ply_event_loop_stop_watching_for_timeout (plugin->loop,
+ (ply_event_loop_timeout_handler_t)
+ on_timeout, plugin);
+ }
#ifdef SHOW_LOGO_HALO
- ply_image_free(plugin->highlight_logo_image);
+ ply_image_free (plugin->highlight_logo_image);
#endif
- for(node = ply_list_get_first_node (plugin->views); node; node = ply_list_get_next_node (plugin->views, node))
- {
- view_t *view = ply_list_node_get_data (node);
- view_free_sprites (view);
- }
+ for (node = ply_list_get_first_node (plugin->views); node; node = ply_list_get_next_node (plugin->views, node)) {
+ view_t *view = ply_list_node_get_data (node);
+ view_free_sprites (view);
+ }
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
}
static void
@@ -1280,98 +1239,91 @@ draw_background (view_t *view,
int width,
int height);
static void
-on_draw (view_t *view,
- ply_pixel_buffer_t *pixel_buffer,
- int x,
- int y,
- int width,
- int height)
+on_draw (view_t *view,
+ ply_pixel_buffer_t *pixel_buffer,
+ int x,
+ int y,
+ int width,
+ int height)
{
- ply_boot_splash_plugin_t *plugin;
- ply_rectangle_t clip_area;
- clip_area.x = x;
- clip_area.y = y;
- clip_area.width = width;
- clip_area.height = height;
-
- bool single_pixel = 0;
- float pixel_r=0;
- float pixel_g=0;
- float pixel_b=0;
-
- plugin = view->plugin;
-
- if (width==1 && height==1)
- single_pixel = true;
-
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY ||
- plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY )
- {
- uint32_t *box_data, *lock_data;
-
- draw_background (view, pixel_buffer, x, y, width, height);
-
- box_data = ply_image_get_data (plugin->box_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->box_area,
- box_data);
- ply_entry_draw_area (view->entry, pixel_buffer, x, y, width, height);
- ply_label_draw_area (view->label, pixel_buffer, x, y, width, height);
- lock_data = ply_image_get_data (plugin->lock_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->lock_area,
- lock_data);
- }
- else
- {
- ply_list_node_t *node;
-
- draw_background (view, pixel_buffer, x, y, width, height);
-
- for(node = ply_list_get_first_node (view->sprites); node; node = ply_list_get_next_node (view->sprites, node))
- {
- sprite_t* sprite = ply_list_node_get_data (node);
- ply_rectangle_t sprite_area;
-
-
- sprite_area.x = sprite->x;
- sprite_area.y = sprite->y;
-
- if (sprite_area.x>=(x+width)) continue;
- if (sprite_area.y>=(y+height)) continue;
-
- sprite_area.width = ply_image_get_width (sprite->image);
- sprite_area.height = ply_image_get_height (sprite->image);
-
- if ((int) (sprite_area.x+sprite_area.width)<=x) continue;
- if ((int) (sprite_area.y+sprite_area.height)<=y) continue;
-
- if (single_pixel)
- {
- uint32_t* image_data = ply_image_get_data (sprite->image);
- uint32_t overlay_pixel = image_data[(x-sprite_area.x)+(y-sprite_area.y)*sprite_area.width];
- float alpha = (float)((overlay_pixel>>24)&0xff)/255 * sprite->opacity;
- float red = (float)((overlay_pixel>>16)&0xff)/255 * sprite->opacity;
- float green = (float)((overlay_pixel>>8) &0xff)/255 * sprite->opacity;
- float blue = (float)((overlay_pixel>>0) &0xff)/255 * sprite->opacity;
- pixel_r = pixel_r*(1-alpha) + red;
- pixel_g = pixel_g*(1-alpha) + green;
- pixel_b = pixel_b*(1-alpha) + blue;
- }
- else
- {
- ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (pixel_buffer,
- &sprite_area, &clip_area,
- ply_image_get_data (sprite->image), sprite->opacity);
- }
+ ply_boot_splash_plugin_t *plugin;
+ ply_rectangle_t clip_area;
+
+ clip_area.x = x;
+ clip_area.y = y;
+ clip_area.width = width;
+ clip_area.height = height;
+
+ bool single_pixel = 0;
+ float pixel_r = 0;
+ float pixel_g = 0;
+ float pixel_b = 0;
+
+ plugin = view->plugin;
+
+ if (width == 1 && height == 1)
+ single_pixel = true;
+
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY ||
+ plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) {
+ uint32_t *box_data, *lock_data;
+
+ draw_background (view, pixel_buffer, x, y, width, height);
+
+ box_data = ply_image_get_data (plugin->box_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->box_area,
+ box_data);
+ ply_entry_draw_area (view->entry, pixel_buffer, x, y, width, height);
+ ply_label_draw_area (view->label, pixel_buffer, x, y, width, height);
+ lock_data = ply_image_get_data (plugin->lock_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->lock_area,
+ lock_data);
+ } else {
+ ply_list_node_t *node;
+
+ draw_background (view, pixel_buffer, x, y, width, height);
+
+ for (node = ply_list_get_first_node (view->sprites); node; node = ply_list_get_next_node (view->sprites, node)) {
+ sprite_t *sprite = ply_list_node_get_data (node);
+ ply_rectangle_t sprite_area;
+
+
+ sprite_area.x = sprite->x;
+ sprite_area.y = sprite->y;
+
+ if (sprite_area.x >= (x + width)) continue;
+ if (sprite_area.y >= (y + height)) continue;
+
+ sprite_area.width = ply_image_get_width (sprite->image);
+ sprite_area.height = ply_image_get_height (sprite->image);
+
+ if ((int) (sprite_area.x + sprite_area.width) <= x) continue;
+ if ((int) (sprite_area.y + sprite_area.height) <= y) continue;
+
+ if (single_pixel) {
+ uint32_t *image_data = ply_image_get_data (sprite->image);
+ uint32_t overlay_pixel = image_data[(x - sprite_area.x) + (y - sprite_area.y) * sprite_area.width];
+ float alpha = (float) ((overlay_pixel >> 24) & 0xff) / 255 * sprite->opacity;
+ float red = (float) ((overlay_pixel >> 16) & 0xff) / 255 * sprite->opacity;
+ float green = (float) ((overlay_pixel >> 8) & 0xff) / 255 * sprite->opacity;
+ float blue = (float) ((overlay_pixel >> 0) & 0xff) / 255 * sprite->opacity;
+ pixel_r = pixel_r * (1 - alpha) + red;
+ pixel_g = pixel_g * (1 - alpha) + green;
+ pixel_b = pixel_b * (1 - alpha) + blue;
+ } else {
+ ply_pixel_buffer_fill_with_argb32_data_at_opacity_with_clip (pixel_buffer,
+ &sprite_area, &clip_area,
+ ply_image_get_data (sprite->image), sprite->opacity);
+ }
+ }
}
- }
- if (single_pixel){
- ply_pixel_buffer_fill_with_color (pixel_buffer, &clip_area, pixel_r, pixel_g, pixel_b, 1.0);
- }
- ply_label_draw_area (view->message_label,
- pixel_buffer,
- x, y, width, height);
+ if (single_pixel)
+ ply_pixel_buffer_fill_with_color (pixel_buffer, &clip_area, pixel_r, pixel_g, pixel_b, 1.0);
+ ply_label_draw_area (view->message_label,
+ pixel_buffer,
+ x, y, width, height);
}
static void
@@ -1382,263 +1334,258 @@ draw_background (view_t *view,
int width,
int height)
{
- ply_boot_splash_plugin_t *plugin;
- ply_rectangle_t area;
- ply_rectangle_t image_area;
-
- plugin = view->plugin;
-
- area.x = x;
- area.y = y;
- area.width = width;
- area.height = height;
-
- image_area.x = 0;
- image_area.y = 0;
- image_area.width = ply_image_get_width (view->scaled_background_image);
- image_area.height = ply_image_get_height (view->scaled_background_image);
-
- ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer,
- &image_area, &area,
- ply_image_get_data (view->scaled_background_image));
-
- image_area.x = image_area.width-ply_image_get_width(plugin->star_image);
- image_area.y = image_area.height-ply_image_get_height(plugin->star_image);
- image_area.width = ply_image_get_width(plugin->star_image);
- image_area.height = ply_image_get_height(plugin->star_image);
-
-
- ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer,
- &image_area, &area,
- ply_image_get_data (plugin->star_image));
-
- image_area.x = 20;
- image_area.y = 20;
- image_area.width = ply_image_get_width(plugin->logo_image);
- image_area.height = ply_image_get_height(plugin->logo_image);
-
-
- ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer,
- &image_area, &area,
- ply_image_get_data (plugin->logo_image));
+ ply_boot_splash_plugin_t *plugin;
+ ply_rectangle_t area;
+ ply_rectangle_t image_area;
+
+ plugin = view->plugin;
+
+ area.x = x;
+ area.y = y;
+ area.width = width;
+ area.height = height;
+
+ image_area.x = 0;
+ image_area.y = 0;
+ image_area.width = ply_image_get_width (view->scaled_background_image);
+ image_area.height = ply_image_get_height (view->scaled_background_image);
+
+ ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer,
+ &image_area, &area,
+ ply_image_get_data (view->scaled_background_image));
+
+ image_area.x = image_area.width - ply_image_get_width (plugin->star_image);
+ image_area.y = image_area.height - ply_image_get_height (plugin->star_image);
+ image_area.width = ply_image_get_width (plugin->star_image);
+ image_area.height = ply_image_get_height (plugin->star_image);
+
+
+ ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer,
+ &image_area, &area,
+ ply_image_get_data (plugin->star_image));
+
+ image_area.x = 20;
+ image_area.y = 20;
+ image_area.width = ply_image_get_width (plugin->logo_image);
+ image_area.height = ply_image_get_height (plugin->logo_image);
+
+
+ ply_pixel_buffer_fill_with_argb32_data_with_clip (pixel_buffer,
+ &image_area, &area,
+ ply_image_get_data (plugin->logo_image));
}
static void
add_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = view_new (plugin, display);
+ view = view_new (plugin, display);
- ply_pixel_display_set_draw_handler (view->display,
- (ply_pixel_display_draw_handler_t)
- on_draw, view);
+ ply_pixel_display_set_draw_handler (view->display,
+ (ply_pixel_display_draw_handler_t)
+ on_draw, view);
- ply_list_append_data (plugin->views, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
+ if (view->display == display) {
+ ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
- return;
+ node = next_node;
}
-
- node = next_node;
- }
}
static void
view_setup_scene (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
- sprite_t *sprite;
- int i;
- int x, y;
- int width = 360;
- int height = 460;
- unsigned long screen_width, screen_height;
-
- plugin = view->plugin;
-
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
-
- {
- star_bg_t* star_bg;
- if (view->scaled_background_image)
- ply_image_free (view->scaled_background_image);
- view->scaled_background_image = ply_image_resize (plugin->logo_image, screen_width, screen_height);
- star_bg = malloc(sizeof(star_bg_t));
- star_bg->star_count = (screen_width * screen_height)/400;
- star_bg->star_x = malloc(sizeof(int)*star_bg->star_count);
- star_bg->star_y = malloc(sizeof(int)*star_bg->star_count);
- star_bg->star_refresh = malloc(sizeof(int)*star_bg->star_count);
- star_bg->frame_count=0;
- sprite = add_sprite (view, view->scaled_background_image, SPRITE_TYPE_STAR_BG, star_bg);
- sprite->z = -10000;
-
- uint32_t* image_data = ply_image_get_data (view->scaled_background_image);
- for (y=0; y< (int) screen_height; y++) for (x=0; x< (int) screen_width; x++){
- image_data[x + y * screen_width] = star_bg_gradient_colour(x, y, screen_width, screen_height, false, 0);
- }
-
- for (i=0; i<star_bg->star_count; i++){
- do
- {
- x = rand()%screen_width;
- y = rand()%screen_height;
- }
- while (image_data[x + y * screen_width] == 0xFFFFFFFF);
- star_bg->star_refresh[i] = 0;
- star_bg->star_x[i] = x;
- star_bg->star_y[i] = y;
- image_data[x + y * screen_width] = 0xFFFFFFFF;
- }
- for (i=0; i<(int) (screen_width * screen_height)/400; i++){
- x = rand()%screen_width;
- y = rand()%screen_height;
- image_data[x + y * screen_width] = star_bg_gradient_colour(x, y, screen_width, screen_height, true, ((float)x*y*13/10000));
- }
-
- for (i=0; i<star_bg->star_count; i++){
- image_data[star_bg->star_x[i] + star_bg->star_y[i] * screen_width] =
- star_bg_gradient_colour(star_bg->star_x[i], star_bg->star_y[i], screen_width, screen_height, true, 0.0);
+ ply_boot_splash_plugin_t *plugin;
+ sprite_t *sprite;
+ int i;
+ int x, y;
+ int width = 360;
+ int height = 460;
+ unsigned long screen_width, screen_height;
+
+ plugin = view->plugin;
+
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+
+ {
+ star_bg_t *star_bg;
+ if (view->scaled_background_image)
+ ply_image_free (view->scaled_background_image);
+ view->scaled_background_image = ply_image_resize (plugin->logo_image, screen_width, screen_height);
+ star_bg = malloc (sizeof(star_bg_t));
+ star_bg->star_count = (screen_width * screen_height) / 400;
+ star_bg->star_x = malloc (sizeof(int) * star_bg->star_count);
+ star_bg->star_y = malloc (sizeof(int) * star_bg->star_count);
+ star_bg->star_refresh = malloc (sizeof(int) * star_bg->star_count);
+ star_bg->frame_count = 0;
+ sprite = add_sprite (view, view->scaled_background_image, SPRITE_TYPE_STAR_BG, star_bg);
+ sprite->z = -10000;
+
+ uint32_t *image_data = ply_image_get_data (view->scaled_background_image);
+ for (y = 0; y < (int) screen_height; y++) {
+ for (x = 0; x < (int) screen_width; x++) {
+ image_data[x + y * screen_width] = star_bg_gradient_colour (x, y, screen_width, screen_height, false, 0);
+ }
+ }
+
+ for (i = 0; i < star_bg->star_count; i++) {
+ do {
+ x = rand () % screen_width;
+ y = rand () % screen_height;
+ } while (image_data[x + y * screen_width] == 0xFFFFFFFF);
+ star_bg->star_refresh[i] = 0;
+ star_bg->star_x[i] = x;
+ star_bg->star_y[i] = y;
+ image_data[x + y * screen_width] = 0xFFFFFFFF;
+ }
+ for (i = 0; i < (int) (screen_width * screen_height) / 400; i++) {
+ x = rand () % screen_width;
+ y = rand () % screen_height;
+ image_data[x + y * screen_width] = star_bg_gradient_colour (x, y, screen_width, screen_height, true, ((float) x * y * 13 / 10000));
+ }
+
+ for (i = 0; i < star_bg->star_count; i++) {
+ image_data[star_bg->star_x[i] + star_bg->star_y[i] * screen_width] =
+ star_bg_gradient_colour (star_bg->star_x[i], star_bg->star_y[i], screen_width, screen_height, true, 0.0);
+ }
}
- }
- sprite = add_sprite (view, plugin->logo_image, SPRITE_TYPE_STATIC, NULL);
- sprite->x=screen_width/2-ply_image_get_width(plugin->logo_image)/2;
- sprite->y=screen_height/2-ply_image_get_height(plugin->logo_image)/2;
- sprite->z=1000;
+ sprite = add_sprite (view, plugin->logo_image, SPRITE_TYPE_STATIC, NULL);
+ sprite->x = screen_width / 2 - ply_image_get_width (plugin->logo_image) / 2;
+ sprite->y = screen_height / 2 - ply_image_get_height (plugin->logo_image) / 2;
+ sprite->z = 1000;
#ifdef SHOW_LOGO_HALO
- plugin->highlight_logo_image = ply_image_resize (plugin->logo_image, ply_image_get_width(plugin->logo_image)+HALO_BLUR*2, ply_image_get_height(plugin->logo_image)+HALO_BLUR*2);
- highlight_image (plugin->highlight_logo_image, plugin->logo_image, HALO_BLUR);
- sprite = add_sprite (view, plugin->highlight_logo_image, SPRITE_TYPE_STATIC, NULL);
- sprite->x=10-HALO_BLUR;
- sprite->y=10-HALO_BLUR;
- sprite->z=-910;
+ plugin->highlight_logo_image = ply_image_resize (plugin->logo_image, ply_image_get_width (plugin->logo_image) + HALO_BLUR * 2, ply_image_get_height (plugin->logo_image) + HALO_BLUR * 2);
+ highlight_image (plugin->highlight_logo_image, plugin->logo_image, HALO_BLUR);
+ sprite = add_sprite (view, plugin->highlight_logo_image, SPRITE_TYPE_STATIC, NULL);
+ sprite->x = 10 - HALO_BLUR;
+ sprite->y = 10 - HALO_BLUR;
+ sprite->z = -910;
#endif
- sprite = add_sprite (view, plugin->star_image, SPRITE_TYPE_STATIC, NULL);
- sprite->x=screen_width-ply_image_get_width(plugin->star_image);
- sprite->y=screen_height-ply_image_get_height(plugin->star_image);
- sprite->z=0;
+ sprite = add_sprite (view, plugin->star_image, SPRITE_TYPE_STATIC, NULL);
+ sprite->x = screen_width - ply_image_get_width (plugin->star_image);
+ sprite->y = screen_height - ply_image_get_height (plugin->star_image);
+ sprite->z = 0;
#ifdef SHOW_PLANETS
- for (i=0; i<5; i++)
- {
- satellite_t* satellite = malloc(sizeof(satellite_t));
- satellite->type=SATELLITE_TYPE_PLANET;
- satellite->end_x=satellite->start_x=720-800+screen_width;
- satellite->end_y=satellite->start_y=300-480+screen_height;
-
- satellite->distance=i*100+280;
- satellite->theta=M_PI*0.8;
- satellite->image=plugin->planet_image[i];
- satellite->image_altered=ply_image_resize (satellite->image, ply_image_get_width(satellite->image), ply_image_get_height(satellite->image));
- sprite = add_sprite (view, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite);
- satellite_move (plugin, sprite, 0);
-
- }
+ for (i = 0; i < 5; i++) {
+ satellite_t *satellite = malloc (sizeof(satellite_t));
+ satellite->type = SATELLITE_TYPE_PLANET;
+ satellite->end_x = satellite->start_x = 720 - 800 + screen_width;
+ satellite->end_y = satellite->start_y = 300 - 480 + screen_height;
+
+ satellite->distance = i * 100 + 280;
+ satellite->theta = M_PI * 0.8;
+ satellite->image = plugin->planet_image[i];
+ satellite->image_altered = ply_image_resize (satellite->image, ply_image_get_width (satellite->image), ply_image_get_height (satellite->image));
+ sprite = add_sprite (view, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite);
+ satellite_move (plugin, sprite, 0);
+ }
#endif
#ifdef SHOW_COMETS
- for (i=0; i<1; i++)
- {
- satellite_t* satellite = malloc(sizeof(satellite_t));
- satellite->type=SATELLITE_TYPE_COMET;
- satellite->end_x=satellite->start_x=720-800+screen_width;
- satellite->end_y=satellite->start_y=300-480+screen_height;
- satellite->distance=550+i*50;
- satellite->theta=M_PI*0.8;
+ for (i = 0; i < 1; i++) {
+ satellite_t *satellite = malloc (sizeof(satellite_t));
+ satellite->type = SATELLITE_TYPE_COMET;
+ satellite->end_x = satellite->start_x = 720 - 800 + screen_width;
+ satellite->end_y = satellite->start_y = 300 - 480 + screen_height;
+ satellite->distance = 550 + i * 50;
+ satellite->theta = M_PI * 0.8;
#define COMET_SIZE 64
- satellite->image=ply_image_resize (plugin->progress_barimage, COMET_SIZE, COMET_SIZE);
- satellite->image_altered=ply_image_resize (satellite->image, COMET_SIZE, COMET_SIZE);
- uint32_t * image_data = ply_image_get_data (satellite->image);
- uint32_t * image_altered_data = ply_image_get_data (satellite->image_altered);
-
-
- for (y=0; y<COMET_SIZE; y++)for (x=0; x<COMET_SIZE; x++){
- image_data[x + y * COMET_SIZE] = 0x0;
- image_altered_data[x + y * COMET_SIZE] = 0x0;
+ satellite->image = ply_image_resize (plugin->progress_barimage, COMET_SIZE, COMET_SIZE);
+ satellite->image_altered = ply_image_resize (satellite->image, COMET_SIZE, COMET_SIZE);
+ uint32_t *image_data = ply_image_get_data (satellite->image);
+ uint32_t *image_altered_data = ply_image_get_data (satellite->image_altered);
+
+
+ for (y = 0; y < COMET_SIZE; y++) {
+ for (x = 0; x < COMET_SIZE; x++) {
+ image_data[x + y * COMET_SIZE] = 0x0;
+ image_altered_data[x + y * COMET_SIZE] = 0x0;
+ }
+ }
+
+ sprite = add_sprite (view, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite);
+ for (x = 0; x < COMET_SIZE; x++) {
+ satellite_move (plugin, sprite, 0);
+ }
}
-
- sprite = add_sprite (view, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite);
- for (x=0; x<COMET_SIZE; x++) satellite_move (plugin, sprite, 0);
- }
#endif
#ifdef SHOW_PROGRESS_BAR
- progress_t* progress = malloc(sizeof(progress_t));
-
- progress->image = plugin->progress_barimage;
-
- x = screen_width/2-ply_image_get_width(plugin->logo_image)/2;;
- y = screen_height/2+ply_image_get_height(plugin->logo_image)/2+20;
- progress->image_altered = ply_image_resize (plugin->progress_barimage, ply_image_get_width(plugin->logo_image), ply_image_get_height(plugin->progress_barimage));
- progress->start_width = 1;
- progress->end_width = ply_image_get_width(plugin->logo_image);
- progress->current_width = 0;
-
- sprite = add_sprite (view, progress->image_altered, SPRITE_TYPE_PROGRESS, progress);
- sprite->x=x;
- sprite->y=y;
- sprite->z=10011;
- progress_update (view, sprite, 0);
-
-
-
+ progress_t *progress = malloc (sizeof(progress_t));
+
+ progress->image = plugin->progress_barimage;
+
+ x = screen_width / 2 - ply_image_get_width (plugin->logo_image) / 2;
+ y = screen_height / 2 + ply_image_get_height (plugin->logo_image) / 2 + 20;
+ progress->image_altered = ply_image_resize (plugin->progress_barimage, ply_image_get_width (plugin->logo_image), ply_image_get_height (plugin->progress_barimage));
+ progress->start_width = 1;
+ progress->end_width = ply_image_get_width (plugin->logo_image);
+ progress->current_width = 0;
+
+ sprite = add_sprite (view, progress->image_altered, SPRITE_TYPE_PROGRESS, progress);
+ sprite->x = x;
+ sprite->y = y;
+ sprite->z = 10011;
+ progress_update (view, sprite, 0);
+
+
+
#endif
- flare_t *flare = malloc(sizeof(flare_t));
+ flare_t *flare = malloc (sizeof(flare_t));
- flare->image_a = ply_image_resize (plugin->star_image, width, height);
- flare->image_b = ply_image_resize (plugin->star_image, width, height);
+ flare->image_a = ply_image_resize (plugin->star_image, width, height);
+ flare->image_b = ply_image_resize (plugin->star_image, width, height);
- sprite = add_sprite (view, flare->image_a, SPRITE_TYPE_FLARE, flare);
- sprite->x=screen_width-width;
- sprite->y=screen_height-height;
- sprite->z=1;
+ sprite = add_sprite (view, flare->image_a, SPRITE_TYPE_FLARE, flare);
+ sprite->x = screen_width - width;
+ sprite->y = screen_height - height;
+ sprite->z = 1;
- sprite_list_sort (view);
+ sprite_list_sort (view);
- uint32_t * old_image_data = ply_image_get_data (flare->image_a);
- uint32_t * new_image_data = ply_image_get_data (flare->image_b);
+ uint32_t *old_image_data = ply_image_get_data (flare->image_a);
+ uint32_t *new_image_data = ply_image_get_data (flare->image_b);
- for (y = 0; y < height; y++)
- {
- for (x = 0; x < width; x++)
- {
- new_image_data[x + y * width] = 0x0;
- old_image_data[x + y * width] = 0x0;
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ new_image_data[x + y * width] = 0x0;
+ old_image_data[x + y * width] = 0x0;
+ }
}
- }
-
- for (i=0; i<FLARE_COUNT; i++)
- {
- flare_reset (flare, i);
- }
- flare->frame_count=0;
- flare_update(sprite, i);
+
+ for (i = 0; i < FLARE_COUNT; i++) {
+ flare_reset (flare, i);
+ }
+ flare->frame_count = 0;
+ flare_update (sprite, i);
}
static bool
@@ -1647,89 +1594,87 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
- assert (plugin->logo_image != NULL);
+ assert (plugin != NULL);
+ assert (plugin->logo_image != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
+ plugin->loop = loop;
+ plugin->mode = mode;
- ply_trace ("loading logo image");
- if (!ply_image_load (plugin->logo_image))
- return false;
+ ply_trace ("loading logo image");
+ if (!ply_image_load (plugin->logo_image))
+ return false;
- ply_trace ("loading star image");
- if (!ply_image_load (plugin->star_image))
- return false;
+ ply_trace ("loading star image");
+ if (!ply_image_load (plugin->star_image))
+ return false;
- ply_trace ("loading planet images");
+ ply_trace ("loading planet images");
#ifdef SHOW_PLANETS
- if (!ply_image_load (plugin->planet_image[0]))
- return false;
- if (!ply_image_load (plugin->planet_image[1]))
- return false;
- if (!ply_image_load (plugin->planet_image[2]))
- return false;
- if (!ply_image_load (plugin->planet_image[3]))
- return false;
- if (!ply_image_load (plugin->planet_image[4]))
- return false;
+ if (!ply_image_load (plugin->planet_image[0]))
+ return false;
+ if (!ply_image_load (plugin->planet_image[1]))
+ return false;
+ if (!ply_image_load (plugin->planet_image[2]))
+ return false;
+ if (!ply_image_load (plugin->planet_image[3]))
+ return false;
+ if (!ply_image_load (plugin->planet_image[4]))
+ return false;
#endif
#ifdef SHOW_PROGRESS_BAR
- if (!ply_image_load (plugin->progress_barimage))
- return false;
+ if (!ply_image_load (plugin->progress_barimage))
+ return false;
#endif
- ply_trace ("loading lock image");
- if (!ply_image_load (plugin->lock_image))
- return false;
+ ply_trace ("loading lock image");
+ if (!ply_image_load (plugin->lock_image))
+ return false;
- ply_trace ("loading box image");
- if (!ply_image_load (plugin->box_image))
- return false;
+ ply_trace ("loading box image");
+ if (!ply_image_load (plugin->box_image))
+ return false;
- if (!load_views (plugin))
- {
- ply_trace ("couldn't load views");
- return false;
- }
+ if (!load_views (plugin)) {
+ ply_trace ("couldn't load views");
+ return false;
+ }
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- ply_trace ("starting boot animation");
+ ply_trace ("starting boot animation");
- start_animation (plugin);
+ start_animation (plugin);
- plugin->is_visible = true;
+ plugin->is_visible = true;
- return true;
+ return true;
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- if (plugin->loop != NULL)
- {
- stop_animation (plugin);
+ if (plugin->loop != NULL) {
+ stop_animation (plugin);
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- plugin->is_visible = false;
+ plugin->is_visible = false;
}
static void
@@ -1737,22 +1682,21 @@ show_password_prompt (ply_boot_splash_plugin_t *plugin,
const char *text,
int number_of_bullets)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, text);
- ply_entry_set_bullet_count (view->entry, number_of_bullets);
+ view_show_prompt (view, text);
+ ply_entry_set_bullet_count (view->entry, number_of_bullets);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -1760,73 +1704,71 @@ show_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt);
- ply_entry_set_text (view->entry, entry_text);
+ view_show_prompt (view, prompt);
+ ply_entry_set_text (view->entry, entry_text);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
on_root_mounted (ply_boot_splash_plugin_t *plugin)
{
- plugin->root_is_mounted = true;
+ plugin->root_is_mounted = true;
}
static void
become_idle (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *idle_trigger)
{
- stop_animation (plugin);
- ply_trigger_pull (idle_trigger, NULL);
+ stop_animation (plugin);
+ ply_trigger_pull (idle_trigger, NULL);
}
static void
show_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- ply_trace ("Showing message '%s'", message);
- ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
-
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
- ply_label_set_text (view->message_label, message);
- ply_label_show (view->message_label, view->display, 10, 10);
-
- ply_pixel_display_draw_area (view->display, 10, 10,
- ply_label_get_width (view->message_label),
- ply_label_get_height(view->message_label));
- node = next_node;
- }
+ ply_trace ("Showing message '%s'", message);
+ ply_list_node_t *node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
+
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+ ply_label_set_text (view->message_label, message);
+ ply_label_show (view->message_label, view->display, 10, 10);
+
+ ply_pixel_display_draw_area (view->display, 10, 10,
+ ply_label_get_width (view->message_label),
+ ply_label_get_height (view->message_label));
+ node = next_node;
+ }
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_views (plugin);
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- hide_prompt (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- start_animation (plugin);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ hide_prompt (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ start_animation (plugin);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -1834,14 +1776,14 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- show_password_prompt (plugin, prompt, bullets);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ show_password_prompt (plugin, prompt, bullets);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -1849,45 +1791,45 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
- show_prompt (plugin, prompt, entry_text);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
+ show_prompt (plugin, prompt, entry_text);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- show_message (plugin, message);
+ show_message (plugin, message);
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_pixel_display = add_pixel_display,
- .remove_pixel_display = remove_pixel_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_progress = on_boot_progress,
- .hide_splash_screen = hide_splash_screen,
- .on_root_mounted = on_root_mounted,
- .become_idle = become_idle,
- .display_normal = display_normal,
- .display_password = display_password,
- .display_question = display_question,
- .display_message = display_message,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_pixel_display = add_pixel_display,
+ .remove_pixel_display = remove_pixel_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_progress = on_boot_progress,
+ .hide_splash_screen = hide_splash_screen,
+ .on_root_mounted = on_root_mounted,
+ .become_idle = become_idle,
+ .display_normal = display_normal,
+ .display_password = display_password,
+ .display_question = display_question,
+ .display_message = display_message,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/text/plugin.c b/src/plugins/splash/text/plugin.c
index fb97c14c..85cfda2e 100644
--- a/src/plugins/splash/text/plugin.c
+++ b/src/plugins/splash/text/plugin.c
@@ -51,32 +51,32 @@
#include <linux/kd.h>
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
- ply_list_t *views;
+ ply_list_t *views;
- ply_boot_splash_display_type_t state;
+ ply_boot_splash_display_type_t state;
- char *message;
+ char *message;
- uint32_t is_animating : 1;
+ uint32_t is_animating : 1;
};
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_text_display_t *display;
- ply_text_step_bar_t *step_bar;
-
+ ply_boot_splash_plugin_t *plugin;
+ ply_text_display_t *display;
+ ply_text_step_bar_t *step_bar;
} view_t;
ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
@@ -88,45 +88,45 @@ static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- view->step_bar = ply_text_step_bar_new ();
+ view->step_bar = ply_text_step_bar_new ();
- return view;
+ return view;
}
static void
view_free (view_t *view)
{
- ply_text_step_bar_free (view->step_bar);
+ ply_text_step_bar_free (view->step_bar);
- free (view);
+ free (view);
}
static void
view_show_message (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
- int display_width, display_height;
+ ply_boot_splash_plugin_t *plugin;
+ int display_width, display_height;
- plugin = view->plugin;
+ plugin = view->plugin;
- display_width = ply_text_display_get_number_of_columns (view->display);
- display_height = ply_text_display_get_number_of_rows (view->display);
+ display_width = ply_text_display_get_number_of_columns (view->display);
+ display_height = ply_text_display_get_number_of_rows (view->display);
- ply_text_display_set_cursor_position (view->display, 0,
- display_height / 2);
- ply_text_display_clear_line (view->display);
- ply_text_display_set_cursor_position (view->display,
- (display_width -
- strlen (plugin->message)) / 2,
- display_height / 2);
+ ply_text_display_set_cursor_position (view->display, 0,
+ display_height / 2);
+ ply_text_display_clear_line (view->display);
+ ply_text_display_set_cursor_position (view->display,
+ (display_width -
+ strlen (plugin->message)) / 2,
+ display_height / 2);
- ply_text_display_write (view->display, "%s", plugin->message);
+ ply_text_display_write (view->display, "%s", plugin->message);
}
static void
@@ -134,385 +134,373 @@ view_show_prompt (view_t *view,
const char *prompt,
const char *entered_text)
{
+ int display_width, display_height;
+ int i;
- int display_width, display_height;
- int i;
-
- display_width = ply_text_display_get_number_of_columns (view->display);
- display_height = ply_text_display_get_number_of_rows (view->display);
- ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
- ply_text_display_clear_screen (view->display);
+ display_width = ply_text_display_get_number_of_columns (view->display);
+ display_height = ply_text_display_get_number_of_rows (view->display);
+ ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
+ ply_text_display_clear_screen (view->display);
- ply_text_display_set_cursor_position (view->display, 0, display_height / 2);
+ ply_text_display_set_cursor_position (view->display, 0, display_height / 2);
- for (i=0; i < display_width; i++)
- ply_text_display_write (view->display, "%c", ' ');
+ for (i = 0; i < display_width; i++) {
+ ply_text_display_write (view->display, "%c", ' ');
+ }
- ply_text_display_set_cursor_position (view->display,
- display_width / 2 - (strlen (prompt)),
- display_height / 2);
+ ply_text_display_set_cursor_position (view->display,
+ display_width / 2 - (strlen (prompt)),
+ display_height / 2);
- ply_text_display_write (view->display, "%s:%s", prompt, entered_text);
+ ply_text_display_write (view->display, "%s:%s", prompt, entered_text);
- ply_text_display_show_cursor (view->display);
+ ply_text_display_show_cursor (view->display);
}
static void
view_start_animation (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
- ply_terminal_t *terminal;
+ ply_boot_splash_plugin_t *plugin;
+ ply_terminal_t *terminal;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- terminal = ply_text_display_get_terminal (view->display);
+ terminal = ply_text_display_get_terminal (view->display);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_BLACK,
- 0x000000);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_WHITE,
- 0xffffff);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_BLUE,
- 0x3465a4);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_BROWN,
- 0x979a9b);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_BLACK,
+ 0x000000);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_WHITE,
+ 0xffffff);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_BLUE,
+ 0x3465a4);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_BROWN,
+ 0x979a9b);
- ply_text_display_set_background_color (view->display,
- PLY_TERMINAL_COLOR_BLACK);
- ply_text_display_clear_screen (view->display);
- ply_text_display_hide_cursor (view->display);
+ ply_text_display_set_background_color (view->display,
+ PLY_TERMINAL_COLOR_BLACK);
+ ply_text_display_clear_screen (view->display);
+ ply_text_display_hide_cursor (view->display);
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- {
- ply_text_step_bar_hide (view->step_bar);
- return;
- }
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) {
+ ply_text_step_bar_hide (view->step_bar);
+ return;
+ }
- ply_text_step_bar_show (view->step_bar,
- view->display);
+ ply_text_step_bar_show (view->step_bar,
+ view->display);
}
static void
view_redraw (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- screen_width = ply_text_display_get_number_of_columns (view->display);
- screen_height = ply_text_display_get_number_of_rows (view->display);
+ screen_width = ply_text_display_get_number_of_columns (view->display);
+ screen_height = ply_text_display_get_number_of_rows (view->display);
- ply_text_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_text_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
redraw_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_redraw (view);
+ view_redraw (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
view_hide (view_t *view)
{
- if (view->display != NULL)
- {
- ply_terminal_t *terminal;
+ if (view->display != NULL) {
+ ply_terminal_t *terminal;
- terminal = ply_text_display_get_terminal (view->display);
+ terminal = ply_text_display_get_terminal (view->display);
- ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
- ply_text_display_clear_screen (view->display);
- ply_text_display_show_cursor (view->display);
+ ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
+ ply_text_display_clear_screen (view->display);
+ ply_text_display_show_cursor (view->display);
- ply_terminal_reset_colors (terminal);
- }
+ ply_terminal_reset_colors (terminal);
+ }
}
static void
hide_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_hide (view);
+ view_hide (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
pause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_display_pause_updates (view->display);
+ ply_text_display_pause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_display_unpause_updates (view->display);
+ ply_text_display_unpause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_plugin_t *plugin;
- ply_trace ("creating plugin");
+ ply_trace ("creating plugin");
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
- plugin->message = NULL;
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
+ plugin->message = NULL;
- plugin->views = ply_list_new ();
+ plugin->views = ply_list_new ();
- return plugin;
+ return plugin;
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
- ply_trace ("detaching from event loop");
+ ply_trace ("detaching from event loop");
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- ply_trace ("destroying plugin");
+ ply_trace ("destroying plugin");
- if (plugin == NULL)
- return;
+ if (plugin == NULL)
+ return;
- /* It doesn't ever make sense to keep this plugin on screen
- * after exit
- */
- hide_splash_screen (plugin, plugin->loop);
+ /* It doesn't ever make sense to keep this plugin on screen
+ * after exit
+ */
+ hide_splash_screen (plugin, plugin->loop);
- free_views (plugin);
- if (plugin->message != NULL)
- free (plugin->message);
+ free_views (plugin);
+ if (plugin->message != NULL)
+ free (plugin->message);
- free (plugin);
+ free (plugin);
}
static void
show_message (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_message (view);
+ view_show_message (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
start_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- redraw_views (plugin);
+ redraw_views (plugin);
- if (plugin->message != NULL)
- show_message (plugin);
+ if (plugin->message != NULL)
+ show_message (plugin);
- if (plugin->is_animating)
- return;
+ if (plugin->is_animating)
+ return;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_start_animation (view);
+ view_start_animation (view);
- node = next_node;
- }
+ node = next_node;
+ }
- plugin->is_animating = true;
+ plugin->is_animating = true;
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
+ if (!plugin->is_animating)
+ return;
- plugin->is_animating = false;
+ plugin->is_animating = false;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_step_bar_hide (view->step_bar);
+ ply_text_step_bar_hide (view->step_bar);
- node = next_node;
- }
- redraw_views (plugin);
+ node = next_node;
+ }
+ redraw_views (plugin);
}
static void
-on_draw (view_t *view,
- ply_terminal_t *terminal,
- int x,
- int y,
- int width,
- int height)
+on_draw (view_t *view,
+ ply_terminal_t *terminal,
+ int x,
+ int y,
+ int width,
+ int height)
{
- ply_text_display_clear_screen (view->display);
+ ply_text_display_clear_screen (view->display);
}
static void
add_text_display (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- view_t *view;
- ply_terminal_t *terminal;
+ view_t *view;
+ ply_terminal_t *terminal;
- view = view_new (plugin, display);
+ view = view_new (plugin, display);
- terminal = ply_text_display_get_terminal (view->display);
- if (ply_terminal_open (terminal))
- ply_terminal_activate_vt (terminal);
+ terminal = ply_text_display_get_terminal (view->display);
+ if (ply_terminal_open (terminal))
+ ply_terminal_activate_vt (terminal);
- ply_text_display_set_draw_handler (view->display,
- (ply_text_display_draw_handler_t)
- on_draw, view);
+ ply_text_display_set_draw_handler (view->display,
+ (ply_text_display_draw_handler_t)
+ on_draw, view);
- ply_list_append_data (plugin->views, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_text_display (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
- ply_text_display_set_draw_handler (view->display,
- NULL, NULL);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
- return;
- }
+ if (view->display == display) {
+ ply_text_display_set_draw_handler (view->display,
+ NULL, NULL);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
static bool
@@ -521,27 +509,27 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ plugin->loop = loop;
+ plugin->mode = mode;
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- ply_show_new_kernel_messages (false);
- start_animation (plugin);
+ ply_show_new_kernel_messages (false);
+ start_animation (plugin);
- return true;
+ return true;
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("status update");
+ ply_trace ("status update");
}
static void
@@ -549,77 +537,74 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
double duration,
double percent_done)
{
- ply_list_node_t *node;
- double total_duration;
+ ply_list_node_t *node;
+ double total_duration;
- total_duration = duration / percent_done;
+ total_duration = duration / percent_done;
- /* Fun made-up smoothing function to make the growth asymptotic:
- * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
- percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
+ /* Fun made-up smoothing function to make the growth asymptotic:
+ * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
+ percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_step_bar_set_percent_done (view->step_bar, percent_done);
- ply_text_step_bar_draw (view->step_bar);
+ ply_text_step_bar_set_percent_done (view->step_bar, percent_done);
+ ply_text_step_bar_draw (view->step_bar);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("hiding splash screen");
+ ply_trace ("hiding splash screen");
- if (plugin->loop != NULL)
- {
- stop_animation (plugin);
+ if (plugin->loop != NULL) {
+ stop_animation (plugin);
- ply_event_loop_stop_watching_for_exit (plugin->loop,
- (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop,
+ (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- hide_views (plugin);
- ply_show_new_kernel_messages (true);
+ hide_views (plugin);
+ ply_show_new_kernel_messages (true);
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_views (plugin);
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- {
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- start_animation (plugin);
- redraw_views (plugin);
- }
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL) {
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ start_animation (plugin);
+ redraw_views (plugin);
+ }
+ unpause_views (plugin);
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- if (plugin->message != NULL)
- free (plugin->message);
+ if (plugin->message != NULL)
+ free (plugin->message);
- plugin->message = strdup (message);
- start_animation (plugin);
+ plugin->message = strdup (message);
+ start_animation (plugin);
}
static void
@@ -627,29 +612,29 @@ show_password_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- ply_list_node_t *node;
- int i;
- char *entered_text;
+ ply_list_node_t *node;
+ int i;
+ char *entered_text;
- entered_text = calloc (bullets + 1, sizeof (char));
+ entered_text = calloc (bullets + 1, sizeof(char));
- for (i = 0; i < bullets; i++)
- entered_text[i] = '*';
+ for (i = 0; i < bullets; i++) {
+ entered_text[i] = '*';
+ }
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt, entered_text);
+ view_show_prompt (view, prompt, entered_text);
- node = next_node;
- }
- free (entered_text);
+ node = next_node;
+ }
+ free (entered_text);
}
static void
@@ -657,21 +642,20 @@ show_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *text)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt, text);
+ view_show_prompt (view, prompt, text);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -679,18 +663,18 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- if (!prompt)
- prompt = "Password";
+ if (!prompt)
+ prompt = "Password";
- show_password_prompt (plugin, prompt, bullets);
+ show_password_prompt (plugin, prompt, bullets);
- unpause_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -698,40 +682,40 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- if (!prompt)
- prompt = "Password";
+ if (!prompt)
+ prompt = "Password";
- show_prompt (plugin, prompt, entry_text);
+ show_prompt (plugin, prompt, entry_text);
- unpause_views (plugin);
+ unpause_views (plugin);
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_text_display = add_text_display,
- .remove_text_display = remove_text_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_progress = on_boot_progress,
- .hide_splash_screen = hide_splash_screen,
- .display_normal = display_normal,
- .display_message = display_message,
- .display_password = display_password,
- .display_question = display_question,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_text_display = add_text_display,
+ .remove_text_display = remove_text_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_progress = on_boot_progress,
+ .hide_splash_screen = hide_splash_screen,
+ .display_normal = display_normal,
+ .display_message = display_message,
+ .display_password = display_password,
+ .display_question = display_question,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c
index fba809b8..c105e022 100644
--- a/src/plugins/splash/throbgress/plugin.c
+++ b/src/plugins/splash/throbgress/plugin.c
@@ -65,48 +65,49 @@
#define BAR_HEIGHT 16
#endif
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_pixel_display_t *display;
- ply_entry_t *entry;
- ply_throbber_t *throbber;
- ply_progress_bar_t *progress_bar;
- ply_label_t *label;
- ply_label_t *message_label;
- ply_rectangle_t box_area, lock_area, logo_area, bar_area;
+ ply_boot_splash_plugin_t *plugin;
+ ply_pixel_display_t *display;
+ ply_entry_t *entry;
+ ply_throbber_t *throbber;
+ ply_progress_bar_t *progress_bar;
+ ply_label_t *label;
+ ply_label_t *message_label;
+ ply_rectangle_t box_area, lock_area, logo_area, bar_area;
} view_t;
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
- ply_image_t *logo_image;
- ply_image_t *lock_image;
- ply_image_t *box_image;
- ply_list_t *views;
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
+ ply_image_t *logo_image;
+ ply_image_t *lock_image;
+ ply_image_t *box_image;
+ ply_list_t *views;
- char *image_dir;
- ply_boot_splash_display_type_t state;
+ char *image_dir;
+ ply_boot_splash_display_type_t state;
- uint32_t background_start_color;
- uint32_t background_end_color;
+ uint32_t background_start_color;
+ uint32_t background_end_color;
- ply_trigger_t *idle_trigger;
+ ply_trigger_t *idle_trigger;
- uint32_t root_is_mounted : 1;
- uint32_t is_visible : 1;
- uint32_t is_animating : 1;
- uint32_t is_idle : 1;
+ uint32_t root_is_mounted : 1;
+ uint32_t is_visible : 1;
+ uint32_t is_animating : 1;
+ uint32_t is_idle : 1;
};
-ply_boot_splash_plugin_interface_t * ply_boot_splash_plugin_get_interface (void);
+ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin);
static void become_idle (ply_boot_splash_plugin_t *plugin,
@@ -116,342 +117,333 @@ static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- view->entry = ply_entry_new (plugin->image_dir);
- view->throbber = ply_throbber_new (plugin->image_dir,
- "throbber-");
- view->progress_bar = ply_progress_bar_new ();
- view->label = ply_label_new ();
- view->message_label = ply_label_new ();
+ view->entry = ply_entry_new (plugin->image_dir);
+ view->throbber = ply_throbber_new (plugin->image_dir,
+ "throbber-");
+ view->progress_bar = ply_progress_bar_new ();
+ view->label = ply_label_new ();
+ view->message_label = ply_label_new ();
- return view;
+ return view;
}
static void
view_free (view_t *view)
{
+ ply_entry_free (view->entry);
+ ply_throbber_free (view->throbber);
+ ply_progress_bar_free (view->progress_bar);
+ ply_label_free (view->label);
+ ply_label_free (view->message_label);
- ply_entry_free (view->entry);
- ply_throbber_free (view->throbber);
- ply_progress_bar_free (view->progress_bar);
- ply_label_free (view->label);
- ply_label_free (view->message_label);
-
- free (view);
+ free (view);
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static bool
view_load (view_t *view)
{
- ply_trace ("loading entry");
- if (!ply_entry_load (view->entry))
- return false;
+ ply_trace ("loading entry");
+ if (!ply_entry_load (view->entry))
+ return false;
- ply_trace ("loading throbber");
- if (!ply_throbber_load (view->throbber))
- return false;
+ ply_trace ("loading throbber");
+ if (!ply_throbber_load (view->throbber))
+ return false;
- return true;
+ return true;
}
static bool
load_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- bool view_loaded;
+ ply_list_node_t *node;
+ bool view_loaded;
- view_loaded = false;
- node = ply_list_get_first_node (plugin->views);
+ view_loaded = false;
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view_load (view))
- view_loaded = true;
+ if (view_load (view))
+ view_loaded = true;
- node = next_node;
- }
+ node = next_node;
+ }
- return view_loaded;
+ return view_loaded;
}
static void
view_redraw (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
redraw_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_redraw (view);
+ view_redraw (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
pause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("pausing views");
+ ply_trace ("pausing views");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_pause_updates (view->display);
+ ply_pixel_display_pause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("unpausing views");
+ ply_trace ("unpausing views");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_unpause_updates (view->display);
+ ply_pixel_display_unpause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
view_start_animation (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_plugin_t *plugin;
- unsigned long screen_width, screen_height;
- long width, height;
+ unsigned long screen_width, screen_height;
+ long width, height;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- return;
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
+ return;
- plugin->is_idle = false;
+ plugin->is_idle = false;
- width = ply_throbber_get_width (view->throbber);
- height = ply_throbber_get_height (view->throbber);
- ply_throbber_start (view->throbber,
- plugin->loop,
- view->display,
- screen_width / 2.0 - width / 2.0,
- view->logo_area.y + view->logo_area.height + height / 2);
- ply_progress_bar_show (view->progress_bar,
- view->display,
- 0, screen_height - ply_progress_bar_get_height (view->progress_bar));
- view_redraw (view);
+ width = ply_throbber_get_width (view->throbber);
+ height = ply_throbber_get_height (view->throbber);
+ ply_throbber_start (view->throbber,
+ plugin->loop,
+ view->display,
+ screen_width / 2.0 - width / 2.0,
+ view->logo_area.y + view->logo_area.height + height / 2);
+ ply_progress_bar_show (view->progress_bar,
+ view->display,
+ 0, screen_height - ply_progress_bar_get_height (view->progress_bar));
+ view_redraw (view);
}
static void
view_show_prompt (view_t *view,
const char *prompt)
{
- ply_boot_splash_plugin_t *plugin;
- int x, y;
- int entry_width, entry_height;
+ ply_boot_splash_plugin_t *plugin;
+ int x, y;
+ int entry_width, entry_height;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- if (ply_entry_is_hidden (view->entry))
- {
- unsigned long screen_width, screen_height;
+ if (ply_entry_is_hidden (view->entry)) {
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- view->box_area.width = ply_image_get_width (plugin->box_image);
- view->box_area.height = ply_image_get_height (plugin->box_image);
- view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0;
- view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0;
+ view->box_area.width = ply_image_get_width (plugin->box_image);
+ view->box_area.height = ply_image_get_height (plugin->box_image);
+ view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0;
+ view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0;
- view->lock_area.width = ply_image_get_width (plugin->lock_image);
- view->lock_area.height = ply_image_get_height (plugin->lock_image);
+ view->lock_area.width = ply_image_get_width (plugin->lock_image);
+ view->lock_area.height = ply_image_get_height (plugin->lock_image);
- entry_width = ply_entry_get_width (view->entry);
- entry_height = ply_entry_get_height (view->entry);
+ entry_width = ply_entry_get_width (view->entry);
+ entry_height = ply_entry_get_height (view->entry);
- x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
- y = screen_height / 2.0 - entry_height / 2.0;
+ x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
+ y = screen_height / 2.0 - entry_height / 2.0;
- view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
- view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
+ view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
+ view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
- ply_entry_show (view->entry, plugin->loop, view->display, x, y);
- }
+ ply_entry_show (view->entry, plugin->loop, view->display, x, y);
+ }
- if (prompt != NULL)
- {
- ply_label_set_text (view->label, prompt);
+ if (prompt != NULL) {
+ ply_label_set_text (view->label, prompt);
- x = view->box_area.x + view->lock_area.width / 2;
- y = view->box_area.y + view->box_area.height;
+ x = view->box_area.x + view->lock_area.width / 2;
+ y = view->box_area.y + view->box_area.height;
- ply_label_show (view->label, view->display, x, y);
- }
+ ply_label_show (view->label, view->display, x, y);
+ }
}
static void
view_hide_prompt (view_t *view)
{
- assert (view != NULL);
+ assert (view != NULL);
- ply_entry_hide (view->entry);
- ply_label_hide (view->label);
+ ply_entry_hide (view->entry);
+ ply_label_hide (view->label);
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
- char *image_dir, *image_path;
- char *color;
+ ply_boot_splash_plugin_t *plugin;
+ char *image_dir, *image_path;
+ char *color;
- srand ((int) ply_get_timestamp ());
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
+ srand ((int) ply_get_timestamp ());
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
- plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE);
- image_dir = ply_key_file_get_value (key_file, "throbgress", "ImageDir");
+ plugin->logo_image = ply_image_new (PLYMOUTH_LOGO_FILE);
+ image_dir = ply_key_file_get_value (key_file, "throbgress", "ImageDir");
- asprintf (&image_path, "%s/lock.png", image_dir);
- plugin->lock_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/lock.png", image_dir);
+ plugin->lock_image = ply_image_new (image_path);
+ free (image_path);
- asprintf (&image_path, "%s/box.png", image_dir);
- plugin->box_image = ply_image_new (image_path);
- free (image_path);
+ asprintf (&image_path, "%s/box.png", image_dir);
+ plugin->box_image = ply_image_new (image_path);
+ free (image_path);
- plugin->image_dir = image_dir;
- plugin->views = ply_list_new ();
+ plugin->image_dir = image_dir;
+ plugin->views = ply_list_new ();
- color = ply_key_file_get_value (key_file, "throbgress", "BackgroundStartColor");
+ color = ply_key_file_get_value (key_file, "throbgress", "BackgroundStartColor");
- if (color != NULL)
- plugin->background_start_color = strtol (color, NULL, 0);
- else
- plugin->background_start_color = PLYMOUTH_BACKGROUND_START_COLOR;
+ if (color != NULL)
+ plugin->background_start_color = strtol (color, NULL, 0);
+ else
+ plugin->background_start_color = PLYMOUTH_BACKGROUND_START_COLOR;
- free (color);
+ free (color);
- color = ply_key_file_get_value (key_file, "throbgress", "BackgroundEndColor");
+ color = ply_key_file_get_value (key_file, "throbgress", "BackgroundEndColor");
- if (color != NULL)
- plugin->background_end_color = strtol (color, NULL, 0);
- else
- plugin->background_end_color = PLYMOUTH_BACKGROUND_END_COLOR;
+ if (color != NULL)
+ plugin->background_end_color = strtol (color, NULL, 0);
+ else
+ plugin->background_end_color = PLYMOUTH_BACKGROUND_END_COLOR;
- free (color);
+ free (color);
- return plugin;
+ return plugin;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- if (plugin == NULL)
- return;
+ if (plugin == NULL)
+ return;
- ply_trace ("destroying plugin");
+ ply_trace ("destroying plugin");
- if (plugin->loop != NULL)
- {
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ if (plugin->loop != NULL) {
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- ply_image_free (plugin->logo_image);
- ply_image_free (plugin->box_image);
- ply_image_free (plugin->lock_image);
+ ply_image_free (plugin->logo_image);
+ ply_image_free (plugin->box_image);
+ ply_image_free (plugin->lock_image);
- free_views (plugin);
+ free_views (plugin);
- free (plugin);
+ free (plugin);
}
static void
@@ -462,211 +454,204 @@ draw_background (view_t *view,
int width,
int height)
{
- ply_boot_splash_plugin_t *plugin;
- ply_rectangle_t area;
+ ply_boot_splash_plugin_t *plugin;
+ ply_rectangle_t area;
- plugin = view->plugin;
+ plugin = view->plugin;
- area.x = x;
- area.y = y;
- area.width = width;
- area.height = height;
+ area.x = x;
+ area.y = y;
+ area.width = width;
+ area.height = height;
- if (plugin->background_start_color != plugin->background_end_color)
- ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area,
- plugin->background_start_color,
- plugin->background_end_color);
- else
- ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area,
- plugin->background_start_color);
+ if (plugin->background_start_color != plugin->background_end_color)
+ ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area,
+ plugin->background_start_color,
+ plugin->background_end_color);
+ else
+ ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area,
+ plugin->background_start_color);
}
static void
-draw_logo (view_t *view,
- ply_pixel_buffer_t *pixel_buffer)
+draw_logo (view_t *view,
+ ply_pixel_buffer_t *pixel_buffer)
{
- ply_boot_splash_plugin_t *plugin;
- uint32_t *logo_data;
- unsigned long screen_width, screen_height;
- long width, height;
+ ply_boot_splash_plugin_t *plugin;
+ uint32_t *logo_data;
+ unsigned long screen_width, screen_height;
+ long width, height;
- plugin = view->plugin;
+ plugin = view->plugin;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- width = ply_image_get_width (plugin->logo_image);
- height = ply_image_get_height (plugin->logo_image);
- logo_data = ply_image_get_data (plugin->logo_image);
- view->logo_area.x = (screen_width / 2) - (width / 2);
- view->logo_area.y = (screen_height / 2) - (height / 2);
- view->logo_area.width = width;
- view->logo_area.height = height;
+ width = ply_image_get_width (plugin->logo_image);
+ height = ply_image_get_height (plugin->logo_image);
+ logo_data = ply_image_get_data (plugin->logo_image);
+ view->logo_area.x = (screen_width / 2) - (width / 2);
+ view->logo_area.y = (screen_height / 2) - (height / 2);
+ view->logo_area.width = width;
+ view->logo_area.height = height;
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->logo_area,
- logo_data);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->logo_area,
+ logo_data);
}
static void
start_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (plugin->is_animating)
- return;
+ if (plugin->is_animating)
+ return;
- ply_trace ("starting animation");
+ ply_trace ("starting animation");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_start_animation (view);
+ view_start_animation (view);
- node = next_node;
- }
+ node = next_node;
+ }
- plugin->is_animating = true;
+ plugin->is_animating = true;
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- plugin->is_idle = true;
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
+ plugin->is_idle = true;
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *trigger)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
+ if (!plugin->is_animating)
+ return;
- ply_trace ("stopping animation%s",
- trigger != NULL? " with trigger" : "");
+ ply_trace ("stopping animation%s",
+ trigger != NULL ? " with trigger" : "");
- plugin->is_animating = false;
+ plugin->is_animating = false;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_progress_bar_hide (view->progress_bar);
- if (trigger != NULL)
- ply_trigger_ignore_next_pull (trigger);
- ply_throbber_stop (view->throbber, trigger);
+ ply_progress_bar_hide (view->progress_bar);
+ if (trigger != NULL)
+ ply_trigger_ignore_next_pull (trigger);
+ ply_throbber_stop (view->throbber, trigger);
- node = next_node;
- }
+ node = next_node;
+ }
- if (trigger != NULL)
- ply_trigger_pull (trigger, NULL);
+ if (trigger != NULL)
+ ply_trigger_pull (trigger, NULL);
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
}
static void
-on_draw (view_t *view,
- ply_pixel_buffer_t *pixel_buffer,
- int x,
- int y,
- int width,
- int height)
+on_draw (view_t *view,
+ ply_pixel_buffer_t *pixel_buffer,
+ int x,
+ int y,
+ int width,
+ int height)
{
- ply_boot_splash_plugin_t *plugin;
- plugin = view->plugin;
+ ply_boot_splash_plugin_t *plugin;
+
+ plugin = view->plugin;
- draw_background (view, pixel_buffer, x, y, width, height);
+ draw_background (view, pixel_buffer, x, y, width, height);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY ||
- plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY )
- {
- uint32_t *box_data, *lock_data;
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY ||
+ plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) {
+ uint32_t *box_data, *lock_data;
- box_data = ply_image_get_data (plugin->box_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->box_area,
- box_data);
- ply_entry_draw_area (view->entry, pixel_buffer, x, y, width, height);
- ply_label_draw_area (view->label, pixel_buffer, x, y, width, height);
- lock_data = ply_image_get_data (plugin->lock_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->lock_area,
- lock_data);
- }
- else
- {
- draw_logo (view, pixel_buffer);
- ply_throbber_draw_area (view->throbber,
- pixel_buffer, x, y, width, height);
- ply_progress_bar_draw_area (view->progress_bar,
- pixel_buffer, x, y, width, height);
- }
- ply_label_draw_area (view->message_label,
- pixel_buffer,
- x, y, width, height);
+ box_data = ply_image_get_data (plugin->box_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->box_area,
+ box_data);
+ ply_entry_draw_area (view->entry, pixel_buffer, x, y, width, height);
+ ply_label_draw_area (view->label, pixel_buffer, x, y, width, height);
+ lock_data = ply_image_get_data (plugin->lock_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->lock_area,
+ lock_data);
+ } else {
+ draw_logo (view, pixel_buffer);
+ ply_throbber_draw_area (view->throbber,
+ pixel_buffer, x, y, width, height);
+ ply_progress_bar_draw_area (view->progress_bar,
+ pixel_buffer, x, y, width, height);
+ }
+ ply_label_draw_area (view->message_label,
+ pixel_buffer,
+ x, y, width, height);
}
static void
add_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- ply_trace ("adding pixel display to plugin");
- view = view_new (plugin, display);
+ ply_trace ("adding pixel display to plugin");
+ view = view_new (plugin, display);
- ply_pixel_display_set_draw_handler (view->display,
- (ply_pixel_display_draw_handler_t)
- on_draw, view);
+ ply_pixel_display_set_draw_handler (view->display,
+ (ply_pixel_display_draw_handler_t)
+ on_draw, view);
- ply_list_append_data (plugin->views, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("removing pixel display from plugin");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ ply_trace ("removing pixel display from plugin");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
+ if (view->display == display) {
+ ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
- return;
+ node = next_node;
}
-
- node = next_node;
- }
}
static bool
@@ -675,47 +660,46 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
- assert (plugin->logo_image != NULL);
+ assert (plugin != NULL);
+ assert (plugin->logo_image != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
+ plugin->loop = loop;
+ plugin->mode = mode;
- ply_trace ("loading logo image");
- if (!ply_image_load (plugin->logo_image))
- return false;
+ ply_trace ("loading logo image");
+ if (!ply_image_load (plugin->logo_image))
+ return false;
- ply_trace ("loading lock image");
- if (!ply_image_load (plugin->lock_image))
- return false;
+ ply_trace ("loading lock image");
+ if (!ply_image_load (plugin->lock_image))
+ return false;
- ply_trace ("loading box image");
- if (!ply_image_load (plugin->box_image))
- return false;
+ ply_trace ("loading box image");
+ if (!ply_image_load (plugin->box_image))
+ return false;
- if (!load_views (plugin))
- {
- ply_trace ("couldn't load views");
- return false;
- }
+ if (!load_views (plugin)) {
+ ply_trace ("couldn't load views");
+ return false;
+ }
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- ply_trace ("starting boot animation");
- start_animation (plugin);
+ ply_trace ("starting boot animation");
+ start_animation (plugin);
- plugin->is_visible = true;
+ plugin->is_visible = true;
- return true;
+ return true;
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
}
static void
@@ -723,53 +707,51 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
double duration,
double percent_done)
{
- ply_list_node_t *node;
- double total_duration;
+ ply_list_node_t *node;
+ double total_duration;
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES)
- return;
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES)
+ return;
- total_duration = duration / percent_done;
+ total_duration = duration / percent_done;
- /* Fun made-up smoothing function to make the growth asymptotic:
- * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
- percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
+ /* Fun made-up smoothing function to make the growth asymptotic:
+ * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
+ percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_progress_bar_set_percent_done (view->progress_bar, percent_done);
- ply_progress_bar_draw (view->progress_bar);
+ ply_progress_bar_set_percent_done (view->progress_bar, percent_done);
+ ply_progress_bar_draw (view->progress_bar);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("hiding splash");
- if (plugin->loop != NULL)
- {
- stop_animation (plugin, NULL);
+ ply_trace ("hiding splash");
+ if (plugin->loop != NULL) {
+ stop_animation (plugin, NULL);
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- plugin->is_visible = false;
+ plugin->is_visible = false;
}
static void
@@ -777,23 +759,22 @@ show_password_prompt (ply_boot_splash_plugin_t *plugin,
const char *text,
int number_of_bullets)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("showing password prompt");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ ply_trace ("showing password prompt");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, text);
- ply_entry_set_bullet_count (view->entry, number_of_bullets);
+ view_show_prompt (view, text);
+ ply_entry_set_bullet_count (view->entry, number_of_bullets);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -801,67 +782,64 @@ show_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("showing prompt");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ ply_trace ("showing prompt");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt);
- ply_entry_set_text (view->entry, entry_text);
+ view_show_prompt (view, prompt);
+ ply_entry_set_text (view->entry, entry_text);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
on_root_mounted (ply_boot_splash_plugin_t *plugin)
{
- ply_trace ("root filesystem mounted");
- plugin->root_is_mounted = true;
+ ply_trace ("root filesystem mounted");
+ plugin->root_is_mounted = true;
}
static void
become_idle (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *idle_trigger)
{
- ply_trace ("deactivation requested");
- if (plugin->is_idle)
- {
- ply_trace ("plugin is already idle");
- ply_trigger_pull (idle_trigger, NULL);
- return;
- }
+ ply_trace ("deactivation requested");
+ if (plugin->is_idle) {
+ ply_trace ("plugin is already idle");
+ ply_trigger_pull (idle_trigger, NULL);
+ return;
+ }
- stop_animation (plugin, idle_trigger);
- plugin->is_idle = true;
+ stop_animation (plugin, idle_trigger);
+ plugin->is_idle = true;
}
static void
hide_prompt (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("hiding prompt");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ ply_trace ("hiding prompt");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_hide_prompt (view);
+ view_hide_prompt (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
@@ -869,37 +847,36 @@ static void
show_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- ply_trace ("Showing message '%s'", message);
- ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
-
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
- ply_label_set_text (view->message_label, message);
- ply_label_show (view->message_label, view->display, 10, 10);
-
- ply_pixel_display_draw_area (view->display, 10, 10,
- ply_label_get_width (view->message_label),
- ply_label_get_height(view->message_label));
- node = next_node;
- }
+ ply_trace ("Showing message '%s'", message);
+ ply_list_node_t *node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
+
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+ ply_label_set_text (view->message_label, message);
+ ply_label_show (view->message_label, view->display, 10, 10);
+
+ ply_pixel_display_draw_area (view->display, 10, 10,
+ ply_label_get_width (view->message_label),
+ ply_label_get_height (view->message_label));
+ node = next_node;
+ }
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_views (plugin);
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- hide_prompt (plugin);
+ pause_views (plugin);
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ hide_prompt (plugin);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- start_animation (plugin);
- redraw_views (plugin);
- unpause_views (plugin);
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ start_animation (plugin);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -907,14 +884,14 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin, NULL);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin, NULL);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- show_password_prompt (plugin, prompt, bullets);
- redraw_views (plugin);
- unpause_views (plugin);
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ show_password_prompt (plugin, prompt, bullets);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -922,69 +899,68 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin, NULL);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin, NULL);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
- show_prompt (plugin, prompt, entry_text);
- redraw_views (plugin);
- unpause_views (plugin);
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
+ show_prompt (plugin, prompt, entry_text);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- show_message (plugin, message);
+ show_message (plugin, message);
}
static void
system_update (ply_boot_splash_plugin_t *plugin,
int progress)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES)
- return;
+ if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES)
+ return;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
- ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f);
- ply_progress_bar_draw (view->progress_bar);
- node = next_node;
- }
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+ ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f);
+ ply_progress_bar_draw (view->progress_bar);
+ node = next_node;
+ }
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_pixel_display = add_pixel_display,
- .remove_pixel_display = remove_pixel_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_progress = on_boot_progress,
- .hide_splash_screen = hide_splash_screen,
- .on_root_mounted = on_root_mounted,
- .become_idle = become_idle,
- .display_normal = display_normal,
- .display_password = display_password,
- .display_question = display_question,
- .display_message = display_message,
- .system_update = system_update,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_pixel_display = add_pixel_display,
+ .remove_pixel_display = remove_pixel_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_progress = on_boot_progress,
+ .hide_splash_screen = hide_splash_screen,
+ .on_root_mounted = on_root_mounted,
+ .become_idle = become_idle,
+ .display_normal = display_normal,
+ .display_password = display_password,
+ .display_question = display_question,
+ .display_message = display_message,
+ .system_update = system_update,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/tribar/plugin.c b/src/plugins/splash/tribar/plugin.c
index 4458badf..0dcd7f8d 100644
--- a/src/plugins/splash/tribar/plugin.c
+++ b/src/plugins/splash/tribar/plugin.c
@@ -54,32 +54,32 @@
#include <linux/kd.h>
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
- ply_list_t *views;
+ ply_list_t *views;
- ply_boot_splash_display_type_t state;
+ ply_boot_splash_display_type_t state;
- char *message;
+ char *message;
- uint32_t is_animating : 1;
+ uint32_t is_animating : 1;
};
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_text_display_t *display;
- ply_text_progress_bar_t *progress_bar;
-
+ ply_boot_splash_plugin_t *plugin;
+ ply_text_display_t *display;
+ ply_text_progress_bar_t *progress_bar;
} view_t;
ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
@@ -91,45 +91,45 @@ static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- view->progress_bar = ply_text_progress_bar_new ();
+ view->progress_bar = ply_text_progress_bar_new ();
- return view;
+ return view;
}
static void
view_free (view_t *view)
{
- ply_text_progress_bar_free (view->progress_bar);
+ ply_text_progress_bar_free (view->progress_bar);
- free (view);
+ free (view);
}
static void
view_show_message (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
- int display_width, display_height;
+ ply_boot_splash_plugin_t *plugin;
+ int display_width, display_height;
- plugin = view->plugin;
+ plugin = view->plugin;
- display_width = ply_text_display_get_number_of_columns (view->display);
- display_height = ply_text_display_get_number_of_rows (view->display);
+ display_width = ply_text_display_get_number_of_columns (view->display);
+ display_height = ply_text_display_get_number_of_rows (view->display);
- ply_text_display_set_cursor_position (view->display, 0,
- display_height / 2);
- ply_text_display_clear_line (view->display);
- ply_text_display_set_cursor_position (view->display,
- (display_width -
- strlen (plugin->message)) / 2,
- display_height / 2);
+ ply_text_display_set_cursor_position (view->display, 0,
+ display_height / 2);
+ ply_text_display_clear_line (view->display);
+ ply_text_display_set_cursor_position (view->display,
+ (display_width -
+ strlen (plugin->message)) / 2,
+ display_height / 2);
- ply_text_display_write (view->display, "%s", plugin->message);
+ ply_text_display_write (view->display, "%s", plugin->message);
}
static void
@@ -137,385 +137,373 @@ view_show_prompt (view_t *view,
const char *prompt,
const char *entered_text)
{
+ int display_width, display_height;
+ int i;
- int display_width, display_height;
- int i;
-
- display_width = ply_text_display_get_number_of_columns (view->display);
- display_height = ply_text_display_get_number_of_rows (view->display);
- ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
- ply_text_display_clear_screen (view->display);
+ display_width = ply_text_display_get_number_of_columns (view->display);
+ display_height = ply_text_display_get_number_of_rows (view->display);
+ ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
+ ply_text_display_clear_screen (view->display);
- ply_text_display_set_cursor_position (view->display, 0, display_height / 2);
+ ply_text_display_set_cursor_position (view->display, 0, display_height / 2);
- for (i=0; i < display_width; i++)
- ply_text_display_write (view->display, "%c", ' ');
+ for (i = 0; i < display_width; i++) {
+ ply_text_display_write (view->display, "%c", ' ');
+ }
- ply_text_display_set_cursor_position (view->display,
- display_width / 2 - (strlen (prompt)),
- display_height / 2);
+ ply_text_display_set_cursor_position (view->display,
+ display_width / 2 - (strlen (prompt)),
+ display_height / 2);
- ply_text_display_write (view->display, "%s:%s", prompt, entered_text);
+ ply_text_display_write (view->display, "%s:%s", prompt, entered_text);
- ply_text_display_show_cursor (view->display);
+ ply_text_display_show_cursor (view->display);
}
static void
view_start_animation (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
- ply_terminal_t *terminal;
+ ply_boot_splash_plugin_t *plugin;
+ ply_terminal_t *terminal;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- terminal = ply_text_display_get_terminal (view->display);
+ terminal = ply_text_display_get_terminal (view->display);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_BLACK,
- 0x000000);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_WHITE,
- 0xffffff);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_BLUE,
- 0x0073B3);
- ply_terminal_set_color_hex_value (terminal,
- PLY_TERMINAL_COLOR_BROWN,
- 0x00457E);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_BLACK,
+ 0x000000);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_WHITE,
+ 0xffffff);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_BLUE,
+ 0x0073B3);
+ ply_terminal_set_color_hex_value (terminal,
+ PLY_TERMINAL_COLOR_BROWN,
+ 0x00457E);
- ply_text_display_set_background_color (view->display,
- PLY_TERMINAL_COLOR_BLACK);
- ply_text_display_clear_screen (view->display);
- ply_text_display_hide_cursor (view->display);
+ ply_text_display_set_background_color (view->display,
+ PLY_TERMINAL_COLOR_BLACK);
+ ply_text_display_clear_screen (view->display);
+ ply_text_display_hide_cursor (view->display);
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- {
- ply_text_progress_bar_hide (view->progress_bar);
- return;
- }
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN) {
+ ply_text_progress_bar_hide (view->progress_bar);
+ return;
+ }
- ply_text_progress_bar_show (view->progress_bar,
- view->display);
+ ply_text_progress_bar_show (view->progress_bar,
+ view->display);
}
static void
view_redraw (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- screen_width = ply_text_display_get_number_of_columns (view->display);
- screen_height = ply_text_display_get_number_of_rows (view->display);
+ screen_width = ply_text_display_get_number_of_columns (view->display);
+ screen_height = ply_text_display_get_number_of_rows (view->display);
- ply_text_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_text_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
redraw_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_redraw (view);
+ view_redraw (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
view_hide (view_t *view)
{
- if (view->display != NULL)
- {
- ply_terminal_t *terminal;
+ if (view->display != NULL) {
+ ply_terminal_t *terminal;
- terminal = ply_text_display_get_terminal (view->display);
+ terminal = ply_text_display_get_terminal (view->display);
- ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
- ply_text_display_clear_screen (view->display);
- ply_text_display_show_cursor (view->display);
+ ply_text_display_set_background_color (view->display, PLY_TERMINAL_COLOR_DEFAULT);
+ ply_text_display_clear_screen (view->display);
+ ply_text_display_show_cursor (view->display);
- ply_terminal_reset_colors (terminal);
- }
+ ply_terminal_reset_colors (terminal);
+ }
}
static void
hide_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_hide (view);
+ view_hide (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
pause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_display_pause_updates (view->display);
+ ply_text_display_pause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_display_unpause_updates (view->display);
+ ply_text_display_unpause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_plugin_t *plugin;
- ply_trace ("creating plugin");
+ ply_trace ("creating plugin");
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
- plugin->message = NULL;
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
+ plugin->message = NULL;
- plugin->views = ply_list_new ();
+ plugin->views = ply_list_new ();
- return plugin;
+ return plugin;
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
- ply_trace ("detaching from event loop");
+ ply_trace ("detaching from event loop");
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- ply_trace ("destroying plugin");
+ ply_trace ("destroying plugin");
- if (plugin == NULL)
- return;
+ if (plugin == NULL)
+ return;
- /* It doesn't ever make sense to keep this plugin on screen
- * after exit
- */
- hide_splash_screen (plugin, plugin->loop);
+ /* It doesn't ever make sense to keep this plugin on screen
+ * after exit
+ */
+ hide_splash_screen (plugin, plugin->loop);
- free_views (plugin);
- if (plugin->message != NULL)
- free (plugin->message);
+ free_views (plugin);
+ if (plugin->message != NULL)
+ free (plugin->message);
- free (plugin);
+ free (plugin);
}
static void
show_message (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_message (view);
+ view_show_message (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
start_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- redraw_views (plugin);
+ redraw_views (plugin);
- if (plugin->message != NULL)
- show_message (plugin);
+ if (plugin->message != NULL)
+ show_message (plugin);
- if (plugin->is_animating)
- return;
+ if (plugin->is_animating)
+ return;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_start_animation (view);
+ view_start_animation (view);
- node = next_node;
- }
+ node = next_node;
+ }
- plugin->is_animating = true;
+ plugin->is_animating = true;
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
+ if (!plugin->is_animating)
+ return;
- plugin->is_animating = false;
+ plugin->is_animating = false;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_progress_bar_hide (view->progress_bar);
+ ply_text_progress_bar_hide (view->progress_bar);
- node = next_node;
- }
- redraw_views (plugin);
+ node = next_node;
+ }
+ redraw_views (plugin);
}
static void
-on_draw (view_t *view,
- ply_terminal_t *terminal,
- int x,
- int y,
- int width,
- int height)
+on_draw (view_t *view,
+ ply_terminal_t *terminal,
+ int x,
+ int y,
+ int width,
+ int height)
{
- ply_text_display_clear_screen (view->display);
+ ply_text_display_clear_screen (view->display);
}
static void
add_text_display (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- view_t *view;
- ply_terminal_t *terminal;
+ view_t *view;
+ ply_terminal_t *terminal;
- view = view_new (plugin, display);
+ view = view_new (plugin, display);
- terminal = ply_text_display_get_terminal (view->display);
- if (ply_terminal_open (terminal))
- ply_terminal_activate_vt (terminal);
+ terminal = ply_text_display_get_terminal (view->display);
+ if (ply_terminal_open (terminal))
+ ply_terminal_activate_vt (terminal);
- ply_text_display_set_draw_handler (view->display,
- (ply_text_display_draw_handler_t)
- on_draw, view);
+ ply_text_display_set_draw_handler (view->display,
+ (ply_text_display_draw_handler_t)
+ on_draw, view);
- ply_list_append_data (plugin->views, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_text_display (ply_boot_splash_plugin_t *plugin,
ply_text_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
- ply_text_display_set_draw_handler (view->display,
- NULL, NULL);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
- return;
- }
+ if (view->display == display) {
+ ply_text_display_set_draw_handler (view->display,
+ NULL, NULL);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- node = next_node;
- }
+ node = next_node;
+ }
}
static bool
@@ -524,27 +512,27 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ plugin->loop = loop;
+ plugin->mode = mode;
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- ply_show_new_kernel_messages (false);
- start_animation (plugin);
+ ply_show_new_kernel_messages (false);
+ start_animation (plugin);
- return true;
+ return true;
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("status update");
+ ply_trace ("status update");
}
static void
@@ -552,77 +540,74 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
double duration,
double percent_done)
{
- ply_list_node_t *node;
- double total_duration;
+ ply_list_node_t *node;
+ double total_duration;
- total_duration = duration / percent_done;
+ total_duration = duration / percent_done;
- /* Fun made-up smoothing function to make the growth asymptotic:
- * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
- percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
+ /* Fun made-up smoothing function to make the growth asymptotic:
+ * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
+ percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_text_progress_bar_set_percent_done (view->progress_bar, percent_done);
- ply_text_progress_bar_draw (view->progress_bar);
+ ply_text_progress_bar_set_percent_done (view->progress_bar, percent_done);
+ ply_text_progress_bar_draw (view->progress_bar);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("hiding splash screen");
+ ply_trace ("hiding splash screen");
- if (plugin->loop != NULL)
- {
- stop_animation (plugin);
+ if (plugin->loop != NULL) {
+ stop_animation (plugin);
- ply_event_loop_stop_watching_for_exit (plugin->loop,
- (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop,
+ (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- hide_views (plugin);
- ply_show_new_kernel_messages (true);
+ hide_views (plugin);
+ ply_show_new_kernel_messages (true);
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_views (plugin);
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- {
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- start_animation (plugin);
- redraw_views (plugin);
- }
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL) {
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ start_animation (plugin);
+ redraw_views (plugin);
+ }
+ unpause_views (plugin);
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- if (plugin->message != NULL)
- free (plugin->message);
+ if (plugin->message != NULL)
+ free (plugin->message);
- plugin->message = strdup (message);
- start_animation (plugin);
+ plugin->message = strdup (message);
+ start_animation (plugin);
}
static void
@@ -630,29 +615,29 @@ show_password_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- ply_list_node_t *node;
- int i;
- char *entered_text;
+ ply_list_node_t *node;
+ int i;
+ char *entered_text;
- entered_text = calloc (bullets + 1, sizeof (char));
+ entered_text = calloc (bullets + 1, sizeof(char));
- for (i = 0; i < bullets; i++)
- entered_text[i] = '*';
+ for (i = 0; i < bullets; i++) {
+ entered_text[i] = '*';
+ }
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt, entered_text);
+ view_show_prompt (view, prompt, entered_text);
- node = next_node;
- }
- free (entered_text);
+ node = next_node;
+ }
+ free (entered_text);
}
static void
@@ -660,21 +645,20 @@ show_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *text)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt, text);
+ view_show_prompt (view, prompt, text);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -682,18 +666,18 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- if (!prompt)
- prompt = "Password";
+ if (!prompt)
+ prompt = "Password";
- show_password_prompt (plugin, prompt, bullets);
+ show_password_prompt (plugin, prompt, bullets);
- unpause_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -701,40 +685,40 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin);
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- if (!prompt)
- prompt = "Password";
+ if (!prompt)
+ prompt = "Password";
- show_prompt (plugin, prompt, entry_text);
+ show_prompt (plugin, prompt, entry_text);
- unpause_views (plugin);
+ unpause_views (plugin);
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_text_display = add_text_display,
- .remove_text_display = remove_text_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_progress = on_boot_progress,
- .hide_splash_screen = hide_splash_screen,
- .display_normal = display_normal,
- .display_message = display_message,
- .display_password = display_password,
- .display_question = display_question,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_text_display = add_text_display,
+ .remove_text_display = remove_text_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_progress = on_boot_progress,
+ .hide_splash_screen = hide_splash_screen,
+ .display_normal = display_normal,
+ .display_message = display_message,
+ .display_password = display_password,
+ .display_question = display_question,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c
index f48b41e1..935d830d 100644
--- a/src/plugins/splash/two-step/plugin.c
+++ b/src/plugins/splash/two-step/plugin.c
@@ -68,71 +68,73 @@
#define SHOW_ANIMATION_PERCENT 0.9
#endif
-typedef enum {
- PLY_BOOT_SPLASH_DISPLAY_NORMAL,
- PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
- PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
+typedef enum
+{
+ PLY_BOOT_SPLASH_DISPLAY_NORMAL,
+ PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY,
+ PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY
} ply_boot_splash_display_type_t;
-typedef enum {
- PROGRESS_FUNCTION_TYPE_WWOODS,
- PROGRESS_FUNCTION_TYPE_LINEAR,
+typedef enum
+{
+ PROGRESS_FUNCTION_TYPE_WWOODS,
+ PROGRESS_FUNCTION_TYPE_LINEAR,
} progress_function_t;
typedef struct
{
- ply_boot_splash_plugin_t *plugin;
- ply_pixel_display_t *display;
- ply_entry_t *entry;
- ply_animation_t *end_animation;
- ply_progress_animation_t *progress_animation;
- ply_throbber_t *throbber;
- ply_label_t *label;
- ply_label_t *message_label;
- ply_rectangle_t box_area, lock_area, watermark_area;
- ply_trigger_t *end_trigger;
- ply_image_t *background_image;
+ ply_boot_splash_plugin_t *plugin;
+ ply_pixel_display_t *display;
+ ply_entry_t *entry;
+ ply_animation_t *end_animation;
+ ply_progress_animation_t *progress_animation;
+ ply_throbber_t *throbber;
+ ply_label_t *label;
+ ply_label_t *message_label;
+ ply_rectangle_t box_area, lock_area, watermark_area;
+ ply_trigger_t *end_trigger;
+ ply_image_t *background_image;
} view_t;
struct _ply_boot_splash_plugin
{
- ply_event_loop_t *loop;
- ply_boot_splash_mode_t mode;
- ply_image_t *lock_image;
- ply_image_t *box_image;
- ply_image_t *corner_image;
- ply_image_t *header_image;
- ply_image_t *background_tile_image;
- ply_image_t *watermark_image;
- ply_list_t *views;
+ ply_event_loop_t *loop;
+ ply_boot_splash_mode_t mode;
+ ply_image_t *lock_image;
+ ply_image_t *box_image;
+ ply_image_t *corner_image;
+ ply_image_t *header_image;
+ ply_image_t *background_tile_image;
+ ply_image_t *watermark_image;
+ ply_list_t *views;
- ply_boot_splash_display_type_t state;
+ ply_boot_splash_display_type_t state;
- double watermark_horizontal_alignment;
- double watermark_vertical_alignment;
+ double watermark_horizontal_alignment;
+ double watermark_vertical_alignment;
- double animation_horizontal_alignment;
- double animation_vertical_alignment;
- char *animation_dir;
+ double animation_horizontal_alignment;
+ double animation_vertical_alignment;
+ char *animation_dir;
- ply_progress_animation_transition_t transition;
- double transition_duration;
+ ply_progress_animation_transition_t transition;
+ double transition_duration;
- uint32_t background_start_color;
- uint32_t background_end_color;
+ uint32_t background_start_color;
+ uint32_t background_end_color;
- progress_function_t progress_function;
+ progress_function_t progress_function;
- ply_trigger_t *idle_trigger;
- ply_trigger_t *stop_trigger;
+ ply_trigger_t *idle_trigger;
+ ply_trigger_t *stop_trigger;
- uint32_t root_is_mounted : 1;
- uint32_t is_visible : 1;
- uint32_t is_animating : 1;
- uint32_t is_idle : 1;
+ uint32_t root_is_mounted : 1;
+ uint32_t is_visible : 1;
+ uint32_t is_animating : 1;
+ uint32_t is_idle : 1;
};
-ply_boot_splash_plugin_interface_t * ply_boot_splash_plugin_get_interface (void);
+ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void);
static void stop_animation (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *idle_trigger);
@@ -147,704 +149,669 @@ static view_t *
view_new (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- view = calloc (1, sizeof (view_t));
- view->plugin = plugin;
- view->display = display;
+ view = calloc (1, sizeof(view_t));
+ view->plugin = plugin;
+ view->display = display;
- view->entry = ply_entry_new (plugin->animation_dir);
- view->end_animation = ply_animation_new (plugin->animation_dir,
- "animation-");
- view->progress_animation = ply_progress_animation_new (plugin->animation_dir,
- "progress-");
+ view->entry = ply_entry_new (plugin->animation_dir);
+ view->end_animation = ply_animation_new (plugin->animation_dir,
+ "animation-");
+ view->progress_animation = ply_progress_animation_new (plugin->animation_dir,
+ "progress-");
- view->throbber = ply_throbber_new (plugin->animation_dir,
- "throbber-");
- ply_progress_animation_set_transition (view->progress_animation,
- plugin->transition,
- plugin->transition_duration);
+ view->throbber = ply_throbber_new (plugin->animation_dir,
+ "throbber-");
+ ply_progress_animation_set_transition (view->progress_animation,
+ plugin->transition,
+ plugin->transition_duration);
- view->label = ply_label_new ();
- view->message_label = ply_label_new ();
+ view->label = ply_label_new ();
+ view->message_label = ply_label_new ();
- return view;
+ return view;
}
static void
view_free (view_t *view)
{
+ ply_entry_free (view->entry);
+ ply_animation_free (view->end_animation);
+ ply_progress_animation_free (view->progress_animation);
+ ply_throbber_free (view->throbber);
+ ply_label_free (view->label);
+ ply_label_free (view->message_label);
- ply_entry_free (view->entry);
- ply_animation_free (view->end_animation);
- ply_progress_animation_free (view->progress_animation);
- ply_throbber_free (view->throbber);
- ply_label_free (view->label);
- ply_label_free (view->message_label);
+ if (view->background_image != NULL)
+ ply_image_free (view->background_image);
- if (view->background_image != NULL)
- ply_image_free (view->background_image);
-
- free (view);
+ free (view);
}
static bool
view_load (view_t *view)
{
- unsigned long screen_width, screen_height;
- ply_boot_splash_plugin_t *plugin;
-
- plugin = view->plugin;
-
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
-
- if (plugin->background_tile_image != NULL)
- {
- ply_trace ("tiling background to %lux%lu", screen_width, screen_height);
- view->background_image = ply_image_tile (plugin->background_tile_image, screen_width, screen_height);
- }
-
- if (plugin->watermark_image != NULL)
- {
- view->watermark_area.width = ply_image_get_width (plugin->watermark_image);
- view->watermark_area.height = ply_image_get_height (plugin->watermark_image);
- view->watermark_area.x = screen_width * plugin->watermark_horizontal_alignment - ply_image_get_width (plugin->watermark_image) * plugin->watermark_horizontal_alignment;
- view->watermark_area.y = screen_height * plugin->watermark_vertical_alignment - ply_image_get_height (plugin->watermark_image) * plugin->watermark_vertical_alignment;
- }
-
- ply_trace ("loading entry");
- if (!ply_entry_load (view->entry))
- return false;
-
- ply_trace ("loading animation");
- if (!ply_animation_load (view->end_animation))
- {
- ply_trace ("Default animation wouldn't load, "
- "falling back to old naming scheme");
-
- /* fallback to throbber- for compatibility
- */
- ply_animation_free (view->end_animation);
- view->end_animation = ply_animation_new (view->plugin->animation_dir,
- "throbber-");
- if (!ply_animation_load (view->end_animation))
- {
- ply_trace ("old naming scheme didn't work either");
- return false;
+ unsigned long screen_width, screen_height;
+ ply_boot_splash_plugin_t *plugin;
+
+ plugin = view->plugin;
+
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+
+ if (plugin->background_tile_image != NULL) {
+ ply_trace ("tiling background to %lux%lu", screen_width, screen_height);
+ view->background_image = ply_image_tile (plugin->background_tile_image, screen_width, screen_height);
}
- ply_throbber_free (view->throbber);
- view->throbber = NULL;
- }
-
- ply_trace ("loading progress animation");
- if (!ply_progress_animation_load (view->progress_animation))
- {
- ply_trace ("optional progress animation wouldn't load");
- ply_progress_animation_free (view->progress_animation);
- view->progress_animation = NULL;
- }
-
- if (view->throbber != NULL)
- {
- ply_trace ("loading throbber");
- if (!ply_throbber_load (view->throbber))
- {
- ply_trace ("optional throbber was not loaded");
- ply_throbber_free (view->throbber);
- view->throbber = NULL;
+ if (plugin->watermark_image != NULL) {
+ view->watermark_area.width = ply_image_get_width (plugin->watermark_image);
+ view->watermark_area.height = ply_image_get_height (plugin->watermark_image);
+ view->watermark_area.x = screen_width * plugin->watermark_horizontal_alignment - ply_image_get_width (plugin->watermark_image) * plugin->watermark_horizontal_alignment;
+ view->watermark_area.y = screen_height * plugin->watermark_vertical_alignment - ply_image_get_height (plugin->watermark_image) * plugin->watermark_vertical_alignment;
+ }
+
+ ply_trace ("loading entry");
+ if (!ply_entry_load (view->entry))
+ return false;
+
+ ply_trace ("loading animation");
+ if (!ply_animation_load (view->end_animation)) {
+ ply_trace ("Default animation wouldn't load, "
+ "falling back to old naming scheme");
+
+ /* fallback to throbber- for compatibility
+ */
+ ply_animation_free (view->end_animation);
+ view->end_animation = ply_animation_new (view->plugin->animation_dir,
+ "throbber-");
+ if (!ply_animation_load (view->end_animation)) {
+ ply_trace ("old naming scheme didn't work either");
+ return false;
+ }
+
+ ply_throbber_free (view->throbber);
+ view->throbber = NULL;
}
- }
- else
- {
- ply_trace ("this theme has no throbber\n");
- }
- return true;
+ ply_trace ("loading progress animation");
+ if (!ply_progress_animation_load (view->progress_animation)) {
+ ply_trace ("optional progress animation wouldn't load");
+ ply_progress_animation_free (view->progress_animation);
+ view->progress_animation = NULL;
+ }
+
+ if (view->throbber != NULL) {
+ ply_trace ("loading throbber");
+ if (!ply_throbber_load (view->throbber)) {
+ ply_trace ("optional throbber was not loaded");
+ ply_throbber_free (view->throbber);
+ view->throbber = NULL;
+ }
+ } else {
+ ply_trace ("this theme has no throbber\n");
+ }
+
+ return true;
}
static bool
load_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
- bool view_loaded;
+ ply_list_node_t *node;
+ bool view_loaded;
- view_loaded = false;
- node = ply_list_get_first_node (plugin->views);
+ view_loaded = false;
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view_load (view))
- view_loaded = true;
+ if (view_load (view))
+ view_loaded = true;
- node = next_node;
- }
+ node = next_node;
+ }
- return view_loaded;
+ return view_loaded;
}
static void
view_redraw (view_t *view)
{
- unsigned long screen_width, screen_height;
+ unsigned long screen_width, screen_height;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
}
static void
redraw_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_redraw (view);
+ view_redraw (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
pause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("pausing views");
+ ply_trace ("pausing views");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_pause_updates (view->display);
+ ply_pixel_display_pause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
unpause_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("unpausing views");
+ ply_trace ("unpausing views");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- ply_pixel_display_unpause_updates (view->display);
+ ply_pixel_display_unpause_updates (view->display);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
view_start_end_animation (view_t *view,
ply_trigger_t *trigger)
{
- ply_boot_splash_plugin_t *plugin;
+ ply_boot_splash_plugin_t *plugin;
- long x, y;
- long width, height;
- unsigned long screen_width, screen_height;
+ long x, y;
+ long width, height;
+ unsigned long screen_width, screen_height;
- plugin = view->plugin;
+ plugin = view->plugin;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
- width = ply_animation_get_width (view->end_animation);
- height = ply_animation_get_height (view->end_animation);
- x = plugin->animation_horizontal_alignment * screen_width - width / 2.0;
- y = plugin->animation_vertical_alignment * screen_height - height / 2.0;
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+ width = ply_animation_get_width (view->end_animation);
+ height = ply_animation_get_height (view->end_animation);
+ x = plugin->animation_horizontal_alignment * screen_width - width / 2.0;
+ y = plugin->animation_vertical_alignment * screen_height - height / 2.0;
- ply_trace ("starting end sequence animation for %ldx%ld view", width, height);
- ply_animation_start (view->end_animation,
- view->display,
- trigger, x, y);
+ ply_trace ("starting end sequence animation for %ldx%ld view", width, height);
+ ply_animation_start (view->end_animation,
+ view->display,
+ trigger, x, y);
}
static void
on_view_throbber_stopped (view_t *view)
{
- ply_trace ("hiding progress animation");
- if (view->progress_animation != NULL)
- ply_progress_animation_hide (view->progress_animation);
- view_start_end_animation (view, view->end_trigger);
- view->end_trigger = NULL;
+ ply_trace ("hiding progress animation");
+ if (view->progress_animation != NULL)
+ ply_progress_animation_hide (view->progress_animation);
+ view_start_end_animation (view, view->end_trigger);
+ view->end_trigger = NULL;
}
static void
view_start_progress_animation (view_t *view)
{
- ply_boot_splash_plugin_t *plugin;
-
- long x, y;
- long width, height;
- unsigned long screen_width, screen_height;
-
- assert (view != NULL);
-
- plugin = view->plugin;
-
- plugin->is_idle = false;
-
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
-
- ply_pixel_display_draw_area (view->display, 0, 0,
- screen_width, screen_height);
-
- if (view->throbber != NULL)
- {
- width = ply_throbber_get_width (view->throbber);
- height = ply_throbber_get_height (view->throbber);
- x = plugin->animation_horizontal_alignment * screen_width - width / 2.0;
- y = plugin->animation_vertical_alignment * screen_height - height / 2.0;
- ply_throbber_start (view->throbber,
- plugin->loop,
- view->display, x, y);
- ply_pixel_display_draw_area (view->display, x, y, width, height);
- }
-
- /* We don't really know how long shutdown will so
- * don't show the progress animation
- */
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- return;
-
- if (view->progress_animation != NULL)
- {
- width = ply_progress_animation_get_width (view->progress_animation);
- height = ply_progress_animation_get_height (view->progress_animation);
- x = plugin->animation_horizontal_alignment * screen_width - width / 2.0;
- y = plugin->animation_vertical_alignment * screen_height - height / 2.0;
- ply_progress_animation_show (view->progress_animation,
- view->display, x, y);
-
- ply_pixel_display_draw_area (view->display, x, y, width, height);
- }
+ ply_boot_splash_plugin_t *plugin;
+
+ long x, y;
+ long width, height;
+ unsigned long screen_width, screen_height;
+
+ assert (view != NULL);
+
+ plugin = view->plugin;
+
+ plugin->is_idle = false;
+
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
+
+ ply_pixel_display_draw_area (view->display, 0, 0,
+ screen_width, screen_height);
+
+ if (view->throbber != NULL) {
+ width = ply_throbber_get_width (view->throbber);
+ height = ply_throbber_get_height (view->throbber);
+ x = plugin->animation_horizontal_alignment * screen_width - width / 2.0;
+ y = plugin->animation_vertical_alignment * screen_height - height / 2.0;
+ ply_throbber_start (view->throbber,
+ plugin->loop,
+ view->display, x, y);
+ ply_pixel_display_draw_area (view->display, x, y, width, height);
+ }
+
+ /* We don't really know how long shutdown will so
+ * don't show the progress animation
+ */
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
+ return;
+
+ if (view->progress_animation != NULL) {
+ width = ply_progress_animation_get_width (view->progress_animation);
+ height = ply_progress_animation_get_height (view->progress_animation);
+ x = plugin->animation_horizontal_alignment * screen_width - width / 2.0;
+ y = plugin->animation_vertical_alignment * screen_height - height / 2.0;
+ ply_progress_animation_show (view->progress_animation,
+ view->display, x, y);
+
+ ply_pixel_display_draw_area (view->display, x, y, width, height);
+ }
}
static void
view_show_prompt (view_t *view,
const char *prompt)
{
- ply_boot_splash_plugin_t *plugin;
- int x, y;
- int entry_width, entry_height;
- unsigned long screen_width, screen_height;
+ ply_boot_splash_plugin_t *plugin;
+ int x, y;
+ int entry_width, entry_height;
+ unsigned long screen_width, screen_height;
- assert (view != NULL);
+ assert (view != NULL);
- plugin = view->plugin;
+ plugin = view->plugin;
- screen_width = ply_pixel_display_get_width (view->display);
- screen_height = ply_pixel_display_get_height (view->display);
+ screen_width = ply_pixel_display_get_width (view->display);
+ screen_height = ply_pixel_display_get_height (view->display);
- if (ply_entry_is_hidden (view->entry))
- {
- view->box_area.width = ply_image_get_width (plugin->box_image);
- view->box_area.height = ply_image_get_height (plugin->box_image);
- view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0;
- view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0;
+ if (ply_entry_is_hidden (view->entry)) {
+ view->box_area.width = ply_image_get_width (plugin->box_image);
+ view->box_area.height = ply_image_get_height (plugin->box_image);
+ view->box_area.x = screen_width / 2.0 - view->box_area.width / 2.0;
+ view->box_area.y = screen_height / 2.0 - view->box_area.height / 2.0;
- view->lock_area.width = ply_image_get_width (plugin->lock_image);
- view->lock_area.height = ply_image_get_height (plugin->lock_image);
+ view->lock_area.width = ply_image_get_width (plugin->lock_image);
+ view->lock_area.height = ply_image_get_height (plugin->lock_image);
- entry_width = ply_entry_get_width (view->entry);
- entry_height = ply_entry_get_height (view->entry);
+ entry_width = ply_entry_get_width (view->entry);
+ entry_height = ply_entry_get_height (view->entry);
- x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
- y = screen_height / 2.0 - entry_height / 2.0;
+ x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0 + view->lock_area.width;
+ y = screen_height / 2.0 - entry_height / 2.0;
- view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
- view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
+ view->lock_area.x = screen_width / 2.0 - (view->lock_area.width + entry_width) / 2.0;
+ view->lock_area.y = screen_height / 2.0 - view->lock_area.height / 2.0;
- ply_entry_show (view->entry, plugin->loop, view->display, x, y);
- }
+ ply_entry_show (view->entry, plugin->loop, view->display, x, y);
+ }
- if (prompt != NULL)
- {
- ply_label_set_text (view->label, prompt);
+ if (prompt != NULL) {
+ ply_label_set_text (view->label, prompt);
- /* We center the prompt in the middle and use 80% of the horizontal space */
- int label_width = screen_width * 100 / 80;
- ply_label_set_alignment (view->label, PLY_LABEL_ALIGN_CENTER);
- ply_label_set_width (view->label, label_width);
+ /* We center the prompt in the middle and use 80% of the horizontal space */
+ int label_width = screen_width * 100 / 80;
+ ply_label_set_alignment (view->label, PLY_LABEL_ALIGN_CENTER);
+ ply_label_set_width (view->label, label_width);
- x = (screen_width - label_width) / 2;
- y = view->box_area.y + view->box_area.height;
+ x = (screen_width - label_width) / 2;
+ y = view->box_area.y + view->box_area.height;
- ply_label_show (view->label, view->display, x, y);
- }
+ ply_label_show (view->label, view->display, x, y);
+ }
}
static void
view_hide_prompt (view_t *view)
{
- assert (view != NULL);
+ assert (view != NULL);
- ply_entry_hide (view->entry);
- ply_label_hide (view->label);
+ ply_entry_hide (view->entry);
+ ply_label_hide (view->label);
}
static ply_boot_splash_plugin_t *
create_plugin (ply_key_file_t *key_file)
{
- ply_boot_splash_plugin_t *plugin;
- char *image_dir, *image_path;
- char *alignment;
- char *transition;
- char *transition_duration;
- char *color;
- char *progress_function;
-
- srand ((int) ply_get_timestamp ());
- plugin = calloc (1, sizeof (ply_boot_splash_plugin_t));
-
- image_dir = ply_key_file_get_value (key_file, "two-step", "ImageDir");
-
- ply_trace ("Using '%s' as working directory", image_dir);
-
- asprintf (&image_path, "%s/lock.png", image_dir);
- plugin->lock_image = ply_image_new (image_path);
- free (image_path);
-
- asprintf (&image_path, "%s/box.png", image_dir);
- plugin->box_image = ply_image_new (image_path);
- free (image_path);
-
- asprintf (&image_path, "%s/corner-image.png", image_dir);
- plugin->corner_image = ply_image_new (image_path);
- free (image_path);
-
- asprintf (&image_path, "%s/header-image.png", image_dir);
- plugin->header_image = ply_image_new (image_path);
- free (image_path);
-
- asprintf (&image_path, "%s/background-tile.png", image_dir);
- plugin->background_tile_image = ply_image_new (image_path);
- free (image_path);
-
- asprintf (&image_path, "%s/watermark.png", image_dir);
- plugin->watermark_image = ply_image_new (image_path);
- free (image_path);
-
- plugin->animation_dir = image_dir;
-
- alignment = ply_key_file_get_value (key_file, "two-step", "HorizontalAlignment");
- if (alignment != NULL)
- plugin->animation_horizontal_alignment = strtod (alignment, NULL);
- else
- plugin->animation_horizontal_alignment = .5;
- free (alignment);
-
- alignment = ply_key_file_get_value (key_file, "two-step", "VerticalAlignment");
- if (alignment != NULL)
- plugin->animation_vertical_alignment = strtod (alignment, NULL);
- else
- plugin->animation_vertical_alignment = .5;
- free (alignment);
-
- alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkHorizontalAlignment");
- if (alignment != NULL)
- plugin->watermark_horizontal_alignment = strtod (alignment, NULL);
- else
- plugin->watermark_horizontal_alignment = 1.0;
- free (alignment);
-
- alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkVerticalAlignment");
- if (alignment != NULL)
- plugin->watermark_vertical_alignment = strtod (alignment, NULL);
- else
- plugin->watermark_vertical_alignment = .5;
- free (alignment);
-
- plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_NONE;
- transition = ply_key_file_get_value (key_file, "two-step", "Transition");
- if (transition != NULL)
- {
- if (strcmp (transition, "fade-over") == 0)
- plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_FADE_OVER;
- else if (strcmp (transition, "cross-fade") == 0)
- plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_CROSS_FADE;
- else if (strcmp (transition, "merge-fade") == 0)
- plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_MERGE_FADE;
- }
- free (transition);
-
- transition_duration = ply_key_file_get_value (key_file, "two-step", "TransitionDuration");
- if (transition_duration != NULL)
- plugin->transition_duration = strtod (transition_duration, NULL);
- else
- plugin->transition_duration = 0.0;
- free (transition_duration);
-
- color = ply_key_file_get_value (key_file, "two-step", "BackgroundStartColor");
-
- if (color != NULL)
- plugin->background_start_color = strtol (color, NULL, 0);
- else
- plugin->background_start_color = PLYMOUTH_BACKGROUND_START_COLOR;
-
- free (color);
-
- color = ply_key_file_get_value (key_file, "two-step", "BackgroundEndColor");
-
- if (color != NULL)
- plugin->background_end_color = strtol (color, NULL, 0);
- else
- plugin->background_end_color = PLYMOUTH_BACKGROUND_END_COLOR;
-
- free (color);
-
- progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction");
-
- if (progress_function != NULL)
- {
- if (strcmp (progress_function, "wwoods") == 0)
- {
- ply_trace ("Using wwoods progress function");
- plugin->progress_function = PROGRESS_FUNCTION_TYPE_WWOODS;
+ ply_boot_splash_plugin_t *plugin;
+ char *image_dir, *image_path;
+ char *alignment;
+ char *transition;
+ char *transition_duration;
+ char *color;
+ char *progress_function;
+
+ srand ((int) ply_get_timestamp ());
+ plugin = calloc (1, sizeof(ply_boot_splash_plugin_t));
+
+ image_dir = ply_key_file_get_value (key_file, "two-step", "ImageDir");
+
+ ply_trace ("Using '%s' as working directory", image_dir);
+
+ asprintf (&image_path, "%s/lock.png", image_dir);
+ plugin->lock_image = ply_image_new (image_path);
+ free (image_path);
+
+ asprintf (&image_path, "%s/box.png", image_dir);
+ plugin->box_image = ply_image_new (image_path);
+ free (image_path);
+
+ asprintf (&image_path, "%s/corner-image.png", image_dir);
+ plugin->corner_image = ply_image_new (image_path);
+ free (image_path);
+
+ asprintf (&image_path, "%s/header-image.png", image_dir);
+ plugin->header_image = ply_image_new (image_path);
+ free (image_path);
+
+ asprintf (&image_path, "%s/background-tile.png", image_dir);
+ plugin->background_tile_image = ply_image_new (image_path);
+ free (image_path);
+
+ asprintf (&image_path, "%s/watermark.png", image_dir);
+ plugin->watermark_image = ply_image_new (image_path);
+ free (image_path);
+
+ plugin->animation_dir = image_dir;
+
+ alignment = ply_key_file_get_value (key_file, "two-step", "HorizontalAlignment");
+ if (alignment != NULL)
+ plugin->animation_horizontal_alignment = strtod (alignment, NULL);
+ else
+ plugin->animation_horizontal_alignment = .5;
+ free (alignment);
+
+ alignment = ply_key_file_get_value (key_file, "two-step", "VerticalAlignment");
+ if (alignment != NULL)
+ plugin->animation_vertical_alignment = strtod (alignment, NULL);
+ else
+ plugin->animation_vertical_alignment = .5;
+ free (alignment);
+
+ alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkHorizontalAlignment");
+ if (alignment != NULL)
+ plugin->watermark_horizontal_alignment = strtod (alignment, NULL);
+ else
+ plugin->watermark_horizontal_alignment = 1.0;
+ free (alignment);
+
+ alignment = ply_key_file_get_value (key_file, "two-step", "WatermarkVerticalAlignment");
+ if (alignment != NULL)
+ plugin->watermark_vertical_alignment = strtod (alignment, NULL);
+ else
+ plugin->watermark_vertical_alignment = .5;
+ free (alignment);
+
+ plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_NONE;
+ transition = ply_key_file_get_value (key_file, "two-step", "Transition");
+ if (transition != NULL) {
+ if (strcmp (transition, "fade-over") == 0)
+ plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_FADE_OVER;
+ else if (strcmp (transition, "cross-fade") == 0)
+ plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_CROSS_FADE;
+ else if (strcmp (transition, "merge-fade") == 0)
+ plugin->transition = PLY_PROGRESS_ANIMATION_TRANSITION_MERGE_FADE;
}
- else if (strcmp (progress_function, "linear") == 0)
- {
- ply_trace ("Using linear progress function");
- plugin->progress_function = PROGRESS_FUNCTION_TYPE_LINEAR;
- }
- else
- {
- ply_trace ("unknown progress function %s, defaulting to linear", progress_function);
- plugin->progress_function = PROGRESS_FUNCTION_TYPE_LINEAR;
+ free (transition);
+
+ transition_duration = ply_key_file_get_value (key_file, "two-step", "TransitionDuration");
+ if (transition_duration != NULL)
+ plugin->transition_duration = strtod (transition_duration, NULL);
+ else
+ plugin->transition_duration = 0.0;
+ free (transition_duration);
+
+ color = ply_key_file_get_value (key_file, "two-step", "BackgroundStartColor");
+
+ if (color != NULL)
+ plugin->background_start_color = strtol (color, NULL, 0);
+ else
+ plugin->background_start_color = PLYMOUTH_BACKGROUND_START_COLOR;
+
+ free (color);
+
+ color = ply_key_file_get_value (key_file, "two-step", "BackgroundEndColor");
+
+ if (color != NULL)
+ plugin->background_end_color = strtol (color, NULL, 0);
+ else
+ plugin->background_end_color = PLYMOUTH_BACKGROUND_END_COLOR;
+
+ free (color);
+
+ progress_function = ply_key_file_get_value (key_file, "two-step", "ProgressFunction");
+
+ if (progress_function != NULL) {
+ if (strcmp (progress_function, "wwoods") == 0) {
+ ply_trace ("Using wwoods progress function");
+ plugin->progress_function = PROGRESS_FUNCTION_TYPE_WWOODS;
+ } else if (strcmp (progress_function, "linear") == 0) {
+ ply_trace ("Using linear progress function");
+ plugin->progress_function = PROGRESS_FUNCTION_TYPE_LINEAR;
+ } else {
+ ply_trace ("unknown progress function %s, defaulting to linear", progress_function);
+ plugin->progress_function = PROGRESS_FUNCTION_TYPE_LINEAR;
+ }
}
- }
- plugin->views = ply_list_new ();
+ plugin->views = ply_list_new ();
- return plugin;
+ return plugin;
}
static void
free_views (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("freeing views");
+ ply_trace ("freeing views");
- node = ply_list_get_first_node (plugin->views);
+ node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
- node = next_node;
- }
+ node = next_node;
+ }
- ply_list_free (plugin->views);
- plugin->views = NULL;
+ ply_list_free (plugin->views);
+ plugin->views = NULL;
}
static void
destroy_plugin (ply_boot_splash_plugin_t *plugin)
{
- if (plugin == NULL)
- return;
+ if (plugin == NULL)
+ return;
- ply_trace ("destroying plugin");
+ ply_trace ("destroying plugin");
- if (plugin->loop != NULL)
- {
- stop_animation (plugin, NULL);
+ if (plugin->loop != NULL) {
+ stop_animation (plugin, NULL);
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- ply_image_free (plugin->box_image);
- ply_image_free (plugin->lock_image);
+ ply_image_free (plugin->box_image);
+ ply_image_free (plugin->lock_image);
- if (plugin->corner_image != NULL)
- ply_image_free (plugin->corner_image);
+ if (plugin->corner_image != NULL)
+ ply_image_free (plugin->corner_image);
- if (plugin->header_image != NULL)
- ply_image_free (plugin->header_image);
+ if (plugin->header_image != NULL)
+ ply_image_free (plugin->header_image);
- if (plugin->background_tile_image != NULL)
- ply_image_free (plugin->background_tile_image);
+ if (plugin->background_tile_image != NULL)
+ ply_image_free (plugin->background_tile_image);
- if (plugin->watermark_image != NULL)
- ply_image_free (plugin->watermark_image);
+ if (plugin->watermark_image != NULL)
+ ply_image_free (plugin->watermark_image);
- free (plugin->animation_dir);
- free_views (plugin);
- free (plugin);
+ free (plugin->animation_dir);
+ free_views (plugin);
+ free (plugin);
}
static void
start_end_animation (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *trigger)
{
- ply_trace ("starting end animation");
-
- ply_list_node_t *node;
-
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
- ply_trigger_t *throbber_trigger;
-
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
-
- ply_trigger_ignore_next_pull (trigger);
-
- if (view->throbber != NULL)
- {
- ply_trace ("stopping throbber");
- view->end_trigger = trigger;
- throbber_trigger = ply_trigger_new (NULL);
- ply_trigger_add_handler (throbber_trigger,
- (ply_trigger_handler_t)
- on_view_throbber_stopped,
- view);
- ply_throbber_stop (view->throbber, throbber_trigger);
- }
- else
- {
- if (view->progress_animation != NULL)
- {
- ply_trace ("hiding progress animation");
- ply_progress_animation_hide (view->progress_animation);
- }
- view_start_end_animation (view, trigger);
+ ply_trace ("starting end animation");
+
+ ply_list_node_t *node;
+
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
+ ply_trigger_t *throbber_trigger;
+
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+
+ ply_trigger_ignore_next_pull (trigger);
+
+ if (view->throbber != NULL) {
+ ply_trace ("stopping throbber");
+ view->end_trigger = trigger;
+ throbber_trigger = ply_trigger_new (NULL);
+ ply_trigger_add_handler (throbber_trigger,
+ (ply_trigger_handler_t)
+ on_view_throbber_stopped,
+ view);
+ ply_throbber_stop (view->throbber, throbber_trigger);
+ } else {
+ if (view->progress_animation != NULL) {
+ ply_trace ("hiding progress animation");
+ ply_progress_animation_hide (view->progress_animation);
+ }
+ view_start_end_animation (view, trigger);
+ }
+
+ node = next_node;
}
-
- node = next_node;
- }
- ply_trigger_pull (trigger, NULL);
+ ply_trigger_pull (trigger, NULL);
}
static void
start_progress_animation (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- if (plugin->is_animating)
- return;
+ if (plugin->is_animating)
+ return;
- ply_trace ("starting animation");
+ ply_trace ("starting animation");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_start_progress_animation (view);
+ view_start_progress_animation (view);
- node = next_node;
- }
+ node = next_node;
+ }
- plugin->is_animating = true;
+ plugin->is_animating = true;
- /* We don't really know how long shutdown will, take
- * but it's normally really fast, so just jump to
- * the end animation
- */
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
- become_idle (plugin, NULL);
+ /* We don't really know how long shutdown will, take
+ * but it's normally really fast, so just jump to
+ * the end animation
+ */
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
+ become_idle (plugin, NULL);
}
static void
stop_animation (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *trigger)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- assert (plugin != NULL);
- assert (plugin->loop != NULL);
+ assert (plugin != NULL);
+ assert (plugin->loop != NULL);
- if (!plugin->is_animating)
- return;
+ if (!plugin->is_animating)
+ return;
- ply_trace ("stopping animation%s",
- trigger != NULL? " with trigger" : "");
+ ply_trace ("stopping animation%s",
+ trigger != NULL ? " with trigger" : "");
- plugin->is_animating = false;
+ plugin->is_animating = false;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->progress_animation != NULL)
- {
- ply_trace ("hiding progress animation");
- ply_progress_animation_hide (view->progress_animation);
- }
- if (trigger != NULL)
- ply_trigger_ignore_next_pull (trigger);
- if (view->throbber != NULL)
- ply_throbber_stop (view->throbber, trigger);
- ply_animation_stop (view->end_animation);
+ if (view->progress_animation != NULL) {
+ ply_trace ("hiding progress animation");
+ ply_progress_animation_hide (view->progress_animation);
+ }
+ if (trigger != NULL)
+ ply_trigger_ignore_next_pull (trigger);
+ if (view->throbber != NULL)
+ ply_throbber_stop (view->throbber, trigger);
+ ply_animation_stop (view->end_animation);
- node = next_node;
- }
+ node = next_node;
+ }
- if (trigger != NULL)
- ply_trigger_pull (trigger, NULL);
+ if (trigger != NULL)
+ ply_trigger_pull (trigger, NULL);
}
static void
detach_from_event_loop (ply_boot_splash_plugin_t *plugin)
{
- plugin->loop = NULL;
+ plugin->loop = NULL;
}
static void
@@ -855,179 +822,165 @@ draw_background (view_t *view,
int width,
int height)
{
- ply_boot_splash_plugin_t *plugin;
- ply_rectangle_t area;
-
- plugin = view->plugin;
-
- area.x = x;
- area.y = y;
- area.width = width;
- area.height = height;
-
- if (plugin->background_start_color != plugin->background_end_color)
- ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area,
- plugin->background_start_color,
- plugin->background_end_color);
- else
- ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area,
- plugin->background_start_color);
-
- if (view->background_image != NULL)
- {
- uint32_t *data;
- data = ply_image_get_data (view->background_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &area, data);
- }
-
- if (plugin->watermark_image != NULL)
- {
- uint32_t *data;
-
- data = ply_image_get_data (plugin->watermark_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &view->watermark_area, data);
- }
-}
-
-static void
-on_draw (view_t *view,
- ply_pixel_buffer_t *pixel_buffer,
- int x,
- int y,
- int width,
- int height)
-{
- ply_boot_splash_plugin_t *plugin;
- ply_rectangle_t screen_area;
- ply_rectangle_t image_area;
-
- plugin = view->plugin;
-
- draw_background (view, pixel_buffer, x, y, width, height);
-
- ply_pixel_buffer_get_size (pixel_buffer, &screen_area);
-
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY ||
- plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY )
- {
- uint32_t *box_data, *lock_data;
-
- box_data = ply_image_get_data (plugin->box_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->box_area,
- box_data);
-
- ply_entry_draw_area (view->entry,
- pixel_buffer,
- x, y, width, height);
- ply_label_draw_area (view->label,
- pixel_buffer,
- x, y, width, height);
-
- lock_data = ply_image_get_data (plugin->lock_image);
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
- &view->lock_area,
- lock_data);
- }
- else
- {
- if (view->throbber != NULL &&
- !ply_throbber_is_stopped (view->throbber))
- {
- ply_throbber_draw_area (view->throbber, pixel_buffer,
- x, y, width, height);
- }
- if (view->progress_animation != NULL && !ply_progress_animation_is_hidden (view->progress_animation))
- {
- ply_progress_animation_draw_area (view->progress_animation,
- pixel_buffer,
- x, y, width, height);
+ ply_boot_splash_plugin_t *plugin;
+ ply_rectangle_t area;
+
+ plugin = view->plugin;
+
+ area.x = x;
+ area.y = y;
+ area.width = width;
+ area.height = height;
+
+ if (plugin->background_start_color != plugin->background_end_color)
+ ply_pixel_buffer_fill_with_gradient (pixel_buffer, &area,
+ plugin->background_start_color,
+ plugin->background_end_color);
+ else
+ ply_pixel_buffer_fill_with_hex_color (pixel_buffer, &area,
+ plugin->background_start_color);
+
+ if (view->background_image != NULL) {
+ uint32_t *data;
+ data = ply_image_get_data (view->background_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &area, data);
}
- else if (!ply_animation_is_stopped (view->end_animation))
- ply_animation_draw_area (view->end_animation,
- pixel_buffer,
- x, y, width, height);
- if (plugin->corner_image != NULL)
- {
- image_area.width = ply_image_get_width (plugin->corner_image);
- image_area.height = ply_image_get_height (plugin->corner_image);
- image_area.x = screen_area.width - image_area.width - 20;
- image_area.y = screen_area.height - image_area.height - 20;
-
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &image_area, ply_image_get_data (plugin->corner_image));
+ if (plugin->watermark_image != NULL) {
+ uint32_t *data;
+ data = ply_image_get_data (plugin->watermark_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &view->watermark_area, data);
}
+}
- if (plugin->header_image != NULL)
- {
- long sprite_height;
-
-
- if (view->progress_animation != NULL)
- sprite_height = ply_progress_animation_get_height (view->progress_animation);
- else
- sprite_height = 0;
-
- if (view->throbber != NULL)
- sprite_height = MAX (ply_throbber_get_height (view->throbber),
- sprite_height);
-
- image_area.width = ply_image_get_width (plugin->header_image);
- image_area.height = ply_image_get_height (plugin->header_image);
- image_area.x = screen_area.width / 2.0 - image_area.width / 2.0;
- image_area.y = plugin->animation_vertical_alignment * screen_area.height - sprite_height / 2.0 - image_area.height;
-
- ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &image_area, ply_image_get_data (plugin->header_image));
+static void
+on_draw (view_t *view,
+ ply_pixel_buffer_t *pixel_buffer,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ ply_boot_splash_plugin_t *plugin;
+ ply_rectangle_t screen_area;
+ ply_rectangle_t image_area;
+
+ plugin = view->plugin;
+
+ draw_background (view, pixel_buffer, x, y, width, height);
+
+ ply_pixel_buffer_get_size (pixel_buffer, &screen_area);
+
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY ||
+ plugin->state == PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY) {
+ uint32_t *box_data, *lock_data;
+
+ box_data = ply_image_get_data (plugin->box_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->box_area,
+ box_data);
+
+ ply_entry_draw_area (view->entry,
+ pixel_buffer,
+ x, y, width, height);
+ ply_label_draw_area (view->label,
+ pixel_buffer,
+ x, y, width, height);
+
+ lock_data = ply_image_get_data (plugin->lock_image);
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer,
+ &view->lock_area,
+ lock_data);
+ } else {
+ if (view->throbber != NULL &&
+ !ply_throbber_is_stopped (view->throbber))
+ ply_throbber_draw_area (view->throbber, pixel_buffer,
+ x, y, width, height);
+ if (view->progress_animation != NULL && !ply_progress_animation_is_hidden (view->progress_animation)) {
+ ply_progress_animation_draw_area (view->progress_animation,
+ pixel_buffer,
+ x, y, width, height);
+ } else if (!ply_animation_is_stopped (view->end_animation)) {
+ ply_animation_draw_area (view->end_animation,
+ pixel_buffer,
+ x, y, width, height);
+ }
+
+ if (plugin->corner_image != NULL) {
+ image_area.width = ply_image_get_width (plugin->corner_image);
+ image_area.height = ply_image_get_height (plugin->corner_image);
+ image_area.x = screen_area.width - image_area.width - 20;
+ image_area.y = screen_area.height - image_area.height - 20;
+
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &image_area, ply_image_get_data (plugin->corner_image));
+ }
+
+ if (plugin->header_image != NULL) {
+ long sprite_height;
+
+
+ if (view->progress_animation != NULL)
+ sprite_height = ply_progress_animation_get_height (view->progress_animation);
+ else
+ sprite_height = 0;
+
+ if (view->throbber != NULL)
+ sprite_height = MAX (ply_throbber_get_height (view->throbber),
+ sprite_height);
+
+ image_area.width = ply_image_get_width (plugin->header_image);
+ image_area.height = ply_image_get_height (plugin->header_image);
+ image_area.x = screen_area.width / 2.0 - image_area.width / 2.0;
+ image_area.y = plugin->animation_vertical_alignment * screen_area.height - sprite_height / 2.0 - image_area.height;
+
+ ply_pixel_buffer_fill_with_argb32_data (pixel_buffer, &image_area, ply_image_get_data (plugin->header_image));
+ }
}
- }
- ply_label_draw_area (view->message_label,
- pixel_buffer,
- x, y, width, height);
+ ply_label_draw_area (view->message_label,
+ pixel_buffer,
+ x, y, width, height);
}
static void
add_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- view_t *view;
+ view_t *view;
- ply_trace ("adding pixel display to plugin");
- view = view_new (plugin, display);
+ ply_trace ("adding pixel display to plugin");
+ view = view_new (plugin, display);
- ply_pixel_display_set_draw_handler (view->display,
- (ply_pixel_display_draw_handler_t)
- on_draw, view);
- ply_list_append_data (plugin->views, view);
+ ply_pixel_display_set_draw_handler (view->display,
+ (ply_pixel_display_draw_handler_t)
+ on_draw, view);
+ ply_list_append_data (plugin->views, view);
}
static void
remove_pixel_display (ply_boot_splash_plugin_t *plugin,
ply_pixel_display_t *display)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("removing pixel display from plugin");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- view_t *view;
- ply_list_node_t *next_node;
+ ply_trace ("removing pixel display from plugin");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ view_t *view;
+ ply_list_node_t *next_node;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->display == display)
- {
+ if (view->display == display) {
+ ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
+ view_free (view);
+ ply_list_remove_node (plugin->views, node);
+ return;
+ }
- ply_pixel_display_set_draw_handler (view->display, NULL, NULL);
- view_free (view);
- ply_list_remove_node (plugin->views, node);
- return;
+ node = next_node;
}
-
- node = next_node;
- }
}
static bool
@@ -1036,118 +989,107 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_buffer_t *boot_buffer,
ply_boot_splash_mode_t mode)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- plugin->loop = loop;
- plugin->mode = mode;
+ plugin->loop = loop;
+ plugin->mode = mode;
- ply_trace ("loading lock image");
- if (!ply_image_load (plugin->lock_image))
- return false;
+ ply_trace ("loading lock image");
+ if (!ply_image_load (plugin->lock_image))
+ return false;
- ply_trace ("loading box image");
- if (!ply_image_load (plugin->box_image))
- return false;
+ ply_trace ("loading box image");
+ if (!ply_image_load (plugin->box_image))
+ return false;
- if (plugin->corner_image != NULL)
- {
- ply_trace ("loading corner image");
+ if (plugin->corner_image != NULL) {
+ ply_trace ("loading corner image");
- if (!ply_image_load (plugin->corner_image))
- {
- ply_image_free (plugin->corner_image);
- plugin->corner_image = NULL;
+ if (!ply_image_load (plugin->corner_image)) {
+ ply_image_free (plugin->corner_image);
+ plugin->corner_image = NULL;
+ }
}
- }
- if (plugin->header_image != NULL)
- {
- ply_trace ("loading header image");
+ if (plugin->header_image != NULL) {
+ ply_trace ("loading header image");
- if (!ply_image_load (plugin->header_image))
- {
- ply_image_free (plugin->header_image);
- plugin->header_image = NULL;
+ if (!ply_image_load (plugin->header_image)) {
+ ply_image_free (plugin->header_image);
+ plugin->header_image = NULL;
+ }
}
- }
- if (plugin->background_tile_image != NULL)
- {
- ply_trace ("loading background tile image");
- if (!ply_image_load (plugin->background_tile_image))
- {
- ply_image_free (plugin->background_tile_image);
- plugin->background_tile_image = NULL;
+ if (plugin->background_tile_image != NULL) {
+ ply_trace ("loading background tile image");
+ if (!ply_image_load (plugin->background_tile_image)) {
+ ply_image_free (plugin->background_tile_image);
+ plugin->background_tile_image = NULL;
+ }
}
- }
- if (plugin->watermark_image != NULL)
- {
- ply_trace ("loading watermark image");
- if (!ply_image_load (plugin->watermark_image))
- {
- ply_image_free (plugin->watermark_image);
- plugin->watermark_image = NULL;
+ if (plugin->watermark_image != NULL) {
+ ply_trace ("loading watermark image");
+ if (!ply_image_load (plugin->watermark_image)) {
+ ply_image_free (plugin->watermark_image);
+ plugin->watermark_image = NULL;
+ }
}
- }
- if (!load_views (plugin))
- {
- ply_trace ("couldn't load views");
- return false;
- }
+ if (!load_views (plugin)) {
+ ply_trace ("couldn't load views");
+ return false;
+ }
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
- ply_trace ("starting boot animations");
- start_progress_animation (plugin);
+ ply_trace ("starting boot animations");
+ start_progress_animation (plugin);
- plugin->is_visible = true;
+ plugin->is_visible = true;
- return true;
+ return true;
}
static void
update_status (ply_boot_splash_plugin_t *plugin,
const char *status)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
}
static void
on_animation_stopped (ply_boot_splash_plugin_t *plugin)
{
- if (plugin->idle_trigger != NULL)
- {
- ply_trigger_pull (plugin->idle_trigger, NULL);
- plugin->idle_trigger = NULL;
- }
- plugin->is_idle = true;
+ if (plugin->idle_trigger != NULL) {
+ ply_trigger_pull (plugin->idle_trigger, NULL);
+ plugin->idle_trigger = NULL;
+ }
+ plugin->is_idle = true;
}
static void
update_progress_animation (ply_boot_splash_plugin_t *plugin,
double percent_done)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- if (view->progress_animation != NULL)
- ply_progress_animation_set_percent_done (view->progress_animation,
- percent_done);
+ if (view->progress_animation != NULL)
+ ply_progress_animation_set_percent_done (view->progress_animation,
+ percent_done);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -1155,70 +1097,64 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
double duration,
double percent_done)
{
- if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES)
- return;
-
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- return;
-
- if (plugin->is_idle)
- return;
-
- if (percent_done >= SHOW_ANIMATION_PERCENT)
- {
- if (plugin->stop_trigger == NULL)
- {
- ply_trace ("boot progressed to end");
-
- plugin->stop_trigger = ply_trigger_new (&plugin->stop_trigger);
- ply_trigger_add_handler (plugin->stop_trigger,
- (ply_trigger_handler_t)
- on_animation_stopped,
- plugin);
- start_end_animation (plugin, plugin->stop_trigger);
+ if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES)
+ return;
+
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ return;
+
+ if (plugin->is_idle)
+ return;
+
+ if (percent_done >= SHOW_ANIMATION_PERCENT) {
+ if (plugin->stop_trigger == NULL) {
+ ply_trace ("boot progressed to end");
+
+ plugin->stop_trigger = ply_trigger_new (&plugin->stop_trigger);
+ ply_trigger_add_handler (plugin->stop_trigger,
+ (ply_trigger_handler_t)
+ on_animation_stopped,
+ plugin);
+ start_end_animation (plugin, plugin->stop_trigger);
+ }
+ } else {
+ double total_duration;
+
+ percent_done *= (1 / SHOW_ANIMATION_PERCENT);
+
+ switch (plugin->progress_function) {
+ /* Fun made-up smoothing function to make the growth asymptotic:
+ * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
+ case PROGRESS_FUNCTION_TYPE_WWOODS:
+ total_duration = duration / percent_done;
+ percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
+ break;
+
+ case PROGRESS_FUNCTION_TYPE_LINEAR:
+ break;
+ }
+
+ update_progress_animation (plugin, percent_done);
}
- }
- else
- {
- double total_duration;
-
- percent_done *= (1 / SHOW_ANIMATION_PERCENT);
-
- switch (plugin->progress_function)
- {
- /* Fun made-up smoothing function to make the growth asymptotic:
- * fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
- case PROGRESS_FUNCTION_TYPE_WWOODS:
- total_duration = duration / percent_done;
- percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
- break;
-
- case PROGRESS_FUNCTION_TYPE_LINEAR:
- break;
- }
-
- update_progress_animation (plugin, percent_done);
- }
}
static void
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
ply_event_loop_t *loop)
{
- assert (plugin != NULL);
+ assert (plugin != NULL);
- ply_trace ("hiding splash");
- if (plugin->loop != NULL)
- {
- stop_animation (plugin, NULL);
+ ply_trace ("hiding splash");
+ if (plugin->loop != NULL) {
+ stop_animation (plugin, NULL);
- ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
- detach_from_event_loop,
- plugin);
- detach_from_event_loop (plugin);
- }
+ ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
+ detach_from_event_loop,
+ plugin);
+ detach_from_event_loop (plugin);
+ }
- plugin->is_visible = false;
+ plugin->is_visible = false;
}
static void
@@ -1226,23 +1162,22 @@ show_password_prompt (ply_boot_splash_plugin_t *plugin,
const char *text,
int number_of_bullets)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("showing password prompt");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ ply_trace ("showing password prompt");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, text);
- ply_entry_set_bullet_count (view->entry, number_of_bullets);
+ view_show_prompt (view, text);
+ ply_entry_set_bullet_count (view->entry, number_of_bullets);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
@@ -1250,81 +1185,75 @@ show_prompt (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("showing prompt");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ ply_trace ("showing prompt");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_show_prompt (view, prompt);
- ply_entry_set_text (view->entry, entry_text);
+ view_show_prompt (view, prompt);
+ ply_entry_set_text (view->entry, entry_text);
- node = next_node;
- }
+ node = next_node;
+ }
}
static void
on_root_mounted (ply_boot_splash_plugin_t *plugin)
{
- ply_trace ("root filesystem mounted");
- plugin->root_is_mounted = true;
+ ply_trace ("root filesystem mounted");
+ plugin->root_is_mounted = true;
}
static void
become_idle (ply_boot_splash_plugin_t *plugin,
ply_trigger_t *idle_trigger)
{
- ply_trace ("deactivation requested");
- if (plugin->is_idle)
- {
- ply_trace ("plugin is already idle");
- ply_trigger_pull (idle_trigger, NULL);
- return;
- }
-
- plugin->idle_trigger = idle_trigger;
-
- if (plugin->stop_trigger == NULL)
- {
- ply_trace ("waiting for plugin to stop");
- plugin->stop_trigger = ply_trigger_new (&plugin->stop_trigger);
- ply_trigger_add_handler (plugin->stop_trigger,
- (ply_trigger_handler_t)
- on_animation_stopped,
- plugin);
- start_end_animation (plugin, plugin->stop_trigger);
- }
- else
- {
- ply_trace ("already waiting for plugin to stop");
- }
+ ply_trace ("deactivation requested");
+ if (plugin->is_idle) {
+ ply_trace ("plugin is already idle");
+ ply_trigger_pull (idle_trigger, NULL);
+ return;
+ }
+
+ plugin->idle_trigger = idle_trigger;
+
+ if (plugin->stop_trigger == NULL) {
+ ply_trace ("waiting for plugin to stop");
+ plugin->stop_trigger = ply_trigger_new (&plugin->stop_trigger);
+ ply_trigger_add_handler (plugin->stop_trigger,
+ (ply_trigger_handler_t)
+ on_animation_stopped,
+ plugin);
+ start_end_animation (plugin, plugin->stop_trigger);
+ } else {
+ ply_trace ("already waiting for plugin to stop");
+ }
}
static void
hide_prompt (ply_boot_splash_plugin_t *plugin)
{
- ply_list_node_t *node;
+ ply_list_node_t *node;
- ply_trace ("hiding prompt");
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
+ ply_trace ("hiding prompt");
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
- view_hide_prompt (view);
+ view_hide_prompt (view);
- node = next_node;
- }
+ node = next_node;
+ }
}
@@ -1332,61 +1261,59 @@ static void
show_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- ply_trace ("Showing message '%s'", message);
- ply_list_node_t *node;
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
-
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
-
- ply_label_set_text (view->message_label, message);
- ply_label_show (view->message_label, view->display, 10, 10);
-
- ply_pixel_display_draw_area (view->display, 10, 10,
- ply_label_get_width (view->message_label),
- ply_label_get_height(view->message_label));
- node = next_node;
- }
+ ply_trace ("Showing message '%s'", message);
+ ply_list_node_t *node;
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
+
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+
+ ply_label_set_text (view->message_label, message);
+ ply_label_show (view->message_label, view->display, 10, 10);
+
+ ply_pixel_display_draw_area (view->display, 10, 10,
+ ply_label_get_width (view->message_label),
+ ply_label_get_height (view->message_label));
+ node = next_node;
+ }
}
static void
system_update (ply_boot_splash_plugin_t *plugin,
int progress)
{
- ply_list_node_t *node;
-
- if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES)
- return;
-
- node = ply_list_get_first_node (plugin->views);
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- view_t *view;
-
- view = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (plugin->views, node);
- ply_progress_animation_set_percent_done (view->progress_animation,
- (double) progress / 100.f);
- node = next_node;
- }
+ ply_list_node_t *node;
+
+ if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES)
+ return;
+
+ node = ply_list_get_first_node (plugin->views);
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ view_t *view;
+
+ view = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (plugin->views, node);
+ ply_progress_animation_set_percent_done (view->progress_animation,
+ (double) progress / 100.f);
+ node = next_node;
+ }
}
static void
display_normal (ply_boot_splash_plugin_t *plugin)
{
- pause_views (plugin);
- if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- hide_prompt (plugin);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
- start_progress_animation (plugin);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ hide_prompt (plugin);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_NORMAL;
+ start_progress_animation (plugin);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -1394,14 +1321,14 @@ display_password (ply_boot_splash_plugin_t *plugin,
const char *prompt,
int bullets)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin, NULL);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
- show_password_prompt (plugin, prompt, bullets);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin, NULL);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_PASSWORD_ENTRY;
+ show_password_prompt (plugin, prompt, bullets);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
@@ -1409,46 +1336,46 @@ display_question (ply_boot_splash_plugin_t *plugin,
const char *prompt,
const char *entry_text)
{
- pause_views (plugin);
- if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
- stop_animation (plugin, NULL);
-
- plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
- show_prompt (plugin, prompt, entry_text);
- redraw_views (plugin);
- unpause_views (plugin);
+ pause_views (plugin);
+ if (plugin->state == PLY_BOOT_SPLASH_DISPLAY_NORMAL)
+ stop_animation (plugin, NULL);
+
+ plugin->state = PLY_BOOT_SPLASH_DISPLAY_QUESTION_ENTRY;
+ show_prompt (plugin, prompt, entry_text);
+ redraw_views (plugin);
+ unpause_views (plugin);
}
static void
display_message (ply_boot_splash_plugin_t *plugin,
const char *message)
{
- show_message (plugin, message);
+ show_message (plugin, message);
}
ply_boot_splash_plugin_interface_t *
ply_boot_splash_plugin_get_interface (void)
{
- static ply_boot_splash_plugin_interface_t plugin_interface =
- {
- .create_plugin = create_plugin,
- .destroy_plugin = destroy_plugin,
- .add_pixel_display = add_pixel_display,
- .remove_pixel_display = remove_pixel_display,
- .show_splash_screen = show_splash_screen,
- .update_status = update_status,
- .on_boot_progress = on_boot_progress,
- .hide_splash_screen = hide_splash_screen,
- .on_root_mounted = on_root_mounted,
- .become_idle = become_idle,
- .display_normal = display_normal,
- .display_password = display_password,
- .display_question = display_question,
- .display_message = display_message,
- .system_update = system_update,
- };
-
- return &plugin_interface;
+ static ply_boot_splash_plugin_interface_t plugin_interface =
+ {
+ .create_plugin = create_plugin,
+ .destroy_plugin = destroy_plugin,
+ .add_pixel_display = add_pixel_display,
+ .remove_pixel_display = remove_pixel_display,
+ .show_splash_screen = show_splash_screen,
+ .update_status = update_status,
+ .on_boot_progress = on_boot_progress,
+ .hide_splash_screen = hide_splash_screen,
+ .on_root_mounted = on_root_mounted,
+ .become_idle = become_idle,
+ .display_normal = display_normal,
+ .display_password = display_password,
+ .display_question = display_question,
+ .display_message = display_message,
+ .system_update = system_update,
+ };
+
+ return &plugin_interface;
}
/* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */
diff --git a/src/ply-boot-server.c b/src/ply-boot-server.c
index c5a2f7fe..3c1a2689 100644
--- a/src/ply-boot-server.c
+++ b/src/ply-boot-server.c
@@ -41,100 +41,100 @@
typedef struct
{
- int fd;
- ply_fd_watch_t *watch;
- ply_boot_server_t *server;
- uid_t uid;
- pid_t pid;
+ int fd;
+ ply_fd_watch_t *watch;
+ ply_boot_server_t *server;
+ uid_t uid;
+ pid_t pid;
- uint32_t credentials_read : 1;
+ uint32_t credentials_read : 1;
} ply_boot_connection_t;
struct _ply_boot_server
{
- ply_event_loop_t *loop;
- ply_list_t *connections;
- ply_list_t *cached_passwords;
- int socket_fd;
-
- ply_boot_server_update_handler_t update_handler;
- ply_boot_server_change_mode_handler_t change_mode_handler;
- ply_boot_server_system_update_handler_t system_update_handler;
- ply_boot_server_newroot_handler_t newroot_handler;
- ply_boot_server_system_initialized_handler_t system_initialized_handler;
- ply_boot_server_error_handler_t error_handler;
- ply_boot_server_show_splash_handler_t show_splash_handler;
- ply_boot_server_hide_splash_handler_t hide_splash_handler;
- ply_boot_server_ask_for_password_handler_t ask_for_password_handler;
- ply_boot_server_ask_question_handler_t ask_question_handler;
- ply_boot_server_display_message_handler_t display_message_handler;
- ply_boot_server_hide_message_handler_t hide_message_handler;
- ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler;
- ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler;
- ply_boot_server_progress_pause_handler_t progress_pause_handler;
- ply_boot_server_progress_unpause_handler_t progress_unpause_handler;
- ply_boot_server_deactivate_handler_t deactivate_handler;
- ply_boot_server_reactivate_handler_t reactivate_handler;
- ply_boot_server_quit_handler_t quit_handler;
- ply_boot_server_has_active_vt_handler_t has_active_vt_handler;
- void *user_data;
-
- uint32_t is_listening : 1;
+ ply_event_loop_t *loop;
+ ply_list_t *connections;
+ ply_list_t *cached_passwords;
+ int socket_fd;
+
+ ply_boot_server_update_handler_t update_handler;
+ ply_boot_server_change_mode_handler_t change_mode_handler;
+ ply_boot_server_system_update_handler_t system_update_handler;
+ ply_boot_server_newroot_handler_t newroot_handler;
+ ply_boot_server_system_initialized_handler_t system_initialized_handler;
+ ply_boot_server_error_handler_t error_handler;
+ ply_boot_server_show_splash_handler_t show_splash_handler;
+ ply_boot_server_hide_splash_handler_t hide_splash_handler;
+ ply_boot_server_ask_for_password_handler_t ask_for_password_handler;
+ ply_boot_server_ask_question_handler_t ask_question_handler;
+ ply_boot_server_display_message_handler_t display_message_handler;
+ ply_boot_server_hide_message_handler_t hide_message_handler;
+ ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler;
+ ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler;
+ ply_boot_server_progress_pause_handler_t progress_pause_handler;
+ ply_boot_server_progress_unpause_handler_t progress_unpause_handler;
+ ply_boot_server_deactivate_handler_t deactivate_handler;
+ ply_boot_server_reactivate_handler_t reactivate_handler;
+ ply_boot_server_quit_handler_t quit_handler;
+ ply_boot_server_has_active_vt_handler_t has_active_vt_handler;
+ void *user_data;
+
+ uint32_t is_listening : 1;
};
ply_boot_server_t *
-ply_boot_server_new (ply_boot_server_update_handler_t update_handler,
- ply_boot_server_change_mode_handler_t change_mode_handler,
- ply_boot_server_system_update_handler_t system_update_handler,
- ply_boot_server_ask_for_password_handler_t ask_for_password_handler,
- ply_boot_server_ask_question_handler_t ask_question_handler,
- ply_boot_server_display_message_handler_t display_message_handler,
- ply_boot_server_hide_message_handler_t hide_message_handler,
+ply_boot_server_new (ply_boot_server_update_handler_t update_handler,
+ ply_boot_server_change_mode_handler_t change_mode_handler,
+ ply_boot_server_system_update_handler_t system_update_handler,
+ ply_boot_server_ask_for_password_handler_t ask_for_password_handler,
+ ply_boot_server_ask_question_handler_t ask_question_handler,
+ ply_boot_server_display_message_handler_t display_message_handler,
+ ply_boot_server_hide_message_handler_t hide_message_handler,
ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler,
- ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler,
- ply_boot_server_progress_pause_handler_t progress_pause_handler,
- ply_boot_server_progress_unpause_handler_t progress_unpause_handler,
- ply_boot_server_show_splash_handler_t show_splash_handler,
- ply_boot_server_hide_splash_handler_t hide_splash_handler,
- ply_boot_server_newroot_handler_t newroot_handler,
- ply_boot_server_system_initialized_handler_t initialized_handler,
- ply_boot_server_error_handler_t error_handler,
- ply_boot_server_deactivate_handler_t deactivate_handler,
- ply_boot_server_reactivate_handler_t reactivate_handler,
- ply_boot_server_quit_handler_t quit_handler,
- ply_boot_server_has_active_vt_handler_t has_active_vt_handler,
- void *user_data)
+ ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler,
+ ply_boot_server_progress_pause_handler_t progress_pause_handler,
+ ply_boot_server_progress_unpause_handler_t progress_unpause_handler,
+ ply_boot_server_show_splash_handler_t show_splash_handler,
+ ply_boot_server_hide_splash_handler_t hide_splash_handler,
+ ply_boot_server_newroot_handler_t newroot_handler,
+ ply_boot_server_system_initialized_handler_t initialized_handler,
+ ply_boot_server_error_handler_t error_handler,
+ ply_boot_server_deactivate_handler_t deactivate_handler,
+ ply_boot_server_reactivate_handler_t reactivate_handler,
+ ply_boot_server_quit_handler_t quit_handler,
+ ply_boot_server_has_active_vt_handler_t has_active_vt_handler,
+ void *user_data)
{
- ply_boot_server_t *server;
-
- server = calloc (1, sizeof (ply_boot_server_t));
- server->connections = ply_list_new ();
- server->cached_passwords = ply_list_new ();
- server->loop = NULL;
- server->is_listening = false;
- server->update_handler = update_handler;
- server->change_mode_handler = change_mode_handler;
- server->system_update_handler = system_update_handler;
- server->ask_for_password_handler = ask_for_password_handler;
- server->ask_question_handler = ask_question_handler;
- server->display_message_handler = display_message_handler;
- server->hide_message_handler = hide_message_handler;
- server->watch_for_keystroke_handler = watch_for_keystroke_handler;
- server->ignore_keystroke_handler = ignore_keystroke_handler;
- server->progress_pause_handler = progress_pause_handler;
- server->progress_unpause_handler = progress_unpause_handler;
- server->newroot_handler = newroot_handler;
- server->error_handler = error_handler;
- server->system_initialized_handler = initialized_handler;
- server->show_splash_handler = show_splash_handler;
- server->hide_splash_handler = hide_splash_handler;
- server->deactivate_handler = deactivate_handler;
- server->reactivate_handler = reactivate_handler;
- server->quit_handler = quit_handler;
- server->has_active_vt_handler = has_active_vt_handler;
- server->user_data = user_data;
-
- return server;
+ ply_boot_server_t *server;
+
+ server = calloc (1, sizeof(ply_boot_server_t));
+ server->connections = ply_list_new ();
+ server->cached_passwords = ply_list_new ();
+ server->loop = NULL;
+ server->is_listening = false;
+ server->update_handler = update_handler;
+ server->change_mode_handler = change_mode_handler;
+ server->system_update_handler = system_update_handler;
+ server->ask_for_password_handler = ask_for_password_handler;
+ server->ask_question_handler = ask_question_handler;
+ server->display_message_handler = display_message_handler;
+ server->hide_message_handler = hide_message_handler;
+ server->watch_for_keystroke_handler = watch_for_keystroke_handler;
+ server->ignore_keystroke_handler = ignore_keystroke_handler;
+ server->progress_pause_handler = progress_pause_handler;
+ server->progress_unpause_handler = progress_unpause_handler;
+ server->newroot_handler = newroot_handler;
+ server->error_handler = error_handler;
+ server->system_initialized_handler = initialized_handler;
+ server->show_splash_handler = show_splash_handler;
+ server->hide_splash_handler = hide_splash_handler;
+ server->deactivate_handler = deactivate_handler;
+ server->reactivate_handler = reactivate_handler;
+ server->quit_handler = quit_handler;
+ server->has_active_vt_handler = has_active_vt_handler;
+ server->user_data = user_data;
+
+ return server;
}
static void ply_boot_connection_on_hangup (ply_boot_connection_t *connection);
@@ -142,694 +142,625 @@ static void ply_boot_connection_on_hangup (ply_boot_connection_t *connection);
void
ply_boot_server_free (ply_boot_server_t *server)
{
- ply_list_node_t *node;
- if (server == NULL)
- return;
- while ((node = ply_list_get_first_node(server->connections)))
- {
- ply_boot_connection_t *connection = ply_list_node_get_data (node);
- ply_boot_connection_on_hangup (connection);
- }
- ply_list_free (server->connections);
- ply_list_free (server->cached_passwords);
- free (server);
+ ply_list_node_t *node;
+
+ if (server == NULL)
+ return;
+ while ((node = ply_list_get_first_node (server->connections))) {
+ ply_boot_connection_t *connection = ply_list_node_get_data (node);
+ ply_boot_connection_on_hangup (connection);
+ }
+ ply_list_free (server->connections);
+ ply_list_free (server->cached_passwords);
+ free (server);
}
static ply_boot_connection_t *
ply_boot_connection_new (ply_boot_server_t *server,
int fd)
{
- ply_boot_connection_t *connection;
+ ply_boot_connection_t *connection;
- connection = calloc (1, sizeof (ply_boot_server_t));
- connection->fd = fd;
- connection->server = server;
- connection->watch = NULL;
+ connection = calloc (1, sizeof(ply_boot_server_t));
+ connection->fd = fd;
+ connection->server = server;
+ connection->watch = NULL;
- return connection;
+ return connection;
}
static void
ply_boot_connection_free (ply_boot_connection_t *connection)
{
- if (connection == NULL)
- return;
+ if (connection == NULL)
+ return;
- close (connection->fd);
- free (connection);
+ close (connection->fd);
+ free (connection);
}
bool
ply_boot_server_listen (ply_boot_server_t *server)
{
- assert (server != NULL);
+ assert (server != NULL);
- server->socket_fd =
- ply_listen_to_unix_socket (PLY_BOOT_PROTOCOL_TRIMMED_ABSTRACT_SOCKET_PATH,
- PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT);
+ server->socket_fd =
+ ply_listen_to_unix_socket (PLY_BOOT_PROTOCOL_TRIMMED_ABSTRACT_SOCKET_PATH,
+ PLY_UNIX_SOCKET_TYPE_TRIMMED_ABSTRACT);
- if (server->socket_fd < 0)
- return false;
+ if (server->socket_fd < 0)
+ return false;
- return true;
+ return true;
}
void
ply_boot_server_stop_listening (ply_boot_server_t *server)
{
- assert (server != NULL);
+ assert (server != NULL);
}
static bool
-ply_boot_connection_read_request (ply_boot_connection_t *connection,
- char **command,
- char **argument)
+ply_boot_connection_read_request (ply_boot_connection_t *connection,
+ char **command,
+ char **argument)
{
- uint8_t header[2];
+ uint8_t header[2];
- assert (connection != NULL);
- assert (connection->fd >= 0);
+ assert (connection != NULL);
+ assert (connection->fd >= 0);
- connection->credentials_read = false;
+ connection->credentials_read = false;
- if (!ply_read (connection->fd, header, sizeof (header)))
- return false;
+ if (!ply_read (connection->fd, header, sizeof(header)))
+ return false;
- *command = calloc (2, sizeof (char));
- *command[0] = header[0];
+ *command = calloc (2, sizeof(char));
+ *command[0] = header[0];
- *argument = NULL;
- if (header[1] == '\002')
- {
- uint8_t argument_size;
+ *argument = NULL;
+ if (header[1] == '\002') {
+ uint8_t argument_size;
- if (!ply_read (connection->fd, &argument_size, sizeof (uint8_t)))
- {
- free (*command);
- return false;
- }
+ if (!ply_read (connection->fd, &argument_size, sizeof(uint8_t))) {
+ free (*command);
+ return false;
+ }
- *argument = calloc (argument_size, sizeof (char));
+ *argument = calloc (argument_size, sizeof(char));
+
+ if (!ply_read (connection->fd, *argument, argument_size)) {
+ free (*argument);
+ free (*command);
+ return false;
+ }
+ }
- if (!ply_read (connection->fd, *argument, argument_size))
- {
- free (*argument);
- free (*command);
- return false;
+ if (!ply_get_credentials_from_fd (connection->fd, &connection->pid, &connection->uid, NULL)) {
+ ply_trace ("couldn't read credentials from connection: %m");
+ free (*argument);
+ free (*command);
+ return false;
}
- }
-
- if (!ply_get_credentials_from_fd (connection->fd, &connection->pid, &connection->uid, NULL))
- {
- ply_trace ("couldn't read credentials from connection: %m");
- free (*argument);
- free (*command);
- return false;
- }
- connection->credentials_read = true;
-
- return true;
+ connection->credentials_read = true;
+
+ return true;
}
static bool
ply_boot_connection_is_from_root (ply_boot_connection_t *connection)
{
- if (!connection->credentials_read)
- {
- ply_trace ("Asked if connection is from root, but haven't checked credentials yet");
- return false;
- }
+ if (!connection->credentials_read) {
+ ply_trace ("Asked if connection is from root, but haven't checked credentials yet");
+ return false;
+ }
- return connection->uid == 0;
+ return connection->uid == 0;
}
static void
ply_boot_connection_send_answer (ply_boot_connection_t *connection,
const char *answer)
{
- uint32_t size;
-
- /* splash plugin isn't able to ask for password,
- * punt to client
- */
- if (answer == NULL)
- {
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER)))
- ply_trace ("could not finish writing no answer reply: %m");
- }
- else
- {
- size = strlen (answer);
-
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER)) ||
- !ply_write_uint32 (connection->fd,
- size) ||
- !ply_write (connection->fd,
- answer, size))
- ply_trace ("could not finish writing answer: %m");
-
- }
-
+ uint32_t size;
+
+ /* splash plugin isn't able to ask for password,
+ * punt to client
+ */
+ if (answer == NULL) {
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER)))
+ ply_trace ("could not finish writing no answer reply: %m");
+ } else {
+ size = strlen (answer);
+
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER)) ||
+ !ply_write_uint32 (connection->fd,
+ size) ||
+ !ply_write (connection->fd,
+ answer, size))
+ ply_trace ("could not finish writing answer: %m");
+ }
}
static void
ply_boot_connection_on_password_answer (ply_boot_connection_t *connection,
const char *password)
{
- ply_trace ("got password answer");
-
- ply_boot_connection_send_answer (connection, password);
- if (password != NULL)
- ply_list_append_data (connection->server->cached_passwords,
- strdup (password));
+ ply_trace ("got password answer");
+ ply_boot_connection_send_answer (connection, password);
+ if (password != NULL)
+ ply_list_append_data (connection->server->cached_passwords,
+ strdup (password));
}
static void
ply_boot_connection_on_deactivated (ply_boot_connection_t *connection)
{
- ply_trace ("deactivated");
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
- {
- ply_trace ("could not finish writing deactivate reply: %m");
- }
+ ply_trace ("deactivated");
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
+ ply_trace ("could not finish writing deactivate reply: %m");
}
static void
ply_boot_connection_on_quit_complete (ply_boot_connection_t *connection)
{
- ply_trace ("quit complete");
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
- {
- ply_trace ("could not finish writing quit reply: %m");
- }
+ ply_trace ("quit complete");
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
+ ply_trace ("could not finish writing quit reply: %m");
}
static void
ply_boot_connection_on_question_answer (ply_boot_connection_t *connection,
- const char *answer)
+ const char *answer)
{
- ply_trace ("got question answer: %s", answer);
- ply_boot_connection_send_answer (connection, answer);
+ ply_trace ("got question answer: %s", answer);
+ ply_boot_connection_send_answer (connection, answer);
}
static void
ply_boot_connection_on_keystroke_answer (ply_boot_connection_t *connection,
- const char *key)
+ const char *key)
{
- ply_trace ("got key: %s", key);
- ply_boot_connection_send_answer (connection, key);
+ ply_trace ("got key: %s", key);
+ ply_boot_connection_send_answer (connection, key);
}
static void
print_connection_process_identity (ply_boot_connection_t *connection)
{
- char *command_line, *parent_command_line;
- pid_t parent_pid;
+ char *command_line, *parent_command_line;
+ pid_t parent_pid;
- command_line = ply_get_process_command_line (connection->pid);
+ command_line = ply_get_process_command_line (connection->pid);
- if (connection->pid == 1)
- {
- ply_trace ("connection is from toplevel init process (%s)", command_line);
- }
- else
- {
- parent_pid = ply_get_process_parent_pid (connection->pid); parent_command_line = ply_get_process_command_line (parent_pid);
+ if (connection->pid == 1) {
+ ply_trace ("connection is from toplevel init process (%s)", command_line);
+ } else {
+ parent_pid = ply_get_process_parent_pid (connection->pid); parent_command_line = ply_get_process_command_line (parent_pid);
- ply_trace ("connection is from pid %ld (%s) with parent pid %ld (%s)",
- (long) connection->pid, command_line,
- (long) parent_pid, parent_command_line);
+ ply_trace ("connection is from pid %ld (%s) with parent pid %ld (%s)",
+ (long) connection->pid, command_line,
+ (long) parent_pid, parent_command_line);
- free (parent_command_line);
- }
+ free (parent_command_line);
+ }
- free (command_line);
+ free (command_line);
}
static void
ply_boot_connection_on_request (ply_boot_connection_t *connection)
{
- ply_boot_server_t *server;
- char *command, *argument;
-
- assert (connection != NULL);
- assert (connection->fd >= 0);
-
- server = connection->server;
- assert (server != NULL);
-
- if (!ply_boot_connection_read_request (connection,
- &command, &argument))
- {
- ply_trace ("could not read connection request");
- return;
- }
-
- if (ply_is_tracing ())
- print_connection_process_identity (connection);
-
- if (!ply_boot_connection_is_from_root (connection))
- {
- ply_error ("request came from non-root user");
-
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
- ply_trace ("could not finish writing is-not-root nak: %m");
-
- free (command);
- return;
- }
-
- if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_UPDATE) == 0)
- {
-
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)) &&
- errno != EPIPE)
- ply_trace ("could not finish writing update reply: %m");
-
- ply_trace ("got update request");
- if (server->update_handler != NULL)
- server->update_handler (server->user_data, argument, server);
- free (argument);
- free (command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CHANGE_MODE) == 0)
- {
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
- ply_trace ("could not finish writing update reply: %m");
-
- ply_trace ("got change mode notification");
- if (server->change_mode_handler != NULL)
- server->change_mode_handler (server->user_data, argument, server);
- free (argument);
- free (command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_UPDATE) == 0)
- {
- long int value;
- char *endptr = NULL;
-
- value = strtol (argument, &endptr, 10);
- if (endptr == NULL || *endptr != '\0' || value < 0 || value > 100)
- {
- ply_error ("failed to parse percentage %s", argument);
- value = 0;
- }
+ ply_boot_server_t *server;
+ char *command, *argument;
- ply_trace ("got system-update notification %li%%", value);
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
- ply_trace ("could not finish writing update reply: %m");
-
- if (server->system_update_handler != NULL)
- server->system_update_handler (server->user_data, value, server);
- free (argument);
- free (command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_INITIALIZED) == 0)
- {
- ply_trace ("got system initialized notification");
- if (server->system_initialized_handler != NULL)
- server->system_initialized_handler (server->user_data, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_ERROR) == 0)
- {
- ply_trace ("got error notification");
- if (server->error_handler != NULL)
- server->error_handler (server->user_data, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH) == 0)
- {
- ply_trace ("got show splash request");
- if (server->show_splash_handler != NULL)
- server->show_splash_handler (server->user_data, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_SPLASH) == 0)
- {
- ply_trace ("got hide splash request");
- if (server->hide_splash_handler != NULL)
- server->hide_splash_handler (server->user_data, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_DEACTIVATE) == 0)
- {
- ply_trigger_t *deactivate_trigger;
-
- ply_trace ("got deactivate request");
-
- deactivate_trigger = ply_trigger_new (NULL);
-
- ply_trigger_add_handler (deactivate_trigger,
- (ply_trigger_handler_t)
- ply_boot_connection_on_deactivated,
- connection);
-
- if (server->deactivate_handler != NULL)
- server->deactivate_handler (server->user_data, deactivate_trigger, server);
-
- free (argument);
- free (command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_REACTIVATE) == 0)
- {
- ply_trace ("got reactivate request");
- if (server->reactivate_handler != NULL)
- server->reactivate_handler (server->user_data, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUIT) == 0)
- {
- bool retain_splash;
- ply_trigger_t *quit_trigger;
-
- retain_splash = (bool) argument[0];
-
- ply_trace ("got quit %srequest", retain_splash? "--retain-splash " : "");
-
- quit_trigger = ply_trigger_new (NULL);
-
- ply_trigger_add_handler (quit_trigger,
- (ply_trigger_handler_t)
- ply_boot_connection_on_quit_complete,
- connection);
-
- if (server->quit_handler != NULL)
- server->quit_handler (server->user_data, retain_splash, quit_trigger, server);
-
- free(argument);
- free(command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PASSWORD) == 0)
- {
- ply_trigger_t *answer;
-
- ply_trace ("got password request");
-
- answer = ply_trigger_new (NULL);
- ply_trigger_add_handler (answer,
- (ply_trigger_handler_t)
- ply_boot_connection_on_password_answer,
- connection);
-
- if (server->ask_for_password_handler != NULL)
- server->ask_for_password_handler (server->user_data,
- argument,
- answer,
- server);
- /* will reply later
- */
- free(command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CACHED_PASSWORD) == 0)
- {
- ply_list_node_t *node;
- ply_buffer_t *buffer;
- size_t buffer_size;
- uint32_t size;
-
- ply_trace ("got cached password request");
-
- buffer = ply_buffer_new ();
-
- node = ply_list_get_first_node (server->cached_passwords);
-
- ply_trace ("There are %d cached passwords",
- ply_list_get_length (server->cached_passwords));
-
- /* Add each answer separated by their NUL terminators into
- * a buffer that we write out to the client
- */
- while (node != NULL)
- {
- ply_list_node_t *next_node;
- const char *password;
-
- next_node = ply_list_get_next_node (server->cached_passwords, node);
- password = (const char *) ply_list_node_get_data (node);
-
- ply_buffer_append_bytes (buffer,
- password,
- strlen (password) + 1);
- node = next_node;
- }
+ assert (connection != NULL);
+ assert (connection->fd >= 0);
- buffer_size = ply_buffer_get_size (buffer);
-
- /* splash plugin doesn't have any cached passwords
- */
- if (buffer_size == 0)
- {
- ply_trace ("Responding with 'no answer' reply since there are currently "
- "no cached answers");
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER)))
- ply_trace ("could not finish writing no answer reply: %m");
+ server = connection->server;
+ assert (server != NULL);
+
+ if (!ply_boot_connection_read_request (connection,
+ &command, &argument)) {
+ ply_trace ("could not read connection request");
+ return;
}
- else
- {
- size = buffer_size;
-
- ply_trace ("writing %d cached answers",
- ply_list_get_length (server->cached_passwords));
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_MULTIPLE_ANSWERS,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_MULTIPLE_ANSWERS)) ||
- !ply_write_uint32 (connection->fd,
- size) ||
- !ply_write (connection->fd,
- ply_buffer_get_bytes (buffer), size))
- ply_trace ("could not finish writing cached answer reply: %m");
+
+ if (ply_is_tracing ())
+ print_connection_process_identity (connection);
+
+ if (!ply_boot_connection_is_from_root (connection)) {
+ ply_error ("request came from non-root user");
+
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
+ ply_trace ("could not finish writing is-not-root nak: %m");
+
+ free (command);
+ return;
}
- ply_buffer_free (buffer);
- free(command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUESTION) == 0)
- {
- ply_trigger_t *answer;
-
- ply_trace ("got question request");
-
- answer = ply_trigger_new (NULL);
- ply_trigger_add_handler (answer,
- (ply_trigger_handler_t)
- ply_boot_connection_on_question_answer,
- connection);
-
- if (server->ask_question_handler != NULL)
- server->ask_question_handler (server->user_data,
- argument,
- answer,
- server);
- /* will reply later
- */
- free(command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_MESSAGE) == 0)
- {
- ply_trace ("got show message request");
- if (server->display_message_handler != NULL)
- server->display_message_handler(server->user_data, argument, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_MESSAGE) == 0)
- {
- ply_trace ("got hide message request");
- if (server->hide_message_handler != NULL)
- server->hide_message_handler(server->user_data, argument, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE) == 0)
- {
- ply_trigger_t *answer;
-
- ply_trace ("got keystroke request");
-
- answer = ply_trigger_new (NULL);
- ply_trigger_add_handler (answer,
- (ply_trigger_handler_t)
- ply_boot_connection_on_keystroke_answer,
- connection);
-
- if (server->watch_for_keystroke_handler != NULL)
- server->watch_for_keystroke_handler (server->user_data,
- argument,
- answer,
- server);
- /* will reply later
- */
- free(command);
- return;
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE_REMOVE) == 0)
- {
- ply_trace ("got keystroke remove request");
- if (server->ignore_keystroke_handler != NULL)
- server->ignore_keystroke_handler (server->user_data,
- argument,
- server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE) == 0)
- {
- ply_trace ("got progress pause request");
- if (server->progress_pause_handler != NULL)
- server->progress_pause_handler (server->user_data,
- server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE) == 0)
- {
- ply_trace ("got progress unpause request");
- if (server->progress_unpause_handler != NULL)
- server->progress_unpause_handler (server->user_data,
- server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT) == 0)
- {
- ply_trace ("got newroot request");
- if (server->newroot_handler != NULL)
- server->newroot_handler(server->user_data, argument, server);
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HAS_ACTIVE_VT) == 0)
- {
- bool answer = false;
-
- ply_trace ("got has_active vt? request");
- if (server->has_active_vt_handler != NULL)
- answer = server->has_active_vt_handler(server->user_data, server);
-
- if (!answer)
- {
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
- ply_trace ("could not finish writing nak: %m");
-
- free(command);
- return;
+ if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_UPDATE) == 0) {
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)) &&
+ errno != EPIPE)
+ ply_trace ("could not finish writing update reply: %m");
+
+ ply_trace ("got update request");
+ if (server->update_handler != NULL)
+ server->update_handler (server->user_data, argument, server);
+ free (argument);
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CHANGE_MODE) == 0) {
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
+ ply_trace ("could not finish writing update reply: %m");
+
+ ply_trace ("got change mode notification");
+ if (server->change_mode_handler != NULL)
+ server->change_mode_handler (server->user_data, argument, server);
+ free (argument);
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_UPDATE) == 0) {
+ long int value;
+ char *endptr = NULL;
+
+ value = strtol (argument, &endptr, 10);
+ if (endptr == NULL || *endptr != '\0' || value < 0 || value > 100) {
+ ply_error ("failed to parse percentage %s", argument);
+ value = 0;
+ }
+
+ ply_trace ("got system-update notification %li%%", value);
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
+ ply_trace ("could not finish writing update reply: %m");
+
+ if (server->system_update_handler != NULL)
+ server->system_update_handler (server->user_data, value, server);
+ free (argument);
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_INITIALIZED) == 0) {
+ ply_trace ("got system initialized notification");
+ if (server->system_initialized_handler != NULL)
+ server->system_initialized_handler (server->user_data, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_ERROR) == 0) {
+ ply_trace ("got error notification");
+ if (server->error_handler != NULL)
+ server->error_handler (server->user_data, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH) == 0) {
+ ply_trace ("got show splash request");
+ if (server->show_splash_handler != NULL)
+ server->show_splash_handler (server->user_data, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_SPLASH) == 0) {
+ ply_trace ("got hide splash request");
+ if (server->hide_splash_handler != NULL)
+ server->hide_splash_handler (server->user_data, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_DEACTIVATE) == 0) {
+ ply_trigger_t *deactivate_trigger;
+
+ ply_trace ("got deactivate request");
+
+ deactivate_trigger = ply_trigger_new (NULL);
+
+ ply_trigger_add_handler (deactivate_trigger,
+ (ply_trigger_handler_t)
+ ply_boot_connection_on_deactivated,
+ connection);
+
+ if (server->deactivate_handler != NULL)
+ server->deactivate_handler (server->user_data, deactivate_trigger, server);
+
+ free (argument);
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_REACTIVATE) == 0) {
+ ply_trace ("got reactivate request");
+ if (server->reactivate_handler != NULL)
+ server->reactivate_handler (server->user_data, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUIT) == 0) {
+ bool retain_splash;
+ ply_trigger_t *quit_trigger;
+
+ retain_splash = (bool) argument[0];
+
+ ply_trace ("got quit %srequest", retain_splash ? "--retain-splash " : "");
+
+ quit_trigger = ply_trigger_new (NULL);
+
+ ply_trigger_add_handler (quit_trigger,
+ (ply_trigger_handler_t)
+ ply_boot_connection_on_quit_complete,
+ connection);
+
+ if (server->quit_handler != NULL)
+ server->quit_handler (server->user_data, retain_splash, quit_trigger, server);
+
+ free (argument);
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PASSWORD) == 0) {
+ ply_trigger_t *answer;
+
+ ply_trace ("got password request");
+
+ answer = ply_trigger_new (NULL);
+ ply_trigger_add_handler (answer,
+ (ply_trigger_handler_t)
+ ply_boot_connection_on_password_answer,
+ connection);
+
+ if (server->ask_for_password_handler != NULL) {
+ server->ask_for_password_handler (server->user_data,
+ argument,
+ answer,
+ server);
+ }
+ /* will reply later
+ */
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CACHED_PASSWORD) == 0) {
+ ply_list_node_t *node;
+ ply_buffer_t *buffer;
+ size_t buffer_size;
+ uint32_t size;
+
+ ply_trace ("got cached password request");
+
+ buffer = ply_buffer_new ();
+
+ node = ply_list_get_first_node (server->cached_passwords);
+
+ ply_trace ("There are %d cached passwords",
+ ply_list_get_length (server->cached_passwords));
+
+ /* Add each answer separated by their NUL terminators into
+ * a buffer that we write out to the client
+ */
+ while (node != NULL) {
+ ply_list_node_t *next_node;
+ const char *password;
+
+ next_node = ply_list_get_next_node (server->cached_passwords, node);
+ password = (const char *) ply_list_node_get_data (node);
+
+ ply_buffer_append_bytes (buffer,
+ password,
+ strlen (password) + 1);
+ node = next_node;
+ }
+
+ buffer_size = ply_buffer_get_size (buffer);
+
+ /* splash plugin doesn't have any cached passwords
+ */
+ if (buffer_size == 0) {
+ ply_trace ("Responding with 'no answer' reply since there are currently "
+ "no cached answers");
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NO_ANSWER)))
+ ply_trace ("could not finish writing no answer reply: %m");
+ } else {
+ size = buffer_size;
+
+ ply_trace ("writing %d cached answers",
+ ply_list_get_length (server->cached_passwords));
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_MULTIPLE_ANSWERS,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_MULTIPLE_ANSWERS)) ||
+ !ply_write_uint32 (connection->fd,
+ size) ||
+ !ply_write (connection->fd,
+ ply_buffer_get_bytes (buffer), size))
+ ply_trace ("could not finish writing cached answer reply: %m");
+ }
+
+ ply_buffer_free (buffer);
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUESTION) == 0) {
+ ply_trigger_t *answer;
+
+ ply_trace ("got question request");
+
+ answer = ply_trigger_new (NULL);
+ ply_trigger_add_handler (answer,
+ (ply_trigger_handler_t)
+ ply_boot_connection_on_question_answer,
+ connection);
+
+ if (server->ask_question_handler != NULL) {
+ server->ask_question_handler (server->user_data,
+ argument,
+ answer,
+ server);
+ }
+ /* will reply later
+ */
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_MESSAGE) == 0) {
+ ply_trace ("got show message request");
+ if (server->display_message_handler != NULL)
+ server->display_message_handler (server->user_data, argument, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_MESSAGE) == 0) {
+ ply_trace ("got hide message request");
+ if (server->hide_message_handler != NULL)
+ server->hide_message_handler (server->user_data, argument, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE) == 0) {
+ ply_trigger_t *answer;
+
+ ply_trace ("got keystroke request");
+
+ answer = ply_trigger_new (NULL);
+ ply_trigger_add_handler (answer,
+ (ply_trigger_handler_t)
+ ply_boot_connection_on_keystroke_answer,
+ connection);
+
+ if (server->watch_for_keystroke_handler != NULL) {
+ server->watch_for_keystroke_handler (server->user_data,
+ argument,
+ answer,
+ server);
+ }
+ /* will reply later
+ */
+ free (command);
+ return;
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE_REMOVE) == 0) {
+ ply_trace ("got keystroke remove request");
+ if (server->ignore_keystroke_handler != NULL)
+ server->ignore_keystroke_handler (server->user_data,
+ argument,
+ server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE) == 0) {
+ ply_trace ("got progress pause request");
+ if (server->progress_pause_handler != NULL)
+ server->progress_pause_handler (server->user_data,
+ server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE) == 0) {
+ ply_trace ("got progress unpause request");
+ if (server->progress_unpause_handler != NULL)
+ server->progress_unpause_handler (server->user_data,
+ server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT) == 0) {
+ ply_trace ("got newroot request");
+ if (server->newroot_handler != NULL)
+ server->newroot_handler (server->user_data, argument, server);
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HAS_ACTIVE_VT) == 0) {
+ bool answer = false;
+
+ ply_trace ("got has_active vt? request");
+ if (server->has_active_vt_handler != NULL)
+ answer = server->has_active_vt_handler (server->user_data, server);
+
+ if (!answer) {
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
+ ply_trace ("could not finish writing nak: %m");
+
+ free (command);
+ return;
+ }
+ } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PING) != 0) {
+ ply_error ("received unknown command '%s' from client", command);
+
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
+ ply_trace ("could not finish writing ping reply: %m");
+
+ free (command);
+ return;
}
- }
- else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PING) != 0)
- {
- ply_error ("received unknown command '%s' from client", command);
-
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
- ply_trace ("could not finish writing ping reply: %m");
-
- free(command);
- return;
- }
-
- if (!ply_write (connection->fd,
- PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
- strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
- {
- ply_trace ("could not finish writing ack: %m");
- }
- free(command);
+
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
+ ply_trace ("could not finish writing ack: %m");
+ free (command);
}
static void
ply_boot_connection_on_hangup (ply_boot_connection_t *connection)
{
- ply_list_node_t *node;
- ply_boot_server_t *server;
+ ply_list_node_t *node;
+ ply_boot_server_t *server;
- assert (connection != NULL);
- assert (connection->server != NULL);
+ assert (connection != NULL);
+ assert (connection->server != NULL);
- server = connection->server;
+ server = connection->server;
- node = ply_list_find_node (server->connections, connection);
+ node = ply_list_find_node (server->connections, connection);
- assert (node != NULL);
+ assert (node != NULL);
- ply_boot_connection_free (connection);
- ply_list_remove_node (server->connections, node);
+ ply_boot_connection_free (connection);
+ ply_list_remove_node (server->connections, node);
}
static void
ply_boot_server_on_new_connection (ply_boot_server_t *server)
{
- ply_boot_connection_t *connection;
- int fd;
+ ply_boot_connection_t *connection;
+ int fd;
- assert (server != NULL);
+ assert (server != NULL);
- fd = accept4 (server->socket_fd, NULL, NULL, SOCK_CLOEXEC);
+ fd = accept4 (server->socket_fd, NULL, NULL, SOCK_CLOEXEC);
- if (fd < 0)
- return;
+ if (fd < 0)
+ return;
- connection = ply_boot_connection_new (server, fd);
+ connection = ply_boot_connection_new (server, fd);
- connection->watch =
- ply_event_loop_watch_fd (server->loop, fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- ply_boot_connection_on_request,
- (ply_event_handler_t)
- ply_boot_connection_on_hangup,
- connection);
+ connection->watch =
+ ply_event_loop_watch_fd (server->loop, fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ ply_boot_connection_on_request,
+ (ply_event_handler_t)
+ ply_boot_connection_on_hangup,
+ connection);
- ply_list_append_data (server->connections, connection);
+ ply_list_append_data (server->connections, connection);
}
static void
ply_boot_server_on_hangup (ply_boot_server_t *server)
{
- assert (server != NULL);
+ assert (server != NULL);
}
static void
ply_boot_server_detach_from_event_loop (ply_boot_server_t *server)
{
- assert (server != NULL);
- server->loop = NULL;
+ assert (server != NULL);
+ server->loop = NULL;
}
void
ply_boot_server_attach_to_event_loop (ply_boot_server_t *server,
ply_event_loop_t *loop)
{
- assert (server != NULL);
- assert (loop != NULL);
- assert (server->loop == NULL);
- assert (server->socket_fd >= 0);
-
- server->loop = loop;
-
- ply_event_loop_watch_fd (loop, server->socket_fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- (ply_event_handler_t)
- ply_boot_server_on_new_connection,
- (ply_event_handler_t)
- ply_boot_server_on_hangup,
- server);
- ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
- ply_boot_server_detach_from_event_loop,
- server);
+ assert (server != NULL);
+ assert (loop != NULL);
+ assert (server->loop == NULL);
+ assert (server->socket_fd >= 0);
+
+ server->loop = loop;
+
+ ply_event_loop_watch_fd (loop, server->socket_fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ (ply_event_handler_t)
+ ply_boot_server_on_new_connection,
+ (ply_event_handler_t)
+ ply_boot_server_on_hangup,
+ server);
+ ply_event_loop_watch_for_exit (loop, (ply_event_loop_exit_handler_t)
+ ply_boot_server_detach_from_event_loop,
+ server);
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/ply-boot-server.h b/src/ply-boot-server.h
index b885a81f..feb2bc49 100644
--- a/src/ply-boot-server.h
+++ b/src/ply-boot-server.h
@@ -32,99 +32,99 @@
typedef struct _ply_boot_server ply_boot_server_t;
-typedef void (* ply_boot_server_update_handler_t) (void *user_data,
- const char *status,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_update_handler_t) (void *user_data,
+ const char *status,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_change_mode_handler_t) (void *user_data,
- const char *mode,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_change_mode_handler_t) (void *user_data,
+ const char *mode,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_system_update_handler_t) (void *user_data,
- int progress,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_system_update_handler_t) (void *user_data,
+ int progress,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_newroot_handler_t) (void *user_data,
- const char *root_dir,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_newroot_handler_t) (void *user_data,
+ const char *root_dir,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_show_splash_handler_t) (void *user_data,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_show_splash_handler_t) (void *user_data,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_hide_splash_handler_t) (void *user_data,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_hide_splash_handler_t) (void *user_data,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_password_answer_handler_t) (void *answer_data,
- const char *password,
+typedef void (*ply_boot_server_password_answer_handler_t) (void *answer_data,
+ const char *password,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_ask_for_password_handler_t) (void *user_data,
+ const char *prompt,
+ ply_trigger_t *answer,
ply_boot_server_t *server);
-typedef void (* ply_boot_server_ask_for_password_handler_t) (void *user_data,
+typedef void (*ply_boot_server_question_answer_handler_t) (void *answer_data,
+ const char *answer,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_ask_question_handler_t) (void *user_data,
const char *prompt,
ply_trigger_t *answer,
ply_boot_server_t *server);
-typedef void (* ply_boot_server_question_answer_handler_t) (void *answer_data,
- const char *answer,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_ask_question_handler_t) (void *user_data,
- const char *prompt,
- ply_trigger_t *answer,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_display_message_handler_t) (void *user_data,
- const char *message,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_hide_message_handler_t) (void *user_data,
- const char *message,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_watch_for_keystroke_handler_t) (void *user_data,
- const char *keys,
- ply_trigger_t *answer,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_ignore_keystroke_handler_t) (void *user_data,
- const char *keys,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_progress_pause_handler_t) (void *user_data,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_progress_unpause_handler_t) (void *user_data,
+typedef void (*ply_boot_server_display_message_handler_t) (void *user_data,
+ const char *message,
ply_boot_server_t *server);
+typedef void (*ply_boot_server_hide_message_handler_t) (void *user_data,
+ const char *message,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_watch_for_keystroke_handler_t) (void *user_data,
+ const char *keys,
+ ply_trigger_t *answer,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_ignore_keystroke_handler_t) (void *user_data,
+ const char *keys,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_progress_pause_handler_t) (void *user_data,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_progress_unpause_handler_t) (void *user_data,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_system_initialized_handler_t) (void *user_data,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_system_initialized_handler_t) (void *user_data,
+ ply_boot_server_t *server);
-typedef void (* ply_boot_server_error_handler_t) (void *user_data,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_deactivate_handler_t) (void *user_data,
- ply_trigger_t *deactivate_trigger,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_reactivate_handler_t) (void *user_data,
- ply_boot_server_t *server);
-typedef void (* ply_boot_server_quit_handler_t) (void *user_data,
- bool retain_splash,
- ply_trigger_t *quit_trigger,
+typedef void (*ply_boot_server_error_handler_t) (void *user_data,
ply_boot_server_t *server);
-typedef bool (* ply_boot_server_has_active_vt_handler_t) (void *user_data,
- ply_boot_server_t *server);
+typedef void (*ply_boot_server_deactivate_handler_t) (void *user_data,
+ ply_trigger_t *deactivate_trigger,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_reactivate_handler_t) (void *user_data,
+ ply_boot_server_t *server);
+typedef void (*ply_boot_server_quit_handler_t) (void *user_data,
+ bool retain_splash,
+ ply_trigger_t *quit_trigger,
+ ply_boot_server_t *server);
+typedef bool (*ply_boot_server_has_active_vt_handler_t) (void *user_data,
+ ply_boot_server_t *server);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
-ply_boot_server_t *ply_boot_server_new (ply_boot_server_update_handler_t update_handler,
- ply_boot_server_change_mode_handler_t change_mode_handler,
- ply_boot_server_system_update_handler_t system_update_handler,
- ply_boot_server_ask_for_password_handler_t ask_for_password_handler,
- ply_boot_server_ask_question_handler_t ask_question_handler,
- ply_boot_server_display_message_handler_t display_message_handler,
- ply_boot_server_hide_message_handler_t hide_message_handler,
+ply_boot_server_t *ply_boot_server_new (ply_boot_server_update_handler_t update_handler,
+ ply_boot_server_change_mode_handler_t change_mode_handler,
+ ply_boot_server_system_update_handler_t system_update_handler,
+ ply_boot_server_ask_for_password_handler_t ask_for_password_handler,
+ ply_boot_server_ask_question_handler_t ask_question_handler,
+ ply_boot_server_display_message_handler_t display_message_handler,
+ ply_boot_server_hide_message_handler_t hide_message_handler,
ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler,
- ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler,
- ply_boot_server_progress_pause_handler_t on_progress_pause,
- ply_boot_server_progress_unpause_handler_t on_progress_unpause,
- ply_boot_server_show_splash_handler_t show_splash_handler,
- ply_boot_server_hide_splash_handler_t hide_splash_handler,
- ply_boot_server_newroot_handler_t newroot_handler,
- ply_boot_server_system_initialized_handler_t initialized_handler,
- ply_boot_server_error_handler_t error_handler,
- ply_boot_server_deactivate_handler_t deactivate_handler,
- ply_boot_server_reactivate_handler_t reactivate_handler,
- ply_boot_server_quit_handler_t quit_handler,
- ply_boot_server_has_active_vt_handler_t has_active_vt_handler,
- void *user_data);
+ ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler,
+ ply_boot_server_progress_pause_handler_t on_progress_pause,
+ ply_boot_server_progress_unpause_handler_t on_progress_unpause,
+ ply_boot_server_show_splash_handler_t show_splash_handler,
+ ply_boot_server_hide_splash_handler_t hide_splash_handler,
+ ply_boot_server_newroot_handler_t newroot_handler,
+ ply_boot_server_system_initialized_handler_t initialized_handler,
+ ply_boot_server_error_handler_t error_handler,
+ ply_boot_server_deactivate_handler_t deactivate_handler,
+ ply_boot_server_reactivate_handler_t reactivate_handler,
+ ply_boot_server_quit_handler_t quit_handler,
+ ply_boot_server_has_active_vt_handler_t has_active_vt_handler,
+ void *user_data);
void ply_boot_server_free (ply_boot_server_t *server);
bool ply_boot_server_listen (ply_boot_server_t *server);
diff --git a/src/upstart-bridge/ply-upstart-monitor.c b/src/upstart-bridge/ply-upstart-monitor.c
index 5784d6eb..39940de7 100644
--- a/src/upstart-bridge/ply-upstart-monitor.c
+++ b/src/upstart-bridge/ply-upstart-monitor.c
@@ -39,38 +39,38 @@
typedef struct
{
- ply_upstart_monitor_t *monitor;
- DBusTimeout *timeout;
+ ply_upstart_monitor_t *monitor;
+ DBusTimeout *timeout;
} ply_upstart_monitor_timeout_t;
struct _ply_upstart_monitor
{
- DBusConnection *connection;
- ply_event_loop_t *loop;
- ply_hashtable_t *jobs;
- ply_hashtable_t *all_instances;
- ply_upstart_monitor_state_changed_handler_t state_changed_handler;
- void *state_changed_data;
- ply_upstart_monitor_failed_handler_t failed_handler;
- void *failed_data;
- int dispatch_fd;
+ DBusConnection *connection;
+ ply_event_loop_t *loop;
+ ply_hashtable_t *jobs;
+ ply_hashtable_t *all_instances;
+ ply_upstart_monitor_state_changed_handler_t state_changed_handler;
+ void *state_changed_data;
+ ply_upstart_monitor_failed_handler_t failed_handler;
+ void *failed_data;
+ int dispatch_fd;
};
typedef struct
{
- ply_upstart_monitor_t *monitor;
- ply_upstart_monitor_job_properties_t properties;
- ply_hashtable_t *instances;
- ply_list_t *pending_calls;
+ ply_upstart_monitor_t *monitor;
+ ply_upstart_monitor_job_properties_t properties;
+ ply_hashtable_t *instances;
+ ply_list_t *pending_calls;
} ply_upstart_monitor_job_t;
typedef struct
{
- ply_upstart_monitor_job_t *job;
- ply_upstart_monitor_instance_properties_t properties;
- ply_list_t *pending_calls;
- uint32_t state_changed : 1;
- uint32_t call_failed : 1;
+ ply_upstart_monitor_job_t *job;
+ ply_upstart_monitor_instance_properties_t properties;
+ ply_list_t *pending_calls;
+ uint32_t state_changed : 1;
+ uint32_t call_failed : 1;
} ply_upstart_monitor_instance_t;
#define UPSTART_SERVICE NULL
@@ -85,15 +85,15 @@ static void *
hashtable_remove_and_free_key (ply_hashtable_t *hashtable,
const void *key)
{
- void *reply_key, *reply_data;
+ void *reply_key, *reply_data;
- if (!ply_hashtable_lookup_full (hashtable, (void *) key,
- &reply_key, &reply_data))
- return NULL;
- ply_hashtable_remove (hashtable, (void *) key);
- free (reply_key);
+ if (!ply_hashtable_lookup_full (hashtable, (void *) key,
+ &reply_key, &reply_data))
+ return NULL;
+ ply_hashtable_remove (hashtable, (void *) key);
+ free (reply_key);
- return reply_data;
+ return reply_data;
}
/* We assume, in general, that Upstart responds to D-Bus messages in a
@@ -108,475 +108,455 @@ hashtable_remove_and_free_key (ply_hashtable_t *hashtable,
static bool
instance_is_initialized (ply_upstart_monitor_instance_t *instance)
{
- /* Note that the job may not have a description. */
- if (instance->job->properties.name &&
- instance->properties.name && instance->properties.goal &&
- instance->properties.state)
- return true;
- else
- return false;
+ /* Note that the job may not have a description. */
+ if (instance->job->properties.name &&
+ instance->properties.name && instance->properties.goal &&
+ instance->properties.state)
+ return true;
+ else
+ return false;
}
static void
on_get_all_instance_properties_finished (DBusPendingCall *call,
ply_upstart_monitor_instance_t *instance)
{
- DBusMessage *reply;
- DBusMessageIter iter, array_iter, dict_iter, variant_iter;
- const char *key, *name, *goal, *state;
- ply_upstart_monitor_t *monitor;
-
- assert (call != NULL);
- assert (instance != NULL);
-
- reply = dbus_pending_call_steal_reply (call);
- if (reply == NULL)
- return;
- if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
- goto out;
-
- dbus_message_iter_init (reply, &iter);
- if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY)
- goto out;
- dbus_message_iter_recurse (&iter, &array_iter);
-
- while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_DICT_ENTRY)
- {
- dbus_message_iter_recurse (&array_iter, &dict_iter);
-
- if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_STRING)
- goto next_item;
-
- dbus_message_iter_get_basic (&dict_iter, &key);
- if (key == NULL)
- goto next_item;
-
- dbus_message_iter_next (&dict_iter);
- if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_VARIANT)
- goto next_item;
- dbus_message_iter_recurse (&dict_iter, &variant_iter);
- if (dbus_message_iter_get_arg_type (&variant_iter) != DBUS_TYPE_STRING)
- goto next_item;
-
- if (strcmp (key, "name") == 0)
- {
- dbus_message_iter_get_basic (&variant_iter, &name);
- if (name != NULL)
- {
- ply_trace ("%s: name = '%s'",
- instance->job->properties.name, name);
- instance->properties.name = strdup (name);
- }
- }
- else if (strcmp (key, "goal") == 0)
- {
- dbus_message_iter_get_basic (&variant_iter, &goal);
- if (goal != NULL)
- {
- ply_trace ("%s: goal = '%s'",
- instance->job->properties.name, goal);
- instance->properties.goal = strdup (goal);
- }
- }
- else if (strcmp (key, "state") == 0)
- {
- dbus_message_iter_get_basic (&variant_iter, &state);
- if (state != NULL)
- {
- ply_trace ("%s: state = '%s'",
- instance->job->properties.name, state);
- instance->properties.state = strdup (state);
- }
- }
+ DBusMessage *reply;
+ DBusMessageIter iter, array_iter, dict_iter, variant_iter;
+ const char *key, *name, *goal, *state;
+ ply_upstart_monitor_t *monitor;
+
+ assert (call != NULL);
+ assert (instance != NULL);
+
+ reply = dbus_pending_call_steal_reply (call);
+ if (reply == NULL)
+ return;
+ if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
+ goto out;
+
+ dbus_message_iter_init (reply, &iter);
+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY)
+ goto out;
+ dbus_message_iter_recurse (&iter, &array_iter);
+
+ while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_DICT_ENTRY) {
+ dbus_message_iter_recurse (&array_iter, &dict_iter);
+
+ if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_STRING)
+ goto next_item;
+
+ dbus_message_iter_get_basic (&dict_iter, &key);
+ if (key == NULL)
+ goto next_item;
+
+ dbus_message_iter_next (&dict_iter);
+ if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_VARIANT)
+ goto next_item;
+ dbus_message_iter_recurse (&dict_iter, &variant_iter);
+ if (dbus_message_iter_get_arg_type (&variant_iter) != DBUS_TYPE_STRING)
+ goto next_item;
+
+ if (strcmp (key, "name") == 0) {
+ dbus_message_iter_get_basic (&variant_iter, &name);
+ if (name != NULL) {
+ ply_trace ("%s: name = '%s'",
+ instance->job->properties.name, name);
+ instance->properties.name = strdup (name);
+ }
+ } else if (strcmp (key, "goal") == 0) {
+ dbus_message_iter_get_basic (&variant_iter, &goal);
+ if (goal != NULL) {
+ ply_trace ("%s: goal = '%s'",
+ instance->job->properties.name, goal);
+ instance->properties.goal = strdup (goal);
+ }
+ } else if (strcmp (key, "state") == 0) {
+ dbus_message_iter_get_basic (&variant_iter, &state);
+ if (state != NULL) {
+ ply_trace ("%s: state = '%s'",
+ instance->job->properties.name, state);
+ instance->properties.state = strdup (state);
+ }
+ }
next_item:
- dbus_message_iter_next (&array_iter);
- }
+ dbus_message_iter_next (&array_iter);
+ }
out:
- dbus_message_unref (reply);
-
- if (instance_is_initialized (instance))
- {
- /* Process any call events. */
- monitor = instance->job->monitor;
-
- if (instance->state_changed && monitor->state_changed_handler)
- monitor->state_changed_handler (monitor->state_changed_data, NULL,
- &instance->job->properties,
- &instance->properties);
- instance->state_changed = false;
-
- if (instance->call_failed && monitor->failed_handler)
- monitor->failed_handler (monitor->failed_data,
- &instance->job->properties,
- &instance->properties,
- instance->properties.failed);
- instance->call_failed = false;
- }
+ dbus_message_unref (reply);
+
+ if (instance_is_initialized (instance)) {
+ /* Process any call events. */
+ monitor = instance->job->monitor;
+
+ if (instance->state_changed && monitor->state_changed_handler)
+ monitor->state_changed_handler (monitor->state_changed_data, NULL,
+ &instance->job->properties,
+ &instance->properties);
+ instance->state_changed = false;
+
+ if (instance->call_failed && monitor->failed_handler) {
+ monitor->failed_handler (monitor->failed_data,
+ &instance->job->properties,
+ &instance->properties,
+ instance->properties.failed);
+ }
+ instance->call_failed = false;
+ }
}
static void
on_get_all_job_properties_finished (DBusPendingCall *call,
ply_upstart_monitor_job_t *job)
{
- DBusMessage *reply;
- DBusMessageIter iter, array_iter, dict_iter, variant_iter;
- const char *key, *name, *description;
- dbus_uint32_t task;
-
- assert (call != NULL);
- assert (job != NULL);
-
- reply = dbus_pending_call_steal_reply (call);
- if (reply == NULL)
- return;
- if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
- goto out;
-
- dbus_message_iter_init (reply, &iter);
- if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY)
- goto out;
- dbus_message_iter_recurse (&iter, &array_iter);
-
- while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_DICT_ENTRY)
- {
- dbus_message_iter_recurse (&array_iter, &dict_iter);
-
- if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_STRING)
- goto next_item;
-
- dbus_message_iter_get_basic (&dict_iter, &key);
- if (key == NULL)
- goto next_item;
-
- dbus_message_iter_next (&dict_iter);
- if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_VARIANT)
- goto next_item;
- dbus_message_iter_recurse (&dict_iter, &variant_iter);
-
- if (strcmp (key, "name") == 0)
- {
- if (dbus_message_iter_get_arg_type (&variant_iter) !=
- DBUS_TYPE_STRING)
- goto next_item;
- dbus_message_iter_get_basic (&variant_iter, &name);
- if (name != NULL)
- {
- ply_trace ("name = '%s'", name);
- job->properties.name = strdup (name);
- }
- }
- else if (strcmp (key, "description") == 0)
- {
- if (dbus_message_iter_get_arg_type (&variant_iter) !=
- DBUS_TYPE_STRING)
- goto next_item;
- dbus_message_iter_get_basic (&variant_iter, &description);
- if (description != NULL && description[0])
- {
- ply_trace ("description = '%s'", description);
- job->properties.description = strdup (description);
- }
- }
- else if (strcmp (key, "task") == 0)
- {
- if (dbus_message_iter_get_arg_type (&variant_iter) !=
- DBUS_TYPE_BOOLEAN)
- goto next_item;
- dbus_message_iter_get_basic (&variant_iter, &task);
- ply_trace ("task = %s", task ? "TRUE" : "FALSE");
- job->properties.is_task = task ? true : false;
- }
+ DBusMessage *reply;
+ DBusMessageIter iter, array_iter, dict_iter, variant_iter;
+ const char *key, *name, *description;
+ dbus_uint32_t task;
+
+ assert (call != NULL);
+ assert (job != NULL);
+
+ reply = dbus_pending_call_steal_reply (call);
+ if (reply == NULL)
+ return;
+ if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
+ goto out;
+
+ dbus_message_iter_init (reply, &iter);
+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY)
+ goto out;
+ dbus_message_iter_recurse (&iter, &array_iter);
+
+ while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_DICT_ENTRY) {
+ dbus_message_iter_recurse (&array_iter, &dict_iter);
+
+ if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_STRING)
+ goto next_item;
+
+ dbus_message_iter_get_basic (&dict_iter, &key);
+ if (key == NULL)
+ goto next_item;
+
+ dbus_message_iter_next (&dict_iter);
+ if (dbus_message_iter_get_arg_type (&dict_iter) != DBUS_TYPE_VARIANT)
+ goto next_item;
+ dbus_message_iter_recurse (&dict_iter, &variant_iter);
+
+ if (strcmp (key, "name") == 0) {
+ if (dbus_message_iter_get_arg_type (&variant_iter) !=
+ DBUS_TYPE_STRING)
+ goto next_item;
+ dbus_message_iter_get_basic (&variant_iter, &name);
+ if (name != NULL) {
+ ply_trace ("name = '%s'", name);
+ job->properties.name = strdup (name);
+ }
+ } else if (strcmp (key, "description") == 0) {
+ if (dbus_message_iter_get_arg_type (&variant_iter) !=
+ DBUS_TYPE_STRING)
+ goto next_item;
+ dbus_message_iter_get_basic (&variant_iter, &description);
+ if (description != NULL && description[0]) {
+ ply_trace ("description = '%s'", description);
+ job->properties.description = strdup (description);
+ }
+ } else if (strcmp (key, "task") == 0) {
+ if (dbus_message_iter_get_arg_type (&variant_iter) !=
+ DBUS_TYPE_BOOLEAN)
+ goto next_item;
+ dbus_message_iter_get_basic (&variant_iter, &task);
+ ply_trace ("task = %s", task ? "TRUE" : "FALSE");
+ job->properties.is_task = task ? true : false;
+ }
next_item:
- dbus_message_iter_next (&array_iter);
- }
+ dbus_message_iter_next (&array_iter);
+ }
out:
- dbus_message_unref (reply);
+ dbus_message_unref (reply);
}
static void
remove_instance_internal (ply_upstart_monitor_job_t *job, const char *path)
{
- ply_upstart_monitor_instance_t *instance;
- ply_list_node_t *node;
-
- instance = hashtable_remove_and_free_key (job->instances, path);
- if (instance == NULL)
- return;
- hashtable_remove_and_free_key (job->monitor->all_instances, path);
-
- node = ply_list_get_first_node (instance->pending_calls);
- while (node != NULL)
- {
- DBusPendingCall *call;
- ply_list_node_t *next_node;
-
- call = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (instance->pending_calls, node);
- dbus_pending_call_cancel (call);
- dbus_pending_call_unref (call);
- node = next_node;
- }
- ply_list_free (instance->pending_calls);
-
- free (instance->properties.name);
- free (instance->properties.goal);
- free (instance->properties.state);
- free (instance);
+ ply_upstart_monitor_instance_t *instance;
+ ply_list_node_t *node;
+
+ instance = hashtable_remove_and_free_key (job->instances, path);
+ if (instance == NULL)
+ return;
+ hashtable_remove_and_free_key (job->monitor->all_instances, path);
+
+ node = ply_list_get_first_node (instance->pending_calls);
+ while (node != NULL) {
+ DBusPendingCall *call;
+ ply_list_node_t *next_node;
+
+ call = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (instance->pending_calls, node);
+ dbus_pending_call_cancel (call);
+ dbus_pending_call_unref (call);
+ node = next_node;
+ }
+ ply_list_free (instance->pending_calls);
+
+ free (instance->properties.name);
+ free (instance->properties.goal);
+ free (instance->properties.state);
+ free (instance);
}
static void
add_instance (ply_upstart_monitor_job_t *job,
const char *path)
{
- ply_upstart_monitor_instance_t *instance;
- DBusMessage *message;
- const char *interface = UPSTART_INTERFACE_0_6_INSTANCE;
- DBusPendingCall *call;
-
- ply_trace ("adding instance: %s", path);
-
- remove_instance_internal (job, path);
-
- instance = calloc (1, sizeof (ply_upstart_monitor_instance_t));
- instance->job = job;
- instance->properties.name = NULL;
- instance->properties.goal = NULL;
- instance->properties.state = NULL;
- instance->properties.failed = false;
- instance->pending_calls = ply_list_new ();
- instance->state_changed = false;
- instance->call_failed = false;
-
- /* Keep a hash of instances per job, to make InstanceRemoved handling
- * easy.
- */
- ply_hashtable_insert (job->instances, strdup (path), instance);
- /* Keep a separate hash of all instances, to make StateChanged handling
- * easy.
- */
- ply_hashtable_insert (job->monitor->all_instances, strdup (path), instance);
-
- /* Ask Upstart for the name, goal, and state properties. */
- ply_trace ("fetching properties of instance %s", path);
- message = dbus_message_new_method_call (UPSTART_SERVICE, path,
- DBUS_INTERFACE_PROPERTIES, "GetAll");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING, &interface,
- DBUS_TYPE_INVALID);
- dbus_connection_send_with_reply (job->monitor->connection, message,
- &call, -1);
- dbus_message_unref (message);
- if (call != NULL)
- {
- dbus_pending_call_set_notify (call,
- (DBusPendingCallNotifyFunction)
- on_get_all_instance_properties_finished,
- instance, NULL);
- ply_list_append_data (instance->pending_calls, call);
- }
+ ply_upstart_monitor_instance_t *instance;
+ DBusMessage *message;
+ const char *interface = UPSTART_INTERFACE_0_6_INSTANCE;
+ DBusPendingCall *call;
+
+ ply_trace ("adding instance: %s", path);
+
+ remove_instance_internal (job, path);
+
+ instance = calloc (1, sizeof(ply_upstart_monitor_instance_t));
+ instance->job = job;
+ instance->properties.name = NULL;
+ instance->properties.goal = NULL;
+ instance->properties.state = NULL;
+ instance->properties.failed = false;
+ instance->pending_calls = ply_list_new ();
+ instance->state_changed = false;
+ instance->call_failed = false;
+
+ /* Keep a hash of instances per job, to make InstanceRemoved handling
+ * easy.
+ */
+ ply_hashtable_insert (job->instances, strdup (path), instance);
+ /* Keep a separate hash of all instances, to make StateChanged handling
+ * easy.
+ */
+ ply_hashtable_insert (job->monitor->all_instances, strdup (path), instance);
+
+ /* Ask Upstart for the name, goal, and state properties. */
+ ply_trace ("fetching properties of instance %s", path);
+ message = dbus_message_new_method_call (UPSTART_SERVICE, path,
+ DBUS_INTERFACE_PROPERTIES, "GetAll");
+ dbus_message_append_args (message,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_INVALID);
+ dbus_connection_send_with_reply (job->monitor->connection, message,
+ &call, -1);
+ dbus_message_unref (message);
+ if (call != NULL) {
+ dbus_pending_call_set_notify (call,
+ (DBusPendingCallNotifyFunction)
+ on_get_all_instance_properties_finished,
+ instance, NULL);
+ ply_list_append_data (instance->pending_calls, call);
+ }
}
static void
remove_instance (ply_upstart_monitor_job_t *job,
const char *path)
{
- ply_trace ("removing instance: %s", path);
+ ply_trace ("removing instance: %s", path);
- remove_instance_internal (job, path);
+ remove_instance_internal (job, path);
}
static void
on_get_all_instances_finished (DBusPendingCall *call,
ply_upstart_monitor_job_t *job)
{
- DBusMessage *reply;
- DBusError error;
- char **instances;
- int n_instances, i;
-
- assert (call != NULL);
- assert (job != NULL);
-
- reply = dbus_pending_call_steal_reply (call);
- if (reply == NULL)
- return;
- if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
- goto out;
-
- dbus_error_init (&error);
- dbus_message_get_args (reply, &error,
- DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH,
- &instances, &n_instances,
- DBUS_TYPE_INVALID);
- if (dbus_error_is_set (&error))
- goto out;
- dbus_error_free (&error);
-
- for (i = 0; i < n_instances; ++i)
- add_instance (job, instances[i]);
-
- dbus_free_string_array (instances);
+ DBusMessage *reply;
+ DBusError error;
+ char **instances;
+ int n_instances, i;
+
+ assert (call != NULL);
+ assert (job != NULL);
+
+ reply = dbus_pending_call_steal_reply (call);
+ if (reply == NULL)
+ return;
+ if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
+ goto out;
+
+ dbus_error_init (&error);
+ dbus_message_get_args (reply, &error,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH,
+ &instances, &n_instances,
+ DBUS_TYPE_INVALID);
+ if (dbus_error_is_set (&error))
+ goto out;
+ dbus_error_free (&error);
+
+ for (i = 0; i < n_instances; ++i) {
+ add_instance (job, instances[i]);
+ }
+
+ dbus_free_string_array (instances);
out:
- dbus_message_unref (reply);
+ dbus_message_unref (reply);
}
static void
free_job_instance (void *key, void *data, void *user_data)
{
- const char *path = key;
- ply_upstart_monitor_instance_t *instance = data;
- ply_upstart_monitor_t *monitor = user_data;
+ const char *path = key;
+ ply_upstart_monitor_instance_t *instance = data;
+ ply_upstart_monitor_t *monitor = user_data;
- assert (monitor != NULL);
+ assert (monitor != NULL);
- if (instance == NULL)
- return;
+ if (instance == NULL)
+ return;
- hashtable_remove_and_free_key (monitor->all_instances, path);
- free (instance->properties.name);
- free (instance->properties.goal);
- free (instance->properties.state);
- free (instance);
+ hashtable_remove_and_free_key (monitor->all_instances, path);
+ free (instance->properties.name);
+ free (instance->properties.goal);
+ free (instance->properties.state);
+ free (instance);
}
static void
remove_job_internal (ply_upstart_monitor_t *monitor, const char *path)
{
- ply_upstart_monitor_job_t *job;
- ply_list_node_t *node;
-
- job = hashtable_remove_and_free_key (monitor->jobs, path);
- if (job == NULL)
- return;
-
- node = ply_list_get_first_node (job->pending_calls);
- while (node != NULL)
- {
- DBusPendingCall *call;
- ply_list_node_t *next_node;
-
- call = ply_list_node_get_data (node);
- next_node = ply_list_get_next_node (job->pending_calls, node);
- dbus_pending_call_cancel (call);
- dbus_pending_call_unref (call);
- node = next_node;
- }
- ply_list_free (job->pending_calls);
-
- free (job->properties.name);
- free (job->properties.description);
- ply_hashtable_foreach (job->instances, free_job_instance, monitor);
- ply_hashtable_free (job->instances);
- free (job);
+ ply_upstart_monitor_job_t *job;
+ ply_list_node_t *node;
+
+ job = hashtable_remove_and_free_key (monitor->jobs, path);
+ if (job == NULL)
+ return;
+
+ node = ply_list_get_first_node (job->pending_calls);
+ while (node != NULL) {
+ DBusPendingCall *call;
+ ply_list_node_t *next_node;
+
+ call = ply_list_node_get_data (node);
+ next_node = ply_list_get_next_node (job->pending_calls, node);
+ dbus_pending_call_cancel (call);
+ dbus_pending_call_unref (call);
+ node = next_node;
+ }
+ ply_list_free (job->pending_calls);
+
+ free (job->properties.name);
+ free (job->properties.description);
+ ply_hashtable_foreach (job->instances, free_job_instance, monitor);
+ ply_hashtable_free (job->instances);
+ free (job);
}
static void
add_job (ply_upstart_monitor_t *monitor, const char *path)
{
- ply_upstart_monitor_job_t *job;
- DBusMessage *message;
- const char *interface = UPSTART_INTERFACE_0_6_JOB;
- DBusPendingCall *call;
-
- ply_trace ("adding job: %s", path);
-
- remove_job_internal (monitor, path);
-
- job = calloc (1, sizeof (ply_upstart_monitor_job_t));
- job->monitor = monitor;
- job->properties.name = NULL;
- job->properties.description = NULL;
- job->properties.is_task = false;
- job->instances = ply_hashtable_new (ply_hashtable_string_hash,
- ply_hashtable_string_compare);
- job->pending_calls = ply_list_new ();
-
- ply_hashtable_insert (monitor->jobs, strdup (path), job);
-
- /* Ask Upstart for the name and description properties. */
- ply_trace ("fetching properties of job %s", path);
- message = dbus_message_new_method_call (UPSTART_SERVICE, path,
- DBUS_INTERFACE_PROPERTIES, "GetAll");
- dbus_message_append_args (message,
- DBUS_TYPE_STRING, &interface,
- DBUS_TYPE_INVALID);
- dbus_connection_send_with_reply (monitor->connection, message, &call, -1);
- dbus_message_unref (message);
- if (call != NULL)
- {
- dbus_pending_call_set_notify (call,
- (DBusPendingCallNotifyFunction)
- on_get_all_job_properties_finished,
- job,
- NULL);
- ply_list_append_data (job->pending_calls, call);
- }
-
- /* Ask Upstart for a list of all instances of this job. */
- ply_trace ("calling GetAllInstances on job %s", path);
- message = dbus_message_new_method_call (UPSTART_SERVICE, path,
- UPSTART_INTERFACE_0_6_JOB,
- "GetAllInstances");
- dbus_connection_send_with_reply (monitor->connection, message, &call, -1);
- dbus_message_unref (message);
- if (call != NULL)
- {
- dbus_pending_call_set_notify (call,
- (DBusPendingCallNotifyFunction)
- on_get_all_instances_finished,
- job,
- NULL);
- ply_list_append_data (job->pending_calls, call);
- }
+ ply_upstart_monitor_job_t *job;
+ DBusMessage *message;
+ const char *interface = UPSTART_INTERFACE_0_6_JOB;
+ DBusPendingCall *call;
+
+ ply_trace ("adding job: %s", path);
+
+ remove_job_internal (monitor, path);
+
+ job = calloc (1, sizeof(ply_upstart_monitor_job_t));
+ job->monitor = monitor;
+ job->properties.name = NULL;
+ job->properties.description = NULL;
+ job->properties.is_task = false;
+ job->instances = ply_hashtable_new (ply_hashtable_string_hash,
+ ply_hashtable_string_compare);
+ job->pending_calls = ply_list_new ();
+
+ ply_hashtable_insert (monitor->jobs, strdup (path), job);
+
+ /* Ask Upstart for the name and description properties. */
+ ply_trace ("fetching properties of job %s", path);
+ message = dbus_message_new_method_call (UPSTART_SERVICE, path,
+ DBUS_INTERFACE_PROPERTIES, "GetAll");
+ dbus_message_append_args (message,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_INVALID);
+ dbus_connection_send_with_reply (monitor->connection, message, &call, -1);
+ dbus_message_unref (message);
+ if (call != NULL) {
+ dbus_pending_call_set_notify (call,
+ (DBusPendingCallNotifyFunction)
+ on_get_all_job_properties_finished,
+ job,
+ NULL);
+ ply_list_append_data (job->pending_calls, call);
+ }
+
+ /* Ask Upstart for a list of all instances of this job. */
+ ply_trace ("calling GetAllInstances on job %s", path);
+ message = dbus_message_new_method_call (UPSTART_SERVICE, path,
+ UPSTART_INTERFACE_0_6_JOB,
+ "GetAllInstances");
+ dbus_connection_send_with_reply (monitor->connection, message, &call, -1);
+ dbus_message_unref (message);
+ if (call != NULL) {
+ dbus_pending_call_set_notify (call,
+ (DBusPendingCallNotifyFunction)
+ on_get_all_instances_finished,
+ job,
+ NULL);
+ ply_list_append_data (job->pending_calls, call);
+ }
}
static void
remove_job (ply_upstart_monitor_t *monitor, const char *path)
{
- ply_trace ("removing job: %s", path);
+ ply_trace ("removing job: %s", path);
- remove_job_internal (monitor, path);
+ remove_job_internal (monitor, path);
}
static void
on_get_all_jobs_finished (DBusPendingCall *call,
ply_upstart_monitor_t *monitor)
{
- DBusMessage *reply;
- DBusError error;
- char **jobs;
- int n_jobs, i;
-
- assert (call != NULL);
- assert (monitor != NULL);
-
- reply = dbus_pending_call_steal_reply (call);
- if (reply == NULL)
- return;
- if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
- goto out;
-
- dbus_error_init (&error);
- dbus_message_get_args (reply, &error,
- DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH,
- &jobs, &n_jobs,
- DBUS_TYPE_INVALID);
- if (dbus_error_is_set (&error))
- goto out;
- dbus_error_free (&error);
-
- for (i = 0; i < n_jobs; ++i)
- add_job (monitor, jobs[i]);
-
- dbus_free_string_array (jobs);
+ DBusMessage *reply;
+ DBusError error;
+ char **jobs;
+ int n_jobs, i;
+
+ assert (call != NULL);
+ assert (monitor != NULL);
+
+ reply = dbus_pending_call_steal_reply (call);
+ if (reply == NULL)
+ return;
+ if (dbus_message_get_type (reply) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
+ goto out;
+
+ dbus_error_init (&error);
+ dbus_message_get_args (reply, &error,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH,
+ &jobs, &n_jobs,
+ DBUS_TYPE_INVALID);
+ if (dbus_error_is_set (&error))
+ goto out;
+ dbus_error_free (&error);
+
+ for (i = 0; i < n_jobs; ++i) {
+ add_job (monitor, jobs[i]);
+ }
+
+ dbus_free_string_array (jobs);
out:
- dbus_message_unref (reply);
+ dbus_message_unref (reply);
}
@@ -585,17 +565,17 @@ job_added_handler (DBusConnection *connection,
DBusMessage *message,
ply_upstart_monitor_t *monitor)
{
- DBusError error;
- const char *signal_path;
-
- ply_trace ("got JobAdded");
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_OBJECT_PATH, &signal_path,
- DBUS_TYPE_INVALID))
- add_job (monitor, signal_path);
- dbus_error_free (&error);
- return DBUS_HANDLER_RESULT_HANDLED;
+ DBusError error;
+ const char *signal_path;
+
+ ply_trace ("got JobAdded");
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_OBJECT_PATH, &signal_path,
+ DBUS_TYPE_INVALID))
+ add_job (monitor, signal_path);
+ dbus_error_free (&error);
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
@@ -603,580 +583,566 @@ job_removed_handler (DBusConnection *connection,
DBusMessage *message,
ply_upstart_monitor_t *monitor)
{
- DBusError error;
- const char *signal_path;
-
- ply_trace ("got JobRemoved");
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_OBJECT_PATH, &signal_path,
- DBUS_TYPE_INVALID))
- remove_job (monitor, signal_path);
- dbus_error_free (&error);
- return DBUS_HANDLER_RESULT_HANDLED;
+ DBusError error;
+ const char *signal_path;
+
+ ply_trace ("got JobRemoved");
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_OBJECT_PATH, &signal_path,
+ DBUS_TYPE_INVALID))
+ remove_job (monitor, signal_path);
+ dbus_error_free (&error);
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
instance_added_handler (DBusConnection *connection, DBusMessage *message,
ply_upstart_monitor_t *monitor, const char *path)
{
- DBusError error;
- const char *signal_path;
- ply_upstart_monitor_job_t *job;
-
- ply_trace ("got %s InstanceAdded", path);
- job = ply_hashtable_lookup (monitor->jobs, (void *) path);
- if (job != NULL)
- {
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_OBJECT_PATH, &signal_path,
- DBUS_TYPE_INVALID))
- add_instance (job, signal_path);
- dbus_error_free (&error);
- }
- return DBUS_HANDLER_RESULT_HANDLED;
+ DBusError error;
+ const char *signal_path;
+ ply_upstart_monitor_job_t *job;
+
+ ply_trace ("got %s InstanceAdded", path);
+ job = ply_hashtable_lookup (monitor->jobs, (void *) path);
+ if (job != NULL) {
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_OBJECT_PATH, &signal_path,
+ DBUS_TYPE_INVALID))
+ add_instance (job, signal_path);
+ dbus_error_free (&error);
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
instance_removed_handler (DBusConnection *connection, DBusMessage *message,
ply_upstart_monitor_t *monitor, const char *path)
{
- DBusError error;
- const char *signal_path;
- ply_upstart_monitor_job_t *job;
-
- ply_trace ("got %s InstanceRemoved", path);
- job = ply_hashtable_lookup (monitor->jobs, (void *) path);
- if (job != NULL)
- {
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_OBJECT_PATH, &signal_path,
- DBUS_TYPE_INVALID))
- remove_instance (job, signal_path);
- dbus_error_free (&error);
- }
- return DBUS_HANDLER_RESULT_HANDLED;
+ DBusError error;
+ const char *signal_path;
+ ply_upstart_monitor_job_t *job;
+
+ ply_trace ("got %s InstanceRemoved", path);
+ job = ply_hashtable_lookup (monitor->jobs, (void *) path);
+ if (job != NULL) {
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_OBJECT_PATH, &signal_path,
+ DBUS_TYPE_INVALID))
+ remove_instance (job, signal_path);
+ dbus_error_free (&error);
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
goal_changed_handler (DBusConnection *connection, DBusMessage *message,
ply_upstart_monitor_t *monitor, const char *path)
{
- DBusError error;
- const char *goal;
- ply_upstart_monitor_instance_t *instance;
- char *old_goal;
-
- ply_trace ("got %s GoalChanged", path);
- instance = ply_hashtable_lookup (monitor->all_instances, (void *) path);
- if (instance != NULL)
- {
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_STRING, &goal,
- DBUS_TYPE_INVALID))
- {
- old_goal = instance->properties.goal;
- instance->properties.goal = strdup (goal);
- ply_trace ("goal changed from '%s' to '%s'", old_goal, goal);
- free (old_goal);
+ DBusError error;
+ const char *goal;
+ ply_upstart_monitor_instance_t *instance;
+ char *old_goal;
+
+ ply_trace ("got %s GoalChanged", path);
+ instance = ply_hashtable_lookup (monitor->all_instances, (void *) path);
+ if (instance != NULL) {
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_STRING, &goal,
+ DBUS_TYPE_INVALID)) {
+ old_goal = instance->properties.goal;
+ instance->properties.goal = strdup (goal);
+ ply_trace ("goal changed from '%s' to '%s'", old_goal, goal);
+ free (old_goal);
+ }
+ dbus_error_free (&error);
}
- dbus_error_free (&error);
- }
- return DBUS_HANDLER_RESULT_HANDLED;
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
state_changed_handler (DBusConnection *connection, DBusMessage *message,
ply_upstart_monitor_t *monitor, const char *path)
{
- DBusError error;
- const char *state;
- ply_upstart_monitor_instance_t *instance;
- char *old_state;
-
- ply_trace ("got %s StateChanged", path);
- instance = ply_hashtable_lookup (monitor->all_instances, (void *) path);
- if (instance != NULL)
- {
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_STRING, &state,
- DBUS_TYPE_INVALID))
- {
- old_state = instance->properties.state;
- instance->properties.state = strdup (state);
- ply_trace ("state changed from '%s' to '%s'", old_state, state);
- if (strcmp (state, "starting") == 0)
- {
- /* Clear any old failed information. */
- instance->properties.failed = 0;
- instance->call_failed = false;
- }
- if (instance_is_initialized (instance))
- {
- if (monitor->state_changed_handler)
- monitor->state_changed_handler (monitor->state_changed_data,
- old_state,
- &instance->job->properties,
- &instance->properties);
- }
- else
- instance->state_changed = true;
- free (old_state);
+ DBusError error;
+ const char *state;
+ ply_upstart_monitor_instance_t *instance;
+ char *old_state;
+
+ ply_trace ("got %s StateChanged", path);
+ instance = ply_hashtable_lookup (monitor->all_instances, (void *) path);
+ if (instance != NULL) {
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_STRING, &state,
+ DBUS_TYPE_INVALID)) {
+ old_state = instance->properties.state;
+ instance->properties.state = strdup (state);
+ ply_trace ("state changed from '%s' to '%s'", old_state, state);
+ if (strcmp (state, "starting") == 0) {
+ /* Clear any old failed information. */
+ instance->properties.failed = 0;
+ instance->call_failed = false;
+ }
+ if (instance_is_initialized (instance)) {
+ if (monitor->state_changed_handler) {
+ monitor->state_changed_handler (monitor->state_changed_data,
+ old_state,
+ &instance->job->properties,
+ &instance->properties);
+ }
+ } else {
+ instance->state_changed = true;
+ }
+ free (old_state);
+ }
+ dbus_error_free (&error);
}
- dbus_error_free (&error);
- }
- return DBUS_HANDLER_RESULT_HANDLED;
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
failed_handler (DBusConnection *connection, DBusMessage *message,
ply_upstart_monitor_t *monitor, const char *path)
{
- DBusError error;
- ply_upstart_monitor_instance_t *instance;
- dbus_int32_t failed_status;
-
- ply_trace ("got %s Failed", path);
- instance = ply_hashtable_lookup (monitor->all_instances, (void *) path);
- if (instance != NULL)
- {
- dbus_error_init (&error);
- if (dbus_message_get_args (message, &error,
- DBUS_TYPE_INT32, &failed_status,
- DBUS_TYPE_INVALID))
- {
- instance->properties.failed = failed_status;
- if (instance_is_initialized (instance))
- {
- if (monitor->failed_handler)
- monitor->failed_handler (monitor->failed_data,
- &instance->job->properties,
- &instance->properties,
- (int) failed_status);
- }
- else
- instance->call_failed = true;
+ DBusError error;
+ ply_upstart_monitor_instance_t *instance;
+ dbus_int32_t failed_status;
+
+ ply_trace ("got %s Failed", path);
+ instance = ply_hashtable_lookup (monitor->all_instances, (void *) path);
+ if (instance != NULL) {
+ dbus_error_init (&error);
+ if (dbus_message_get_args (message, &error,
+ DBUS_TYPE_INT32, &failed_status,
+ DBUS_TYPE_INVALID)) {
+ instance->properties.failed = failed_status;
+ if (instance_is_initialized (instance)) {
+ if (monitor->failed_handler) {
+ monitor->failed_handler (monitor->failed_data,
+ &instance->job->properties,
+ &instance->properties,
+ (int) failed_status);
+ }
+ } else {
+ instance->call_failed = true;
+ }
+ }
+ dbus_error_free (&error);
}
- dbus_error_free (&error);
- }
- return DBUS_HANDLER_RESULT_HANDLED;
+ return DBUS_HANDLER_RESULT_HANDLED;
}
static DBusHandlerResult
message_handler (DBusConnection *connection, DBusMessage *message, void *data)
{
- ply_upstart_monitor_t *monitor = data;
- const char *path;
+ ply_upstart_monitor_t *monitor = data;
+ const char *path;
- assert (connection != NULL);
- assert (message != NULL);
- assert (monitor != NULL);
+ assert (connection != NULL);
+ assert (message != NULL);
+ assert (monitor != NULL);
- path = dbus_message_get_path (message);
- if (path == NULL)
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ path = dbus_message_get_path (message);
+ if (path == NULL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6,
- "JobAdded"))
- return job_added_handler (connection, message, monitor);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6,
+ "JobAdded"))
+ return job_added_handler (connection, message, monitor);
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6,
- "JobRemoved"))
- return job_removed_handler (connection, message, monitor);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6,
+ "JobRemoved"))
+ return job_removed_handler (connection, message, monitor);
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_JOB,
- "InstanceAdded"))
- return instance_added_handler (connection, message, monitor, path);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_JOB,
+ "InstanceAdded"))
+ return instance_added_handler (connection, message, monitor, path);
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_JOB,
- "InstanceRemoved"))
- return instance_removed_handler (connection, message, monitor, path);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_JOB,
+ "InstanceRemoved"))
+ return instance_removed_handler (connection, message, monitor, path);
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_INSTANCE,
- "GoalChanged"))
- return goal_changed_handler (connection, message, monitor, path);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_INSTANCE,
+ "GoalChanged"))
+ return goal_changed_handler (connection, message, monitor, path);
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_INSTANCE,
- "StateChanged"))
- return state_changed_handler (connection, message, monitor, path);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_INSTANCE,
+ "StateChanged"))
+ return state_changed_handler (connection, message, monitor, path);
- if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_INSTANCE,
- "Failed"))
- return failed_handler (connection, message, monitor, path);
+ if (dbus_message_is_signal (message, UPSTART_INTERFACE_0_6_INSTANCE,
+ "Failed"))
+ return failed_handler (connection, message, monitor, path);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
ply_upstart_monitor_t *
ply_upstart_monitor_new (ply_event_loop_t *loop)
{
- DBusError error;
- DBusConnection *connection;
- ply_upstart_monitor_t *monitor;
- DBusMessage *message;
- DBusPendingCall *call;
-
- dbus_error_init (&error);
-
- /* Get a connection to the system bus and set it up to listen for messages
- * from Upstart.
- */
- connection = dbus_connection_open (DBUS_ADDRESS_UPSTART, &error);
- if (connection == NULL)
- {
- ply_error ("unable to connect to system bus: %s", error.message);
- dbus_error_free (&error);
- return NULL;
- }
- dbus_error_free (&error);
-
- monitor = calloc (1, sizeof (ply_upstart_monitor_t));
- monitor->connection = connection;
- monitor->loop = NULL;
- monitor->jobs = ply_hashtable_new (ply_hashtable_string_hash,
- ply_hashtable_string_compare);
- monitor->all_instances = ply_hashtable_new (ply_hashtable_string_hash,
- ply_hashtable_string_compare);
- monitor->state_changed_handler = NULL;
- monitor->state_changed_data = NULL;
- monitor->failed_handler = NULL;
- monitor->failed_data = NULL;
- monitor->dispatch_fd = -1;
-
- if (!dbus_connection_add_filter (connection, message_handler, monitor, NULL))
- {
- ply_error ("unable to add filter to system bus connection");
- ply_upstart_monitor_free (monitor);
- return NULL;
- }
-
- ply_trace ("calling GetAllJobs");
- message = dbus_message_new_method_call (UPSTART_SERVICE, UPSTART_PATH,
- UPSTART_INTERFACE_0_6,
- "GetAllJobs");
- dbus_connection_send_with_reply (monitor->connection, message, &call, -1);
- dbus_message_unref (message);
- if (call != NULL)
- dbus_pending_call_set_notify (call,
- (DBusPendingCallNotifyFunction)
- on_get_all_jobs_finished,
- monitor, NULL);
-
- if (loop != NULL)
- ply_upstart_monitor_connect_to_event_loop (monitor, loop);
-
- return monitor;
+ DBusError error;
+ DBusConnection *connection;
+ ply_upstart_monitor_t *monitor;
+ DBusMessage *message;
+ DBusPendingCall *call;
+
+ dbus_error_init (&error);
+
+ /* Get a connection to the system bus and set it up to listen for messages
+ * from Upstart.
+ */
+ connection = dbus_connection_open (DBUS_ADDRESS_UPSTART, &error);
+ if (connection == NULL) {
+ ply_error ("unable to connect to system bus: %s", error.message);
+ dbus_error_free (&error);
+ return NULL;
+ }
+ dbus_error_free (&error);
+
+ monitor = calloc (1, sizeof(ply_upstart_monitor_t));
+ monitor->connection = connection;
+ monitor->loop = NULL;
+ monitor->jobs = ply_hashtable_new (ply_hashtable_string_hash,
+ ply_hashtable_string_compare);
+ monitor->all_instances = ply_hashtable_new (ply_hashtable_string_hash,
+ ply_hashtable_string_compare);
+ monitor->state_changed_handler = NULL;
+ monitor->state_changed_data = NULL;
+ monitor->failed_handler = NULL;
+ monitor->failed_data = NULL;
+ monitor->dispatch_fd = -1;
+
+ if (!dbus_connection_add_filter (connection, message_handler, monitor, NULL)) {
+ ply_error ("unable to add filter to system bus connection");
+ ply_upstart_monitor_free (monitor);
+ return NULL;
+ }
+
+ ply_trace ("calling GetAllJobs");
+ message = dbus_message_new_method_call (UPSTART_SERVICE, UPSTART_PATH,
+ UPSTART_INTERFACE_0_6,
+ "GetAllJobs");
+ dbus_connection_send_with_reply (monitor->connection, message, &call, -1);
+ dbus_message_unref (message);
+ if (call != NULL) {
+ dbus_pending_call_set_notify (call,
+ (DBusPendingCallNotifyFunction)
+ on_get_all_jobs_finished,
+ monitor, NULL);
+ }
+
+ if (loop != NULL)
+ ply_upstart_monitor_connect_to_event_loop (monitor, loop);
+
+ return monitor;
}
void
ply_upstart_monitor_free (ply_upstart_monitor_t *monitor)
{
- if (monitor == NULL)
- return;
-
- ply_hashtable_free (monitor->all_instances);
- ply_hashtable_free (monitor->jobs);
- dbus_connection_unref (monitor->connection);
- if (monitor->dispatch_fd >= 0)
- close (monitor->dispatch_fd);
- free (monitor);
+ if (monitor == NULL)
+ return;
+
+ ply_hashtable_free (monitor->all_instances);
+ ply_hashtable_free (monitor->jobs);
+ dbus_connection_unref (monitor->connection);
+ if (monitor->dispatch_fd >= 0)
+ close (monitor->dispatch_fd);
+ free (monitor);
}
static void
read_watch_handler (void *data, int fd)
{
- DBusWatch *watch = data;
+ DBusWatch *watch = data;
- assert (watch != NULL);
+ assert (watch != NULL);
- dbus_watch_handle (watch, DBUS_WATCH_READABLE);
+ dbus_watch_handle (watch, DBUS_WATCH_READABLE);
}
static void
write_watch_handler (void *data, int fd)
{
- DBusWatch *watch = data;
+ DBusWatch *watch = data;
- assert (watch != NULL);
+ assert (watch != NULL);
- dbus_watch_handle (watch, DBUS_WATCH_WRITABLE);
+ dbus_watch_handle (watch, DBUS_WATCH_WRITABLE);
}
static dbus_bool_t
add_watch (DBusWatch *watch, void *data)
{
- ply_upstart_monitor_t *monitor = data;
- unsigned int flags;
- int fd;
- ply_event_loop_fd_status_t status;
- ply_fd_watch_t *read_watch_event = NULL, *write_watch_event = NULL;
-
- assert (monitor != NULL);
- assert (watch != NULL);
-
- if (!dbus_watch_get_enabled (watch))
- return TRUE;
-
- assert (dbus_watch_get_data (watch) == NULL);
-
- flags = dbus_watch_get_flags (watch);
- fd = dbus_watch_get_unix_fd (watch);
-
- if (flags & DBUS_WATCH_READABLE)
- {
- status = PLY_EVENT_LOOP_FD_STATUS_HAS_DATA;
- read_watch_event = ply_event_loop_watch_fd (monitor->loop, fd, status,
- read_watch_handler, NULL,
- watch);
- if (read_watch_event == NULL)
- return FALSE;
- dbus_watch_set_data (watch, read_watch_event, NULL);
- }
-
- if (flags & DBUS_WATCH_WRITABLE)
- {
- status = PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA;
- write_watch_event = ply_event_loop_watch_fd (monitor->loop, fd, status,
- write_watch_handler, NULL,
- watch);
- if (write_watch_event == NULL)
- {
- if (read_watch_event != NULL)
- ply_event_loop_stop_watching_fd (monitor->loop, read_watch_event);
- return FALSE;
+ ply_upstart_monitor_t *monitor = data;
+ unsigned int flags;
+ int fd;
+ ply_event_loop_fd_status_t status;
+ ply_fd_watch_t *read_watch_event = NULL, *write_watch_event = NULL;
+
+ assert (monitor != NULL);
+ assert (watch != NULL);
+
+ if (!dbus_watch_get_enabled (watch))
+ return TRUE;
+
+ assert (dbus_watch_get_data (watch) == NULL);
+
+ flags = dbus_watch_get_flags (watch);
+ fd = dbus_watch_get_unix_fd (watch);
+
+ if (flags & DBUS_WATCH_READABLE) {
+ status = PLY_EVENT_LOOP_FD_STATUS_HAS_DATA;
+ read_watch_event = ply_event_loop_watch_fd (monitor->loop, fd, status,
+ read_watch_handler, NULL,
+ watch);
+ if (read_watch_event == NULL)
+ return FALSE;
+ dbus_watch_set_data (watch, read_watch_event, NULL);
}
- dbus_watch_set_data (watch, write_watch_event, NULL);
- }
- return TRUE;
+ if (flags & DBUS_WATCH_WRITABLE) {
+ status = PLY_EVENT_LOOP_FD_STATUS_CAN_TAKE_DATA;
+ write_watch_event = ply_event_loop_watch_fd (monitor->loop, fd, status,
+ write_watch_handler, NULL,
+ watch);
+ if (write_watch_event == NULL) {
+ if (read_watch_event != NULL)
+ ply_event_loop_stop_watching_fd (monitor->loop, read_watch_event);
+ return FALSE;
+ }
+ dbus_watch_set_data (watch, write_watch_event, NULL);
+ }
+
+ return TRUE;
}
static void
remove_watch (DBusWatch *watch, void *data)
{
- ply_upstart_monitor_t *monitor = data;
- ply_fd_watch_t *watch_event;
+ ply_upstart_monitor_t *monitor = data;
+ ply_fd_watch_t *watch_event;
- assert (monitor != NULL);
- assert (watch != NULL);
+ assert (monitor != NULL);
+ assert (watch != NULL);
- watch_event = dbus_watch_get_data (watch);
- if (watch_event == NULL)
- return;
+ watch_event = dbus_watch_get_data (watch);
+ if (watch_event == NULL)
+ return;
- ply_event_loop_stop_watching_fd (monitor->loop, watch_event);
+ ply_event_loop_stop_watching_fd (monitor->loop, watch_event);
- dbus_watch_set_data (watch, NULL, NULL);
+ dbus_watch_set_data (watch, NULL, NULL);
}
static void
toggled_watch (DBusWatch *watch, void *data)
{
- if (dbus_watch_get_enabled (watch))
- add_watch (watch, data);
- else
- remove_watch (watch, data);
+ if (dbus_watch_get_enabled (watch))
+ add_watch (watch, data);
+ else
+ remove_watch (watch, data);
}
static ply_upstart_monitor_timeout_t *
timeout_user_data_new (ply_upstart_monitor_t *monitor, DBusTimeout *timeout)
{
- ply_upstart_monitor_timeout_t *monitor_timeout;
+ ply_upstart_monitor_timeout_t *monitor_timeout;
- monitor_timeout = calloc (1, sizeof (ply_upstart_monitor_timeout_t));
- monitor_timeout->monitor = monitor;
- monitor_timeout->timeout = timeout;
+ monitor_timeout = calloc (1, sizeof(ply_upstart_monitor_timeout_t));
+ monitor_timeout->monitor = monitor;
+ monitor_timeout->timeout = timeout;
- return monitor_timeout;
+ return monitor_timeout;
}
static void
timeout_user_data_free (void *data)
{
- ply_upstart_monitor_timeout_t *monitor_timeout = data;
+ ply_upstart_monitor_timeout_t *monitor_timeout = data;
- free (monitor_timeout);
+ free (monitor_timeout);
}
static void
timeout_handler (void *data, ply_event_loop_t *loop)
{
- ply_upstart_monitor_timeout_t *monitor_timeout = data;
+ ply_upstart_monitor_timeout_t *monitor_timeout = data;
- assert (monitor_timeout != NULL);
+ assert (monitor_timeout != NULL);
- dbus_timeout_handle (monitor_timeout->timeout);
+ dbus_timeout_handle (monitor_timeout->timeout);
}
static dbus_bool_t
add_timeout (DBusTimeout *timeout, void *data)
{
- ply_upstart_monitor_t *monitor = data;
- int interval;
- ply_upstart_monitor_timeout_t *monitor_timeout;
+ ply_upstart_monitor_t *monitor = data;
+ int interval;
+ ply_upstart_monitor_timeout_t *monitor_timeout;
- assert (monitor != NULL);
- assert (timeout != NULL);
+ assert (monitor != NULL);
+ assert (timeout != NULL);
- if (!dbus_timeout_get_enabled (timeout))
- return TRUE;
+ if (!dbus_timeout_get_enabled (timeout))
+ return TRUE;
- interval = dbus_timeout_get_interval (timeout) * 1000;
+ interval = dbus_timeout_get_interval (timeout) * 1000;
- monitor_timeout = timeout_user_data_new (monitor, timeout);
+ monitor_timeout = timeout_user_data_new (monitor, timeout);
- ply_event_loop_watch_for_timeout (monitor->loop, (double) interval,
- timeout_handler, monitor_timeout);
+ ply_event_loop_watch_for_timeout (monitor->loop, (double) interval,
+ timeout_handler, monitor_timeout);
- dbus_timeout_set_data (timeout, monitor_timeout, timeout_user_data_free);
+ dbus_timeout_set_data (timeout, monitor_timeout, timeout_user_data_free);
- return TRUE;
+ return TRUE;
}
static void
remove_timeout (DBusTimeout *timeout, void *data)
{
- ply_upstart_monitor_t *monitor = data;
- ply_upstart_monitor_timeout_t *monitor_timeout;
+ ply_upstart_monitor_t *monitor = data;
+ ply_upstart_monitor_timeout_t *monitor_timeout;
- assert (monitor != NULL);
- assert (timeout != NULL);
+ assert (monitor != NULL);
+ assert (timeout != NULL);
- monitor_timeout = dbus_timeout_get_data (timeout);
- if (monitor_timeout == NULL)
- return;
+ monitor_timeout = dbus_timeout_get_data (timeout);
+ if (monitor_timeout == NULL)
+ return;
- ply_event_loop_stop_watching_for_timeout (monitor->loop,
- timeout_handler, monitor_timeout);
+ ply_event_loop_stop_watching_for_timeout (monitor->loop,
+ timeout_handler, monitor_timeout);
- dbus_timeout_set_data (timeout, NULL, NULL);
+ dbus_timeout_set_data (timeout, NULL, NULL);
}
static void
toggled_timeout (DBusTimeout *timeout, void *data)
{
- if (dbus_timeout_get_enabled (timeout))
- add_timeout (timeout, data);
- else
- remove_timeout (timeout, data);
+ if (dbus_timeout_get_enabled (timeout))
+ add_timeout (timeout, data);
+ else
+ remove_timeout (timeout, data);
}
static void
dispatch_status (DBusConnection *connection, DBusDispatchStatus new_status,
void *data)
{
- ply_upstart_monitor_t *monitor = data;
- uint64_t event_payload;
+ ply_upstart_monitor_t *monitor = data;
+ uint64_t event_payload;
- assert (monitor != NULL);
+ assert (monitor != NULL);
- if (new_status != DBUS_DISPATCH_DATA_REMAINS)
- return;
+ if (new_status != DBUS_DISPATCH_DATA_REMAINS)
+ return;
- /* wake up event loop */
- event_payload = 1;
- ply_write (monitor->dispatch_fd, &event_payload, sizeof (event_payload));
+ /* wake up event loop */
+ event_payload = 1;
+ ply_write (monitor->dispatch_fd, &event_payload, sizeof(event_payload));
}
static void
dispatch (void *data, int fd)
{
- ply_upstart_monitor_t *monitor = data;
- uint64_t event_payload;
+ ply_upstart_monitor_t *monitor = data;
+ uint64_t event_payload;
- assert (monitor != NULL);
+ assert (monitor != NULL);
- /* reset eventfd to zero */
- ply_read (fd, &event_payload, sizeof (event_payload));
+ /* reset eventfd to zero */
+ ply_read (fd, &event_payload, sizeof(event_payload));
- while (dbus_connection_dispatch (monitor->connection) ==
- DBUS_DISPATCH_DATA_REMAINS)
- ;
+ while (dbus_connection_dispatch (monitor->connection) ==
+ DBUS_DISPATCH_DATA_REMAINS) {
+ }
}
bool
-ply_upstart_monitor_connect_to_event_loop (ply_upstart_monitor_t *monitor,
- ply_event_loop_t *loop)
+ply_upstart_monitor_connect_to_event_loop (ply_upstart_monitor_t *monitor,
+ ply_event_loop_t *loop)
{
- ply_fd_watch_t *dispatch_event = NULL;
- uint64_t event_payload;
-
- assert (monitor != NULL);
-
- monitor->loop = loop;
- monitor->dispatch_fd = -1;
-
- if (!dbus_connection_set_watch_functions (monitor->connection,
- add_watch,
- remove_watch,
- toggled_watch,
- monitor, NULL))
- goto err;
-
- if (!dbus_connection_set_timeout_functions (monitor->connection,
- add_timeout,
- remove_timeout,
- toggled_timeout,
- monitor, NULL))
- goto err;
-
- monitor->dispatch_fd = eventfd (0, EFD_CLOEXEC | EFD_NONBLOCK);
- if (monitor->dispatch_fd < 0)
- goto err;
- /* make sure we wake up to dispatch the first time through */
- event_payload = 1;
- ply_write (monitor->dispatch_fd, &event_payload, sizeof (event_payload));
-
- dispatch_event = ply_event_loop_watch_fd (monitor->loop,
- monitor->dispatch_fd,
- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
- dispatch, NULL, monitor);
- if (dispatch_event == NULL)
- goto err;
-
- dbus_connection_set_dispatch_status_function (monitor->connection,
- dispatch_status,
- monitor, NULL);
-
- return true;
+ ply_fd_watch_t *dispatch_event = NULL;
+ uint64_t event_payload;
+
+ assert (monitor != NULL);
+
+ monitor->loop = loop;
+ monitor->dispatch_fd = -1;
+
+ if (!dbus_connection_set_watch_functions (monitor->connection,
+ add_watch,
+ remove_watch,
+ toggled_watch,
+ monitor, NULL))
+ goto err;
+
+ if (!dbus_connection_set_timeout_functions (monitor->connection,
+ add_timeout,
+ remove_timeout,
+ toggled_timeout,
+ monitor, NULL))
+ goto err;
+
+ monitor->dispatch_fd = eventfd (0, EFD_CLOEXEC | EFD_NONBLOCK);
+ if (monitor->dispatch_fd < 0)
+ goto err;
+ /* make sure we wake up to dispatch the first time through */
+ event_payload = 1;
+ ply_write (monitor->dispatch_fd, &event_payload, sizeof(event_payload));
+
+ dispatch_event = ply_event_loop_watch_fd (monitor->loop,
+ monitor->dispatch_fd,
+ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
+ dispatch, NULL, monitor);
+ if (dispatch_event == NULL)
+ goto err;
+
+ dbus_connection_set_dispatch_status_function (monitor->connection,
+ dispatch_status,
+ monitor, NULL);
+
+ return true;
err:
- dbus_connection_set_watch_functions (monitor->connection,
- NULL, NULL, NULL, NULL, NULL);
- dbus_connection_set_timeout_functions (monitor->connection,
- NULL, NULL, NULL, NULL, NULL);
- dbus_connection_set_dispatch_status_function (monitor->connection,
- NULL, NULL, NULL);
- if (dispatch_event != NULL)
- ply_event_loop_stop_watching_fd (monitor->loop, dispatch_event);
- if (monitor->dispatch_fd >= 0)
- {
- close (monitor->dispatch_fd);
- monitor->dispatch_fd = -1;
- }
- monitor->loop = NULL;
- return false;
+ dbus_connection_set_watch_functions (monitor->connection,
+ NULL, NULL, NULL, NULL, NULL);
+ dbus_connection_set_timeout_functions (monitor->connection,
+ NULL, NULL, NULL, NULL, NULL);
+ dbus_connection_set_dispatch_status_function (monitor->connection,
+ NULL, NULL, NULL);
+ if (dispatch_event != NULL)
+ ply_event_loop_stop_watching_fd (monitor->loop, dispatch_event);
+ if (monitor->dispatch_fd >= 0) {
+ close (monitor->dispatch_fd);
+ monitor->dispatch_fd = -1;
+ }
+ monitor->loop = NULL;
+ return false;
}
void
-ply_upstart_monitor_add_state_changed_handler (ply_upstart_monitor_t *monitor,
- ply_upstart_monitor_state_changed_handler_t handler,
- void *user_data)
+ply_upstart_monitor_add_state_changed_handler (ply_upstart_monitor_t *monitor,
+ ply_upstart_monitor_state_changed_handler_t handler,
+ void *user_data)
{
- monitor->state_changed_handler = handler;
- monitor->state_changed_data = user_data;
+ monitor->state_changed_handler = handler;
+ monitor->state_changed_data = user_data;
}
void
-ply_upstart_monitor_add_failed_handler (ply_upstart_monitor_t *monitor,
- ply_upstart_monitor_failed_handler_t handler,
- void *user_data)
+ply_upstart_monitor_add_failed_handler (ply_upstart_monitor_t *monitor,
+ ply_upstart_monitor_failed_handler_t handler,
+ void *user_data)
{
- monitor->failed_handler = handler;
- monitor->failed_data = user_data;
+ monitor->failed_handler = handler;
+ monitor->failed_data = user_data;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/upstart-bridge/ply-upstart-monitor.h b/src/upstart-bridge/ply-upstart-monitor.h
index 810e57a9..be899a38 100644
--- a/src/upstart-bridge/ply-upstart-monitor.h
+++ b/src/upstart-bridge/ply-upstart-monitor.h
@@ -28,40 +28,42 @@
typedef struct _ply_upstart_monitor ply_upstart_monitor_t;
-typedef struct {
- char *name;
- char *description;
- bool is_task;
+typedef struct
+{
+ char *name;
+ char *description;
+ bool is_task;
} ply_upstart_monitor_job_properties_t;
-typedef struct {
- char *name;
- char *goal;
- char *state;
- uint32_t failed : 1;
+typedef struct
+{
+ char *name;
+ char *goal;
+ char *state;
+ uint32_t failed : 1;
} ply_upstart_monitor_instance_properties_t;
-typedef void (* ply_upstart_monitor_state_changed_handler_t) (void *user_data,
- const char *old_state,
- ply_upstart_monitor_job_properties_t *job,
- ply_upstart_monitor_instance_properties_t *instance);
+typedef void (*ply_upstart_monitor_state_changed_handler_t) (void *user_data,
+ const char *old_state,
+ ply_upstart_monitor_job_properties_t *job,
+ ply_upstart_monitor_instance_properties_t *instance);
-typedef void (* ply_upstart_monitor_failed_handler_t) (void *user_data,
- ply_upstart_monitor_job_properties_t *job,
- ply_upstart_monitor_instance_properties_t *instance,
- int status);
+typedef void (*ply_upstart_monitor_failed_handler_t) (void *user_data,
+ ply_upstart_monitor_job_properties_t *job,
+ ply_upstart_monitor_instance_properties_t *instance,
+ int status);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_upstart_monitor_t *ply_upstart_monitor_new (ply_event_loop_t *loop);
void ply_upstart_monitor_free (ply_upstart_monitor_t *upstart);
-bool ply_upstart_monitor_connect_to_event_loop (ply_upstart_monitor_t *upstart,
- ply_event_loop_t *loop);
-void ply_upstart_monitor_add_state_changed_handler (ply_upstart_monitor_t *upstart,
- ply_upstart_monitor_state_changed_handler_t handler,
- void *user_data);
-void ply_upstart_monitor_add_failed_handler (ply_upstart_monitor_t *upstart,
- ply_upstart_monitor_failed_handler_t handler,
- void *user_data);
+bool ply_upstart_monitor_connect_to_event_loop (ply_upstart_monitor_t *upstart,
+ ply_event_loop_t *loop);
+void ply_upstart_monitor_add_state_changed_handler (ply_upstart_monitor_t *upstart,
+ ply_upstart_monitor_state_changed_handler_t handler,
+ void *user_data);
+void ply_upstart_monitor_add_failed_handler (ply_upstart_monitor_t *upstart,
+ ply_upstart_monitor_failed_handler_t handler,
+ void *user_data);
#endif
#endif
diff --git a/src/upstart-bridge/plymouth-upstart-bridge.c b/src/upstart-bridge/plymouth-upstart-bridge.c
index 1f86caae..c3733de3 100644
--- a/src/upstart-bridge/plymouth-upstart-bridge.c
+++ b/src/upstart-bridge/plymouth-upstart-bridge.c
@@ -44,10 +44,10 @@
typedef struct
{
- ply_event_loop_t *loop;
- ply_boot_client_t *client;
- ply_upstart_monitor_t *upstart;
- ply_command_parser_t *command_parser;
+ ply_event_loop_t *loop;
+ ply_boot_client_t *client;
+ ply_upstart_monitor_t *upstart;
+ ply_command_parser_t *command_parser;
} state_t;
#ifndef TERMINAL_COLOR_RED
@@ -60,84 +60,84 @@ typedef struct
static const char *
get_string_capability (const char *name)
{
- const char *value;
+ const char *value;
- value = tigetstr ((char *) name);
- if (value == (const char *) -1)
- value = NULL;
+ value = tigetstr ((char *) name);
+ if (value == (const char *) -1)
+ value = NULL;
- return value;
+ return value;
}
static bool
terminal_ignores_new_line_after_80_chars (void)
{
- return tigetflag ((char *) "xenl") != 0;
+ return tigetflag ((char *) "xenl") != 0;
}
static int
get_number_of_columns (void)
{
- int number_of_columns;
+ int number_of_columns;
- number_of_columns = tigetnum ((char *) "cols");
+ number_of_columns = tigetnum ((char *) "cols");
- return number_of_columns;
+ return number_of_columns;
}
static bool
can_set_cursor_column (void)
{
- const char *capability;
+ const char *capability;
- capability = get_string_capability ("hpa");
+ capability = get_string_capability ("hpa");
- return capability != NULL;
+ return capability != NULL;
}
static void
set_cursor_column (int column)
{
- const char *capability;
- const char *terminal_string;
+ const char *capability;
+ const char *terminal_string;
- capability = get_string_capability ("hpa");
- terminal_string = tiparm (capability, column);
- fputs (terminal_string, stdout);
+ capability = get_string_capability ("hpa");
+ terminal_string = tiparm (capability, column);
+ fputs (terminal_string, stdout);
}
static bool
can_set_fg_color (void)
{
- const char *capability;
+ const char *capability;
- capability = get_string_capability ("setaf");
+ capability = get_string_capability ("setaf");
- return capability != NULL;
+ return capability != NULL;
}
static void
set_fg_color (int color)
{
- const char *capability;
- const char *terminal_string;
+ const char *capability;
+ const char *terminal_string;
- capability = get_string_capability ("setaf");
- terminal_string = tiparm (capability, color);
- fputs (terminal_string, stdout);
+ capability = get_string_capability ("setaf");
+ terminal_string = tiparm (capability, color);
+ fputs (terminal_string, stdout);
}
static void
unset_fg_color (void)
{
- const char *terminal_string;
+ const char *terminal_string;
- terminal_string = get_string_capability ("op");
+ terminal_string = get_string_capability ("op");
- if (terminal_string == NULL)
- return;
+ if (terminal_string == NULL)
+ return;
- fputs (terminal_string, stdout);
+ fputs (terminal_string, stdout);
}
static void
@@ -147,53 +147,49 @@ update_status (state_t *state,
const char *action,
bool is_okay)
{
- if (job->description == NULL)
- return;
+ if (job->description == NULL)
+ return;
- printf (" * %s%s%s",
- action ? action : "", action ? " " : "", job->description);
+ printf (" * %s%s%s",
+ action ? action : "", action ? " " : "", job->description);
- if (terminal_ignores_new_line_after_80_chars () && can_set_cursor_column ())
- {
- int number_of_columns, column;
+ if (terminal_ignores_new_line_after_80_chars () && can_set_cursor_column ()) {
+ int number_of_columns, column;
- number_of_columns = get_number_of_columns ();
+ number_of_columns = get_number_of_columns ();
- if (number_of_columns < (int) strlen("[fail]"))
- number_of_columns = 80;
+ if (number_of_columns < (int) strlen ("[fail]"))
+ number_of_columns = 80;
- column = number_of_columns - strlen ("[fail]") - 1;
+ column = number_of_columns - strlen ("[fail]") - 1;
- set_cursor_column (column);
+ set_cursor_column (column);
- if (is_okay)
- puts ("[ OK ]");
- else
- {
- bool supports_color;
+ if (is_okay) {
+ puts ("[ OK ]");
+ } else {
+ bool supports_color;
- supports_color = can_set_fg_color ();
+ supports_color = can_set_fg_color ();
- fputs ("[", stdout);
+ fputs ("[", stdout);
- if (supports_color)
- set_fg_color (TERMINAL_COLOR_RED);
+ if (supports_color)
+ set_fg_color (TERMINAL_COLOR_RED);
- fputs ("fail", stdout);
+ fputs ("fail", stdout);
- if (supports_color)
- unset_fg_color ();
+ if (supports_color)
+ unset_fg_color ();
- puts ("]");
+ puts ("]");
+ }
+ } else {
+ if (is_okay)
+ puts (" ...done.");
+ else
+ puts (" ...fail!");
}
- }
- else
- {
- if (is_okay)
- puts (" ...done.");
- else
- puts (" ...fail!");
- }
}
static void
@@ -202,17 +198,16 @@ on_failed (void *data,
ply_upstart_monitor_instance_properties_t *instance,
int status)
{
- state_t *state = data;
-
- if (job->is_task)
- update_status (state, job, instance, NULL, false);
- else
- {
- if (strcmp (instance->goal, "start") == 0)
- update_status (state, job, instance, "Starting", false);
- else if (strcmp (instance->goal, "stop") == 0)
- update_status (state, job, instance, "Stopping", false);
- }
+ state_t *state = data;
+
+ if (job->is_task) {
+ update_status (state, job, instance, NULL, false);
+ } else {
+ if (strcmp (instance->goal, "start") == 0)
+ update_status (state, job, instance, "Starting", false);
+ else if (strcmp (instance->goal, "stop") == 0)
+ update_status (state, job, instance, "Stopping", false);
+ }
}
static void
@@ -221,119 +216,110 @@ on_state_changed (state_t *state,
ply_upstart_monitor_job_properties_t *job,
ply_upstart_monitor_instance_properties_t *instance)
{
- if (instance->failed)
- return;
-
- if (job->is_task)
- {
- if (strcmp (instance->state, "waiting") == 0)
- update_status (state, job, instance, NULL, true);
- }
- else
- {
- if (strcmp (instance->goal, "start") == 0)
- {
- if (strcmp (instance->state, "running") == 0)
- update_status (state, job, instance, "Starting", true);
- }
- else if (strcmp (instance->goal, "stop") == 0)
- {
- if (strcmp (instance->state, "waiting") == 0)
- update_status (state, job, instance, "Stopping", true);
+ if (instance->failed)
+ return;
+
+ if (job->is_task) {
+ if (strcmp (instance->state, "waiting") == 0)
+ update_status (state, job, instance, NULL, true);
+ } else {
+ if (strcmp (instance->goal, "start") == 0) {
+ if (strcmp (instance->state, "running") == 0)
+ update_status (state, job, instance, "Starting", true);
+ } else if (strcmp (instance->goal, "stop") == 0) {
+ if (strcmp (instance->state, "waiting") == 0)
+ update_status (state, job, instance, "Stopping", true);
+ }
}
- }
}
static void
on_disconnect (state_t *state)
{
- ply_trace ("disconnected from boot status daemon");
- ply_event_loop_exit (state->loop, 0);
+ ply_trace ("disconnected from boot status daemon");
+ ply_event_loop_exit (state->loop, 0);
}
int
main (int argc,
char **argv)
{
- state_t state = { 0 };
- bool should_help, should_be_verbose;
- bool is_connected;
- int exit_code;
+ state_t state = { 0 };
+ bool should_help, should_be_verbose;
+ bool is_connected;
+ int exit_code;
- exit_code = 0;
+ exit_code = 0;
- signal (SIGPIPE, SIG_IGN);
+ signal (SIGPIPE, SIG_IGN);
- state.loop = ply_event_loop_new ();
- state.client = ply_boot_client_new ();
- state.command_parser = ply_command_parser_new ("plymouth-upstart-bridge", "Upstart job state bridge");
+ state.loop = ply_event_loop_new ();
+ state.client = ply_boot_client_new ();
+ state.command_parser = ply_command_parser_new ("plymouth-upstart-bridge", "Upstart job state bridge");
- ply_command_parser_add_options (state.command_parser,
- "help", "This help message", PLY_COMMAND_OPTION_TYPE_FLAG,
- "debug", "Enable verbose debug logging", PLY_COMMAND_OPTION_TYPE_FLAG,
- NULL);
+ ply_command_parser_add_options (state.command_parser,
+ "help", "This help message", PLY_COMMAND_OPTION_TYPE_FLAG,
+ "debug", "Enable verbose debug logging", PLY_COMMAND_OPTION_TYPE_FLAG,
+ NULL);
- if (!ply_command_parser_parse_arguments (state.command_parser, state.loop, argv, argc))
- {
- char *help_string;
+ if (!ply_command_parser_parse_arguments (state.command_parser, state.loop, argv, argc)) {
+ char *help_string;
- help_string = ply_command_parser_get_help_string (state.command_parser);
+ help_string = ply_command_parser_get_help_string (state.command_parser);
- ply_error ("%s", help_string);
+ ply_error ("%s", help_string);
- free (help_string);
- return 1;
- }
+ free (help_string);
+ return 1;
+ }
- ply_command_parser_get_options (state.command_parser,
- "help", &should_help,
- "debug", &should_be_verbose,
- NULL);
+ ply_command_parser_get_options (state.command_parser,
+ "help", &should_help,
+ "debug", &should_be_verbose,
+ NULL);
- if (should_help)
- {
- char *help_string;
+ if (should_help) {
+ char *help_string;
- help_string = ply_command_parser_get_help_string (state.command_parser);
+ help_string = ply_command_parser_get_help_string (state.command_parser);
- puts (help_string);
+ puts (help_string);
- free (help_string);
- return 0;
- }
+ free (help_string);
+ return 0;
+ }
- if (should_be_verbose && !ply_is_tracing ())
- ply_toggle_tracing ();
+ if (should_be_verbose && !ply_is_tracing ())
+ ply_toggle_tracing ();
- /* Don't bail on dummy/hardcopy terminals */
- int errret=0;
- setupterm (NULL, STDOUT_FILENO, &errret);
+ /* Don't bail on dummy/hardcopy terminals */
+ int errret = 0;
+ setupterm (NULL, STDOUT_FILENO, &errret);
- is_connected = ply_boot_client_connect (state.client,
- (ply_boot_client_disconnect_handler_t)
- on_disconnect, &state);
- if (!is_connected)
- {
- ply_trace ("daemon not running");
- return 1;
- }
+ is_connected = ply_boot_client_connect (state.client,
+ (ply_boot_client_disconnect_handler_t)
+ on_disconnect, &state);
+ if (!is_connected) {
+ ply_trace ("daemon not running");
+ return 1;
+ }
- ply_boot_client_attach_to_event_loop (state.client, state.loop);
- state.upstart = ply_upstart_monitor_new (state.loop);
- if (!state.upstart)
- return 1;
- ply_upstart_monitor_add_state_changed_handler (state.upstart,
- (ply_upstart_monitor_state_changed_handler_t)
- on_state_changed, &state);
- ply_upstart_monitor_add_failed_handler (state.upstart, on_failed, &state);
+ ply_boot_client_attach_to_event_loop (state.client, state.loop);
+ state.upstart = ply_upstart_monitor_new (state.loop);
+ if (!state.upstart)
+ return 1;
+ ply_upstart_monitor_add_state_changed_handler (state.upstart,
+ (ply_upstart_monitor_state_changed_handler_t)
+ on_state_changed, &state);
+ ply_upstart_monitor_add_failed_handler (state.upstart, on_failed, &state);
- exit_code = ply_event_loop_run (state.loop);
+ exit_code = ply_event_loop_run (state.loop);
- ply_upstart_monitor_free (state.upstart);
- ply_boot_client_free (state.client);
+ ply_upstart_monitor_free (state.upstart);
+ ply_boot_client_free (state.client);
- ply_event_loop_free (state.loop);
+ ply_event_loop_free (state.loop);
- return exit_code;
+ return exit_code;
}
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/viewer/plymouth-log-viewer.c b/src/viewer/plymouth-log-viewer.c
index ca54e0f0..ea407749 100644
--- a/src/viewer/plymouth-log-viewer.c
+++ b/src/viewer/plymouth-log-viewer.c
@@ -50,302 +50,285 @@
static gboolean show_icon = FALSE;
static gboolean force = FALSE;
-static GOptionEntry entries[] =
+static GOptionEntry entries[] =
{
- { "icon", 0, 0, G_OPTION_ARG_NONE, &show_icon, N_("Show a status icon if there are errors"), NULL },
- { "force", 0, 0, G_OPTION_ARG_NONE, &force, N_("Show the icon even without errors"), NULL },
- { NULL }
+ { "icon", 0, 0, G_OPTION_ARG_NONE, &show_icon, N_ ("Show a status icon if there are errors"), NULL },
+ { "force", 0, 0, G_OPTION_ARG_NONE, &force, N_ ("Show the icon even without errors"), NULL },
+ { NULL }
};
static void
-popup_menu (GtkStatusIcon *icon,
+popup_menu (GtkStatusIcon *icon,
guint button,
guint activate_time,
gpointer user_data)
{
- GtkWidget *menu = user_data;
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- gtk_status_icon_position_menu, icon,
- button, activate_time);
+ GtkWidget *menu = user_data;
+
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
+ gtk_status_icon_position_menu, icon,
+ button, activate_time);
}
static void
-activate_icon (GtkStatusIcon *icon,
+activate_icon (GtkStatusIcon *icon,
gpointer user_data)
{
- GtkWidget *window = user_data;
+ GtkWidget *window = user_data;
- gtk_window_present (GTK_WINDOW (window));
+ gtk_window_present (GTK_WINDOW (window));
}
static gboolean
check_for_errors (const char *file)
{
- struct stat log_info, spool_file_info;
+ struct stat log_info, spool_file_info;
- if (stat (file, &log_info) < 0)
- return FALSE;
+ if (stat (file, &log_info) < 0)
+ return FALSE;
- if (stat (DEFAULT_SPOOL_FILE, &spool_file_info) < 0)
- return FALSE;
+ if (stat (DEFAULT_SPOOL_FILE, &spool_file_info) < 0)
+ return FALSE;
- return spool_file_info.st_dev == log_info.st_dev &&
- spool_file_info.st_ino == log_info.st_ino;
+ return spool_file_info.st_dev == log_info.st_dev &&
+ spool_file_info.st_ino == log_info.st_ino;
}
static GtkTextBuffer *
-read_boot_log (const char *file,
- int *seen_errors,
- GError **error)
+read_boot_log (const char *file,
+ int *seen_errors,
+ GError **error)
{
- char *content;
- char *content_utf8;
- gsize length;
- char *p, *q;
- GtkTextBuffer *buffer;
- GtkTextIter iter;
- GString *partial;
-
- if (!g_file_get_contents (file, &content, &length, error))
- return NULL;
-
- content_utf8 = g_locale_to_utf8 (content, length, NULL, NULL, NULL);
- if (content_utf8)
- {
- g_free (content);
- content = content_utf8;
- }
-
- if (check_for_errors (file))
- *seen_errors = 2;
- else
- *seen_errors = 0;
-
- buffer = gtk_text_buffer_new (NULL);
- gtk_text_buffer_create_tag (buffer, "blue", "foreground", "blue", NULL);
- gtk_text_buffer_create_tag (buffer, "green", "foreground", "green", NULL);
- gtk_text_buffer_create_tag (buffer, "red", "foreground", "red", NULL);
- gtk_text_buffer_create_tag (buffer, "yellow", "foreground", "yellow", NULL);
-
- partial = g_string_new ("");
-
- p = content;
- while (*p)
- {
- switch (*p)
- {
- case '\r':
- /* keep isolated \r */
- if (p[1] != '\r' && p[-1] != '\r' &&
- p[1] != '\n' && p[-1] != '\n')
- {
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert (buffer, &iter, p, 1);
- }
- p++;
- break;
- case '\t':
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert (buffer, &iter, " ", 8);
- p++;
- break;
- case '\033':
- if (strncmp (p, "\033[0;34m", 7) == 0 && (q = strstr (p, "\033[0;39m")))
- {
- p += 7;
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "blue", NULL);
- p = q + 7;
- }
- else if (strncmp (p, "\033[60G", 5) == 0)
- {
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert (buffer, &iter, "\t", 1);
- p += 5;
- }
- else if (strncmp (p, "\033[0;31m", 7) == 0 && (q = strstr (p, "\033[0;39m")))
- {
- p += 7;
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "red", NULL);
- p = q + 7;
- }
- else if (strncmp (p, "\033[0;32m", 7) == 0 && (q = strstr (p, "\033[0;39m")))
- {
- p += 7;
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "green", NULL);
- p = q + 7;
- }
- else if (strncmp (p, "\033[0;33m", 7) == 0 && (q = strstr (p, "\033[0;39m")))
- {
- p += 7;
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "yellow", NULL);
- p = q + 7;
- }
- else if (strncmp (p, "\033%G", 3) == 0)
- p += 3;
- else
- p++;
- break;
- default:
- /* GtkTextBuffer doesn't let us insert partial utf-8 characters */
- g_string_append_c (partial, *p);
- if (g_utf8_get_char_validated (partial->str, partial->len) != (gunichar)-2)
- {
- gtk_text_buffer_get_end_iter (buffer, &iter);
- gtk_text_buffer_insert (buffer, &iter, partial->str, partial->len);
- g_string_truncate (partial, 0);
- }
- p++;
- break;
+ char *content;
+ char *content_utf8;
+ gsize length;
+ char *p, *q;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ GString *partial;
+
+ if (!g_file_get_contents (file, &content, &length, error))
+ return NULL;
+
+ content_utf8 = g_locale_to_utf8 (content, length, NULL, NULL, NULL);
+ if (content_utf8) {
+ g_free (content);
+ content = content_utf8;
+ }
+
+ if (check_for_errors (file))
+ *seen_errors = 2;
+ else
+ *seen_errors = 0;
+
+ buffer = gtk_text_buffer_new (NULL);
+ gtk_text_buffer_create_tag (buffer, "blue", "foreground", "blue", NULL);
+ gtk_text_buffer_create_tag (buffer, "green", "foreground", "green", NULL);
+ gtk_text_buffer_create_tag (buffer, "red", "foreground", "red", NULL);
+ gtk_text_buffer_create_tag (buffer, "yellow", "foreground", "yellow", NULL);
+
+ partial = g_string_new ("");
+
+ p = content;
+ while (*p) {
+ switch (*p) {
+ case '\r':
+ /* keep isolated \r */
+ if (p[1] != '\r' && p[-1] != '\r' &&
+ p[1] != '\n' && p[-1] != '\n') {
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, p, 1);
+ }
+ p++;
+ break;
+ case '\t':
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, " ", 8);
+ p++;
+ break;
+ case '\033':
+ if (strncmp (p, "\033[0;34m", 7) == 0 && (q = strstr (p, "\033[0;39m"))) {
+ p += 7;
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "blue", NULL);
+ p = q + 7;
+ } else if (strncmp (p, "\033[60G", 5) == 0) {
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, "\t", 1);
+ p += 5;
+ } else if (strncmp (p, "\033[0;31m", 7) == 0 && (q = strstr (p, "\033[0;39m"))) {
+ p += 7;
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "red", NULL);
+ p = q + 7;
+ } else if (strncmp (p, "\033[0;32m", 7) == 0 && (q = strstr (p, "\033[0;39m"))) {
+ p += 7;
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "green", NULL);
+ p = q + 7;
+ } else if (strncmp (p, "\033[0;33m", 7) == 0 && (q = strstr (p, "\033[0;39m"))) {
+ p += 7;
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, p, q - p, "yellow", NULL);
+ p = q + 7;
+ } else if (strncmp (p, "\033%G", 3) == 0) {
+ p += 3;
+ } else {
+ p++;
+ }
+ break;
+ default:
+ /* GtkTextBuffer doesn't let us insert partial utf-8 characters */
+ g_string_append_c (partial, *p);
+ if (g_utf8_get_char_validated (partial->str, partial->len) != (gunichar) - 2) {
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, partial->str, partial->len);
+ g_string_truncate (partial, 0);
+ }
+ p++;
+ break;
+ }
}
- }
- g_string_free (partial, TRUE);
- g_free (content);
+ g_string_free (partial, TRUE);
+ g_free (content);
- return buffer;
+ return buffer;
}
static void
close_window (GtkWidget *window)
{
- if (show_icon)
- gtk_widget_hide (window);
- else
- gtk_main_quit ();
+ if (show_icon)
+ gtk_widget_hide (window);
+ else
+ gtk_main_quit ();
}
static GtkWidget *
create_window (GtkTextBuffer *buffer)
{
- GtkWidget *window;
- GtkWidget *scrolledwin;
- GtkWidget *box;
- GtkWidget *terminal;
- GtkWidget *bbox;
- GtkWidget *close_button;
- PangoFontDescription *description;
- PangoTabArray *tabs;
- int width, height;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
- gtk_window_set_title (GTK_WINDOW (window), _("Boot messages"));
- gtk_container_set_border_width (GTK_CONTAINER (window), 12);
-
- width = MIN (800, 0.75 * gdk_screen_get_width (gdk_screen_get_default ()));
- height = MIN (600, 0.75 * gdk_screen_get_height (gdk_screen_get_default ()));
- gtk_window_set_default_size (GTK_WINDOW (window), width, height);
-
- box = gtk_vbox_new (FALSE, 0);
- scrolledwin = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwin),
- GTK_SHADOW_IN);
- terminal = gtk_text_view_new_with_buffer (buffer);
- gtk_text_view_set_editable (GTK_TEXT_VIEW (terminal), FALSE);
-
- description = pango_font_description_from_string ("monospace");
- gtk_widget_modify_font (terminal, description);
- pango_font_description_free (description);
-
- tabs = pango_tab_array_new_with_positions (1, TRUE, PANGO_TAB_LEFT, width - 130);
- gtk_text_view_set_tabs (GTK_TEXT_VIEW (terminal), tabs);
- gtk_text_view_set_left_margin (GTK_TEXT_VIEW (terminal), 12);
- gtk_text_view_set_right_margin (GTK_TEXT_VIEW (terminal), 12);
-
- bbox = gtk_hbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
- close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-
- gtk_container_add (GTK_CONTAINER (window), box);
- gtk_box_pack_start (GTK_BOX (box), scrolledwin, TRUE, TRUE, 6);
- gtk_container_add (GTK_CONTAINER (scrolledwin), terminal);
- gtk_box_pack_start (GTK_BOX (box), bbox, FALSE, TRUE, 6);
- gtk_box_pack_start (GTK_BOX (bbox), close_button, FALSE, TRUE, 6);
-
- g_signal_connect (window, "delete-event",
- G_CALLBACK (close_window), NULL);
- g_signal_connect_swapped (close_button, "clicked",
- G_CALLBACK (close_window), window);
-
- gtk_widget_show_all (box);
-
- return window;
+ GtkWidget *window;
+ GtkWidget *scrolledwin;
+ GtkWidget *box;
+ GtkWidget *terminal;
+ GtkWidget *bbox;
+ GtkWidget *close_button;
+ PangoFontDescription *description;
+ PangoTabArray *tabs;
+ int width, height;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
+ gtk_window_set_title (GTK_WINDOW (window), _ ("Boot messages"));
+ gtk_container_set_border_width (GTK_CONTAINER (window), 12);
+
+ width = MIN (800, 0.75 * gdk_screen_get_width (gdk_screen_get_default ()));
+ height = MIN (600, 0.75 * gdk_screen_get_height (gdk_screen_get_default ()));
+ gtk_window_set_default_size (GTK_WINDOW (window), width, height);
+
+ box = gtk_vbox_new (FALSE, 0);
+ scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwin),
+ GTK_SHADOW_IN);
+ terminal = gtk_text_view_new_with_buffer (buffer);
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (terminal), FALSE);
+
+ description = pango_font_description_from_string ("monospace");
+ gtk_widget_modify_font (terminal, description);
+ pango_font_description_free (description);
+
+ tabs = pango_tab_array_new_with_positions (1, TRUE, PANGO_TAB_LEFT, width - 130);
+ gtk_text_view_set_tabs (GTK_TEXT_VIEW (terminal), tabs);
+ gtk_text_view_set_left_margin (GTK_TEXT_VIEW (terminal), 12);
+ gtk_text_view_set_right_margin (GTK_TEXT_VIEW (terminal), 12);
+
+ bbox = gtk_hbutton_box_new ();
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
+ close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+
+ gtk_container_add (GTK_CONTAINER (window), box);
+ gtk_box_pack_start (GTK_BOX (box), scrolledwin, TRUE, TRUE, 6);
+ gtk_container_add (GTK_CONTAINER (scrolledwin), terminal);
+ gtk_box_pack_start (GTK_BOX (box), bbox, FALSE, TRUE, 6);
+ gtk_box_pack_start (GTK_BOX (bbox), close_button, FALSE, TRUE, 6);
+
+ g_signal_connect (window, "delete-event",
+ G_CALLBACK (close_window), NULL);
+ g_signal_connect_swapped (close_button, "clicked",
+ G_CALLBACK (close_window), window);
+
+ gtk_widget_show_all (box);
+
+ return window;
}
int
main (int argc, char *argv[])
{
- GtkStatusIcon *icon;
- GtkWidget *menu;
- GtkWidget *quit_item;
- GtkWidget *window;
- GtkTextBuffer *buffer;
- GError *error = NULL;
- int seen_errors;
- gchar *file;
-
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- if (!gtk_init_with_args (&argc, &argv,
- _("[FILE]"), entries, GETTEXT_PACKAGE, &error))
- {
- g_print ("%s\n", error ? error->message : "Beep");
- exit (1);
- }
-
- if (argc > 1)
- file = argv[1];
- else
- file = DEFAULT_LOG;
-
- buffer = read_boot_log (file, &seen_errors, &error);
- if (buffer == NULL)
- {
- g_print ("%s\n", error ? error->message : "Blop");
- exit (1);
- }
-
- window = create_window (buffer);
-
- if (seen_errors == 2)
- gtk_window_set_icon_name (GTK_WINDOW (window), GTK_STOCK_DIALOG_WARNING);
- else
- gtk_window_set_icon_name (GTK_WINDOW (window), GTK_STOCK_INFO);
-
- if (show_icon)
- {
- menu = gtk_menu_new ();
- quit_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
- gtk_menu_append (GTK_MENU (menu), quit_item);
- gtk_widget_show_all (menu);
- g_signal_connect (quit_item, "activate", G_CALLBACK (gtk_main_quit), NULL);
-
- icon = gtk_status_icon_new ();
- if (seen_errors == 2)
- gtk_status_icon_set_from_stock (icon, GTK_STOCK_DIALOG_WARNING);
- else if (seen_errors == 1 || force)
- gtk_status_icon_set_from_stock (icon, GTK_STOCK_INFO);
- else
- exit (0);
-
- gtk_status_icon_set_tooltip (icon, _("Console output from services during system startup"));
- gtk_status_icon_set_title (icon, _("Boot messages"));
-
- g_signal_connect (icon, "activate", G_CALLBACK (activate_icon), window);
- g_signal_connect (icon, "popup-menu", G_CALLBACK (popup_menu), menu);
- }
- else
- gtk_window_present (GTK_WINDOW (window));
-
- gtk_main ();
-
- return 0;
+ GtkStatusIcon *icon;
+ GtkWidget *menu;
+ GtkWidget *quit_item;
+ GtkWidget *window;
+ GtkTextBuffer *buffer;
+ GError *error = NULL;
+ int seen_errors;
+ gchar *file;
+
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ if (!gtk_init_with_args (&argc, &argv,
+ _ ("[FILE]"), entries, GETTEXT_PACKAGE, &error)) {
+ g_print ("%s\n", error ? error->message : "Beep");
+ exit (1);
+ }
+
+ if (argc > 1)
+ file = argv[1];
+ else
+ file = DEFAULT_LOG;
+
+ buffer = read_boot_log (file, &seen_errors, &error);
+ if (buffer == NULL) {
+ g_print ("%s\n", error ? error->message : "Blop");
+ exit (1);
+ }
+
+ window = create_window (buffer);
+
+ if (seen_errors == 2)
+ gtk_window_set_icon_name (GTK_WINDOW (window), GTK_STOCK_DIALOG_WARNING);
+ else
+ gtk_window_set_icon_name (GTK_WINDOW (window), GTK_STOCK_INFO);
+
+ if (show_icon) {
+ menu = gtk_menu_new ();
+ quit_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
+ gtk_menu_append (GTK_MENU (menu), quit_item);
+ gtk_widget_show_all (menu);
+ g_signal_connect (quit_item, "activate", G_CALLBACK (gtk_main_quit), NULL);
+
+ icon = gtk_status_icon_new ();
+ if (seen_errors == 2)
+ gtk_status_icon_set_from_stock (icon, GTK_STOCK_DIALOG_WARNING);
+ else if (seen_errors == 1 || force)
+ gtk_status_icon_set_from_stock (icon, GTK_STOCK_INFO);
+ else
+ exit (0);
+
+ gtk_status_icon_set_tooltip (icon, _ ("Console output from services during system startup"));
+ gtk_status_icon_set_title (icon, _ ("Boot messages"));
+
+ g_signal_connect (icon, "activate", G_CALLBACK (activate_icon), window);
+ g_signal_connect (icon, "popup-menu", G_CALLBACK (popup_menu), menu);
+ } else {
+ gtk_window_present (GTK_WINDOW (window));
+ }
+
+ gtk_main ();
+
+ return 0;
}