reader_sav.c.svn-base
上传用户:holyzs
上传日期:2022-06-29
资源大小:2335k
文件大小:3k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1. #include <reader_core.h>
  2. typedef union _tag_reader_file_saver {
  3.   int all;
  4.   struct {
  5.     int layout: 1;
  6.     int page_number: 31;
  7.   } parts;
  8. } reader_file_saver_t;
  9. enum {
  10.   RESERVED_SPACE = 4024,  //reserved 4K bytes in the beginning for color info and future use...
  11.   SCENARIO_ADDR = 128, //user scenario data start from here...
  12.   TIME_ADDR = 512,
  13.   OPTION_ADDR = 528,
  14.   SAVER_MAGIC = 0xceec
  15. };
  16. void reader_save_page(unsigned int file_index, int page_number) {
  17.   reader_file_saver_t saver;
  18.   saver.all = PA_Load32bit(RESERVED_SPACE + file_index * sizeof(file_index));
  19.   saver.parts.page_number = page_number;
  20.   PA_Save32bit(RESERVED_SPACE + file_index * sizeof(file_index), saver.all);
  21. }
  22. //return page number saved by reader_save_page()
  23. int reader_load_page(unsigned int file_index) {
  24.   reader_file_saver_t saver;
  25.   saver.all = PA_Load32bit(RESERVED_SPACE + file_index * sizeof(file_index));
  26.   return saver.parts.page_number;
  27. }
  28. //--color
  29. void reader_save_color(void) {
  30.   PA_Save32bit(0, SAVER_MAGIC);
  31.   PA_SaveData(4, &reader_color_context, sizeof(reader_color_context));
  32. }
  33. void reader_load_color(void) {
  34.   if (PA_Load32bit(0) != SAVER_MAGIC) {
  35.     memcpy(&reader_color_context, &reader_color_context_def, sizeof(reader_color_context));
  36.     return;
  37.   }
  38.   PA_LoadData(4, &reader_color_context, sizeof(reader_color_context));  
  39. }
  40. //--option
  41. void reader_save_option() {
  42.   PA_Save32bit(OPTION_ADDR, SAVER_MAGIC);
  43.   PA_SaveData(OPTION_ADDR + 4, &reader_option, sizeof(reader_option));
  44. }
  45. void reader_load_option() {
  46.   if (PA_Load32bit(OPTION_ADDR) != SAVER_MAGIC) {
  47.     memcpy(&reader_option, &reader_option_def, sizeof(reader_option));
  48.     return;
  49.   }
  50.   PA_LoadData(OPTION_ADDR + 4, &reader_option, sizeof(reader_option));
  51.   if (reader_option_timer_enabled()) {
  52.     reader_option_turn_timer_reset();
  53.   }
  54. }
  55. //--layout
  56. int reader_load_layout(unsigned int file_index) {
  57.   reader_file_saver_t saver;
  58.   saver.all = PA_Load32bit(RESERVED_SPACE + file_index * sizeof(file_index));
  59.   return saver.parts.layout;
  60. }
  61. void reader_save_layout(unsigned int file_index, int layout) {
  62.   reader_file_saver_t saver;
  63.   saver.all = PA_Load32bit(RESERVED_SPACE + file_index * sizeof(file_index));
  64.   saver.parts.layout = layout;
  65.   PA_Save32bit(RESERVED_SPACE + file_index * sizeof(file_index), saver.all);
  66. }
  67. //--scenario
  68. void reader_save_scenario(reader_scenario_saver_t *data) {
  69.   PA_Save32bit(SCENARIO_ADDR, SAVER_MAGIC);
  70.   PA_SaveData(SCENARIO_ADDR + 4, data, sizeof(*data));
  71. }
  72. //return 0 means load successfully, -1 means no record saved yet
  73. int reader_load_scenario(reader_scenario_saver_t *data) {
  74.   if (PA_Load32bit(SCENARIO_ADDR) != SAVER_MAGIC) {
  75.     return -1;
  76.   }
  77.   PA_LoadData(SCENARIO_ADDR + 4, data, sizeof(*data));
  78.   return 0;
  79. }
  80. unsigned int reader_load_time(void) {
  81.   if (PA_Load32bit(TIME_ADDR) != SAVER_MAGIC) {
  82.     return 0;
  83.   }
  84.   return PA_Load32bit(TIME_ADDR + 4);
  85. }
  86. void reader_save_time(unsigned int t) {
  87.   PA_Save32bit(TIME_ADDR, SAVER_MAGIC);
  88.   PA_Save32bit(TIME_ADDR + 4, t);
  89. }