'Alchemy'에 해당되는 글 1건

  1. 2009.02.19 :: alchemy 설치
Alchemy 2009.02.19 11:01

원본 링크 
http://translate.google.co.kr/translate?hl=ko&sl=ja&u=http://d.hatena.ne.jp/amachang/20081118/1227005285&ei=mrqcSbDkLJz-7APi54XPAw&sa=X&oi=translate&resnum=7&ct=result&prev=/search%3Fq%3Dalchemy%2Bswc%26complete%3D1%26hl%3Dko%26lr%3Dlang_ja%257Clang_ko%26newwindow%3D1%26sa%3DG

 

はじめに 개요

AdobeからC/C++で書いたコードをFlashAIRで動かすAlchemyというものがリリースされましたね! Adobe에서 C / C + +로 작성된 코드를 Flash와 AIR에서 운영 Alchemy이라는 것이 발표되었습니다 해요!

Adobe Labs - Alchemy Adobe Labs - Alchemy

f:id:amachang:20081119015505p:image

これはすごい! 이것은 최고입니다! ということで、少し試してみたいと思います。 사실, 조금 시도하고 싶습니다.

その様子をリアルタイムに書いていきます。 그 모습을 실시간으로 쓸 것입니다. ちゃんと出来るかな 잘 할 수 있을까

環境 환경

OSMac OS Xgccjavaは入っているものとします。 OS는 Mac OS X에서 gcc, java는 들어가고있는 것입니다.

ホームディレクトリ (/Users/ amachang )に AlchemyTest というディレクトリを作って作業します。디렉토리 (/ Users / amachang) AlchemyTest 디렉토리를 만들 어서 작업합니다.

インストール 설치

まずは、いろいろインストールします。 우선 여러 설치합니다.

Flash Player 10 Debugger Version Flash Player 10 Debugger Version

Adobe Flash Player - Downloads Adobe Flash Player - Downloads

ここからダウンロードしてきて、普通にインストールします。 여기에서 다운로드 와서 정상적으로 설치합니다.

Flex SDK Flex SDK

以下からFlex SDK をダウンロードします。 다음에서 Flex SDK를 다운로드합니다.

Flex SDK Flex SDK

現段階での最新の Stable のやつをダウンロードしました。 현 단계에서 최신 Stable의 자식을 다운로드했습니다. 具体的には以下のバージョンのものです。 구체적으로는 다음 버전입니다.

download - Flex SDK - Confluence download - Flex SDK - Confluence

ダウンロードできたら、 解凍します。 다운로드되면 압축을 풉니다. 今回は FlexSDK という名前のディレクトリを作ってそこに解凍しました。 이번에는 FlexSDK라는 디렉토리를 만들고 거기에 압축했습니다.

 $ unzip flex_sdk_3.2.0.3794.zip -d FlexSDK $ unzip flex_sdk_3.2.0.3794.zip - d FlexSDK 

とりあえず、 bin に PATH を通しておきましょう。 일단 bin에 PATH를 통해서 둡시다.

 $ export PATH=/Users/amachang/AlchemyTest/FlexSDK/bin:$PATH $ export PATH = / Users / amachang / AlchemyTest / FlexSDK / bin : $ PATH 

試しに、なんか適当なActionScriptのファイルからswfファイルを作ってみましょう。 운동, 따윈당한 ActionScript 파일에서 swf 파일을 만들어 봅시다.

以下のように、適当なディレクトリを作って 다음과 같이 적당한 디렉토리를 만들 어서

 $ mkdir Src $ mkdir Src 
 $ cd Src $ cd Src 

そこに、以下のようなファイルHoge .as を置きます。 거기에 다음과 같은 파일 Hoge. as을두고있습니다.

 package { package ( 
     import  flash.display.Sprite import flash.display.Sprite 
     public class  Hoge extends  Sprite { public class Hoge extends Sprite ( 
         public function  Hoge() { } public function Hoge () ()  
     } )    
 } ) 

で、さっき FlexSDK に解凍したツールを使ってコンパイルします。 , 아까 FlexSDK에 압축 해제 도구를 사용하여 컴파일합니다.

 $ mxmlc Hoge.as $ mxmlc Hoge.as 
 設定ファイル "/Users/amachang/AlchemyTest/FlexSDK/frameworks/flex-config.xml" をロードしています/Users/amachang/AlchemyTest/Src/Hoge.swf (555 bytes) 설정 파일 "/ Users / amachang / AlchemyTest / FlexSDK / frameworks / flex - config.xml"를로드하고있습니다 / Users / amachang / AlchemyTest / Src / Hoge.swf (555 bytes) 

おおお。おおお. swfファイルがちゃんとできましたね。 swf 파일이 제대로 수했습니다.

というわけで、次はAlchemy Toolkit Package を導入します。 라는 이유로, 다음은 Alchemy Toolkit Package를 소개합니다.

ここまでのディレクトリ構成は以下のような感じです。 여기까지 디렉토리 구조는 다음과 같은 느낌입니다.

 $ pwd $ pwd 
 /Users/amachang/AlchemyTest / Users / amachang / AlchemyTest 
 $ tree -L 2 $ tree - L 2 
 . 
 |-- FlexSDK | - FlexSDK 
 |   |-- AIR SDK Readme.txt | | - AIR SDK Readme.txt 
 |   |-- SDK license.pdf | | - SDK license.pdf 
 |   |-- ant | | - ant 
 |   |-- asdoc | | - asdoc 
 |   |-- bin | | - bin 
 |   |-- flex-sdk-description.xml | | - flex - sdk - description.xml 
 |   |-- frameworks | | - frameworks 
 |   |-- lib | | - lib 
 |   |-- license-adobesdk.htm | | - license - adobesdk.htm 
 |   |-- license-adobesdk_ja.htm | | - license - adobesdk_ja.htm 
 |   |-- license-mpl.htm | | - license - mpl.htm 
 |   |-- readme.htm | | - readme.htm 
 |   |-- readme_ja.htm | | - readme_ja.htm 
 |   |-- runtimes | | - runtimes 
 |   |-- samples | | - samples 
 |   `-- templates |`- templates 
 |-- Src | - Src 
 |   |-- Hoge.as | | - Hoge.as 
 |   `-- Hoge.swf |`- Hoge.swf 
 `-- flex_sdk_3.2.0.3794.zip `- flex_sdk_3.2.0.3794.zip 

 10 directories, 11 files 10 directories 11 files 
Alchemy Toolkit Package Alchemy Toolkit Package

