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