# Hex Editor Puting

Puting（ピューティング）は21世紀の Windows 環境におけるバイナリファイル
編集ソフトウェアの新しい定番となることを目指して開発を開始しました。

## 実装したいなと思ってる機能（やりたいことリスト）

アルファ版につき一部機能は未実装です。（むしろ一部機能しか実装してない）

### カスタマイズ機能

- 各行のフォーマットは od コマンド並みに設定可能
- ファイルタイプ別に設定を切り替えられるファイルタイプ判別（マジック）機能
- キーバインドのデフォルトは vi 風だが、
  慣れていないひとにも安心なカスタマイズ機能
- デフォルトではオフのメニューとツールバーとステータスバーをカスタマイズ可能

### 編集作業を強力にサポートするパクり機能

- バイト列をテンプレートに当てはめ、フィールド単位で編集できる機能
- 外部のプログラムから指定ファイルの指定アドレスを開く機能（grep など）
- ファイルのリーダライタロックを取得するタイミングを設定可能な排他機能
- ファイルのバックアップ・差分ファイル作成

### その他の機能（多くはパクり機能）

- バイト単位の編集禁止マスク（無視、トースト、メッセージボックス）
- グラフィックダンプというか広域マップ
- 制御文字を無理やり表示する（cdump 互換）または Unicode 文字で華麗に表示する
- 文字列のある所を強調表示する
  （strings 風に4文字以上の文字の塊を検知、閾値はカスタマイズ可能）
- 文字列検索
- 型指定付き数値検索・マスク付きビットパターン検索
- メモリの許す限りのアンドゥリドゥ
- ファイルの複数個所を別々のウィンドウに開ける
- ASCII UTF-8 UTF-16(BE/LE/BOM) ISO-8859 KOI7 KOI8 の各エンコーディングに対応
- 解析結果のエクスポート
  （プレインテキスト・HTML・PDF）（ファイルまたはクリップボードに）
- 未保存の編集箇所の強調表示
- 相対アドレス・絶対アドレスでのジャンプ
- マーク (a-z) 設置・マークへジャンプ
- 画面内の ace jump
- PNG のようなチャンク構造を簡易認識
- ダークモード

## 機能以外のこと

- 開発は始まったばかりなので、開発停止ソフト（サポート終了）の使用が禁止されていても使える
- 高 DPI 画面に対応しているので、Windows11 でも文字がぼやけない
- フリーソフトウェアなのでソースコードが閲覧可能、改造が自由

## 使用手順

### インストール・アンインストール

- インストールは、バイナリパッケージの内容を適当なディレクトリに展開します。
- アンインストールは、そのディレクトリごと削除すれば完了です。
  レジストリは使ってません。

### 基本操作：キーバインド

キーバインドはおおむね vi 風となっています。

- 0..9 前置引数（10進数）
- j カーソルを次の行に移動
- k カーソルを前の行に移動
- l カーソルを次の桁に移動
- h カーソルを前の桁に移動
- w カーソルをワード単位で次に移動
- b カーソルをワード単位で前に移動
- e カーソルを次の行に移動して画面を逆方向にスクロール
- y カーソルを前の行に移動して画面を逆方向にスクロール
- d カーソルを1/2画面分次に移動
- u カーソルを1/2画面分前に移動
- + カーソルを次の行の先頭に移動
- - カーソルを前の行の先頭に移動
- ^ カーソルを今の行の先頭に移動
- > カーソルをファイルの末尾に移動
- < カーソルをファイルの先頭に移動
- H カーソルを画面左上に移動
- M カーソルを画面左中央に移動
- L カーソルを画面左下に移動
- J カーソルを全体の1/10次に移動
- K カーソルを全体の1/10前に移動
- G > と同じ
- g < と同じ

- n 次を検索
- N 前を検索
- r カーソルのあるバイトを書き換え（4r で4バイト書き換え）
- R カーソル位置から連続でバイトを書き換え（ESC を押すまで）
- q ウィンドウを閉じる
- Q 現在のウィンドウと同プロセスのウィンドウをすべて閉じる

- p 画面要素の配置を疎らにする
- P 画面要素の配置を密にする
- t フォントを大きくする
- T フォントを小さくする

- ^f 一画面分次に移動
- ^b 一画面分前に移動
- ^i 編集モードを16進数と文字で切り替え
- ^j e と同じ
- ^k y と同じ
- ^l 画面を再描画する
- ^p 画面要素の配置をデフォルトに戻す
- ^t フォントサイズをデフォルトに戻す
- ^w q と同じ
- ^y 文字コードの切り替え

などなど。

### テンプレート

テンプレート定義ファイルは templates ディレクトリに置きます。
templates ディレクトリはプログラム本体と同じ場所にあります。

#### 型名

- i8 8ビット符号付き整数
- u8 8ビット符号なし整数
- i16be 16ビット符号付き整数、ビッグエンディアン
- i16le 16ビット符号付き整数、リトルエンディアン
- i16   16ビット符号付き整数、エンディアンはあらかじめ宣言済み
- u16be など符号付き整数と同様、
- i32be i64be など16ビットと同様です。
- c[n] n 文字までの文字列（ASCII / Latin1）
- c<encoding>[n] n 文字までの文字列（<>内に示したエンコーディング）

などなど。

ビットフィールドに対応します。

### ファイルの排他制御

「表示中リーダロック」「編集中ライタロック」がデフォルトです。
編集中とは未保存の変更点があることを指します。

「書き込み禁止で表示中リーダロック」
「書き込み許可で表示中ライタロック」という設定もありです。

### 広域マップ

各バイトを小さな色の点で表示します。
文字列とみられる箇所は強調表示されます。

### 全体マップ

現在ウィンドウがファイルのどの範囲を表示しているかを示します。

Copyright © 2023 Yamada Yohei <yamadayohei@gmail.com>
