---
title: みかん本輪読会_30
tags: 
author: [こた](https://www.docswell.com/user/kota)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/PJXXKXP1JX.jpg?width=480
description: みかん本輪読会_30 by こた
published: August 17, 25
canonical: https://www.docswell.com/s/kota/KJQNMV-mikan-30
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/PJXXKXP1JX.jpg)

みかん本輪読会
30章
おまけアプリ


# Page. 2

![Page Image](https://bcdn.docswell.com/page/3JKW5WDMJD.jpg)

アプリにパスを通す
p.692
- いちいちapps/~をつけるのがいや
- Linuxではgrep ~で使える
- 環境変数を使って実現している (PATH変数)
- 適切な環境変数を設定すると設定されたディレクトリ内
にあるアプリはアプリ名だけで起動できる
- ちゃんとした環境変数の仕組みを作るのは大変なので
今回はapps/ なしで起動することだけを目指す


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LE31K1R275.jpg)

アプリにパスを通す
- FindCommand()を作成→
- FindCommand()を使って
アプリを起動する↓
リスト 30.2
p.692~693
リスト 30.1


# Page. 4

![Page Image](https://bcdn.docswell.com/page/8EDX3XY6JG.jpg)

moreコマンド
p.693
- ls appsと打つと、ターミナルにたくさんの出力がされ、
始めのほうが隠れてしまう
- linuxにはmoreやlessコマンドがあり、内容をページ贈
りで見ることができる
- ちなみに末尾まで行くと自動的にプロンプトへ戻るのが
more、戻らないのがless
- lessのほうが新しく、機能が豊富


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V7PP4P2Z78.jpg)

moreコマンド
p.694~695
- リスト30.3がmoreコマンドの実装
moreコマンドの使い方
- 引数は -n と ﬁle
$ ls /usr/bin | more
- -n がページ送りの行数を指定
- ﬁle がファイルパス、省略すると標準入力
- moreコマンドはパイプで動作するが、MikanOSの仕
様ではタスクがパイプの左側に送られる
- パイプ使用時だけ右側にタスク送信して欲しい


# Page. 6

![Page Image](https://bcdn.docswell.com/page/2JV2X2DMJQ.jpg)

moreコマンド
p.695~696
layer_task_mapの登録を一時
的に更新しパイプの処理中に送
られてきたイベントをパイプの右
側のタスクに送信する
← リスト 30.4 ↓


# Page. 7

![Page Image](https://bcdn.docswell.com/page/5EGRVRYXJL.jpg)

catを入力に対応させる
p.696
- catは今のところ標準入力を扱えない
- linuxはファイル名を省略すると標準入力から読む
- 標準入力を扱えるようになると改行を含むテキストファ
イルが作成可能になる
- 動作確認に使うファイルをその場で作成可能に
- いちいち起動ボリュームにファイルを入れて再起動する
必要がなくなる


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4JQV6VM57P.jpg)

catを入力に対応させる
p.696~697
- 引数ﬁrst_argが空の場合に標準入力を表すディスク
リスト 30.5
リプタﬁles_[0]を使うようにする


# Page. 9

![Page Image](https://bcdn.docswell.com/page/K74M4MVVJ1.jpg)

閉じるボタン
p.698
- 今まで飾りだった閉じるボタンを使えるように
- マウスの左ボタンがクリックされたかどうかとマウス
の座標がウィンドウの閉じるボタンの上にあるかどう
か
- 外部からウィンドウを強制的に閉じる方法と内部から
自主的に閉じる方法がある
- 前者はタスクが存在しないウィンドウに書き込む可能
性がある危険な処理なため後者を採用する


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LJ184834EG.jpg)

閉じるボタン
p.699
- クリックされた座標を取得する
- 戻り値はリスト30.8の画像通り
タイトルバー、閉じるボタン、
ウィンドウの枠線、その他領域
リスト 30.8 →
リスト 30.7


# Page. 11

![Page Image](https://bcdn.docswell.com/page/GJWZXZPZJ2.jpg)

閉じるボタン
p.700~703
- リスト30.11でウィンドウ領域の種類に応じて処理
- リスト30.12でマウスクリックの処理
- リスト30.13で閉じるボタンのクリックを通知
- リスト30.14で閉じられるウィンドウを指定する構造体
- リスト30.15でウィンドウを閉じる
- リスト30.16で指定されたレイヤーを閉じる
- リスト30.17でReadEventも閉じる


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EZ161KL73.jpg)

テキストビューワーと画像ビューワー
p.703~710
- テキストビューワーと画像ビューワーを作ってみる
- テキストビューワーには前後にスクロール、画面の大きさを
変更、タブ幅を変更する機能を実装 (リスト30.18)
- 画像ビューワーはビットマップ画像やjpeg画像を表示
- jpeg画像をピクセルの配列に変換するのは大変なのでstb
imageというライブラリを使用 (リスト30.19)
- スタックが足りなくなるので32KiBから64KiBへ増量


