· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
zeta


1. Àо±â

ÀÌ ÆäÀÌÁöÀÇ ³»¿ëÀº Zeta ÆÐŰÁö¿¡ Æ÷ÇÔµÈ docs/README ¹®¼­ÀÇ ³»¿ë°ú °°½À´Ï´Ù. ´ë°³ À§Å° ÆäÀÌÁöÀÇ ³»¿ëÀÌ ´õ ÃÖ½ÅÀ̸ç, ´õ dzºÎÇÕ´Ï´Ù.

1.1. °³¿ä

Zeta´Â ÀÛÀº ¹Ì´Ï ÀÀ¿ëÇÁ·Î±×·¥À» ¸¸µé°í ±¸µ¿½Ãų ¼ö ÀÖ´Â ÅøÀÔ´Ï´Ù. Àͼ÷ÇÑ ÀÚ¹Ù ¾ð¾î¿Í SWT·Î ¼Õ½±°Ô ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÀ¸¸ç, XML¸¸À» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Á¦ÀÛ ¹æ¹ýÀº ȨÆäÀÌÁö¿Í demo µð·ºÅ͸®ÀÇ ¿¹Á¦µéÀ» Âü°íÇϼ¼¿ä. Zeta Pure´Â JDK¿Í SWT°¡ Áö¿øµÇ´Â ¸ðµç Ç÷§Æû¿¡¼­ »ç¿ë °¡´ÉÇϸç, À©µµ¿ì¿ëÀ¸·Î´Â GCJ·Î ÄÄÆÄÀÏµÈ ¹ÙÀ̳ʸ®¸¦ ¹èÆ÷ÇÕ´Ï´Ù.

ÇöÀç ÀÌ ÇÁ·ÎÁ§Æ®´Â GCJ, SWT, BeanShell, CookXMLÀ» ÀÌ¿ëÇϸç, ÃßÈÄ Groovy, Jython, JavascriptµîÀ» ±âº» Áö¿øÇÒ ¿¹Á¤ÀÔ´Ï´Ù.

1.3. »ç¿ë¹ý

Zeta.exe³ª Zeta.jar¸¦ ½ÇÇàÇÕ´Ï´Ù.

1.4. °³¹ß ȯ°æ

Zeta 0.1 - 0.2 :
  • javac/jar´Â Sun J2SE 1.5.0_8À» »ç¿ëÇÕ´Ï´Ù.
  • Windows ¿¡¼­ Á¦À۵ǾúÀ¸³ª, OS Á¾¼ÓÀûÀÎ ÄÚµå´Â »ç¿ëÇÏÁö ¾Ê´Â ¸¸Å­ JDK¿Í SWT°¡ Áö¿øµÇ´Â ¸ðµç ȯ°æ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
  • ¸ðµâ ÀÛ¼º½Ã¿¡´Â ¿¡´Â OS µ¶¸³ÀûÀÎ ÄÚµå¶ó´Â Á¦ÇÑÀÌ ¾ø½À´Ï´Ù.
  • IDE ȯ°æÀº JEdit 4.3 pre6 ÀÔ´Ï´Ù. ÇÁ·ÎÁ§Æ® °ü¸® ±â´ÉÀ» »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î ¹«½¼ ¿¡µðÅ͸¦ »ç¿ëÇÏµç »ó°üÀº ¾ø½À´Ï´Ù. ´Ü, ¸ðµç ¼Ò½º ÆÄÀÏ¿¡ UNIX Line Separator / UTF-8 Encoding ÀÌ ¿øÄ¢ÀÔ´Ï´Ù.
  • ¸ðµç zip ÆÄÀÏÀº 7-Zip 4.4.2·Î ÀÛ¼ºµÇ¾ú½À´Ï´Ù.
  • JAR ¹ÙÀ̳ʸ® ÀÛ¼ºÀ» À§ÇÑ ¸ÅÅ©·Î´Â zar.bat À̸ç, ³×ÀÌÆ¼ºê ¹ÙÀ̳ʸ® »ý¼ºÀ» À§ÇÑ ¸ÅÅ©·Î´Â zjc.bat ÀÔ´Ï´Ù. Á¶±Ý º¯°æÇÏ¸é ´Ù¸¥ OS¿¡¼­µµ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
  • SWT
  • GCJ, UPX : javacompiler ÇÁ·ÎÁ§Æ®ÀÇ javacompiler 0.8¿¡ Æ÷ÇÔµÈ °ÍÀ» »ç¿ëÇÕ´Ï´Ù. GCJ´Â Windows¿Í Linux¿ëÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
  • BeanShell
    • bsh-core-2.0b4.jar
    • bsh-classgen-2.0b4.jar
    • bsh-classpath-2.0b4.jar
    • bsh-commands-2.0b4.jar
    • bsh-reflect-2.0b4.jar
    • http://www.beanshell.org
  • CookXML: XMLÀ» ÀÌ¿ëÇÑ SWT ¹× ºó¼Ð ½ºÅ©¸³ÆÃÀ» Áö¿øÇϱâ À§ÇØ »ç¿ëµË´Ï´Ù.

