2001/05/01版

当バージョンでは 運送業者選択ラジオボタンの追加。終了ボタンの追加。エラーチェック(完全ではありませんが)
開発環境 Vine Linux 2.0  Tinycobol-0.50
今回は運送業者選択のラジオボタンを追加いたしました。処理としてはラジオボタンの選択で各運送会社のCOBOLプログラムが呼び出されるイメージです。
エラーチェックに関しては何も入力されていない場合はエラーメッセージ(以下の画面参照)を出力しフォーカスをエラー項目にセットしております。
(但し現バージョンでは各サイズで10Aのような文字を入力してもエラーにならりません。このエラーチェックはCOBOLソースでチェックする予定になっております)

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

  以下にソースを紹介いたします。

まずはCOBOLでyamato.cobです。



IDENTIFICATION DIVISION.
PROGRAM-ID. YAMATO.
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-SIZE1 PIC S9(12)V9(3).
01 WK-SIZE2 PIC S9(12)V9(3).
01 WK-SIZE PIC S9(12)V9(3).
01 WK-3HEN PIC S9(12)V9(3).
01 WK-DKIN PIC ZZ,ZZZ,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-3HEN = WK-TATE + WK-YOKO + WK-TAKA.
IF WK-3HEN NOT > 61
MOVE 60 TO WK-SIZE1
ELSE
IF WK-3HEN NOT > 81
MOVE 80 TO WK-SIZE1
ELSE
IF WK-3HEN NOT > 100
MOVE 100 TO WK-SIZE1
ELSE
IF WK-3HEN NOT > 120
MOVE 120 TO WK-SIZE1
ELSE
IF WK-3HEN NOT > 140
MOVE 140 TO WK-SIZE1
ELSE
IF WK-3HEN NOT > 160
MOVE 160 TO WK-SIZE1
ELSE
MOVE "取扱不可" TO WK-OUT
GO TO A-999.
*
IF WK-OMOS NOT > 2000
MOVE 60 TO WK-SIZE2
ELSE
IF WK-OMOS NOT > 5000
MOVE 80 TO WK-SIZE2
ELSE
IF WK-OMOS NOT > 10000
MOVE 100 TO WK-SIZE
ELSE
IF WK-OMOS NOT > 15000
MOVE 120 TO WK-SIZE2
ELSE
IF WK-OMOS NOT > 20000
MOVE 140 TO WK-SIZE2
ELSE
IF WK-OMOS NOT > 25000
MOVE 160 TO WK-SIZE2
ELSE
MOVE "取扱不可" TO WK-OUT
GO TO A-999.
*
IF WK-SIZE1 > WK-SIZE2
MOVE WK-SIZE1 TO WK-SIZE
ELSE
MOVE WK-SIZE2 TO WK-SIZE.