次はAlchemy Toolkit Package をダウンロードしてきます。 다음은 Alchemy Toolkit Package를 다운로드하고있습니다.

Alchemy Toolkit Package Alchemy Toolkit Package

ダウンロードしたら、作業ディレクトリに置いて AlchemyToolkit というディレクトリ解凍します。 다운로드한 후 작업 디렉토리에 AlchemyToolkit 디렉토리에 압축을 풉니다.

 $ unzip alchemy_sdk_darwin_p1_111708.zip -d AlchemyToolkit $ unzip alchemy_sdk_darwin_p1_111708.zip - d AlchemyToolkit 

少し、 ディレクトリ構成を見てみましょう。 조금, 디렉토리 구조를 살펴 봅시다.

 $ tree -L 2 AlchemyToolkit $ tree - L 2 AlchemyToolkit 
 AlchemyToolkit 
 `-- alchemy-darwin-v0.4a `- alchemy - darwin - v0.4a 
     |-- CHANGES | - CHANGES 
     |-- LICENSE | - LICENSE 
     |-- README.cygwin | - README.cygwin 
     |-- README.darwin | - README.darwin 
     |-- README.ubuntu | - README.ubuntu 
     |-- achacks | - achacks 
     |-- avm2-libc | - avm2 - libc 
     |-- bin | - bin 
     |-- config | - config 
     |-- flashlibs | - flashlibs 
     `-- samples `- samples 

 7 directories, 5 files 7 directories, 5 files 

AlchemyToolkit のトップはこんな感じのディレクトリ構成になっています。 AlchemyToolkit 맨은 이런 느낌의 디렉토리 구조로되어있습니다.

まず、 avm2-libc というのがありますね。 먼저 avm2 - libc 게 있군요. この中にが libc.so の代わりにリンクされるライブラリが入っているのでしょうか。 이 사이가 libc.so 대신 연결되는 라이브러리가 들어있는 것일까요?

また、 bin にツールが入っているのでしょうか。 또한 bin 도구가 들어있는 것일까요? README を読む前に bin の中身を確認してみましょう。 README를 읽기 전에 bin의 내용을 확인해보세요.

 $ ls AlchemyToolkit/alchemy-darwin-v0.4a/bin/ $ ls AlchemyToolkit/alchemy-darwin-v0.4a/bin / 
 ExplSWF.pl   ShrSWF.pl   llvm-as    llvm-prof ExplSWF.pl ShrSWF.pl llvm - as llvm - prof 
 GetABC2.pl   V10SWF.pl   llvm-bcanalyzer   llvm-ranlib GetABC2.pl V10SWF.pl llvm - bcanalyzer llvm - ranlib 
 ImplSWF.pl   alc-util   llvm-config   llvm-stub ImplSWF.pl alc - util llvm - config llvm - stub 
 LICENSE-LLVM.TXT  asc.jar    llvm-db    llvm-upgrade LICENSE - LLVM.TXT asc.jar llvm - db llvm - upgrade 
 LICENSE-LLVMC.TXT  gccas    llvm-dis   llvm2cpp LICENSE - LLVMC.TXT gccas llvm - dis llvm2cpp 
 LICENSE-ZLIB.TXT  gccld    llvm-extract   llvmc LICENSE - ZLIB.TXT gccld llvm - extract llvmc 
 PutABC2.pl   gluegen    llvm-gcc4-darwin-install opt PutABC2.pl gluegen llvm - gcc4 - darwin - install opt 
 PutBIN.pl   llc    llvm-ld    swfbridge PutBIN.pl llc llvm - ld swfbridge 
 README-LLVM   lli    llvm-link   zpipe README - LLVM lli llvm - link zpipe 
 README-ZLIB   llvm-ar    llvm-nm    zpipe.pl README - ZLIB llvm - ar llvm - nm zpipe.pl 

おおおLLVMのツールがいっぱい入っています。おおおllvm 도구가 가득 들어있습니다.

というわけで avm2-libc の中をみてみます。 그렇다고 avm2 - libc의 사이를보고보십시오.

 $ ls -la AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/ $ ls - la AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc / 
 total 0 total 0 
 drwxr-xr-x   5 amachang  staff   170 11 14 03:09 . drwxr - xr - x 5 amachang staff 170 11 14 03:09. 
 drwxr-xr-x   8 amachang  staff   442 11 14 03:09 .. drwxr - xr - x 8 amachang staff 442 11 14 03:09 .. 
 drwxr-xr-x   2 amachang  staff   102 11 14 03:09 avm2 drwxr - xr - x 2 amachang staff 102 11 14 03:09 avm2 
 drwxr-xr-x  10 amachang  staff  2822 11 14 03:09 include drwxr - xr - x 10 amachang staff 2822 11 14 03:09 include 
 drwxr-xr-x   2 amachang  staff   136 11 18 20:19 lib drwxr - xr - x 2 amachang staff 136 11 18 20:19 lib 

そして、この lib の中に 그리고,이 lib 속에

 $ ls -la AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/lib/ $ ls - la AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/lib / 
 total 7544 total 7544 
 drwxr-xr-x  2 amachang  staff      136 11 18 20:19 . drwxr - xr - x 2 amachang staff 136 11 18 20:19. 
 drwxr-xr-x  5 amachang  staff      170 11 14 03:09 .. drwxr - xr - x 5 amachang staff 170 11 14 03:09 .. 
 -rw-r--r--  1 amachang  staff  1564524 11 14 03:09 avm2-libc.l.bc - rw - r - r - 1 amachang staff 1564524 11 14 03:09 avm2 - libc.l.bc 
 -rw-r--r--  1 amachang  staff  2297544 11 14 03:09 avm2-libstdc++.l.bc - rw - r - r - 1 amachang staff 2297544 11 14 03:09 avm2 - libstdc + +. l.bc 

LLVMバイトコードが入っていました。 llvm 바이트 코드가 들어있었습니다.

ちょっと寄り道、します。 어이寄り道,합니다.

avm2-libc.l.bc をディスアセンブルしてみましょう! avm2 - libc.l.bc을 디스 어셈블 해 봅시다!

 $ cd AlchemyToolkit/alchemy-darwin-v0.4a/ $ cd AlchemyToolkit/alchemy-darwin-v0.4a / 
 $ bin/llvm-dis avm2-libc/lib/avm2-libc.l.bc $ bin / llvm - dis avm2-libc/lib/avm2-libc.l.bc  

おお。 오. 成功したみたいです。 성공하는 것 같습니다. avm2-libc.l.ll というファイルが出来ました。 avm2 - libc.l.ll 파일 수있게되었습니다.