1.5. ÀúÀÛ±Ç

Zeta´Â GPL v2 ÇÏ¿¡ ¹èÆ÷µË´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº docs/LICENSE¸¦ Âü°íÇϼ¼¿ä.

1.6. ´Þ¶óÁø Á¡

0.1 : ÃÖÃÊ °ø°³ ¹öÀü. 0.2 :
  • SWT 3.1 / CookSWT 1.1.2 -> SWT 3.2 / CookSWT 1.2.1 ¾÷µ¥ÀÌÆ®.
  • ¼¼¼Ç ÀÚµ¿ °ü¸® : ½ÃÀ۽à ¸¶Áö¸· »ç¿ë ÈÄ Á¾·áÇÏÁö ¾ÊÀº ¸ðµâµéÀ» ºÒ·¯¿È ´Ü, ShellÀ» ¸®ÅÏÇÏ´Â ½ºÅ©¸³Æ® ¹× ¸ðµâ¿¡ ÇÑÇÔ.
  • ±âº» Import ÆÐŰÁö º¯°æ (config/import.bsh)
  • bsh, xml ÆÄÀÏ ³» ÇÑ±Û ¹®Á¦ ÇØ°á(file.encoding=utf8)
  • Àâ´ÙÇÑ ÄÜ¼Ö °³¼± ¹× µ¥¸ð º¯°æ
  • Äֿܼ¡ EvalError ¿Ü¿¡ Æ÷°ýÀûÀÎ Exception Ãâ·ÂµÊ.
  • (Native) ÆÄ½Ì ¹®Á¦ ÇØ°á, XML ¸ðµâ Á¤»ó »ç¿ë °¡´É
  • (Native) Pentium 2 ÃÖÀûÈ­ (-march=pentium2)

1.7. ¾Ë·ÁÁø ¹®Á¦Á¡

  • (Native) gnu/regexp/MessagesBundle.properties ¾øÀÌ ½ÇÇàµÇÁö ¾Ê´Â ¹®Á¦ DIARY - 'Native/Win32 : MessagesBundle Ŭ·¡½º ¹®Á¦(06.09.03)' Âü°í

2. Zeta¿ë ÇÁ·Î±×·¥ Á¦ÀÛ

