DevMaster.net 피드를 통해서 알게 된 엔진. 멀티 플랫폼 기반에 BSD 라이센스 적용.
IDE, eC(객체지향 C 정도 된다고 함) eC 는 스크립트가 아니라 네이티브라고 함. IDE, SDK 를 eC 로 개발했고 c 와 링크도 된다고 함. eC sharp 라고 하는것도 언뜻 본것 같긴한데 일단 간략한 소스를 보니 너무 씸플해 보임.
소스를 구할 수 있는곳은 대부분 오픈소스 프로젝트를 호스팅 하는 곳에서는 다 구할 수 있는듯 너무 많음;
국민 예제..
class HelloApp : Application
{
void Main()
{
PrintLn("Hello, World!!");
}
}
gui 코드도 살짝 살펴보면..
// ecas -- By Joey Adams
import "ecere"
import "expression"
class Form1 : Window
{
text = "Simple Parser";
background = activeBorder;
borderStyle = sizable;
hasMaximize = true;
hasMinimize = true;
hasClose = true;
size = { 576, 432 };
anchor = { horz = -3, vert = -4 };
bool OnCreate(void)
{
return true;
}
bool OnKeyHit(Key key, unichar ch)
{
if (ch=='\r')
DoParse(true);
return true;
}
void DoParse(bool simplify) {
EditBoxStream s;
CASDictionary dict {};
Expression expr {};
Expression exprCopy;
outputTree.Clear();
s = {editBox=outputTree};
if (expr.FromString(inputString.contents, dict)) {
statusLabel.SetText("Parse successful");
if (simplify)
expr.Simplify(dict);
}
else
statusLabel.SetText("Invalid expression");
expr.DebugPrint(s, dict, 0, null);
s.Printf("\nCopy:\n");
exprCopy = expr.Copy(null);
delete expr;
exprCopy.DebugPrint(s, dict, 0, null);
delete s;
delete dict;
delete exprCopy;
}
Button parseButton
{
this, text = "Parse", size = { 75, 30 }, position = { 10, 40 };
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
DoParse(false);
return true;
}
};
Button simplifyButton
{
this, text = "Simplify", size = { 75, 30 }, position = { 90, 40 };
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
DoParse(true);
return true;
}
};
bool TypeButton(Button button, int x, int y, Modifiers mods) {
inputString.Activate();
inputString.Deselect();
inputString.AddS(button.text);
inputString.Update(null);
}
Label statusLabel { this, size = { 274, 21 }, position = { 250, 45 } };
Button ebutton { this, text = constant_string[e], NotifyClicked = TypeButton, size = { 20, 20 }, position = { 170, 45 } };
Button ibutton { this, text = constant_string[i], NotifyClicked = TypeButton, size = { 20, 20 }, position = { 195, 45 } };
Button pibutton { this, text = constant_string[pi], NotifyClicked = TypeButton, size = { 20, 20 }, position = { 220, 45 } };
EditBox outputTree { this, font = { "Courier New", 10 }, size = { 286, 219 }, position = { 10, 80 }, hasHorzScroll = true, true, readOnly = true, true };
EditBox inputString { this, text = "inputString", size = { 350, 19 }, position = { 10, 10 } };
void OnResize(int width, int height)
{
inputString.size.w = clientSize.w-20;
//parseButton.position.x = (clientSize.w-parseButton.size.w)/2;
statusLabel.size.w = clientSize.w-statusLabel.position.x-10;
outputTree.size.w = clientSize.w-20;
outputTree.size.h = clientSize.h-outputTree.position.y-10;
}
}
Form1 form1 {};
일단은 여기까지..
3월 21일 추가 -----
음 간단한 내용을 컴파일해보고 ide 를 돌려본 결과.. 생각만큼의 퀄리티가 나오지 않더라 하는 깨닳음을 얻음. 그리고 ec 포멧을 컴파일 하는 중간 파일이 c 파일이 나와서 그것이 컴파일 되는것으로 보임.