2009年7月19日 星期日

在UBUNTU 上玩 COBOL -使用備忘錄

在UBUNTU 上玩 COBOL -使用備忘錄
UBUNTU 8.10 , Eclipse 3.4 , Cobol IDE , Open COBOL ,

注意事項:
以下的 COBOL範例(Hello.cob , Hello3.cob)是我參照
Teach Yourself COBOL in 21 days Second Edition
上面的 入門範例 , 所改寫出來的 , 僅供測試使用


(1)下載安裝 Cobol IDE
Download Cobol IDE
http://www.eclipse.org/downloads/download.php?file=/cobol/downloads/cobol_plugins_3.4.0_linux32.zip
解 壓縮 cobol_plugins_3.4.0_linux32.zip
然後把解開之後 features & plugins 複製到你的 Eclipse 目錄下

(2)安裝 OpenCobol
Synaptic套件安 裝程式 , 輸入 Open-Cobol 然後就可安裝

(3) fujitsu cobol 手動建立連結 (可忽略此步驟)
ln -s /usr/bin/cobc /opt/FJSVcbl/bin/cobol
cobc  是open-cobol 的執行檔 ,
cobol 是 fujitsu cobol (net cobol) 的執行檔
在這裡是為了欺騙 Cobol IDE 的自動建置(build.xml) - 詳情後述

(4)執行 Eclipse

(4.1) 建立cobol專案
File -> New -> Other -> COBOL -> COBOL Project(圖片 COBOL-001.jpg)
p1



Project name:輸入 MyLabCOBOL001(圖片 COBOL-002.jpg)按下Next
p2

Target name:輸入 MyLabCOBOL001(圖片 COBOL-003.jpg)按下Finish
p3

(4.2)建立cobol source - Hello.cob
在專案下的Source Files按下滑鼠右鍵 ,出現功能表
New -> COBOL Source(圖片 COBOL-004.jpg)
File name: 輸入 Hello
PROGRAM-ID: 會自動同上面的名稱也是 Hello
按下Finish
p4

(4.3)修改 Hello.cob 的內容
COBOL IDE 會自動建立 Hello.cob 預設內容如下(圖片 COBOL-005.jpg)
p5

修改Hello.cob 為以下內容(圖片 COBOL-006.jpg)
====Hello.cob START=====
*Hello.cob
 IDENTIFICATION DIVISION.
 PROGRAM-ID.   Hello.
 ENVIRONMENT    DIVISION.
 CONFIGURATION  SECTION.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 PROCEDURE DIVISION.    
 PROGRAM-BEGIN.  
     DISPLAY "你說中文也會通".
 PROGRAM-EXIT.
     EXIT PROGRAM.

 PROGRAM-DONE.
     STOP RUN.

END PROGRAM Hello.
====Hello.cob END=====
p6

(4.4)手動編譯 Hello.cob 這隻COBOL
開啟終端機視窗(要切換到你的專案所在目錄) ,
輸入以下指令
cobc -o Hello -x Hello.cob

命令說明如下:
告訴它輸出的執行檔的名稱是 Hello(-o Hello) ,
要編譯 Hello.cob 為執行檔(-x Hello.cob)
編譯的時候如果有警告可以暫時不理會 , 只要它會過就可以


如果沒有問題 , 我們的第一隻 Cobol 程式已經完成編譯 , 可以執行
開啟終端機視窗 , 輸入以下指令
./Hello
程式執行結果顯示 "你說中文也會通"(圖片 COBOL-007.jpg)
p7

(5)解說為何要設定在 (3) fujitsu cobol 手動建立連結
回過頭來看專案目錄下有一個 build.xml (圖片 COBOL-008.jpg)
p8

其中的COBOL編譯器設定是 /opt/FJSVcbl/bin/cobol
但是 UBUNTU 上面並沒有  fujitsu cobol  , 所以我們只好手動的建立連結去欺騙 COBOL IDE的動作
事實上 , (3)不做 , 也不會有問題,(只是會在IDE的CONSOLE出現編譯錯誤訊息)
因為我們是要手動編譯(4.4)

注意:
不要嘗試著 去修改build.xml , 因為COBOL IDE 會在你修改或是新增 COBOL SOURCE 之後
重新產生 build.xml , 等於你修改的統統無效 , 而且它會在你每次按下 Ctrl + S存檔之後
就去執行 build.xml
這個是沒有甚麼效用的 , 當然你可以去拿 COBOL IDE 的 SOURCE 重新修改跟調整之後變成你要的
但是在這邊 , 我只要要玩玩COBOL, 只是利用 COBOL IDE去顯示COBOL語法的標記
所以我只用最快速的方法 , 讓它可以執行
有興趣要改build.xml 請參閱附錄2 , 但是沒什麼效果


