HAIKUでプログラムを作成する方法


1990年代に販売(のちに個人向けに無償配布)されたBeOSの互換を目指して開発中のフリーソフトOSであるHAIKUにBeIDEのような統合開発環境としてはPaladinなどがあるがBeIDEほど使い勝手はよくなく解説書などもない。

そのため開発はコマンド入力による方法が主となる。(2024/7/19追記:2023年ごろからGenioという統合開発環境が登場している。)

プログラミングの準備

ソースファイルとヘッダファイルおよびmakefileは下のように作成する。

MAKEコマンドでコンパイルするためソースファイルのある場所でOpen Terminalを起動する。

makeコマンドを実行。

コンパイルに成功すると下のように表示される。


makefileの書き方

編集はメニューバーから"Edit","Edit as text"を選ぶ。

変更部分

NAME=test

この例ではアプリ名をtestと設定。

TYPE=APP

APPは実行形式のファイル。

SRCS = \
     test.cpp\

\の部分はHAIKUでは逆スラッシュで表示される。
この例ではtest.cppをソースファイルとして登録。

LIBS = be

beは必須。他に必要なライブラリを追加できる。

LOCALE = ja-JP

2バイトコードで文字表示をするために英語以外であることを設定。


ウィンドウ表示サンプル

BWindowクラスを使用したサンプル。

test.cpp

#include "test.h"

MyWindow::MyWindow(BRect frame,const char* title,window_type type,uint32 flags) : BWindow(frame,title,type,flags)
{

}

bool MyWindow::QuitRequested()
{
be_app->PostMessage(B_QUIT_REQUESTED);
return true;
}

MyApp::MyApp() : BApplication("application/x-vnd.apptest")
{
m_win = new MyWindow(BRect(100,100,400,400),"test",B_DOCUMENT_WINDOW,0);
m_win->Show();
}

int main(int argc,char** argv)
{
MyApp *app;
app = new MyApp();
app->Run();
delete app;
return true;
}

test.h

#ifndef _H
#define _H

#include <Application.h>
#include <Window.h>

class MyWindow : public BWindow
{
public:
MyWindow(BRect frame,const char* title,window_type type,uint32 flags);
virtual bool QuitRequested();
};

class MyApp : public BApplication
{
public:
MyApp();
private:
MyWindow* m_win;
};

#endif // _H

BViewクラスを追加したサンプル。

test.cpp

#include "test.h"

MyWindow::MyWindow(BRect frame,const char* title,window_type type,uint32 flags) : BWindow(frame,title,type,flags)
{
MyView = new BView(BRect (0,0,300,300),"view",B_FOLLOW_TOP | B_FOLLOW_LEFT,0) ;
MyView->SetViewColor(127,127,123);
AddChild(MyView);
}

bool MyWindow::QuitRequested()
{
be_app->PostMessage(B_QUIT_REQUESTED);
return true;
}

MyApp::MyApp() : BApplication("application/x-vnd.apptest")
{
m_win = new MyWindow(BRect(100,100,400,400),"test",B_DOCUMENT_WINDOW,0);
m_win->Show();
}

int main(int argc,char** argv)
{
MyApp *app;
app = new MyApp();
app->Run();
delete app;
return true;
}

test.h

#ifndef _H
#define _H

#include <Application.h>
#include <Window.h>
#include <View.h>

class MyWindow : public BWindow
{
public:
MyWindow(BRect frame,const char* title,window_type type,uint32 flags);
virtual bool QuitRequested();
private:
BView* MyView;
};

class MyApp : public BApplication
{
public:
MyApp();
private:
MyWindow* m_win;
};

#endif // _H