EVALUATE WK-INDEX
WHEN 0
IF WK-SIZE = 60
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
MOVE 2520 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 1
WHEN 2
WHEN 3
IF WK-SIZE = 60
MOVE 1050 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1260 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1470 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1680 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1890 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 2100 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 4
WHEN 5
WHEN 6
IF WK-SIZE = 60
MOVE 950 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1160 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1370 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1580 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1790 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 2000 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 7
WHEN 8
WHEN 9
WHEN 10
WHEN 11
WHEN 12
WHEN 13
WHEN 14
IF WK-SIZE = 60
MOVE 840 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1050 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1260 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1470 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1680 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1890 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 15
WHEN 16
IF WK-SIZE = 60
MOVE 840 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1050 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1260 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1470 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1680 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1890 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 17
WHEN 18
WHEN 19
IF WK-SIZE = 60
MOVE 740 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 950 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1160 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1370 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1580 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1790 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 20
WHEN 21
WHEN 22
WHEN 23
IF WK-SIZE = 60
MOVE 740 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 950 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1160 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1370 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1580 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1790 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 24
WHEN 25
WHEN 26
WHEN 27
WHEN 28
WHEN 29
IF WK-SIZE = 60
MOVE 740 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 950 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1160 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1370 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1580 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1790 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 30
WHEN 31
WHEN 32
WHEN 33
WHEN 34
IF WK-SIZE = 60
MOVE 740 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 950 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1160 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1370 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1580 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1790 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 35
WHEN 36
WHEN 37
WHEN 38
IF WK-SIZE = 60
MOVE 840 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1050 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1260 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1470 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1680 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1890 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN 39
WHEN 40
WHEN 41
WHEN 42
WHEN 43
WHEN 44
WHEN 45
IF WK-SIZE = 60
MOVE 840 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1050 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 1260 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 1470 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 1680 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 1890 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
WHEN OTHER
IF WK-SIZE = 60
MOVE 1370 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 80
MOVE 1890 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 100
MOVE 2420 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 120
MOVE 2940 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
IF WK-SIZE = 140
MOVE 3470 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
ELSE
MOVE 3990 TO WK-DKIN
MOVE WK-DKIN TO WK-OUT
END-EVALUATE.
A-999.
DISPLAY WK-OUT.
EXIT-PROGRAM.

Tcl/Tkです。hello.tcl 
(ちなみに当方Tcl/Tkに関しては全くの初心者ですのでセオリー通りに作成出来ていなく、お恥ずかしいのですが 一応紹介いたします。)

#! /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 ""
set ent2 ""
set ent3 ""
set ent4 ""
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 8 -relief sunken -textvariable ent1
label .yoko.inputlabel -bg #000099 -fg white -text 横のサイズ -width 10
entry .yoko.inputentry -width 8 -relief sunken -textvariable ent2
label .taka.inputlabel -bg #009900 -fg white -text 高さ -width 10
entry .taka.inputentry -width 8 -relief sunken -textvariable ent3
label .omos.inputlabel -bg black -fg white -text 重量(グラム) -width 10
entry .omos.inputentry -width 8 -relief sunken -textvariable ent4
radiobutton .rad1 -text "クロネコヤマト宅急便" -variable sw -value "A" -selectcolor blue
radiobutton .rad2 -text "ゆうパック" -variable sw -value "B" -selectcolor red
radiobutton .rad3 -text "定形外郵便" -variable sw -value "C" -selectcolor yellow
button .enter -text 実行 -command {enter [.tate.inputentry get] [.yoko.inputentry get] [.taka.inputentry get] [.omos.inputentry get] [.lis curselection] $sw}
button .syuryo -text 終了 -command exit
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 .rad1 .rad2 .rad3 .enter .syuryo -side top -anchor w

proc enter {arg1 arg2 arg3 arg4 arg5 arg6} {
if {$arg1 < 1 } {
tk_messageBox -message "縦サイズ エラー"
focus .tate.inputentry
} elseif {$arg2 < 1} {
tk_messageBox -message "横サイズ エラー"
focus .yoko.inputentry
} elseif {$arg3 < 1} {
tk_messageBox -message "高さサイズ エラー"
focus .taka.inputentry
} elseif {$arg4 < 1} {
tk_messageBox -message "重さ エラー"
focus .omos.inputentry
} elseif {$arg5 < 0} {
tk_messageBox -message "地域未選択 エラー"
focus .omos.inputentry
} elseif {$arg6 == "A"} {
set command "./yamato $arg1 $arg2 $arg3 $arg4 $arg5"
set result [eval exec $command]
tk_messageBox -message $result
focus .tate.inputentry
} elseif {$arg6 == "B"} {
set command "./yupack $arg1 $arg2 $arg3 $arg4 $arg5"
set result [eval exec $command]
tk_messageBox -message $result
focus .tate.inputentry
} else {
set command "./tegai $arg1 $arg2 $arg3 $arg4 $arg5"
set result [eval exec $command]
tk_messageBox -message $result
focus .tate.inputentry
}

}