ÇöÀç bsh¿Í cookswt¸¦ »ç¿ëÇÑ xml·Î ¸¸µé ¼ö ÀÖ½À´Ï´Ù. »ç¿ë¹ýÀº Æ®·¹ÀÌÀÇ zeta ¾ÆÀÌÄÜÀÇ ¸Þ´º¸¦ ¿­¾î Load¸¦ ¼±ÅÃÇÑ µÚ ÆÄÀÏÀ» ¼±ÅÃÇÏ¸é µË´Ï´Ù. ÄܼÖÀ» ¿­¸é ÇÁ·ÒÇÁÆ®¿¡¼­ ºó¼Ð ½ºÅ©¸³ÆÃ ¹× ¿¹¿Ü ¹ß»ý µî¿¡ ´ëÇÑ ±â·ÏÀ» º¼ ¼ö ÀÖÀ¸¸ç, ¿©·¯ ¼ÐÀ» ¶ç¿î »óÅ¿¡¼­ zeta ¾ÆÀÌÄÜÀ» Ŭ¸¯ÇÏ´Â °ÍÀ¸·Î consoleÀ» Á¦¿ÜÇÑ ¸ðµç ¼ÐÀ» º¸ÀÌ°Ô Çϰųª °¨Ãâ ¼ö ÀÖ½À´Ï´Ù.

2.1. ¿¹Á¦µé

2.1.1. demo/HelloWorld1.bsh

zeta´Â bsh ÆÄÀÏÀ» ÀоîµéÀÏ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº SWT·Î °£´ÜÇÑ Ã¢À» Ãâ·ÂÇÏ´Â bsh ½ºÅ©¸³Æ®ÀÔ´Ï´Ù.
class Hello{
        public Hello(){
                Display d = Display.getCurrent();
                Shell s = new Shell(d, SWT.SHELL_TRIM | SWT.TOOL);
                Label l = new Label(s, SWT.CENTER);
                s.setLayout(new FillLayout());
                String str = "Hello, Zeta!";
                l.setText(str);
                s.setText(str);
                s.pack();
                s.open();
        }
}
new Hello();
Ŭ·¡½º¸¦ ±»ÀÌ »ç¿ëÇÏÁö ¾Ê¾Æµµ µÇÁö¸¸, º¯¼ö¸í µîÀÇ Ãæµ¹À» ¹æÁöÇϱâ À§ÇØ ±ÇÀåÇÕ´Ï´Ù.

2.1.2. demo/HelloWorld4.xml

zeta´Â xml ÆÄÀÏÀ» cookswt¸¦ ÀÌ¿ëÇØ ÆÄ½ÌÇÕ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ½ºÅ©¸³Æ®¸¦ xml¿¡ ³»ÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.
<!-- original source by http://cookxml.sourceforge.net/cookbsh/ -->
<shell style="SHELL_TRIM | TOOL" text="Hello World!" size="320,240">
        <filllayout type="VERTICAL">
                <clabel id="label" style="BORDER | CENTER" text="Hello, Zeta! 4"/>
                <button text="Click!">
                        <bsh func="addSelectionListener">
                                import org.eclipse.swt.events.SelectionListener;
                                import org.eclipse.swt.events.SelectionEvent;
                
                                widgetSelected( e )
                                {
                                        label.setText(e.source.getText () + " Pressed");
                                }
                                widgetDefaultSelected( e )
                                {
                                }
                                return (SelectionListener)this;
                        </bsh>
                </button>
                <!-- calling an external BSH code (identical to the bsh code above) -->
                <!--button text="Button 2">
                        <bsh func="addActionListener" src="examples/cookbsh/action.bsh"/>
                </button-->
        </filllayout>
</shell>
¹öưÀ» Ŭ¸¯Çϸé, LabelÀÇ ÅØ½ºÆ®°¡ "Click! Pressed"·Î º¯°æµË´Ï´Ù.

2.1.3. PropertyCat.xml

ÀÚ¹ÙÀÇ ÇÁ·ÎÆÛƼµéÀ» Ãâ·ÂÇÏ´Â °£´ÜÇÑ ¿¹Á¦.
<shell style="SHELL_TRIM | TOOL" text="PropertyCat" size="320,240">
        <filllayout type="VERTICAL">
                <textarea style="BORDER | MULTI | V_SCROLL | H_SCROLL">
                        <bsh setas="text">
                                String getProperty(){
                                        java.util.Properties p = System.getProperties();
                                        java.util.Enumeration e = System.getProperties().propertyNames();
                                        StringBuilder sb = new StringBuilder();
                                        while(e.hasMoreElements()){
                                                String str = e.nextElement().toString();
                                                sb.append(str);
                                                sb.append(" : ");
                                                sb.append(p.getProperty(str));
                                                sb.append("\n");
                                        }
                                        return sb.toString();
                                }
                                return getProperty();
                        </bsh>
                </textarea>
        </filllayout>