(6)新增 COBOL SOURCE - Hello3.cob
內 容如下
====Hello3.cob START====
*Hello3.cob
 IDENTIFICATION DIVISION.
 PROGRAM-ID.   Hello3.
 ENVIRONMENT    DIVISION.
 CONFIGURATION  SECTION.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01  FIRST-NUMBER      PICTURE IS 99.
 01  SECOND-NUMBER     PICTURE IS 99.
 01  THE-RESULT        PICTURE IS 999.
 01  THE-NAME          PICTURE IS XXXXXXXXXX.
 01  THE-MESSAGE       PIC X(20).
 01  THE-NUMBER        PIC 99(2).

 PROCEDURE DIVISION.    
 PROGRAM-BEGIN.
     DISPLAY "Enter the first number:(0-99)".
     ACCEPT FIRST-NUMBER.
     DISPLAY "Enter the second number:(0-99)".
     ACCEPT SECOND-NUMBER.
     COMPUTE THE-RESULT = FIRST-NUMBER + SECOND-NUMBER.
     DISPLAY "The result is:" THE-RESULT.
     
     MOVE "HELLO " TO THE-MESSAGE.
     DISPLAY "Enter someone's name.".
     ACCEPT THE-NAME.
     DISPLAY THE-MESSAGE THE-NAME.
     
     MOVE 12 TO THE-NUMBER.
     COMPUTE THE-RESULT = THE-NUMBER + 99.
     DISPLAY THE-NUMBER "+ 99 = " THE-RESULT.     
     CALL "Hello".
  PROGRAM-DONE.
     STOP RUN.   
 END PROGRAM Hello3.
====Hello3.cob END====

(7)編譯及執行 Hello3.cob(圖片 COBOL-010.jpg)
開 啟終端機視窗(要切換到你的專案所在目錄) ,
輸入以下指令
cobc -o Hello3 -x Hello3.cob

如果沒有問題 , 我們的第2隻 Cobol 程式已經完成編譯 , 可以執行
開啟終 端機視窗 , 輸入以下指令
./Hello3
它要你輸入數字(first number): 請隨便輸入0~99的數字 , 按下Enter
它要你輸入數字(second number): 請隨便輸入0~99的數字 , 按下Enter
畫面會顯示兩個數字加總的結果

然後要你輸入命名(someone's name): 請隨便輸入 , 按下 Enter
畫面會顯示 HELLO %你輸入的姓名%

然後畫面最後一行會出現
libcob: Cannot find module 'Hello'

這個是我們的程式中有呼叫Hello的外部Module , 但是它找不到對應的 Hello.so

所以我們重新編譯 Hello
開啟 終端機視窗(要切換到你的專案所在目錄) ,
輸入以下指令: 注意這次不要加額外的參數
cobc Hello.cob
p9

然 後重新執行 Hello3 (Hello3不需要重新編譯)
./Hello3
最後你可以看到 Hello3成功的呼叫  Hello並且顯示 Hello的內容在畫面上
(圖片 COBOL-011.jpg)

p10


cobol 呼叫外部 MODULE的成功關鍵點在於 XXX.so是否可以存取的到
p11

如果你有按照我上面的步驟 進行
那麼 , 那麼你應該在  60 分鐘以內可以完成上面的動作

包 含建立 COBOL SOURCE , 編譯 , 執行
還包含了 CALL 外部的 MODULE ,
就是這麼簡單 ,
備忘錄 就是備忘 ,


附錄1:
Open-COBOL可以檢查語法的相容性 ,如果是要檢查是否符合IBM的COBOL
加上 -std=ibm ,
範例:
cobc -std=ibm -o Hello -x Hello.cob

附錄2: (如果你不會 Java就不要理會這段了 , 這段有玩Java的會知道在做什麼)
自 建立ANT build2.xml (為何不建立 build.xml , 因為會被COBOL IDE給蓋掉)








   



   




執行的時候
ant -f build2.xml

run-cobol.sh 內容如下
cobc -std=ibm -o $1 -x $2

也因此我才不建議直接去修改 build.xml>


附錄3:
COBOL範例程式電子書 , 這本內容夠淺顯(請自己上網路上找 , 有WEB版)
Teach Yourself COBOL in 21 days Second_Edition

在UBUNTU上玩COBOL到此結束 

沒有留言: