FreeBASIC IDE - PoseidonFB マニュアル
目次
By Yung Kuan Hsu 2017, 2018, 2020
(許 永ェ)
翻訳 渡辺真 2017/09/03,2020/09/06
前書き
PoseidonFB について
実行環境
使い方
インストール
FreeBASIC のヘルプを表示
プロジェクト
構文解析器(パーサー)
カスタム・ツール
デバッグ
コンパイラ・オプション
前書き
poseidon は、D言語 のIDE で、2005年に Shawn Liu によって Dsource(http://www.dsource.org/projects/poseidon )で始まりました。
私(Yung Kuan Hsu)は、2006年から、このプロジェクトに参加しています。Digitalmars D V1.0 と DWT(SWT port to D)による poseidon コードです。
いくつかの理由で、私は 2011年以降プロジェクトを中止しています(そして Dsource はダウンしています...)。
いずれにしても、私は目標を達成しました(私は、プログラム言語を使って IDE を構築し、IDEを使って IDEソース自体をコーディングするのはクールだと思います!)
2015年頃、Linux でコーディングをテストしてみましたが、Linux とクロス・プラットフォームでのコーディングもクールだと思います。
私はコーディングを 30年ほど前に学び始めました。
最初は GW-BASIC で、後に Quick-BASIC と Visual-BASIC 5.0/6.0を覚えました。
私の好きなプログラミング言語は、28歳になるまで BASIC です
PoseidonFB について
PoseidonFB は freeBASIC 用の統合開発環境で、次のような特長を備えています。
( 1)構文の強調表示
( 2)プロジェクト管理をサポート
( 3)自動補完とヒント表示
( 4)パーサー(PARSER)で構文解析ツリーを形成し、変数 / 型 / 関数を表示
( 5)テキストとプロジェクトで検索/置換
( 6)定義とメンバー関数へのジャンプをサポート
( 7)UNICODE(Utf-8/16/32) をサポート
( 8)GDB(GNU Project Debugger) デバッグをサポート
( 9)ショートカットキーをお好みで設定可
(10)単一ファイル・コンパイル / プロジェクト・コンパイル / 即実行
(11)など...
実行環境
PoseidonFB は、IUP GUIフレームワーク と Digitalmars D言語 V1.0 を使って記述されており、一部のサポートファイルは freeBASIC を使って記述されています。
PoseidonFB は Windows と Linuxで実行できます。
IUP がコンパイル済みライブラリを提供しなくなったため、32ビット Linux バージョンの開発は中止しました。
poseidonFB は完全にオープンソースのプロジェクトです。
Windows:
Digital Mars D V1.076 32bit with Tango standard library
IUP 3.27 with Modified iup_scintilla.dll
Windows 7 64bit
Linux:
Digital Mars D V1.074 64bit with Tango standard library
IUP 3.27( GTK2 / GTK3 ) with Modified iup_scintilla.so
Linux mint 17~19.3 64bit
gcc 4.8 ( D backend )
Ubuntu 12.04 64bit and gcc 4.6 ( Appimage GTK2 )
Ubuntu 16.04 64bit and gcc 4.8 ( Appimage GTK3 )
作者のホームページ:
https://bitbucket.org/KuanHsu/poseidonfb
ダウンロード:
https://bitbucket.org/KuanHsu/poseidonfb/downloads/
紹介:
https://www.freebasic.net/forum/viewtopic.php?f=8&t=23935
使い方
オプション → ツール → 文字コードを設定 → Default
とした上で コンパイルして実行(Complie Run) すると、日本語(Shift JIS)を使えます。
この状態で 保存(Save) すると .bas ファイルは、Shift JIS になっています。
注:poseidonFB_rev476.7z は日本語表示に不具合がありましたが、新バージョンで解消しています。
UTF16LE BOM として Save すると .bas ファイルは、Unicode で保存されます。
UTF8 として Save すると .bas ファイルは、UTF-8 で保存されます。
渡辺注:
poseidonFB は、自動補完で、コードに含まれる *.bi も解析して関数を抽出して候補表示してくれます。
一般に、 *.bi にはさらに別の *.bi が含まれています。
このため、poseidonFB の parsedTrees が非常に大きくなり、自動補完に時間がかかることになります。
そこで、「含めるレベル」オプションを「1」とすると、 *.bi の解析を直下だけに止めます。
キー入力が重たい場合は、「1」にすることを推奨します。
インストール
Windows と Linux に poseidonFB をインストールする方法です。
Windows:
Windows パソコンに poseidon FB をインストールするのは簡単です。
poseidonFB_rev***.7z ファイルをダウンロードして、適当なフォルダに展開してください。
ポセイドンの最新バージョンをダウンロードできる URL :
https://bitbucket.org/KuanHsu/poseidonfb/downloads/
注意:
poseidonFB を動かすために、Visual C ++ 2010再頒布可能x86 が必要です。
poseidonFB は、Windows 2000 ではテストしていません。
'poseidonFB.exe' をクリックすると poseidonFB が実行されます。
Linux:
まずシステム・モニタがシステム情報を取得したことを確認します。
例として右の図を見て下さい。
オペレーティングシステムは、Linux mint 18.2 64bit(MATE 1.18.0)です。
カーネルコアは 4.8.0-53 です。
IUP の Web サイトにアクセスしてダウンロードします。
https://webserver2.tecgraf.puc-rio.br/iup/en/download.html
sourceforge ページ(https://sourceforge.net/projects/iup/files/ )をクリックします。
IUP のバージョンを選択した後、[Linuxライブラリ]を選択します。
「_Linux」の後ろのファイル名が、カーネルコアのバージョンと一致するものを選択します。
そしてダウンロードします。
注意:
poseidonFB は linux mint 18.2 でコンパイルされています
ダウンロードしたファイルを、作成したフォルダに解凍します。
右クリックして端末画面を開き、キー入力します :sudo./install
<Enter> を押して続行します。
libs(*.so)がシステムにインストールされ、IUP のインストールが完了します。
それから、poseidonFB をダウンロードします。
https://bitbucket.org/KuanHsu/poseidonfb/downloads/
インストール先のフォルダに解凍します。
「poseidonFB_x64」をクリックして、poseidonFB IDE を実行します。
以上が、2つのオペレーティングシステムに poseidonFB をインストールする方法です。
難しいことではありません。
注意:
写真は Linux mint 18.2 Mate のものですが、作者は Linux mint 18 Cinnamon オペレーティング環境で Linux バージョンを編集およびコンパイルしています。
したがって、Linux mint Cinnamon では、実行時の表示と効果が正しいです。
FreeBASIC のヘルプを表示
poseidonFBは、コードの予約語に対応したヘルプ文書の該当ページを、複数の chm から検索表示することができます。
[CHM 版 FreeBASIC 日本語マニュアル] と、[CHM 版 Win32API リファレンス日本語版] は、下記でダウンロードできます。
http://makoto-watanabe.main.jp/freebasic/
Window9 日本語 Help CHM ファイルは、下記でダウンロードできます。
http://makoto-watanabe.main.jp/freebasic/Window9.html
zip から chm を抽出して、英数字のパスに保存します。
「オプション」→「マニュアル」の「┼」ボタンを押して、使いたい chm の名前とパスを登録します。
プログラム文書を開いて、コードの予約語の上にカーソルがある状態で F1 キーを押すと、該当キーワードのヘルプが表示されます。
予約語で右クリックしてポップアップ画面を表示して、[型を表示]を選択してもヘルプを表示できます。
マニュアルは、chm のパスに日本語が含まれておらず英数字のみなら、メニューの、「オプション」 → 「マニュアル名」をクリックしても、表示されます。
追記:コードの変数にカーソルを置いて[型を表示]を選択すると、この変数の型が表示されます。これも便利です。
プロジェクト
poseidonFB はシンプルなプロジェクト管理システムとペアになっいます。
プロジェクトを使って、ファイル/コンパイラ・オプション/指定されたコンパイラ/指定されたインクルードファイル・ディレクトリ/指定されたリンクライブラリ・ディレクトリ...、などできます。
まず、新しいプロジェクトを作成することから始めます:
メニューの、プロジェクト → 新しいプロジェクト をクリックすると、新しいプロジェクト設定ウィンドウがポップアップ表示されます。
メインタブは 2つあります。1つは一般で、さまざまな設定が含まれています。
もう 1つはインクルード...で、インクルード・パスとライブラリ・パスの設定が含まれています。
poseidon のプロジェクトはフォルダ・ベースで、すべてのプロジェクト情報は、1つの D.poseidon ファイルに格納されます。
1つのフォルダが、1つのプロジェクトになります。
このため、新しいプロジェクトを作成するには、まず作業ディレクトリを指定し、その後にプロジェクト名を指定します。
このプロジェクトの作成は完了せず、警告メッセージがポップアップ表示されます。
新しいプロジェクト:
新しいプロジェクトを作成する。
種類:
コンソール・アプリケーション / 静的ライブラリ / 動的リンク・ライブラリ。
プロジェクト・ディレクトリ:
新しいプロジェクトの作成中に一度設定するだけです。プロジェクトの作業パスは D.poseidon がある場所になります。
主ファイル:
使用しない。
目標名:
PoseidonD(PoseidonFB のパーサー) は、-ofTargetName をコンパイラに渡します。サフィックスを設定する必要はありません。
コンパイル・オプション:
コンパイラ・オプションを設定します。eq: -odobjs -L/SUBSYSTEM:windows:4
FBC パス:
このプロジェクトの D コンパイラのフルパスを設定すると、PoseidonD(PoseidonFB のパーサー) は、sc.ini(Windows)または sc.conf(linux)を検索して、phobos や tango などのデフォルト・モジュールをロードします。
焦点:
コンパイル・オプション/コンパイラ・パスの、複数設定
「焦点」の名前とコンパイル・オプション/コンパイラ・パスを設定します。そして、「適用」をクリックして保存します。
ドロップダウン・ボタンを使って選択し、「消しゴム」ボタンを使って削除します。
プロジェクトプロパティダイアログを表示せずに「焦点」をすばやく選択することもできます。PoseidonFB の下部で、プロジェクト名を右クリックしてクイック選択します。
「インクルード...」タブは、インポートパスとライブラリ検索パスの設定です。
インクルード・パス:
-Ipath をコンパイラに渡します。
ライブラリ・パス:
-L-Lpath をコンパイラに渡します(-L を optlinkに)
[追加]をクリックして、リストにパスを追加します。
[削除]をクリックして、リストからパスを削除します。
[編集]をクリックして、リストから既存のパスを編集します。
上下の[矢印]をクリックして、リスト内のパスの順序を変更します。
[追加]か[編集」ボタンをクリックすると、サブダイアログが表示されます:
パスは、直接設定するか、[開く]ボタンをクリックしてパスを選択できます。
PoseidonD(PoseidonFB のパーサー) は、2つの方法で、リンクするライブラリを追加できます。
(1)ソースコードに pragma(lib、"libraryName")を追加します。
たとえば、コンパイル中に iup.lib をリンクするには、以下をソースコードに追加します。
Windows:
pragma(lib, "iup.lib" );
Linux:
pragma(lib, "iup" );
(2)「コンパイル・オプション」に libraryName を追加します。
注意:
実際、プロジェクト名が指定されていないと、poseidonFB は、プロジェクト・ファイルを作成する時に、ディレクトリ名に従ってプロジェクト名を自動的に作成します。
作業ディレクトリは、手入力するか、アイコンをクリックして、フォルダ参照ダイアログを開き、選択して指定できます。
たとえば、D ドライブに testBASIC という名前のフォルダーを作成し、フォルダー参照のダイアログ・ボックスで選択します。
[OK]をクリックすると、プロジェクト・ツリーが生成されます。
プロジェクト・ツリーのブランチを右クリックして、ファイルを追加/追加/削除/削除/名前変更して、プロジェクト・ファイルの内容を編集します。
プロジェクト→プロジェクトを保存 で内容を保存します。
プロジェクト・ツリーの構造を見てみましょう。
Others は、任意のファイルを配置でき、プロジェクトが作成されたときに1つになります そして、コンパイラに送信します。この例では、ICON リソースファイルです。
プロジェクト名の項目を右クリックすると、メニューがポップアップ表示されます。
[エクスプローラーで開く]を選択すると、システムのメインライブラリを使ってプロジェクト・ディレクトリが開きます。
「Sources」「Includes」「Others」を右クリックすると、右のメニューがポップアップ表示されます。
作成したファイルを追加する場合は、ここから追加します。poseidonFBが関連する場所を自動的に選択します。
フォルダ・アイコンをクリックすると、右のメニューがポップアップ表示されます。作成できるのは新しいファイルとフォルダのみで、場所は現在のプロジェクト・ディレクトリに基づいています:
ファイル項目でマウスの右ボタンをクリックすると、右のメニューがポップアップします。
[削除]を選択すると、プロジェクトからファイルが削除されるだけでなく、ファイルも削除されることに注意してください。
最も基本的なプロジェクトには、プロジェクト名とディレクトリだけが含まれています。
他のフィールドに他の設定(コンパイラ・オプションなど)を入力できますが、プロジェクトに含まれる設定は1つだけではありません。
目標/コンパイル・オプション/コンパイラ・パス/インクルード・パス/ライブラリ・パスを含む、5つの項目について、複数の設定の組合せをプロジェクトに追加できます。
[焦点]項目に、マルチセット・プロジェクトの名前を入力します。
名前を設定し、上記の5つのフィールドに設定を入力します。設定後、[適用]を押して保存してください。
注意:
右のサンプル画像では、目標名がx32/KUAN であることがわかります。この項目には、フォルダー・ディレクトリ名を含めることができます。
poseidonFB は最初にファイルの構築時にフォルダーが存在するかどうかを検出し、フォルダーが作成されていないと、ファイルの構築時に自動的に追加します。
このディレクトリは Project Dir の下のサブディレクトリです。
例のプロジェクト・ディレクトリは D:/testBASIC で、目標名の絶対場所は D:/testBASIC/x32/KUAN です。
[適用]を押した後、[焦点]項目をクリックできます。
KUAN 項目が追加されていることがわかります。
選択して切り替えることができます。リストで空白の項目を選択すると、焦点のない元の設定に戻ります。
OK ボタンを押すと、新しいフォーカス項目を選択した場合、エディタ最下段のステータスバーに、プロジェクト名に加えてフォーカス項目ロゴが追加されていることがわかります。
プロジェクトロゴを右クリックすると、クイック選択ウィンドウがポップアップします。
毎回[プロジェクトプロパティ]ダイアログウィンドウを開かずにすばやく切り替えられます。
上記の例のように、KUANプロジェクトを選択することは、32ビットの FreeBASIC コンパイラーを使って、-v を使うことを意味します。
ビルド後、右のように表示されます。
クイックメニューを使って、<null> 空の項目を選択すると、右のようになります。
構文解析器(パーサー)
poseidon は、組み込みの字句解析(トークン・スキャナー)と構文解析器(パーサー)を備えています。
最初にファイルを読み込んでスキャンして、字句のかたまり(トークン)を生成し、次にトークンを解析して、AST(Ab-stract Syntax Tree 抽象構文木)でなく、parsedTree を直接生成します。
以下の情報を持つすべての parsedTree ノード:
(1) Kind
(2) Name
(3) Protection
(4) Type ( with Parameter )
(5) Base
(6) LineNumber
(7) EndLineNumber
ツリーのノード情報を読み取って、コード補完とコールチップを実装し、定義にジャンプして型情報などを表示できます。
parsedTree の構造体は、PoseidonD(PoseidonFB のパーサー) アウトラインとして表示されます:
最初のノードは D_MODULE 種類のノードです。
次に、その子レイヤーは、多くの D_IMPORT と D_TEMPLATE(子 D_FUNCTION のある集約テンプレート)x2です。
D_VERSION、D_TEMPLATE の子は、D_FUNCTION と、その子レイヤー D_ALIAS、D_VARIABLE…
ノードをダブルクリックすると、LineNumber 情報が読み込まれ、ドキュメントを特定の行にスクロールします。
(IUP treenode には parsedTree ノードへのポインタがあります)
ツールバー/検索リストのある「概観」パネル:
5つのボタンは、左から右に以下の内容です。
(1) 閉じる
(2) 概観ノードの表示変更(引数/戻り型(型):4回クリックできます
(3) 行番号を表示
(4) 頭から単語を検索します。(検索バー用)
(5) 現在のドキュメントのパーサーを更新(テキストを解析します。ファイルを保存する必要はありません)
(6) 概観パネルを非表示
「閉じる」をクリックすると、同じレイヤーのノードが折りたたまれます。
「パラメータの表示/戻り値の型(型)」は、4つの表示種類があります:
全て / パラメータのみ / 型のみ / なし。
クリックするたびに、ドキュメントの全ての既存の概観が表示変更されます。
「行番号を表示」は「概観ノードの表示変更」のように、全てのノードの行番号を表示します。
クリックするたびに、ドキュメントの全ての既存の外観が表示変更されます。
ノードの名前を検索する場合は、検索バーに単語を入力してから、「Alt」+「DOWN」(Linux では「Enter」での検索をサポート)を押すか、ドロップダウンボタンをクリックして検索対象を指定します(Linux はサポート外)。
検索では、常に大文字と小文字は区別されません。
「先頭から単語を検索」ボタンを押すと、検索フォームのノードタイトルの先頭を設定したり、ノード名の任意の位置を検索したりできます。
「全体から検索」ボタン
キーボードを使って一致リストを指定する場合、「UP」と「DOWN」を押して選択行を移動し、「ENTER」を押すと、ドキュメントが選択したノードの行番号にジャンプします。
マウスを使っている場合は、リスト項目までスクロールして、クリックして選択します。
poseidon パーサーは、parseidTree を生成した後、ファイル(* .d / * .di)(PoseidonD)または(* .bas / * .bi)(poseidonFB)をロードしているときに、機能し始めます。
次に poseidon は、2番目のレイヤー(D_MODULEの最初の子レイヤー)で D_IMPORTノードを検索します。
次に、D_IMPORT ファイルをロードして、もう一度解析します。
ただし、効率化のため、このメイン D_MODULE の D_IMPORT ファイルを解析するだけで、他の D_IMPORTのD_IMPORT は解析せず、ソースとその他の parsedTree をメモリに入れます。
Dコンパイラのインポート・パスは、sc.ini / dmd.conf ファイルと、プロジェクトの「インポートパス」で定義されているため、PoseidonD(PoseidonFB のパーサー) はそれによってファイルを検索します。
FreeBASIC には、独自のインクルード・ルールがあります --
(1) ソースファイルのディレクトリからの相対パス
(2) 現在の作業ディレクトリからの相対パス
(3) -i コマンドライン・オプションで指定された追加ディレクトリからの相対パス
(4) FreeBASIC インストールのインクルードフォルダ
実際、D言語は object.d / di を実行します。PoseidonD は起動中にそれをロードして解析を試み、poseidonFB で FB_BuiltinFunctions.bi(set-tings フォルダー内)をロード・解析してキーワードのコールチップを取得します。
自動補完
ポセイドンは、3種類の自動補完をサポートしています:
(1)キーワード補完
(2)インクルード補完(インポート補完)
(3)コード補完
環境設定 - 構文解析:
「キーワード自動補完を有効に」は、「構文解析を有効に」のオン/オフに関係なく機能します。
「環境設定」画面の「キーワード」タブに移動して、キーワードを編集することもできます。
(2)インクルード自動補完と(3)コード補完関連は、「構文解析を有効に」がオンの場合に機能します。
「インクルード自動補完」がオンでも、「構文解析」がオフだと、インクルード補完は機能しません。
「関数のパラメーターと種類を表示」の違いは次のとおりです:
「自動補完リストは大文字小文字を無視」と「自動補完リストの選択で大文字小文字を区別しない」は、大文字と小文字の区別に関するものです。
2つのオプションは、他の言語(poseidonFB)のためと個人的な習慣です。
「自動補完リスト種類を表示」は:
poseidon は、リストを並べ替え、重複するものを削除します。
このため、種類を指定した場合とそうでない場合で、表示結果が異なります。
(実際、異なるアイコンは、内容が違うことを示します)
「全てのメンバーを表示」は、プライベート・メンバーの表示/非表示を切替えます。
「オフ」の場合、ポセイドンは、メンバーが同位か、同じ parsedTree の範囲だけを確認します。
「裏スレッドでコード補完を有効に」が「オン」の場合、poseidon は2つのスレッドを作成し、裏処理で自動コンパイルとコールチップを実行します。
これにより、IDEアイドル待機を防ぎ、自動補完 / コールチップの結果を高速化しますが、バグがある場合もあります。
結果がおかしい場合やシステムが不安定な場合は「オフ」にしてください。
「関数のタイトルを表示」は、PoseidonFB ツールバーの右側にドキュメントのアクティブなブロックを表示します。
例えば、D_FUNCTION / D_CLASS / D_STRUCE などのように。
「自動更新レベル」は、キー入力して parsedTree に追加するものを動的に解析します。
(1)無し = オフにします。
(2)軽く = 1行を解析します。
(3)全て = 1つのブロックを解析します。 (遅いです)
「概観を更新」が「オン」の場合、解析結果を更新して概観のツリーが変更されます。
「概観」は正確でないため、必要に応じて「再構文解析」を使ってドキュメントを再度解析してください。
したがって、poseidon を起動してコンパイラのパスを設定し、新しいファイルを作成し、コードを入力すると、他の設定なしで自動補完が使えます。
poseidon のパーサーは、最初の目標が parsedTree を生成するためのものであり、parsedTree はオートコンプリート/コールチップを使うためのものなので、パーサーはあまり正確ではありません。
if / while / for / foreach / foreach / switch ブロックがなければ、下の画像のように、概観を見ることができます。結果は : char[] x2 ですが、自動補完の動作には影響しません。
コールチップ
「構文解析を有効に」が「ON」の場合、機能します。
コールチップには、3つの非表示の色変更設定があります。editorSettings.ini で、[COLOR] ブロックを見つけて、3つの項目を編集します。
calltipFore
calltipBack
calltipHLT
割り当ては = R G B です。
手動自動補完:
単語を追加/削除しなくても、ESC キーを押すか、カーソルを移動して自動補完リストをキャンセルするか、
既定のショートカットである Ctrl + Q を押すと、リストやコールチップが再び表示されます。
定義に移動:
トップ定義に移動:
「構文解析を有効に」が「オン」の場合、変数/関数の宣言にジャンプできます。parsedTree が作成されているため、簡単に実行できます。
宣言の場所にジャンプした後、元の場所に戻るには、「ナビゲーション・キャッシュ」を使って前後を見ることができます。
アイコンをクリックする以外に、ショートカットか、ALT +マウスの「左」/「右」クリックを使って実行することもできます。
含める階層:(poseidonFB)
このオプションは poseidonFB だけに存在します:
例えば、コードに「window9.bi」(Gui Library window9、https://sourceforge.net/projects/guiwindow9/ )が含まれる場合、window9.bi には多くの *.bi が含まれ、異なる *.bi にはさらに *.bi も含まれます。
poseidonFB の parsedTrees は非常に大きくなり、コード補完を実行するためにすべてのノードを検索して比較する必要があるため、速度が遅くなります。このため、*.bi を何度も解析しないように「含める階層」オプションが存在します。
poseidonFB >= reversion 0.435 でいくつかの変更をしました。プロジェクト内のすべてのファイルは回避するためにレベル0 です。レベル= 1 のときに FILE-1 は同じプロジェクトでも FILE-3 を使用できません。
「包含レベル」= 1の場合、下の写真での包含ルールは、FILE-2 と FILE-1 は FILE-B の parseTree を表示できますが、FILE-3 は FILE-A のみを表示します。
カスタム・ツール
PoseidonFB はカスタム・ツールを設定できます。カスタム・ツールは、ショートカット・キー(デフォルトはSHIFT + CTRL + F1 〜 F9)で起動します。
外部アプリケーションの呼び出しに加えて、poseidonFB は外部リンク・ライブラリ関数の呼び出しもサポートします。
いくつかの単純で固定されたルールを使って、poseidonFB の IUPフレームワーク・データ(scintilla を含む)に直接アクセスして、IUP 関数をカスタマイズしたり拡張したりできます。
カスタムツールを設定するには、メニューの [オプション] → [ツール] → [カスタム・ツール設定...] をクリックします。
設定できるツールの例:
電卓:calc.exe
エクスプローラ:Explorer
ペイント:mspaint.exe
メモ帳:notepad.exe
電卓は、「プログラマ」モードにしておくと、10進⇔16進の変換などできて便利です。
(1) External Application:
まず、外部アプリケーションを呼び出します。
1.最初に、[カスタム・ツール設定...] 画面の [┼ (追加)] ボタンをクリックします。
2.すると、名前付けウィンドウがポップアップします。ここに、カスタムツール項目の名前を入力します。
(ここでは、4 画面ファイラー Q-Dir をデモとして使います)。
(http://www.softwareok.com/?Download=Q-Dir )
3.Q-Dir の項目が、[カスタム・ツール設定...] 画面に追加されます。
Q-Dir 項目をクリックすると、「ツール」と「引数」の青いビットが空白になっていることがわかります。
ここで、「ツール」にカスタム・プログラムのパスを直接入力できます。
あるいは、右側の[開く]ボタンをクリックして、カスタム・プログラムのパスとアプリケーションを選択することもできます。
注意:
PoseidonFB に登録できるカスタムツールの数は、9 に制限されています。
4.[開く]を選択します。
5.「ツール」列に関連情報が入力されていることがわかります。「引数」は、後で説明する実行プログラムに渡されるパラメータです。
6.[OK]をクリックして[ツール]メニューに戻ると、「Q-Dir」が追加されていることがわかります。
ここでツールアプリを名をクリックして、起動させて使うことができます。
7.次に、「引数」フィールドのパラメータを説明します。
アプリケーションに固定パラメータを設定するだけでなく、poseidonFB のファイル名やプロジェクト名をアプリケーションに渡すために、特殊文字を設定することもできます。
特殊文字の定義は次のとおりです。
%s% = Selected Text
%f% = Active File Fullpath
%fn% = Active File Name
%fdir% = Active File Dir
%pn% = Active Prj Name
%p% = Active Prj Files
%pdir% = Active Prj Dir
特殊文字を含むヒントは、「引数」の名前の上にマウスカーソルを置くことで表示できます。渡辺注:うまく表示されない?
右は、Windows エクスプローラーを呼び出して、現在の poseidonFB 編集ファイルが配置されているディレクトリを開く例です。
外部ツールの選択肢からエクスプローラを実行すると、ファイルマネージャが開き、ディレクトリが現在のファイル・ディレクトリで表示されます。
(2) Plugin
PoseidonFB は D1.0 で記述されていますが、PoseidonFB は呼び出し用のダイナミック・リンクファイルなので、*.dll/*.so を呼び出すことで、カスタムツールを実行できます。
プラグインは、他のプログラミング言語で記述できます。
後で FreeBASIC で記述した簡単な例があります。
プラグインで IUP を使ってウィンドウ・プログラミングを実現できます。
IUP を使って poseidonFB の既存のハンドルを取得し、poseidonFB を拡張することもできます。
設定手順は外部アプリケーションと同じです。
poseidonFB は、補助ファイル名 が dll/so であることを確認することで動的ロードに入ります。
プラグインの簡単なルールは次のとおりです。
1.プログラムのエントリポイントは poseidonFB_Dll_Go()。
プラグインを起動すると、poseidonFB がこの関数を直接呼び出します。
2.ダイナミックロードを使うと、ダイナミック・リンクファイルを他の場所に配置できます。poseidonFB またはシステムと同じディレクトリにある必要はありません。
3.IUP を使って、poseidonFB がすでに開始されているため、IUP を再起動せずにプラグインを記述します。
4.作成する......... ^^
IUP:
IupGetHandle 関数を使う
IupGetHandle( "POSEIDONFB_MAIN_DIALOG" ), to get poseidonFB main dialog Ihandle
IupGetDialogChild 関数を使う
NAME = POSEIDONFB_MAIN_TABS, to get poseidonFB's main document IupFlatTabs Ihandle
NAME = POSEIDONFB_SUB_TABS, to get poseidonFB's sub(split) document IupFlatTabs Ihandle
NAME = POSEIDONFB_LEFT_TABS, to get poseidonFB's left( Project, Outline ) IupTabs Ihandle
NAME = POSEIDONFB_BOTTOM_TABS, to get poseidonFB's bottom( Message, Search ) IupFlatTabs(Win) / IupTabs(Lin) Ihandle
NAME = POSEIDONFB_TOOLBAR, to get poseidonFB's toolbar Ihandle
NAME = POSEIDONFB_TOOLBAR_New, POSEIDONFB_TOOLBAR_Open, POSEIDONFB_TOOLBAR_Save, POSEIDONFB_TOOLBAR_SaveAll, POSEIDONFB_TOOLBAR_Undo, POSEIDONFB_TOOLBAR_Redo, POSEIDONFB_TOOLBAR_ClearUndoBuffer, POSEIDONFB_TOOLBAR_Undo, POSEIDONFB_TOOLBAR_Redo, POSEIDONFB_TOOLBAR_Cut, POSEIDONFB_TOOLBAR_Copy, POSEIDONFB_TOOLBAR_Paste, POSEIDONFB_TOOLBAR_BackwardNav, POSEIDONFB_TOOLBAR_ForwardNav, POSEIDONFB_TOOLBAR_ClearNav, POSEIDONFB_TOOLBAR_Mark, POSEIDONFB_TOOLBAR_MarkPrev, POSEIDONFB_TOOLBAR_MarkNext, POSEIDONFB_TOOLBAR_MarkClear, POSEIDONFB_TOOLBAR_Compile, POSEIDONFB_TOOLBAR_CompileRun, POSEIDONFB_TOOLBAR_Run, POSEIDONFB_TOOLBAR_Build, POSEIDONFB_TOOLBAR_ReBuild, POSEIDONFB_TOOLBAR_QuickRun, POSEIDONFB_TOOLBAR_Gui, POSEIDONFB_TOOLBAR_Bit, POSEIDONFB_TOOLBAR_FunctionList, to get poseidonFB's toolbar buttons
NAME = POSEIDONFB_COMMANDLINE, the Ihandle of command receiver
poseidonFB に指示を送る:
IupSetAttribute( commandHandle, "VALUE", commandtxt )
commandtxt = NewFile, OpenFile, SaveFile, SaveAs, CloseFile, NewProject, OpenProject, CloseProject, CloseAllProject, SaveProject, SaveAllProject, ProjectProperties, Compile, CompileRun, Run, Build, ReBuild, QuickRun, Comment, UnComment
Plugin 例:
#include once "IUP/iup.bi"
#include once "IUP/iup_scintilla.bi"
'compile with -dll option
extern "C"
declare sub poseidonFB_Dll_Go alias "poseidonFB_Dll_Go" ()
dim shared as Ihandle ptr THIS_MAINDIALOG_HANDLE
dim shared as Ihandle ptr POSEIDONFB_HANDLE
' IUP Callback of This Dynamic Library (IUP)
' Using "IupGetHandle( "POSEIDONFB_MAIN_DIALOG" )" get poseidonFB main dialog
function case_ACTION cdecl( ih as Ihandle ptr ) as integer
if( poseidonfb_handle <> 0 ) then
dim as Ihandle ptr _MaintabsHandle = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_MAIN_TABS" )
if( _MaintabsHandle <> 0 ) then
dim as Ihandle ptr sci = cast( Ihandle ptr, IupGetAttribute( _MaintabsHandle, "VALUE_HANDLE" ) )
if( sci <> 0 ) then
dim as zstring ptr filestring = IupGetAttribute( sci, "VALUE" ), _name = IupGetAttribute( ih, strptr( "NAME" ) )
dim as string document
if( _name[0] = "UPPERCASE" ) then document = ucase( filestring[0] ) else document = lcase( filestring[0] )
IupSetAttribute( sci, "VALUE", document )
end if
end if
end if
return IUP_DEFAULT
end function
' newdoc_ACTION & closedoc_ACTION not work in Linux yet...
function newdoc_ACTION cdecl( ih as Ihandle ptr ) as integer
#if defined(__fb_win32__)
if( POSEIDONFB_HANDLE <> 0 ) then
IupSetFocus( POSEIDONFB_HANDLE )
IupSetGlobal( "KEY", str( iup_XkeyCtrl( 110 ) ) )
end if
#else
if( POSEIDONFB_HANDLE <> 0 ) then
dim as Ihandle ptr _command = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_COMMANDLINE" )
/'
We can send command message by using POSEIDONFB_COMMANDLINE
POSEIDONFB_COMMANDLINE is an iupScintilla object, at first we set our command text, ex: IupSetAttribute( _command, "VALUE", "NewFile" ),
then auto trigger by SAVEPOINT_CB callback function to run the poseidonFB internal fuction.
Now the command text include:
NewFile, OpenFile, SaveFile, SaveAs, CloseFile, ...
'/
if( _command <> 0 ) then IupSetAttribute( _command, "VALUE", "NewFile" ) ' Set POSEIDONFB_COMMANDLINE command text the trigger
end if
#endif
return IUP_DEFAULT
end function
function savedoc_ACTION cdecl( ih as Ihandle ptr ) as integer
if( POSEIDONFB_HANDLE <> 0 ) then
dim as Ihandle ptr _MaintabsHandle = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_MAIN_TABS" )
if( _MaintabsHandle <> 0 ) then
dim as Ihandle ptr sci = cast( Ihandle ptr, IupGetAttribute( _MaintabsHandle, "VALUE_HANDLE" ) ) 'Get Active Doc Tab(iupscintilla handle)
if( sci <> 0 ) then
dim as Ihandle ptr _command = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_COMMANDLINE" )
if( _command <> 0 ) then IupSetAttribute( _command, "VALUE", "SaveFile" )
end if
end if
end if
return IUP_DEFAULT
end function
function closedoc_ACTION cdecl( ih as Ihandle ptr ) as integer
if( POSEIDONFB_HANDLE <> 0 ) then
dim as Ihandle ptr _MaintabsHandle = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_MAIN_TABS" )
if( _MaintabsHandle <> 0 ) then
dim as Ihandle ptr sci = cast( Ihandle ptr, IupGetAttribute( _MaintabsHandle, "VALUE_HANDLE" ) ) 'Get Active Doc Tab(iupscintilla handle)
if( sci <> 0 ) then
dim as Ihandle ptr _command = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_COMMANDLINE" )
if( _command <> 0 ) then IupSetAttribute( _command, "VALUE", "CloseFile" )
end if
end if
end if
return IUP_DEFAULT
end function
function annoButton_ACTION cdecl( ih as Ihandle ptr ) as integer
if( poseidonfb_handle <> 0 ) then
dim as Ihandle ptr _MaintabsHandle = IupGetDialogChild( POSEIDONFB_HANDLE, "POSEIDONFB_MAIN_TABS" )
if( _MaintabsHandle <> 0 ) then
dim as Ihandle ptr sci = cast( Ihandle ptr, IupGetAttribute( _MaintabsHandle, "VALUE_HANDLE" ) ) 'Get Active Doc Tab(iupscintilla handle)
if( sci <> 0 ) then
' Get annoText Text
dim as Ihandle ptr _annoTextHandle = IupGetDialogChild( THIS_MAINDIALOG_HANDLE, "ANNOTEXT" )
if( _annoTextHandle <> 0 ) then
IupSetFocus( sci )
dim as integer _currentPos = cast(integer, IupScintillaSendMessage( sci, 2008, 0, 0 ) ) ' SCI_GETCURRENTPOS = 2008
dim as integer _currentLin = cast(integer, IupScintillaSendMessage( sci, 2166, _currentPos, 0 ) ) ' SCI_LINEFROMPOSITION = 2166
if( IupGetInt( _annoTextHandle, "COUNT" ) > 0 ) then
IupSetIntId( sci, "ANNOTATIONSTYLE", _currentLin, 41 ) ' Use ANNOTATIONSTYLE 41 of poseidonFB
IupSetAttributeId( sci, "ANNOTATIONTEXT", _currentLin, IupGetAttribute( _annoTextHandle, "VALUE" ) )
IupSetAttribute( sci, "ANNOTATIONVISIBLE", "BOXED" )
end if
end if
end if
end if
end if
return IUP_DEFAULT
end function
' Main
sub poseidonFB_Dll_Go alias "poseidonFB_Dll_Go"() export
' The main IupOpen() is already ran by poseidonFB, no need anymore
POSEIDONFB_HANDLE = IupGetHandle( "POSEIDONFB_MAIN_DIALOG" ) ' Get poseidonFB main dialog handle(IUP)
if( POSEIDONFB_HANDLE <> 0 ) then
' Check the THIS_MAINDIALOG_HANDLE is already created......
if( THIS_MAINDIALOG_HANDLE = 0 ) then
THIS_MAINDIALOG_HANDLE = IupDialog( 0 )
IupSetAttributes( THIS_MAINDIALOG_HANDLE, "TITLE=Control_Panel,SIZE=NULL,PARENTDIALOG=POSEIDONFB_MAIN_DIALOG,RESIZE=NO,MAXBOX=NO,MINBOX=NO" )
dim as ihandle ptr uppercase, lowercase, newdoc, closedoc, savedoc, annoText, annoButton
uppercase = IupButton( "Upper Case", 0 )
IupSetAttributes( uppercase, "NAME=UPPERCASE" )
IupSetCallback( uppercase, "ACTION", cast( Icallback, @case_ACTION ) )
lowercase = IupButton( "Lower Case", 0 )
IupSetAttributes( lowercase, "NAME=LOWERCASE" )
IupSetCallback( lowercase, "ACTION", cast( Icallback, @case_ACTION ) )
newdoc = IupButton( "New File", 0 )
IupSetAttributes( newdoc, "NAME=NEWDOC" )
IupSetCallback( newdoc, "ACTION", cast( Icallback, @newdoc_ACTION ) )
savedoc = IupButton( "Save File", 0 )
IupSetAttributes( savedoc, "NAME=SAVEDOC" )
IupSetCallback( savedoc, "ACTION", cast( Icallback, @savedoc_ACTION ) )
closedoc = IupButton( "Close File", 0 )
IupSetAttributes( closedoc, "NAME=CLOSEDOC" )
IupSetCallback( closedoc, "ACTION", cast( Icallback, @closedoc_ACTION ) )
annoText = IupText( 0 )
IupSetAttributes( annoText, "SIZE=-1x50,MULTILINE=YES,NAME=ANNOTEXT" )
annoButton = IupButton( "Paste ANNOTATION", 0 )
IupSetAttributes( annoButton, "SIZE=-1x16,NAME=ANNOBUTTON" )
IupSetCallback( annoButton, "ACTION", cast( Icallback, @annoButton_ACTION ) )
' Layout
dim as Ihandle ptr hbox0 = IupHbox( uppercase, lowercase, newdoc, savedoc, closedoc, 0 )
dim as Ihandle ptr vbox0 = IupVbox( hbox0, annoText, annoButton, 0 )
IupSetAttributes( vbox0, "EXPANDCHILDREN=YES" )
' Append to main dialog
IupAppend( THIS_MAINDIALOG_HANDLE, vbox0 )
IupShowXY( THIS_MAINDIALOG_HANDLE, IUP_RIGHT, IUP_CENTER )
else
IupShow( THIS_MAINDIALOG_HANDLE )
end if
end if
end sub
end extern
デバッグ
デバッグの経験があまりなくて申し訳ありませんが、最善を尽くして、画面でどのように機能するか説明します。
poseidonFB は gdb を使ってデバッグします。公式の freeBASIC のパックには、32ビットの gdb も64ビットも含まれます(64ビットのプログラムをデバッグするには、64ビットのデバッガが必要です)。
https://www.freebasic.net/forum/viewtopic.php?f=6&t=27859 からダウンロードして、64ビットの gdb をインストールします。
以下の条件でテストして動作しました:
(1) freeBASIC 1.07.1, Win32 with GNU gdb (GDB) 7.6.1
(2) freeBASIC 1.07.1, Win64 with GNU gdb (GDB) 9.1 ( srvaldez built )
(3) freeBASIC 1.07.1, linux mint 18 64bit with GNU gdb (Ubuntu 7.11-0ubuntu1) 7.11
[環境設定]→ [コンパイラ] で、デバッガパスを設定します。
Win32 の場合:\FreeBASIC\bin\win32\gdb.exe
Linuxでは、「gdb」と入力するだけです(最初にインストールが必要です)
(rev.439以降、x64 gdb パスを設定できます)
アプリケーションにデバッグ情報を追加するには、-g オプションを使ってソースをコンパイルする必要があります。
すでにプロジェクトを作成(使用)している場合は、メニューから、 [デバッグ]→ [デバッグ+プロジェクト構築]を使います。poseidon は、プロジェクトのすべての設定を適用し、-g オプションを追加します。
-g オプションでソースをコンパイルした後、[デバッグ実行]をクリックしてデバッグを開始します。
poseidon は、gdb を別のスレッドで実行するため、poseidon を操作してブレーク・ポイントを設定したり、引数を設定したりできます。
Left:
Right:
中止点(ブレークポイント):
中止点を設定する 2 つの方法:
1. 余白で CTRL + left-CLICK を使って直接設定
2. 余白で右クリックして、ポップアップ・メニューから「中止点」を選択
[実行/続行]を押すと中止点まで実行します。
アプリケーションに引数を送るる必要がある場合は、[実行/続行]ボタンを右クリックします。
余白には、デバッガーが実行されている実際の行が、赤い矢印/赤い下線付きで表示され、アクティブなフレームも表示されます。
デバッグ・パネルの右側では、ローカル変数リストが自動更新されます。
ツリー・ノードが {...} の場合、ダブル・クリックで展開します。
ツール・バー:
左から右に:
(1) 実行/継続
(2) 中断
(3) ステップ
(4) 次
(5) 戻る
(6) 〜まで
(7) コンソール画面を消去
(8) デバッグスレッドを終了
コマンド・ライン: コマンドを gdb に直接送ります。
「ステップ」ボタンを押してデバッグを段階的に実行すると、ローカル変数の値が更新され、変更された変数は 赤 で色分けされます。
ノードを右クリックして、@address / *Value を表示することもできます:
ノードの葉をダブル・クリックして、値を設定できます。
監視リスト:
変数を監視リストに追加するには、いくつかの方法があります。
最初の方法は[追加]ボタンを押すことです。するとダイアログがポップアップし、変数名にキーを入力します。
2番目の方法は、ドキュメントの単語を選択し、右クリックして[監視リストに追加]をクリックすると、ダイアログに選択した単語がポップアップ表示されます。
3番目の方法は、変数パネルからです(「右矢印」ボタンを使います)。
監視リストは、変数の @address / *Value を表示することもサポートしており、poseidon は新しい値を監視リストに追加するかどうかを尋ねます。
フレームパネル:
このパネルは、機能しているフレームを表示します。青色の単語(選択ではない)がアクティブなフレームです。
ダブルクリックしてフレームを変更できます。もちろん、監視リストと変数パネルも更新されます。
コンパイラ・オプション
poseidonFB はいくつかの方法で、コンパイラ・オプションを設定できます。
(1).あつらえコンパイラ・オプション
IDEのステータスバーの左下にあるアイコン( )を右クリックします。
初めて使うとき、ポップアップ画面には「無し」と「構成」という項目が表示されます。
しかし、すでに何か項目を設定していれば、項目リストが表示されます。
または:
'無し' = 'あつらえコンパイラ・オプション' を null に設定すると、ステータスバーにはタグが表示されず、コンパイラにオプションは渡されません。
'構成' = 'あつらえコンパイラ・オプション...' 編集ダイアログに入ります。
分離線の上の 'その他' = 以前に作成したタグで、クリックして選択すると、ステータスバーにタグが表示され、コンパイルに
使うためにオプションがコンパイラに渡されます。
最初に使うときは、「構成...」をクリックして、「あつらえコンパイラ・オプション...」編集画面を開きます。
'あつらえコンパイラ・オプション... ' 編集画面:
「+追加」をクリックして新しいタグを作成します。例: 'DEFAULT'を作成
ダイアログのリストに「DEFAULT」という名前の新しい項目が追加され、コンパイラ・オプションを設定して「適用」をクリックします。
小さなメッセージボックスに、保存OKが表示されます。
注意:
「OK」をクリックしないと、設定は保存されません。
これで、ポップアップウィンドウで、保存した設定を選択して呼び出すことができます。これはコンパイル中にコンパイラに渡されます
設定を選択する簡単な方法:
適用後、リストの項目をダブルクリックすると、新しいタグがステータスバーに表示されます。
注意:
まだ項目が適用されていないときは、この方法は使えません。
(2).プロジェクト・コンパイルオプション
これはプロジェクト専用で、「プロジェクト構築」でのみ動作します。
新しいプロジェクトを作成するときに設定するか、「プロパティ ...」を使って編集します。
注意:
このオプションは、「あつらえコンパイラ・オプション」の選択を無視します。
しかし、 'プロジェクト・コンパイルオプション' = nullの場合、 'あつらえコンパイラ・オプション'が使われます。
(3).'Compiler Options / EXEArguments'
これは隠れた項目で、非常に便利です。
ツールバーの、コンパイル/構築/実行 アイコンを右クリックします。
「コンパイラ・オプション/ EXE引数」画面が表示され、コンパイラに渡すコンパイル・オプションをキー入力したり、EXEに渡す引数を入力します。
そして「クイック実行」ボタンを右クリックします。
この画面は 'あつらえコンパイラ・オプション'と同じ(表題だけ違う...)ですが、新しいオプションを 'コンパイル・オプション' 編集ボックスに直接入力できます。
また、リストの項目をクリックすることもできます。
'コンパイル・オプション' 編集ボックスには、以前の設定が表示されます。
コンパイル/構築/実行するために、[実行]をクリックすると、コンパイラにオプションを渡します。
null(何もなし)オプション/引数を、コンパイラ/ EXEに送りたい場合は、編集ボックスは空のままにしておきます。
'コンパイル・オプション'と '実行引数'は、編集ボックスでもコンボボックスになっています。
これは常に以前の操作でのオプション(手作業でキー入力したものも、保存した項目も)を保存し、それを上位項目に保持
するので、同じオプションを使うときに便利です。
コンボボックスは、デフォルトで最大15個の異なる項目を保存できます。この数は、poseidonFBのeditorSettings.iniを編集して最大値を変更できます。これらはファイルの最後の方にあります:
[recentOptions]=
max=15
[recentArgs]=
max=15
例:
-exxオプションを指定して、'Hello World' を即実行します。
上記の例では、「あつらえコンパイラ・オプション」は「DEFAULT」に設定されていますが、その設定はコンパイラには渡されません。
「コンパイラ・オプション/実行引数」と「あつらえコンパイラ・オプション」は排他で、一度にできるのは一方のみです。
注意:
'コンパイラ・オプション/実行引数'はコンパイラ・オプションを素早く設定するためのものです。
'プロジェクト構築'を右クリックすると、オプションは 'プロジェクト・コンパイラ・オプション'でコンパイラに送られます。
(4).'Console / GUI'
コンパイラに追加のオプションを送ると、コンパイラ・オプションと組み合わせることができます。
’Console’ =
オプションを渡しません。
(‘-s console’と同じため )
’GUI’ = コンパイラに‘-sgui’を渡します。
(5).’32 / 64 bit’
コンパイラ・オプションではありません。32/64ビットコンパイラを素早く切り替えるために設計しました。
32/64ビット・コンパイラのパス設定は、「オプション」→「環境設定」の、コンパイラ画面にあります。