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トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

87 行
1.9KB

  1. #include <stddef.h>
  2. #include "state.h"
  3. #include "ini.h"
  4. // Running State
  5. // TODO
  6. // Persistent State
  7. void cart_info_done(cart_info* cart) {
  8. if (cart->file) fclose(cart->file);
  9. free(cart->filename);
  10. }
  11. void nese_state_done(nese_State* state) {
  12. cart_info_done(&state->cart);
  13. }
  14. static const ini_datum prefs_schema = {
  15. .type = ini_section,
  16. .name = "nese",
  17. .count = 2,
  18. .data = (ini_datum[]){
  19. {
  20. .type = ini_section,
  21. .name = ".cart",
  22. .offset = offsetof(nese_State, cart),
  23. .count = 1,
  24. .data = (ini_datum[]){
  25. {
  26. .type = ini_string,
  27. .name = "filename",
  28. .offset = offsetof(cart_info, filename),
  29. },
  30. }
  31. }, {
  32. .type = ini_section,
  33. .name = ".flags",
  34. .offset = offsetof(nese_State, flags),
  35. .count = 1,
  36. .data = (ini_datum[]){
  37. {
  38. .type = ini_flag,
  39. .name = "fullscreen",
  40. .shift = State_Bit_Fullscreen,
  41. },
  42. }
  43. },
  44. },
  45. };
  46. int save_prefs_file(const nese_State* state, FILE* file) {
  47. return write_ini_file(file, &prefs_schema, state);
  48. }
  49. int load_prefs_file(nese_State* state, FILE* file) {
  50. return read_ini_file(file, &prefs_schema, state);
  51. }
  52. int save_prefs_filename(const nese_State* state,
  53. const char* filename) {
  54. int status = -1;
  55. FILE* file = fopen(filename, "w");
  56. if (NULL != file) {
  57. status = write_ini_file(file, &prefs_schema, state);
  58. fclose(file);
  59. }
  60. return status;
  61. }
  62. int load_prefs_filename(nese_State* state,
  63. const char* filename) {
  64. int status = -1;
  65. FILE* file = fopen(filename, "r");
  66. if (NULL != file) {
  67. status = read_ini_file(file, &prefs_schema, state);
  68. fclose(file);
  69. }
  70. return status;
  71. }