LLVMというものを全然しらないのですが、そのファイルの中身を見てみると冒頭にActionScript 3.0 のソースコードみたいなものが見えます。 llvm라는 것을 전혀しら없습니다. 해당 파일의 내용을 보면 시작 부분에 ActionScript 3.0의 소스 코드 같은 것이 보입니다. そして、 アセンブラのようなものが見えます。 그리고, 어셈블러과 같은 것들이 보입니다.

きっとLLVMアセンブラなのでしょう。 반드시 llvm 어셈블러적인 것입니다.

 ; ModuleID = 'avm2-libc/lib/avm2-libc.l.bc' ; ModuleID = 'avm2-libc/lib/avm2-libc.l.bc' 
 target datalayout = "ep:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-s0:0:64-f80:128:128"target triple = "i686-apple-darwin8" target datalayout = "ep :32:32:32 - i1 :8:8 - i8 :8:8 - i16 :16:16 - I32 :32:32 - I64 :32:64 - F32 :32:32 - f64 : 32:64 - v64 :64:64 - v128 :128:128 - a0 :0:64 - s0 :0:64 - F80 : 128:128 "target triple ="i686 - apple - darwin8 " 
 module asm "import flash.utils.*" module asm "import flash.utils .*" 
 module asm "import flash.display.*" module asm "import flash.display .*" 
 module asm "import flash.text.*" module asm "import flash.text .*" 
 module asm "import flash.events.*" module asm "import flash.events .*" 
 module asm "import flash.net.*" module asm "import flash.net .*" 
 module asm "import flash.system.*" module asm "import flash.system .*" 
 module asm "" module asm ""  
 module asm "public var gdomainClass:Class;" module asm "public var gdomainClass : Class;" 
 module asm "public var gshell:Boolean = false;" module asm "public var gshell : Boolean = false;" 
 module asm "" module asm ""  
 module asm "public function establishEnv():void" module asm "public function establishEnv () : void" 
 module asm "{" module asm "(" 
 module asm "  try" module asm "try" 
 module asm "  {" module asm "(" 
 module asm "    var ns:Namespace = new Namespace(\22avmplus\22);" module asm "var ns : Namespace = new Namespace (\ 22avmplus \ 22);" 
 module asm "  " module asm "" 
 module asm "    gdomainClass = ns::[\22Domain\22];" module asm "gdomainClass = ns : : [\ 22Domain \ 22];" 
 module asm "    gshell = true;" module asm "gshell = true;" 
 module asm "  }" module asm ")" 
  : 
  : 

初見だと、どこがエントリーポイントかもわかりませんね 첫보고라고 어디가 등록 포인트지도 알 수없습니다 해요

寄り道が過ぎたので、 インストールに取りかかりましょう。寄り道이 흘러가기 때문에 설치에 착수합시다.

まず、 AlchemyToolkit/ alchemy - darwin -v0.4a に移動します。 먼저 AlchemyToolkit / alchemy - darwin - v0.4a로 이동합니다.

 $ cd AlchemyToolkit/alchemy-darwin-v0.4a $ cd AlchemyToolkit/alchemy-darwin-v0.4a 

で、 ./config を実行します。 ,. / config을 실행합니다.

 $ ./config $. / config  
 Generating alchemy-setup... Generating alchemy - setup ... 
 Turning execution bit on for Alchemy binaries... Turning execution bit on for Alchemy binaries ... 

 Add "source /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/alchemy-setup" to your login script. Add "source / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/alchemy-setup"to your login script. 
   "alc-home" takes you to the Alchemy install folder. "alc - home"takes you to the Alchemy install folder. 
   "alc-on" puts Alchemy gcc toolchain replacements at the front of your path. "alc - on"puts Alchemy gcc toolchain replacements at the front of your path. 
   "alc-off" restores original path. "alc - off"restores original path. 
   "alc-util" shows you various Alchemy-related environment vars "alc - util"shows you various Alchemy - related environment vars 
 You need Flash 10 or AIR 1.5 and the Flex 3.2 SDK installed for testing. You need Flash 10 or AIR 1.5 and the Flex 3.2 SDK installed for testing. 

alchemy -setup というファイルが作られました。 alchemy - setup 파일이 만들어졌습니다. 「このファイルを login スクリプトに入れろ」と言われますが、とりあえず使うだけなので手動で実行するだけにします。 "이 파일을 login 스크립트入れろ"고 말하고 있지만 일단 사용 단지 때문에 수동으로 실행하는만큼합니다.

 $ source alchemy-setup $ source alchemy - setup 

そうすると、 alc -on alc -off が使えるようになります。 그러면 alc - on alc - off 사용할 수있습니다. これは、実際は環境変数 PATH などを切り替えることをします。 이것은 실제 환경 변수 PATH를 전환합니다.

alc -on にした状態でgccと叩くと achacks/ gccが実行されるといった具合ですね。 alc - on을하여 gcc와 박수로 achacks / gcc 실행식으로하네요.

というわけで、 alc -on を実行します。 그러니, alc - on을 실행합니다.

 $ alc-on $ alc - on 

環境変数を見てみましょう。 환경 변수를 살펴 봅시다.

 $ echo $PATH $ echo $ PATH 
 /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/achacks:/Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin:/Users/amachang/AlchemyTest/FlexSDK/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/achacks : / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin : / Users / amachang / AlchemyTest / FlexSDK / bin : / usr / bin : / bin : / usr / sbin : / sbin : / usr / local / bin : / usr/X11/bin : / opt / local / bin 

先頭に、 achacks ディレクトリが追加されていますね。 맨 위에 achacks 디렉토리가 추가되어 있군요. alc -off を実行すれば環境変数は元に戻ります。 alc - off를 실행하면 환경 변수는 원래로 돌아갑니다.

次は、 sample をコンパイルして実行してみたいですね。 다음은 sample을 컴파일하고 실행하고 싶어요 네요.

サンプルをコンパイルして実行する 예제를 컴파일 및 실행