</shell>

2.1.4. GlobalHook.bsh

SWT ³»ºÎ Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ À©µµ¿ì ¸Þ½ÃÁö ÈÅ ¿¹Á¦ÀÔ´Ï´Ù. W2K À̻󿡼­ µ¿ÀÛÇϸç, ½ÇÇàÇϸé À©µµ»ó¿¡¼­ÀÇ ¸ðµç Űº¸µå ÀÔ·ÂÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

import org.eclipse.swt.internal.Callback;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.internal.win32.MSG;

class GlobalHook {
        static Shell s = new Shell(Display.getCurrent());
        static Text t = new Text(s, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        static int hHook = 0;
        
        Shell show(){
                s.setText("GlobalHook");
                s.setLayout(new FillLayout());
                s.setSize(500, 500);
                startHook();
                return s;
        }

        static int getMsgProc(int code, int wParam, int lParam) {
                MSG msg = new MSG();
                OS.MoveMemory(msg, lParam, MSG.sizeof);
                t.append(msg.message + "\n");
                
                return OS.CallNextHookEx(hHook, code, wParam, lParam);
        }
        
        void startHook(){
                Callback callback = new Callback(GlobalHook.class, "getMsgProc", 3);
                int address = callback.getAddress();
                int threadId = OS.GetCurrentThreadId();
                hHook = OS.SetWindowsHookEx(13, address, OS.GetLibraryHandle(), 0);
                if (hHook == 0) {
                        callback.dispose();
                        return;
                }
        }
}

new GlobalHook().show();

2.1.5. KLDP_Reader.bsh

[http]informa¸¦ »ç¿ëÇÑ °£´ÜÇÑ RssReader ¿¹Á¦. JRE»ó¿¡¼­ ±¸µ¿µÇ´Â Zeta/Pure¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ ¿ÜºÎ ÆÐŰÁö¸¦ ºÒ·¯¿Ã ¼ö ÀÖ½À´Ï´Ù.
addClassPath("demo/informa_0.6.5.jar");
addClassPath("demo/commons-logging.jar");
addClassPath("demo/jdom.jar");

import de.nava.informa.core.ChannelIF;
import de.nava.informa.core.ItemIF;
import de.nava.informa.impl.basic.ChannelBuilder;
import de.nava.informa.parsers.FeedParser;

Shell s = new Shell(Display.getCurrent(), SWT.SHELL_TRIM | SWT.TOOL);
s.setText("KLDP Reader");
s.setLayout(new FillLayout(SWT.VERTICAL));

ChannelIF channel = FeedParser.parse(
        new ChannelBuilder(), new URL("http://kldp.org/node/feed"));
Iterator i = channel.getItems().iterator();

Button btn;
while(i.hasNext()){
        ItemIF item = (ItemIF)i.next();
        btn = new Button(s, SWT.PUSH);
        btn.setText(item.getTitle());
        btn.addListener(SWT.Selection, new Listener(){
                URL url = item.getLink();
                public void handleEvent(Event event) {
                        Program.launch(url.toString());
                }
        });
}

s.pack();
s.open();

3. ½ºÅ©¸°¼¦

  • Zeta 0.2¿Í ½ÃÇèÁßÀÎ ¸î°¡Áö ¸ðµâµé
ZetaScreenshot2.PNG
[PNG image (146.2 KB)]

  • Zeta 0.1¿¡ demo/HelloWorld 1, 2, 3, 4¸¦ ¶ç¿î ¸ð½À
ZetaScreenshot.PNG
[PNG image (67.41 KB)]

ID
Password
Join
If you always postpone pleasure you will never have it. Quit work and play for once!


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-09-10 03:17:41
Processing time 0.0112 sec