2001/4/14版(最初)

とりあえずTcl/Tkからイベントが発生した時にCOBOLのプログラムを起動させ、COBOLで処理させた後Tcl/Tkに戻る 形でアウトラインが作成出来ました。以下紹介いたします。
まずTcl/Tkで左記のような画面作成いたしまた。
仕様としては宅急便の縦・横・高さ・重量・地域(今のところは関西地方が発送元固定となっております)を入力し、宅急便の料金を算出すると言う 別にあっても なくても良いようなプログラムです(^^;
縦のサイズ・横のサイズ・高さ・重量を タブもしはマウスで移動させ数値の入力を行います。地域に関してはリストボックスになっておりますので選択を行います。
その後実行ボタンを押すと、COBOLプログラムに制御が移り COBOLプログラム中で運賃算出が行われる仕組みになっております。

(左が初期画面で右が数値入力後のイメージです。)
上記入力後、実行ボタンを押すと左記のように運賃がメッセージボックスで表示されます。

今のところ作成途中で計算ロジックは未完成 エラーチェックなし 画面の体裁未整え 終了方法未検討 等 まだようやく動いた状態ですが 以下にソースを紹介いたします。
 IDENTIFICATION DIVISION.
 PROGRAM-ID. TEST01C.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 INPUT-OUTPUT SECTION.
 DATA DIVISION.
 FILE SECTION.

WORKING-STORAGE SECTION.
 01 WK-OUT                     PIC X(20).
 01 CMDLINE-PARM.
   05 CMDLINE-ERROR            PIC 9(04) VALUE 0.
   05 FILLER                   PIC X(01) VALUE ' '.
   05 CMDLINE-ARGC-NUMBER      PIC 9(04) VALUE 0.
   05 FILLER                   PIC X(01) VALUE ' '.
   05 CMDLINE-ARGC-MAX-NUMBER  PIC 9(04) VALUE 255.
   05 FILLER                   PIC X(01) VALUE ' '.
   05 CMDLINE-ARGV-MAX-LENGTH  PIC 9(04) VALUE 15.
   05 FILLER                   PIC X(01) VALUE ' '.
   05 CMDLINE-VALUES.
      07  CMDLINE-ARG  OCCURS 255 TIMES. 
         09 CMDLINE-ARGV PIC X(15). 
 01 A                           PIC X(15). 
 01 C                           PIC S9(12)V9(3).
 01 JSW                         PIC 9.
 01 WK-KWKKA.
    03 WK-TATE                  PIC S9(12)V9(3).
    03 WK-YOKO                  PIC S9(12)V9(3).
    03 WK-TAKA                  PIC S9(12)V9(3).
    03 WK-OMOS                  PIC S9(12)V9(3).
 01 WK-SIZE                     PIC S9(12)V9(3).
 01 WK-DKIN                     PIC Z,ZZ9.
 01 WK-OUT                      PIC X(10).
 01 WK-INDEX                    PIC 9(3).
 PROCEDURE DIVISION.
 A-000.
  ACCEPT CMDLINE-PARM FROM COMMAND-LINE.
  MOVE CMDLINE-ARGV(2) TO A.
  MOVE ZERO            TO C.
  CALL "SUBX" USING A C JSW.
  MOVE C               TO WK-TATE.
  MOVE CMDLINE-ARGV(3) TO A.
  MOVE ZERO            TO C.
  CALL "SUBX" USING A C JSW.
  MOVE C               TO WK-YOKO.
  MOVE CMDLINE-ARGV(4) TO A.
  MOVE ZERO            TO C
  CALL "SUBX" USING A C JSW.
  MOVE C               TO WK-TAKA.
  MOVE CMDLINE-ARGV(5) TO A.
  MOVE ZERO            TO C
  CALL "SUBX" USING A C JSW.
  MOVE C               TO WK-OMOS.
  MOVE   CMDLINE-ARGV(6) TO WK-INDEX.
  COMPUTE WK-SIZE = WK-TATE + WK-YOKO + WK-TAKA.
   IF  WK-INDEX         =  0
       IF  WK-SIZE      <  61
           MOVE    1470 TO WK-DKIN
           MOVE    WK-DKIN TO WK-OUT
       ELSE
       IF  WK-SIZE      <  80
           MOVE    1680 TO WK-DKIN
           MOVE    WK-DKIN TO WK-OUT
       ELSE
       IF  WK-SIZE      <  100
           MOVE    1890 TO  WK-DKIN
           MOVE    WK-DKIN TO WK-OUT
       ELSE
       IF  WK-SIZE      <  120  
           MOVE    2100 TO WK-DKIN
           MOVE    WK-DKIN TO WK-OUT
       ELSE
       IF  WK-SIZE      < 140
           MOVE    2310 TO WK-DKIN
           MOVE    WK-DKIN TO WK-OUT
       ELSE
       IF  WK-SIZE      < 160
           MOVE    2520 TO WK-DKIN
           MOVE    WK-DKIN TO WK-OUT
       ELSE 
           MOVE    "取扱不可" TO WK-OUT.
   IF  WK-INDEX         =  "1" OR "2" OR "3" 
        IF  WK-SIZE      <  61
           MOVE    1050  TO WK-DKIN
       ELSE
       IF  WK-SIZE      <  80
           MOVE    1260  TO WK-DKIN
       ELSE
       IF  WK-SIZE      <  100
           MOVE    1470  TO  WK-DKIN
       ELSE
           MOVE 200      TO WK-DKIN.         
  DISPLAY WK-OUT.
  EXIT PROGURAM.      
数値変換サブルーチンSUBXに関してはSPEC社から発売されている「実習MS−DOS LEVELUCOBOL入門」を参照してください。
#! /usr/bin/wish
#option add *font kanji16
set ken {北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県 栃木県
              群馬県 埼玉県 千葉県 東京都 神奈川県 山梨県 長野県 新潟県 富山県
              石川県 福井県 岐阜県 静岡県 愛知県 三重県 滋賀県 京都府 大阪府
              兵庫県 奈良県 和歌山県 鳥取県 島根県 岡山県 広島県 山口県 
              徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 熊本県 大分県 
              宮城県 鹿児島県 沖縄県}
listbox .lis  -selectmode single -height 15 -width 8 -background white  -yscrollcommand {.scrl set}
scrollbar .scrl -command {.lis yview}
foreach i ${ken} {
     .lis insert end $i
}

set ent1 "0"
set ent2 "0"
set ent3 "0"
set ent4 "0"
frame .midasi
frame .tate
frame .yoko -bg red
frame .taka -bg red 
frame .omos -bg red
label .midasi.la1 -text 宅配便送料算出
label .tate.inputlabel -bg #990000 -fg white -text 縦のサイズ -width 10
entry .tate.inputentry -width 20 -relief sunken -textvariable ent1 
label .yoko.inputlabel -bg #000099 -fg white -text 横のサイズ -width 10
entry .yoko.inputentry -width 20 -relief sunken -textvariable ent2 
label .taka.inputlabel -bg #009900 -fg white -text 高さ -width 10
entry .taka.inputentry -width 20 -relief sunken -textvariable ent3 
label .omos.inputlabel -bg black -fg white -text 重量 -width 10
entry .omos.inputentry -width 20 -relief sunken -textvariable ent4
set ent1 [.tate.inputentry get]
set ent2 [.yoko.inputentry get]
set ent3 [.taka.inputentry get]
set ent4 [.omos.inputentry get]
#set data [$lis get [$lis curselection]]
button .enter  -text 実行 -command {
set index [.lis curselection]
set data [.lis get $index]
set command "./test01c $ent1 $ent2 $ent3 $ent4 $index"
set result [eval exec $command] 
tk_messageBox -message $result 
}
pack .midasi.la1 
pack .tate.inputlabel .tate.inputentry -in .tate -side left
pack .yoko.inputlabel .yoko.inputentry -in .yoko -side left
pack .taka.inputlabel .taka.inputentry -in .taka -side left
pack .omos.inputlabel .omos.inputentry -in .omos -side left 
pack .midasi .tate .yoko .taka .omos -side top
pack .lis  -side left
pack .scrl -side left -fill y
pack .enter -side top -anchor w -pady 30m -padx 14m