サンプルは、 Alchemy Toolkit の直下の samples ディレクトリにありました。 샘플은 Alchemy Toolkit 아래의 samples 디렉토리에있습니다.

 $ cd AlchemyToolkit/alchemy-darwin-v0.4a/samples/ $ cd AlchemyToolkit/alchemy-darwin-v0.4a/samples / 
 $ ls -la $ ls - la 
 total 0 total 0 
 drwxr-xr-x  6 amachang  staff  204 11 14 03:09 . drwxr - xr - x 6 amachang staff 204 11 14 03:09. 
 drwxr-xr-x  9 amachang  staff  510 11 18 21:39 .. drwxr - xr - x 9 amachang staff 510 11 18 21:39 .. 
 drwxr-xr-x  2 amachang  staff  170 11 14 03:09 AS3API drwxr - xr - x 2 amachang staff 170 11 14 03:09 AS3API 
 drwxr-xr-x  2 amachang  staff  204 11 14 03:09 AS3Lib drwxr - xr - x 2 amachang staff 204 11 14 03:09 AS3Lib 
 drwxr-xr-x  2 amachang  staff  102 11 14 03:09 HelloFlash drwxr - xr - x 2 amachang staff 102 11 14 03:09 HelloFlash 
 drwxr-xr-x  3 amachang  staff  204 11 14 03:09 stringecho drwxr - xr - x 3 amachang staff 204 11 14 03:09 stringecho 
HelloFlash

まずは、 HelloFlash を実行してみましょう。 우선 HelloFlash를 실행하여보세요.

HelloFlash ディレクトリの中には HelloFlash.c というファイルが入っていました。 HelloFlash 디렉토리에는 HelloFlash.c 파일이 들어있었습니다.

内容はこんな感じ 내용은 이런 느낌

 #include <stdlib.h> # include <stdlib.h> 
 #include <stdio.h> # include <stdio.h> 

 int  main( int  argc, char * argv[]) int main (int argc, char * argv []) 
 { ( 
	 printf( "Hello Flash! \n " ); printf ( "Hello Flash! \ n"); 
 } ) 

とりあえず、なにも考えずにgccコンパイルしてみます 일단 아무것도 생각하지 않고 gcc로 컴파일을 시도합니다

 $ cd HelloFlash $ cd HelloFlash 
 $ gcc HelloFlash.c $ gcc HelloFlash.c  
 WARNING: While resolving call to function 'main' arguments were dropped! WARNING : While resolving call to function 'main'arguments were dropped! 

 45416.achacks.swf, 354510 bytes written 45416.achacks.swf, 354510 bytes written 

なんか、 WARNINGが出ましたが成功したみたいです。 따윈, WARNING이 나왔습니다이 성공하는 것 같습니다.

そして、 a.exe というファイルが出来ました。 그리고, a.exe 파일이있게되었습니다.

 $ ls -la $ ls - la 
 total 704 total 704 
 drwxr-xr-x  2 amachang  staff     136 11 18 21:51 . drwxr - xr - x 2 amachang staff 136 11 18 21:51. 
 drwxr-xr-x  6 amachang  staff     204 11 14 03:09 .. drwxr - xr - x 6 amachang staff 204 11 14 03:09 .. 
 -r--r--r--  1 amachang  staff     104 11 14 03:09 HelloFlash.c - r - r - r - 1 amachang staff 104 11 14 03:09 HelloFlash.c 
 -rwxr-xr-x  1 amachang  staff  354590 11 18 21:51 a.exe - rwxr - xr - x 1 amachang staff 354590 11 18 21:51 a.exe 

何も考えずに実行してみましょう。 아무것도 생각하지 않고 실행하여보세요. ドキドキ 두근두근

 $ ./a.exe $. / a.exe  
 /Users/amachang/AlchemyTest/FlexSDK/bin/adl _sb_45518/app.xml 2> /tmp/adl.trace & echo $! / Users / amachang / AlchemyTest / FlexSDK / bin / adl _sb_45518/app.xml 2> / tmp / adl.trace & echo $! 
 Hello Flash! Hello Flash! 

おおおお。 오 오. ちゃんと Hello Flash ! と表示されました! 제대로 Hello Flash!로 표시되었습니다!

ちょっと寄り道 어이寄り道

この a.exe っていうのがどういうファイルなのか気になったので調べてみる 이 a.exeっていう것이 어떤 파일 일까 걱정 되었기 때문에 알아 본다

 $ file a.exe $ file a.exe  
 a.exe: a /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/swfbridge script text executable a.exe : a / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/swfbridge script text executable 

swfbridge というコマンドで実行されるスクリプト swfbridge 명령에서 실행되는 스크립트? 開いてみる。 열어 본다.

バイナリだった。 이진이었다. .

 $ head -3 a.exe $ head -3 a.exe  
 #!/Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/swfbridge #! / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/swfbridge 
 FWS 
 (バイナリ) (이진) 

って感じのファイル。 이란 느낌 파일.

FWS ってswfファイルのマジックだったっけ? FWS입니까 swf 파일의 마술이었다っけ?

そんな感じのファイルらしい。 그런 느낌 파일 같다. swfbridge ってどんなものなんだろう。 swfbridge이란 어떤 것입니다 것이다. adl を呼び出してるみたいだけど。 adl를 호출 계십니까 같아하지만.

app. xmlっていうファイルを自動で作って adl を呼び出すツールかな app. xmlっていう파일을 자동으로 만들어 adl 호출 도구는지

ちょっと strings してみた 어이 strings 해 봤다

 $ strings /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/swfbridge $ strings / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/swfbridge 
 PATH 
 Couldn't write setup Couldn't write setup 
 _sb_%d _sb_ % d 
 Couldn't create temp dir Couldn't create temp dir 
 error: %s error : % s 
 pid%d pid % d 
 %s/app.xml % s / app.xml 
 <application xmlns="http://ns.adobe.com/air/application/1.5"> <application xmlns="http://ns.adobe.com/air/application/1.5"> 
 <id>com.adobe.%s</id> <id> com.adobe % s </ id> 
 <version>1.0</version> <version> 1.0 </ version> 
 <filename>%s</filename> <filename> % s </ filename> 
 <name>%s</name> <name> % s </ name> 
 <initialWindow> 
 <x>0</x> <x> 0 </ x> 
 <y>0</y> <y> 0 </ y> 
 <visible>false</visible> <visible> false </ visible> 
 <content>app.swf</content> <content> app.swf </ content> 
 </initialWindow> </ initialWindow> 
 </application> </ application> 
 %s/app.swf % s / app.swf 
 SWF: %s SWF : % s 
  : 

おおお。おおお. XMLはけーん。 XMLはけ음. a.exe から app. xmlと app. swfを作って adl に渡すみたいだなー。 a.exe에서 app. xml과 app. swf를 만들어 adl에 전달 같아이다なー.

またもや脱線しすぎました。 또다시 탈선 많습니다.

stringecho

