OSDN Git Service

[fix] #41503 超能力者でゲームを開始しようとするとクラッシュ
[hengband/hengband.git] / src / save / save-util.c
1 #include "save/save-util.h"
2
3 FILE *saving_savefile; /* Current save "file" */
4 byte save_xor_byte; /* Simple encryption */
5 u32b v_stamp = 0L; /* A simple "checksum" on the actual values */
6 u32b x_stamp = 0L; /* A simple "checksum" on the encoded bytes */
7
8 /*!
9  * @brief 1バイトをファイルに書き込む / These functions place information into a savefile a byte at a time
10  * @param v 書き込むバイト値
11  * @return なし
12  */
13 static void sf_put(byte v)
14 {
15     /* Encode the value, write a character */
16     save_xor_byte ^= v;
17     (void)putc((int)save_xor_byte, saving_savefile);
18
19     /* Maintain the checksum info */
20     v_stamp += v;
21     x_stamp += save_xor_byte;
22 }
23
24 /*!
25  * @brief 1バイトをファイルに書き込む(sf_put()の糖衣)
26  * @param v 書き込むバイト
27  * @return なし
28  */
29 void wr_byte(byte v) { sf_put(v); }
30
31 /*!
32  * @brief 符号なし16ビットをファイルに書き込む
33  * @param v 書き込む符号なし16bit値
34  * @return なし
35  */
36 void wr_u16b(u16b v)
37 {
38     wr_byte((byte)(v & 0xFF));
39     wr_byte((byte)((v >> 8) & 0xFF));
40 }
41
42 /*!
43  * @brief 符号あり16ビットをファイルに書き込む
44  * @param v 書き込む符号あり16bit値
45  * @return なし
46  */
47 void wr_s16b(s16b v) { wr_u16b((u16b)v); }
48
49 /*!
50  * @brief 符号なし32ビットをファイルに書き込む
51  * @param v 書き込む符号なし32bit値
52  * @return なし
53  */
54 void wr_u32b(u32b v)
55 {
56     wr_byte((byte)(v & 0xFF));
57     wr_byte((byte)((v >> 8) & 0xFF));
58     wr_byte((byte)((v >> 16) & 0xFF));
59     wr_byte((byte)((v >> 24) & 0xFF));
60 }
61
62 /*!
63  * @brief 符号あり32ビットをファイルに書き込む
64  * @param v 書き込む符号あり32bit値
65  * @return なし
66  */
67 void wr_s32b(s32b v) { wr_u32b((u32b)v); }
68
69 /*!
70  * @brief 文字列をファイルに書き込む
71  * @param str 書き込む文字列
72  * @return なし
73  */
74 void wr_string(concptr str)
75 {
76     while (*str) {
77         wr_byte(*str);
78         str++;
79     }
80     wr_byte(*str);
81 }