|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: // ファイルを mmap して提供するクラス
8:
9: #pragma once
10:
11: #include "header.h"
12:
13: class MappedFile
14: {
15: public:
16: MappedFile();
17: virtual ~MappedFile();
18:
19: // ファイル名(パス名)を指定する。
20: void SetFilename(const std::string& filename);
21:
22: // エラーメッセージの表示名を変更する。
23: void SetDispname(const std::string& dispname);
24:
25: // サイズの確定しているファイルを読み込み専用でオープンして mmap する。
26: // ファイルがなければエラー。ROM とか用。
27: uint8 *OpenRdOnly(off_t len);
28:
29: // サイズの確定しているファイルを読み書き両用でオープンして mmap する。
30: // ファイルがなければ作成する。SRAM とか用。
31: uint8 *OpenCreate(off_t len);
32:
33: // サイズの確定していないファイルを読み書き両用でオープンして mmap する。
34: // ファイルがなければエラー。ディスクイメージ用。
35: uint8 *OpenFile();
36:
37: // クローズする (デストラクタを呼ぶだけでもよい)
38: void Close();
39:
40: // mmap されている領域の長さを返す。(ファイルサイズと同じとは限らない)
41: off_t GetMemSize() const { return memlen; }
42:
43: private:
44: // ファイルサイズをチェック
45: bool CheckFilesize() const;
46:
47: // パス名
48: std::string filename {};
49:
50: // 表示名
51: // エラー表示をほぼこちら側で行うため、
52: // ただのパス名だけでなくその場に応じたいい感じの表示にしたい。
53: std::string dispname {};
54:
55: int fd {};
56: uint8 *mem {};
57: off_t memlen {};
58: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.