次のサンプルは stringecho です。 다음 예제는 stringecho입니다.

 $ cd ../stringecho $ cd .. / stringecho 

とりあえず、 ディレクトリ構成は以下のようは感じになっています。 일단 디렉토리 구조는 다음과 같이는 느낌입니다.

 $ tree $ tree 
 . 
 |-- as3 | - AS3 
 |   `-- EchoTest.as |`- EchoTest.as 
 |-- readme.txt | - readme.txt 
 `-- stringecho.c `- stringecho.c 

 1 directory, 3 files 1 directory, 3 files 

readme.txt がありますね。 readme.txt가 있군요. でも、読んじゃうともったいないので、何も考えずにコンパイルしてみます。 하지만 읽고じゃう과 아깝 때문에, 아무것도 생각하지 않고 컴파일을 시도합니다.

 $ gcc stringecho.c $ gcc stringecho.c  
 WARNING: While resolving call to function 'main' arguments were dropped! WARNING : While resolving call to function 'main'arguments were dropped! 

 46476.achacks.swf, 355002 bytes written 46476.achacks.swf, 355002 bytes written 

なんか、成功しました。 따윈 성공했습니다. では、実行します。 에서 실행합니다. ドキドキ 두근두근

 $ ./a.exe $. / a.exe 

おおおお 오 오

f:id:amachang:20081118224804p:image

AIRさんに怒られました! AIR 님에게 미치게되었습니다! これはこれで嬉しいですね。 이것은 이것에 즐거운하네요.

というわけで、 readme.txt を読みます。 그러니, readme.txt를 참조하십시오.

なるほど、以下のように swc オプションを付けることで、 swfから使える *.swc ファイルになるようになるようです。 수록 다음과 같이 swc 옵션을 붙이기, swf에서 사용할 *. swc 파일이되도록 될 것 같습니다.

 $ gcc stringecho.c -swc -o stringecho.swc $ gcc stringecho.c - swc - o stringecho.swc 
 WARNING: While resolving call to function 'main' arguments were dropped! WARNING : While resolving call to function 'main'arguments were dropped! 

 47506.achacks.swf, 362570 bytes written 47506.achacks.swf, 362570 bytes written 
 frame rate: 60 frame rate : 60 
 frame count: 1 frame count : 1 
 69 : 4 69 : 4 
 72 : 362500 72 : 362500 
 76 : 33 76 : 33 
 1 : 0 1 : 0 
 0 : 0 0 : 0 
 frame rate: 24 frame rate : 24 
 frame count: 1 frame count : 1 
 69 : 4 69 : 4 
 77 : 506 77 : 506 
 64 : 31 64 : 31 
 63 : 16 63 : 16 
 65 : 4 65 : 4 
 9 : 3 9 : 3 
 41 : 26 41 : 26 
 82 : 471 82 : 471 
 1 : 0 1 : 0 
 0 : 0 0 : 0 
   adding: catalog.xml (deflated 75%) adding : catalog.xml (deflated 75 %) 
   adding: library.swf (deflated 61%) adding : library.swf (deflated 61 %) 

で、 stringecho.swc ファイルが出来るので、 EchoTest.as のコンパイル時に指定してあげます。 , stringecho.swc 파일을 할 수 있으므로, EchoTest.as 컴파일 시에 지정하여 드리겠습니다.

 $ mxmlc -library-path+=stringecho.swc --target-player=10.0.0 as3/EchoTest.as $ mxmlc - library - path + = stringecho.swc - target - player = 10.0.0 as3/EchoTest.as 

そうすると、 as3 /EchoTest. swfが出来ます。 그러면 AS3 / EchoTest. swf이 가능합니다.

ただ、一見これを実行しても何もおきません。 다만보기 이것을 실행해도 아무것도 유지되지 않습니다.

以下のように、 trace 関数に結果を渡しているので、結果を見るには mm.cfg とかめんどくさい設定をしなければならないからです。 다음과 같이, trace 함수에 결과를 전달하고 있기 때문에, 결과를 보려면 mm.cfg이나めんどくさい설정을해야합니다.

 package { package ( 
     import  flash.display.Sprite; import flash.display.Sprite; 
     import  cmodule.stringecho.CLibInit; import cmodule.stringecho.CLibInit; 

     public class  EchoTest extends  Sprite public class EchoTest extends Sprite 
     { (    
         public function  EchoTest() public function EchoTest () 
         { (    
             var  loader:CLibInit = new  CLibInit; var loader : CLibInit = new CLibInit; 
             var  lib: Object  = loader.init(); var lib : Object = loader.init (); 
    
             trace(lib.echo( "foo" )); trace (lib.echo ( "foo")); 
         } )    
     } )    
 } ) 

てっとり早く結果を見たいので、わざと Error を発生させましょう。てっ잡고 빨리 결과를보고 싶은 때문에 일부러 Error를 생성합시다.

 package { package ( 
     import  flash.display.Sprite; import flash.display.Sprite; 
     import  cmodule.stringecho.CLibInit; import cmodule.stringecho.CLibInit; 

     public class  EchoTest extends  Sprite public class EchoTest extends Sprite 
     { (    
         public function  EchoTest() public function EchoTest () 
         { (    
             var  loader:CLibInit = new  CLibInit; var loader : CLibInit = new CLibInit; 
             var  lib: Object  = loader.init(); var lib : Object = loader.init (); 
    
             // 結果をエラーに乗せる / / 결과를 오류에 올려놓 
             throw  Error(lib.echo( "foo" )); throw Error (lib.echo ( "foo")); 
         } )    
     } )    
 } ) 

というわけで、これで出来た EchoTest. swfブラウザで開きます。 그러니, 이제 할 수있는 EchoTest. swf를 브라우저에서 엽니다.

f:id:amachang:20081118232650p:image

おおおお。 오 오. ちゃんとError に foo という文字列が運ばれてきましたね! 제대로 Error에 foo 텍스트가 날라 왔습니다 해요!

このswfは以下のように swfbridge でも実行出来るようです。swf는 다음과 같이 swfbridge도 수행 할 수있습니다.

 $ ../../bin/swfbridge as3/EchoTest.swf $ .. / .. / bin / swfbridge as3/EchoTest.swf 

f:id:amachang:20081118232948p:image

