|
|
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.