NESe (pronounced "Nessie") is a NES emulator based on the e6502 emulator, also written in C with a focus on speed and portability for use on embedded platforms, especially ARM.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

74 lignes
1.8KB

  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include "overlay.h"
  4. int overlay_init(Overlay* overlay) {
  5. overlay->messages = NULL;
  6. overlay->next_id = 0;
  7. return 0;
  8. }
  9. void overlay_done(Overlay* overlay) {
  10. overlay_message* next = NULL;
  11. for ( overlay_message* message = overlay->messages;
  12. NULL != message;
  13. message = next) {
  14. next = message->next;
  15. free(message->string);
  16. free(message);
  17. }
  18. }
  19. int overlay_clear(Overlay* overlay) {
  20. int n_cleared = 0;
  21. for ( overlay_message* message = overlay->messages;
  22. NULL != message;
  23. message = message->next) {
  24. free(message->string);
  25. free(message);
  26. ++n_cleared;
  27. }
  28. overlay_init(overlay);
  29. return n_cleared;
  30. }
  31. int overlay_clear_message(Overlay* overlay, int id) {
  32. int result = -1;
  33. overlay_message* last = NULL;
  34. overlay_message* message = overlay->messages;
  35. for ( ;
  36. NULL != message && message->id != id;
  37. last = message, message = message->next
  38. );
  39. if (NULL != message) {
  40. result = 0;
  41. if (NULL == last) {
  42. overlay->messages = message->next;
  43. } else {
  44. last->next = message->next;
  45. }
  46. free(message->string);
  47. free(message);
  48. }
  49. return result;
  50. }
  51. int overlay_add_message(Overlay* overlay,
  52. const char* string, int expiry) {
  53. overlay_message* message = calloc(1, sizeof(*message));
  54. message->string = strdup(string);
  55. message->id = ++(overlay->next_id);
  56. message->expiry = expiry;
  57. message->next = NULL;
  58. if (NULL == overlay->messages) {
  59. overlay->messages = message;
  60. } else {
  61. overlay_message* last = overlay->messages;
  62. for ( ; NULL != last->next; last = last->next);
  63. last->next = message;
  64. }
  65. return message->id;
  66. }