ちなみに、 C 言語側のコードはこんな感じです。 덧붙여서, C 언어 측의 코드는 다음과 같습니다. main で初期化して C 言語の関数Flashから扱えるようにしているみたいですね。 main에서 초기화하는 C 함수를 Flash에서 사용할 수 있도록하고있는 것 같아하네요.

 //Simple String Echo example / / Simple String Echo example 
 //mike chambers / / mike chambers 
 //mchamber@adobe.com / / mchamber@adobe.com 

 #include <stdlib.h> # include <stdlib.h> 
 #include <stdio.h> # include <stdio.h> 

 //Header file for AS3 interop APIs / / Header file for AS3 interop APIs 
 //this is linked in by the compiler (when using flaccon) / / this is linked in by the compiler (when using flaccon) 
 #include "AS3.h" # include "AS3.h" 

 //Method exposed to ActionScript / / Method exposed to ActionScript 
 //Takes a String and echos it / / Takes a String and echos it 
 static  AS3_Val echo( void * self, AS3_Val args) static AS3_Val echo (void * self, AS3_Val args) 
 { ( 
	 //initialize string to null / / initialize string to null 
	 char * val = NULL ; char * val = NULL; 
	
	 //parse the arguments. Expect 1. / / parse the arguments. Expect 1. 
	 //pass in val to hold the first argument, which / / pass in val to hold the first argument, which 
	 //should be a string / / should be a string 
	 AS3_ArrayValue( args, "StrType" , &val ); AS3_ArrayValue (args, "StrType", & val); 
	
	 //if no argument is specified / / if no argument is specified 
	 if (val == NULL ) if (val == NULL) 
	 { ( 
		 char * nullString = "null" ; char * nullString = "null"; 
		 //return the string "null" / / return the string "null" 
		 return  AS3_String(nullString); return AS3_String (nullString); 
	 } ) 
	
	 //otherwise, return the string that was passed in / / otherwise, return the string that was passed in 
	 return  AS3_String(val); return AS3_String (val); 
 } ) 

 //entry point for code / / entry point for code 
 int  main() int main () 
 { ( 
	 //define the methods exposed to ActionScript / / define the methods exposed to ActionScript 
	 //typed as an ActionScript Function instance / / typed as an ActionScript Function instance 
	 AS3_Val echoMethod = AS3_Function( NULL , echo ); AS3_Val echoMethod = AS3_Function (NULL, echo); 

	 // construct an object that holds references to the functions / / construct an object that holds references to the functions 
	 AS3_Val result = AS3_Object( "echo: AS3ValType" , echoMethod ); AS3_Val result = AS3_Object ( "echo : AS3ValType"echoMethod); 

	 // Release / / Release 
	 AS3_Release( echoMethod ); AS3_Release (echoMethod); 

	 // notify that we initialized -- THIS DOES NOT RETURN! / / notify that we initialized - THIS DOES NOT RETURN! 
	 AS3_LibInit( result ); AS3_LibInit (result); 

	 // should never get here! / / should never get here! 
	 return 0 ; return 0; 
 } ) 

自分でも何か作ってみる 자신도 무언가 만들어 본다

最初に作ったSrc ディレクトリに移動して 첫째로 만들었다 Src 디렉터리로 이동하여

 $ cd /Users/amachang/AlchemyTest/Src $ cd / Users / amachang / AlchemyTest / Src 
まずは hello 우선 hello

hello.c を書く hello.c 쓰기

 #include "AS3.h" # include "AS3.h" 

 static  AS3_Val hello( void * self, AS3_Val args) static AS3_Val hello (void * self, AS3_Val args) 
 { ( 
     return  AS3_String( "Hello, world." ); return AS3_String ( "Hello, world."); 
 } ) 

 int  main() int main () 
 { ( 
     AS3_Val method = AS3_Function( NULL , hello ); AS3_Val method = AS3_Function (NULL, hello); 

     AS3_Val object = AS3_Object( "hello: AS3ValType" , method ); AS3_Val object = AS3_Object ( "hello : AS3ValType", method); 

     AS3_Release( method ); AS3_Release (method); 

     AS3_LibInit( object ); AS3_LibInit (object); 

     return 0 ; return 0; 
 } ) 

Hello.as

 package { package ( 
     import  flash.display.Sprite; import flash.display.Sprite; 
     import  cmodule.hello.CLibInit; import cmodule.hello.CLibInit; 

     public class  Hello extends  Sprite { public class Hello extends Sprite ( 
         public function  Hello() { public function Hello () ( 
             throw  Error( new  CLibInit().init().hello()); throw Error (new CLibInit (). init () hello ()); 
         } ) 
     } ) 
 } ) 

で、 コンパイル , 컴파일

 $ gcc hello.c -swc -o hello.swc && mxmlc -library-path+=hello.swc --target-player=10.0.0 Hello.as $ gcc hello.c - swc - o hello.swc & & mxmlc - library - path + = hello.swc - target - player = 10.0.0 Hello.as  
 WARNING: While resolving call to function 'main' arguments were dropped! WARNING : While resolving call to function 'main'arguments were dropped! 

 49833.achacks.swf, 358742 bytes written 49833.achacks.swf, 358742 bytes written 
 frame rate: 60 frame rate : 60 
 frame count: 1 frame count : 1 
 69 : 4 69 : 4 
 72 : 358677 72 : 358677 
 76 : 28 76 : 28 
 1 : 0 1 : 0 
 0 : 0 0 : 0 
 frame rate: 24 frame rate : 24 
 frame count: 1 frame count : 1 
 69 : 4 69 : 4 
 77 : 506 77 : 506 
 64 : 31 64 : 31 
 63 : 16 63 : 16 
 65 : 4 65 : 4 
 9 : 3 9 : 3 
 41 : 26 41 : 26 
 82 : 471 82 : 471 
 1 : 0 1 : 0 
 0 : 0 0 : 0 
   adding: catalog.xml (deflated 75%) adding : catalog.xml (deflated 75 %) 
   adding: library.swf (deflated 60%) adding : library.swf (deflated 60 %) 
 設定ファイル "/Users/amachang/AlchemyTest/FlexSDK/frameworks/flex-config.xml" をロードしています/Users/amachang/AlchemyTest/Src/Hello.swf (142645 bytes) 설정 파일 "/ Users / amachang / AlchemyTest / FlexSDK / frameworks / flex - config.xml"를로드하고있습니다 / Users / amachang / AlchemyTest / Src / Hello.swf (142645 bytes) 

おおお。おおお. では、実行。 에서는 실행. Hello, world! というエラーが出れば成功。 Hello, world! 오류가 나오면 성공. ドキドキ 두근두근

f:id:amachang:20081119001811p:image

おおおおお。おおお오. 成功 성공

クロージャを渡す 클로저를 넘겨

