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.
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

74 satır
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. }