AS 側からクロージャを渡して AS 측에서 클로저를 전달하여

 package { package ( 
     import  flash.display.Sprite; import flash.display.Sprite; 
     import  cmodule.hello.CLibInit; import cmodule.hello.CLibInit; 

     public class  Hello extends  Sprite { public class Hello extends Sprite ( 
         public function  Hello() { public function Hello () ( 
             var  message: String  = "Hello, " ; var message : String = "Hello"; 
             new  CLibInit().init().hello( function (message2: String ):* { new CLibInit (). init () hello (function (message2 : String) : * ( 
                 message += message2; message + = message2; 
             } ); ));  

             throw  Error(message); throw Error (message); 
         } )    
     } )    
 } ) 

C 言語側で実行 C 언어 측에서 실행

 #include <stdio.h> # include <stdio.h> 
 #include <stdlib.h> # include <stdlib.h> 
 #include "AS3.h" # include "AS3.h" 

 static  AS3_Val hello( void * self, AS3_Val args) static AS3_Val hello (void * self, AS3_Val args) 
 { ( 
     AS3_Val callback; AS3_Val callback; 
     AS3_ArrayValue(args, "AS3ValType" , &callback); AS3_ArrayValue (args, "AS3ValType", & callback); 

     AS3_Call(callback, AS3_Undefined(), AS3_Array( "StrType" , " world." )); AS3_Call (callback, AS3_Undefined (), AS3_Array ( "StrType", "world.")); 

     return 0 ; return 0; 
 } ) 

 int  main() int main () 
 { ( 
     AS3_Val method = AS3_Function( NULL , hello ); AS3_Val method = AS3_Function (NULL, hello); 

     AS3_Val object = AS3_Object( "hello: AS3ValType" , method ); AS3_Val object = AS3_Object ( "hello : AS3ValType", method); 

     AS3_Release( method ); AS3_Release (method); 

     AS3_LibInit( object ); AS3_LibInit (object); 

     return 0 ; return 0; 
 } ) 

f:id:amachang:20081119005510p:image

おおおお。 오 오. 成功 성공

何かとサクサクできた。 무언가 사쿠사쿠 수 있었다.

Alchemygccは何をしているか Alchemy의 gcc는 무엇을하고 있는지

hoge .c がhoge .swc になる過程を順に見て行きましょう。 hoge. c가 hoge. swc가되는 과정을 차례로보고 갑시다.

1. C/C++LLVM用のバイナリコンパイルする 1. C / C + +를 llvm바이너리에 컴파일
 $ llvm-gcc -v -emit-llvm -nostdinc -I/Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/include -I/usr/local/include --include /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/avm2/AVM2Env.h hoge.c -c -o hoge.o $ llvm - gcc - v - emit - llvm - nostdinc -I/Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/include -I/usr/local/include - include / Users / amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/avm2/AVM2Env.h hoge.c - c - o hoge.o 

まずは、このようにhoge .c がhoge .o にコンパイルされます。 우선 이처럼 hoge. c가 hoge. o로 컴파일됩니다.

このhoge .o はLLVMバイトコードです。hoge. o는 llvm 바이트 코드입니다.

2. avm2-libc.l.bc とリンクする 2. avm2 - libc.l.bc와 연결하는
 $ llvm-ld -o=hoge -O5 -internalize-public-api-list=_start,malloc,free,__adddi3,__anddi3,__ashldi3,__ashrdi3,__cmpdi2,__divdi3,__fixdfdi,__fixsfdi,__fixunsdfdi,__fixunssfdi,__floatdidf,__floatdisf,__floatunsdidf,__iordi3,__lshldi3,__lshrdi3,__moddi3,__muldi3,__negdi2,__one_cmpldi2,__qdivrem,__adddi3,__anddi3,__ashldi3,__ashrdi3,__cmpdi2,__divdi3,__qdivrem,__fixdfdi,__fixsfdi,__fixunsdfdi,__fixunssfdi,__floatdidf,__floatdisf,__floatunsdidf,__iordi3,__lshldi3,__lshrdi3,__moddi3,__muldi3,__negdi2,__one_cmpldi2,__subdi3,__ucmpdi2,__udivdi3,__umoddi3,__xordi3,__subdi3,__ucmpdi2,__udivdi3,__umoddi3,__xordi3,__error /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc/lib/avm2-libc.l.bc hoge.o $ llvm - ld - o = hoge - O5 - internalize - public - api - list = _start, malloc, free, __adddi3, __anddi3, __ashldi3, __ashrdi3, __cmpdi2, __divdi3, __fixdfdi, __fixsfdi, __fixunsdfdi, __fixunssfdi, __floatdidf, __floatdisf, __floatunsdidf , __iordi3, __lshldi3, __lshrdi3, __moddi3, __muldi3, __negdi2, __one_cmpldi2, __qdivrem, __adddi3, __anddi3, __ashldi3, __ashrdi3, __cmpdi2, __divdi3, __qdivrem, __fixdfdi, __fixsfdi, __fixunsdfdi, __fixunssfdi, __floatdidf, __floatdisf, __floatunsdidf, __iordi3, __lshldi3, __lshrdi3 , __moddi3, __muldi3, __negdi2, __one_cmpldi2, __subdi3, __ucmpdi2, __udivdi3, __umoddi3, __xordi3, __subdi3, __ucmpdi2, __udivdi3, __umoddi3, __xordi3, __error / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/avm2-libc / lib/avm2-libc.l.bc hoge.o 

次に、 llvm -ld でリンクされてhogehoge .bc が出来ます。 다음, llvm - ld에 연결되어 hoge과 hoge. bc 수있습니다. hogeはただ単にhoge .bc を実行するshファイル) (hoge은 단순히 hoge. bc를 실행하는 sh 파일)

この avm2-libc.l.bc C 言語側に libc と同じAPIを提供しているようですね。 이 avm2 - libc.l.bc C 언어 옆에 libc와 동일한 API를 제공하는 것입니다.

3. llc というツールでActionScriptのコードを作る 3. llc라는 도구 ActionScript 코드를 만든다
 $ llc -march=avm2 -avm2-use-memuser -o=hoge.as -avm2-package-name=cmodule.hoge hoge.bc $ llc - march = avm2 - avm2 - use - memuser - o = hoge.as - avm2 - package - name = cmodule.hoge hoge.bc 

このツールでLLVMのコードが、なんとActionScriptのコードになります。 이 도구 llvm 코드가 얼마나 ActionScript 코드입니다.

 package  cmodule.hoge { package cmodule.hoge ( 
 // Start of file scope inline assembly / / Start of file scope inline assembly 
 import  flash.utils.* import flash.utils .* 
 import  flash.display.* import flash.display .* 
 import  flash.text.* import flash.text .* 
 import  flash.events.* import flash.events .* 
 import  flash.net.* import flash.net .* 
 import  flash.system.* import flash.system .* 

 public var  gdomainClass: Class ; public var gdomainClass : Class; 
 public var  gshell: Boolean  = false ; public var gshell : Boolean = false; 

 public function  establishEnv():void public function establishEnv () : void 
 { ( 
   try try 
   { ( 
     var  ns:Namespace = new  Namespace( "avmplus" ); var ns : Namespace = new Namespace ( "avmplus"); 
  
     gdomainClass = ns:: [ "Domain" ] ; gdomainClass = ns : : "Domain"]; 
     gshell = true ; gshell = true;  
   } ) 
   catch (e:*) {} catch (e : *) () 
   if (!gdomainClass) if (! gdomainClass) 
   { ( 
     var  ns:Namespace = new  Namespace( "flash.system" ); var ns : Namespace = new Namespace ( "flash.system"); 
  
     gdomainClass = ns:: [ "ApplicationDomain" ] ; gdomainClass = ns : : [ "ApplicationDomain"]; 
   } ) 
 } ) 

 establishEnv(); establishEnv (); 

 public var  glogLvl: int  = Alchemy::LogLevel; public var glogLvl : int = Alchemy : : LogLevel; 

 public function  log(lvl: int , msg: String ):void public function log (lvl : int, msg : String) : void 
 { ( 
   if (lvl < glogLvl) if (lvl <glogLvl) 
  : 
  : 
 (27436行) (27436 행) 
4. asc . jarで、 as をコンパイルする 4. asc. jar, as을 컴파일
 $ java -Xms16M -Xmx1024M -jar /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/asc.jar -AS3 -strict -import /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/flashlibs/global.abc -import /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/flashlibs/playerglobal.abc -d -config Alchemy::Shell=false -config Alchemy::NoShell=true -config Alchemy::LogLevel=0 -config Alchemy::Vector=true -config Alchemy::NoVector=false -config Alchemy::SetjmpAbuse=false -swf cmodule.hoge.ConSprite,800,600,60 hoge.as $ java - Xms16M - Xmx1024m - jar / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/bin/asc.jar - AS3 - strict - import / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0 .4a/flashlibs/global.abc - import / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/flashlibs/playerglobal.abc - d - config Alchemy : : Shell = false - config Alchemy : : NoShell = true - config Alchemy : : LogLevel = 0 - config Alchemy : : Vector = true - config Alchemy : : NoVector = false - config Alchemy : : SetjmpAbuse = false - swf cmodule.hoge.ConSprite, 800600,60 hoge.as  

そして、 hoge .as からhoge . swfが生成されます。 그리고, hoge. as에서 hoge. swf를 생성합니다.

5. hoge . swfからActionScriptバイトコードを取り出す 5. hoge. swf에서 ActionScript의 바이트 코드를 만회
 $ GetABC2.pl hoge hoge.swf.abc $ GetABC2.pl hoge hoge.swf.abc  
6. もっかいswfを作る 6. 가지고 어떻게 swf를 만든다
 $ PutABC2.pl /Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/achacks/swctmpl.swf temp.swf hoge.swf.abc cmodule/hello/CLibInit $ PutABC2.pl / Users/amachang/AlchemyTest/AlchemyToolkit/alchemy-darwin-v0.4a/achacks/swctmpl.swf temp.swf hoge.swf.abc cmodule / hello / CLibInit  
 $ V10SWF.pl temp.swf library.swf $ V10SWF.pl temp.swf library.swf  
7. catalog. xmlを付けてzipで固めて swc にする 7. catalog. xml을 붙여 zip에 굳게하고 swc한다

ちなみに、 catalog. xmlはこんなの 덧붙여서, catalog. xml 이런의

 <? xml version = "1.0"  encoding = "utf-8" ?> <? xml version = "1.0"encoding = "utf - 8"?> 
 <swc xmlns = "http://www.adobe.com/flash/swccatalog/9" > <swc xmlns = "http://www.adobe.com/flash/swccatalog/9"> 
   <versions> <versions> 
     <swc version = "1.0"  /> <swc version = "1.0" /> 
     <flex version = "2.0" <flex version = "2.0"   build = "143452"  /> build = "143452"/> 
   </versions> </ versions> 
   <features> <features> 
     <feature-script-deps /> <feature-script-deps /> 
     <feature-files /> <feature-files /> 
   </features> </ features> 
   <libraries> <libraries> 
     <library path = "library.swf" > <library path = "library.swf"> 
       <script name = "cmodule/hello/CLibInit" <script name = "cmodule / hello / CLibInit"    mod = "1177909560000"  > mod = "1177909560000"> 
         <def id = "cmodule.hello:CLibInit"  /> <def id = "cmodule.hello:CLibInit" />  
         <dep id = "Date" <dep id = "Date"   type = "e"  /> type = "e"/>  
         <dep id = "Date" <dep id = "Date"   type = "s"  /> type = "s"/>  
         <dep id = "flash.utils:Dictionary" <dep id = "flash.utils : Dictionary"   type = "e"  /> type = "e"/>  
         <dep id = "flash.utils:Dictionary" <dep id = "flash.utils : Dictionary"   type = "s"  /> type = "s"/>  
  : 
 (略) (생략) 
  : 
         <dep id = "AS3" <dep id = "AS3"   type = "n"  /> type = "n"/>  
         <dep id = "Object" <dep id = "Object"   type = "i"  /> type = "i"/>  
       </script> </ script> 
     </library> </ library> 
   </libraries> </ libraries> 
   <files> <Files> 
   </files> </ files> 
 </swc> </ swc> 
 $ zip hoge.swc catalog.xml library.swf $ zip hoge.swc catalog.xml library.swf  

おおおおおおおお。 오 오 오 오. と言う訳でhoge .swc が出来ました。 라고 말하는 번역에 hoge. swc 수있게되었습니다.

まとめ 요약

最後に 마지막으로

Alchemy楽しいです! Alchemy 재미!

みなさんも遊んでみてはいかがでしょうか。 여러분도 놀아 보는 것은 어떨까요?

はてなユーザーのみコメントできます。はてな사용자에게만 댓글 수있습니다. はてなへログインもしくは新規登録をおこなってください。はてな에 로그인 또는 회원 가입을 끝내고.


신고
posted by andwhy